[ONOS-5785] Refactor code into new folder structure
Change-Id: I115d5af1cd7bfbde71a3092973fe160ec1d9bae5
diff --git a/compiler/api/pom.xml b/compiler/api/pom.xml
new file mode 100644
index 0000000..fd80dc2
--- /dev/null
+++ b/compiler/api/pom.xml
@@ -0,0 +1,52 @@
+<!--
+ ~ Copyright 2016-present Open Networking Laboratory
+ ~
+ ~ Licensed 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
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License 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.
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-compiler</artifactId>
+ <version>1.12-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>onos-yang-compiler-api</artifactId>
+ <packaging>pom</packaging>
+ <!--
+ Change packaging to jar
+ -->
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>3.0.2</version>
+ <configuration>
+ <skipIfEmpty>true</skipIfEmpty>
+ </configuration>
+ <executions>
+ <execution>
+ <id>default</id>
+ <goals>
+ <goal>test-jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/compiler/api/src/main/java/org/onosproject/yang/compiler/api/package-info.java b/compiler/api/src/main/java/org/onosproject/yang/compiler/api/package-info.java
new file mode 100644
index 0000000..7b88263
--- /dev/null
+++ b/compiler/api/src/main/java/org/onosproject/yang/compiler/api/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+/**
+ * Created by root1 on 10/1/17.
+ */
+package org.onosproject.yang.compiler.api;
\ No newline at end of file
diff --git a/compiler/base/datamodel/pom.xml b/compiler/base/datamodel/pom.xml
new file mode 100644
index 0000000..28618a0
--- /dev/null
+++ b/compiler/base/datamodel/pom.xml
@@ -0,0 +1,50 @@
+<!--
+ ~ Copyright 2016-present Open Networking Laboratory
+ ~
+ ~ Licensed 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
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License 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.
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-compiler-base</artifactId>
+ <version>1.12-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>onos-yang-compiler-datamodel</artifactId>
+ <packaging>jar</packaging>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>3.0.2</version>
+ <configuration>
+ <skipIfEmpty>true</skipIfEmpty>
+ </configuration>
+ <executions>
+ <execution>
+ <id>default</id>
+ <goals>
+ <goal>test-jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/BuiltInTypeObjectFactory.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/BuiltInTypeObjectFactory.java
new file mode 100644
index 0000000..f2bfb8c
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/BuiltInTypeObjectFactory.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.DataTypeException;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangBuiltInDataTypeInfo;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangInt16;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangInt32;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangInt64;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangInt8;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangUint16;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangUint32;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangUint64;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangUint8;
+
+import java.io.Serializable;
+
+/**
+ * Factory to create an object of required type.
+ */
+public final class BuiltInTypeObjectFactory implements Serializable {
+
+ private static final long serialVersionUID = 8006201671L;
+
+ /**
+ * Utility factory class, hence the object creation is forbidden.
+ */
+ private BuiltInTypeObjectFactory() {
+ }
+
+ /**
+ * Given the value represented in string return the corresponding types
+ * object with the value initialized.
+ *
+ * @param valueInStr value represented in string
+ * @param builtInType built in data type
+ * @param <T> the data type of the target object
+ * @return the target data type object with the value initialized
+ */
+ public static <T extends YangBuiltInDataTypeInfo<?>> T getDataObjectFromString(String valueInStr,
+ YangDataTypes builtInType) {
+
+ switch (builtInType) {
+ case INT8: {
+ return (T) new YangInt8(valueInStr);
+ }
+ case INT16: {
+ return (T) new YangInt16(valueInStr);
+ }
+ case INT32: {
+ return (T) new YangInt32(valueInStr);
+ }
+ case INT64: {
+ return (T) new YangInt64(valueInStr);
+ }
+ case UINT8: {
+ return (T) new YangUint8(valueInStr);
+ }
+ case UINT16: {
+ return (T) new YangUint16(valueInStr);
+ }
+ case UINT32: {
+ return (T) new YangUint32(valueInStr);
+ }
+ case UINT64: {
+ return (T) new YangUint64(valueInStr);
+ }
+ case DECIMAL64: {
+ return (T) new YangDecimal64(valueInStr);
+ }
+ default: {
+ throw new DataTypeException("YANG file error : Unsupported data type");
+ }
+ }
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/CollisionDetector.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/CollisionDetector.java
new file mode 100644
index 0000000..728a513
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/CollisionDetector.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+/**
+ * Abstraction of YANG collision function. Abstracted to unify the collision
+ * detection functionality.
+ */
+public interface CollisionDetector {
+ /**
+ * Checks for the colliding child.
+ *
+ * @param identifierName name of identifier for which collision to be
+ * checked
+ * @param dataType type of the YANG construct for which collision to be
+ * checked
+ * @throws DataModelException if there is any collision in YANG rules in
+ * parsed data, corresponding exception should be thrown
+ */
+ void detectCollidingChild(String identifierName, YangConstructType dataType)
+ throws DataModelException;
+
+ /**
+ * Check for the self collision.
+ *
+ * @param identifierName name of identifier for which collision to be
+ * checked
+ * @param dataType type of the YANG construct for which collision to be
+ * checked
+ * @throws DataModelException if there is any collision in YANG rules in
+ * parsed data, corresponding exception should be thrown
+ */
+ void detectSelfCollision(String identifierName, YangConstructType dataType)
+ throws DataModelException;
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/DefaultLocationInfo.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/DefaultLocationInfo.java
new file mode 100644
index 0000000..985542b
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/DefaultLocationInfo.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+/**
+ * Represents the implementation of location info.
+ */
+public class DefaultLocationInfo implements LocationInfo {
+
+ private transient int lineNumber;
+ private transient int charPosition;
+ private String fileName;
+
+ @Override
+ public int getLineNumber() {
+ return lineNumber;
+ }
+
+ @Override
+ public int getCharPosition() {
+ return charPosition;
+ }
+
+ @Override
+ public void setLineNumber(int lineNumber) {
+ this.lineNumber = lineNumber;
+ }
+
+ @Override
+ public void setCharPosition(int charPositionInLine) {
+ charPosition = charPositionInLine;
+ }
+
+ @Override
+ public String getFileName() {
+ return fileName;
+ }
+
+ @Override
+ public void setFileName(String name) {
+ fileName = name;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/InvalidOpTypeHolder.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/InvalidOpTypeHolder.java
new file mode 100644
index 0000000..f8659cd
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/InvalidOpTypeHolder.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel;
+
+/**
+ * Represents non data nodes which will not have operation api's ex: operation
+ * type, value leaf flag, select leaf flag and process sub tree filter in
+ * their generated code.
+ */
+public interface InvalidOpTypeHolder {
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/LeafRefInvalidHolder.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/LeafRefInvalidHolder.java
new file mode 100644
index 0000000..d9f23f0
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/LeafRefInvalidHolder.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel;
+
+/**
+ * Represents YANG nodes which linking of leaf ref should be avoided.
+ */
+public interface LeafRefInvalidHolder {
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/LocationInfo.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/LocationInfo.java
new file mode 100644
index 0000000..0e1f4c1
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/LocationInfo.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+/**
+ * Abstraction of location information, this is used during resolution is
+ * carried out and line/character position in line is required to point
+ * out the error location in YANG file.
+ */
+public interface LocationInfo {
+
+ /**
+ * Returns the line number YANG construct in file.
+ *
+ * @return the line number YANG construct in file
+ */
+ int getLineNumber();
+
+ /**
+ * Returns the character position in line.
+ *
+ * @return the character position in line
+ */
+ int getCharPosition();
+
+ /**
+ * Sets line number of YANG construct.
+ *
+ * @param lineNumber the line number of YANG construct in file
+ */
+ void setLineNumber(int lineNumber);
+
+ /**
+ * Sets character position of YANG construct.
+ *
+ * @param charPositionInLine character position of YANG construct in file
+ */
+ void setCharPosition(int charPositionInLine);
+
+ /**
+ * Returns YANG file name.
+ *
+ * @return YANG file name
+ */
+ String getFileName();
+
+ /**
+ * Sets YANG file name
+ *
+ * @param name YANG file name
+ */
+ void setFileName(String name);
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/Resolvable.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/Resolvable.java
new file mode 100644
index 0000000..ec25c55
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/Resolvable.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus;
+
+/**
+ * Abstraction of YANG resolvable information. Abstracted to obtain the
+ * information required for linking resolution.
+ *
+ * @param <T> YANG resolvable info
+ */
+public interface Resolvable<T> {
+
+ /**
+ * Returns the status of resolution. If completely resolved returns enum
+ * value "RESOLVED", if not returns "UNRESOLVED", in case reference of
+ * grouping/typedef is added to uses/type but it's not resolved
+ * "INTRA_FILE_RESOLVED" is returned.
+ *
+ * @return status of resolution
+ */
+ ResolvableStatus getResolvableStatus();
+
+ /**
+ * Set the status of type/uses resolution. If completely resolved set enum
+ * value "RESOLVED", if not set it to "UNRESOLVED", in case reference of
+ * grouping/typedef is added to uses/type but it's not resolved
+ * "INTRA_FILE_RESOLVED" should be set.
+ *
+ * @param resolvableStatus status of resolution
+ */
+ void setResolvableStatus(ResolvableStatus resolvableStatus);
+
+ /**
+ * Resolves the linking.
+ *
+ * @return list of entities to be added for resolution
+ * @throws DataModelException data model exception
+ */
+ T resolve()
+ throws DataModelException;
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/ResolvableType.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/ResolvableType.java
new file mode 100644
index 0000000..367c811
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/ResolvableType.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+/**
+ * Type of the resolvable info.
+ */
+public enum ResolvableType {
+
+ /**
+ * Identifies the derived data type.
+ */
+ YANG_DERIVED_DATA_TYPE,
+
+ /**
+ * Identifies the uses.
+ */
+ YANG_USES,
+
+ /**
+ * Identifies the if-feature.
+ */
+ YANG_IF_FEATURE,
+
+ /**
+ * Identifies the leafref.
+ */
+ YANG_LEAFREF,
+
+ /**
+ * Identifies the base.
+ */
+ YANG_BASE,
+
+ /**
+ * Identifies the identityref.
+ */
+ YANG_IDENTITYREF,
+
+ /**
+ * Identifies the augment.
+ */
+ YANG_AUGMENT,
+
+ /**
+ * Identifies the compiler annotations.
+ */
+ YANG_COMPILER_ANNOTATION
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/RpcNotificationContainer.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/RpcNotificationContainer.java
new file mode 100644
index 0000000..4f709b3
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/RpcNotificationContainer.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import java.util.List;
+
+/**
+ * Represents class having rpc and notification.
+ */
+public interface RpcNotificationContainer {
+
+ /**
+ * Sets notification presence flag.
+ *
+ * @param notificationPresent notification presence flag
+ */
+ void setNotificationPresenceFlag(boolean notificationPresent);
+
+ /**
+ * Adds to notification enumeration map.
+ *
+ * @param enumName name of notification in enum
+ * @param schemaNode schema node of notification
+ */
+ void addToNotificationEnumMap(String enumName, YangSchemaNode schemaNode);
+
+ /**
+ * Adds augment which is augmenting input node to augment list.
+ *
+ * @param augment augment which is augmenting input
+ */
+ void addToAugmentList(YangAugment augment);
+
+ /**
+ * Returns augment list.
+ *
+ * @return augment list
+ */
+ List<YangAugment> getAugmentList();
+
+ /**
+ * Returns prefix.
+ *
+ * @return prefix
+ */
+ String getPrefix();
+
+ /**
+ * Returns list of notification nodes.
+ *
+ * @return list of notification nodes
+ */
+ List<YangNode> getNotificationNodes();
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/TraversalType.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/TraversalType.java
new file mode 100644
index 0000000..4b7162d
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/TraversalType.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+/**
+ * Represents data model tree traversal types.
+ */
+public enum TraversalType {
+
+ /**
+ * Start of traversal at the tree root.
+ */
+ ROOT,
+
+ /**
+ * Child node traversal.
+ */
+ CHILD,
+
+ /**
+ * Sibling node traversal.
+ */
+ SIBILING,
+
+ /**
+ * Parent node traversal.
+ */
+ PARENT
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangAppDataStructure.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangAppDataStructure.java
new file mode 100644
index 0000000..d750d9e
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangAppDataStructure.java
@@ -0,0 +1,124 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import java.io.Serializable;
+import java.util.LinkedList;
+import java.util.List;
+
+import static java.util.Collections.unmodifiableList;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.APP_DATA_STRUCTURE;
+
+/**
+ * Represents data model node to maintain information defined in YANG app-data-structure.
+ */
+public class YangAppDataStructure extends DefaultLocationInfo
+ implements Parsable, Serializable {
+
+ private static final long serialVersionUID = 806201602L;
+
+ /**
+ * Data structure information.
+ */
+ private YangDataStructure dataStructure;
+
+ /**
+ * List of key names.
+ */
+ private List<String> keyList;
+
+ /**
+ * Prefix of app-data-structure.
+ */
+ private String prefix;
+
+ /**
+ * Returns the YANG data structure information.
+ *
+ * @return the YANG data structure information
+ */
+ public YangDataStructure getDataStructure() {
+ return dataStructure;
+ }
+
+ /**
+ * Sets the YANG data structure information.
+ *
+ * @param dataStructure the YANG data structure to set
+ */
+ public void setDataStructure(YangDataStructure dataStructure) {
+ this.dataStructure = dataStructure;
+ }
+
+ /**
+ * Returns the list of key field names.
+ *
+ * @return the list of key field names
+ */
+ public List<String> getKeyList() {
+ return unmodifiableList(keyList);
+ }
+
+ /**
+ * Adds a key field name.
+ *
+ * @param key key field name
+ */
+ public void addKey(String key) {
+ if (keyList == null) {
+ keyList = new LinkedList<>();
+ }
+ keyList.add(key);
+ }
+
+ /**
+ * Returns the prefix.
+ *
+ * @return the prefix
+ */
+ public String getPrefix() {
+ return prefix;
+ }
+
+ /**
+ * Sets the prefix information.
+ *
+ * @param prefix the prefix to set
+ */
+ public void setPrefix(String prefix) {
+ this.prefix = prefix;
+ }
+
+ @Override
+ public YangConstructType getYangConstructType() {
+ return APP_DATA_STRUCTURE;
+ }
+
+ @Override
+ public void validateDataOnEntry() throws DataModelException {
+ // TODO : to be implemented
+ }
+
+ @Override
+ public void validateDataOnExit() throws DataModelException {
+ // TODO : to be implemented
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangAppErrorHolder.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangAppErrorHolder.java
new file mode 100644
index 0000000..113a143
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangAppErrorHolder.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+/**
+ * Represents data model node to maintain YANG app error message information.
+ */
+public interface YangAppErrorHolder {
+
+ /**
+ * Sets the application's error information.
+ *
+ * @param yangAppErrorInfo the application's error information
+ */
+ void setAppErrorInfo(YangAppErrorInfo yangAppErrorInfo);
+
+ /**
+ * Returns application's error information.
+ *
+ * @return application's error information
+ */
+ YangAppErrorInfo getAppErrorInfo();
+
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangAppErrorInfo.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangAppErrorInfo.java
new file mode 100644
index 0000000..f82c7e6
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangAppErrorInfo.java
@@ -0,0 +1,149 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import java.io.Serializable;
+
+/**
+ * Represents data model to maintain yang app error information.
+ */
+public class YangAppErrorInfo extends DefaultLocationInfo implements Serializable {
+
+ private static final long serialVersionUID = 807201693L;
+
+ /**
+ * Application's error message, to be used for data error.
+ */
+ private String errorMessage;
+
+ /**
+ * Error tag, to be filled in data validation error response.
+ */
+ private String errorTag;
+
+ /**
+ * Application's error tag, to be filled in data validation error response.
+ */
+ private String errorAppTag;
+
+ /**
+ * Application's error path, to be filled in data validation error response.
+ */
+ private String errorAppPath;
+
+ /**
+ * Application's error info, to be filled in data validation error response.
+ */
+ private String errorAppInfo;
+
+ /**
+ * Creates a YANG app error info object.
+ */
+ @SuppressWarnings("unused")
+ public YangAppErrorInfo() {
+ }
+
+ /**
+ * Returns application's error message, to be used for data error.
+ *
+ * @return Application's error message, to be used for data error
+ */
+ public String getGetErrorMessage() {
+ return errorMessage;
+ }
+
+ /**
+ * Sets Application's error message, to be used for data error.
+ *
+ * @param errMsg Application's error message, to be used for data error
+ */
+ public void setErrorMessage(String errMsg) {
+ errorMessage = errMsg;
+ }
+
+ /**
+ * Returns error tag, to be used for data error.
+ *
+ * @return error tag, to be used for data error
+ */
+ public String getGetErrorTag() {
+ return errorTag;
+ }
+
+ /**
+ * Sets error tag, to be used for data error.
+ *
+ * @param errTag error tag, to be used for data error
+ */
+ public void setErrorTag(String errTag) {
+ errorTag = errTag;
+ }
+
+ /**
+ * Returns application's error tag, to be used for data error.
+ *
+ * @return application's error tag, to be used for data error
+ */
+ public String getGetErrorAppTag() {
+ return errorAppTag;
+ }
+
+ /**
+ * Sets application's error tag, to be used for data error.
+ *
+ * @param errTag application's error tag, to be used for data error
+ */
+ public void setErrorAppTag(String errTag) {
+ errorAppTag = errTag;
+ }
+
+ /**
+ * Returns application's error path, to be used for data error.
+ *
+ * @return application's error path, to be used for data error
+ */
+ public String getGetErrorAppPath() {
+ return errorAppPath;
+ }
+
+ /**
+ * Sets application's error path, to be used for data error.
+ *
+ * @param errPath application's error path, to be used for data error
+ */
+ public void setErrorAppPath(String errPath) {
+ errorAppPath = errPath;
+ }
+
+ /**
+ * Returns application's error info, to be used for data error.
+ *
+ * @return application's error info, to be used for data error
+ */
+ public String getGetErrorAppInfo() {
+ return errorAppInfo;
+ }
+
+ /**
+ * Sets application's error info, to be used for data error.
+ *
+ * @param errInfo application's error info, to be used for data error
+ */
+ public void setErrorAppInfo(String errInfo) {
+ errorAppInfo = errInfo;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangAppExtended.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangAppExtended.java
new file mode 100644
index 0000000..b96b4cb
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangAppExtended.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import java.io.Serializable;
+
+/**
+ * Represents data model node to maintain information defined in YANG extended name.
+ */
+public class YangAppExtended extends DefaultLocationInfo
+ implements Parsable, Serializable {
+
+ private static final long serialVersionUID = 806201602L;
+ /**
+ * App extended name information.
+ */
+ private String yangAppExtendedName;
+
+ /**
+ * Prefix of extended name.
+ */
+ private String prefix;
+
+ /**
+ * Returns the YANG app extended name information.
+ *
+ * @return the YANG app extended name information
+ */
+ public String getYangAppExtendedName() {
+ return yangAppExtendedName;
+ }
+
+ /**
+ * Sets the YANG app extended name information.
+ *
+ * @param yangAppExtendedName the YANG app extended name to set
+ */
+ public void setYangAppExtendedName(String yangAppExtendedName) {
+ this.yangAppExtendedName = yangAppExtendedName;
+ }
+
+ /**
+ * Returns the prefix.
+ *
+ * @return the prefix
+ */
+ public String getPrefix() {
+ return prefix;
+ }
+
+ /**
+ * Sets the prefix information.
+ *
+ * @param prefix the prefix to set
+ */
+ public void setPrefix(String prefix) {
+ this.prefix = prefix;
+ }
+
+ @Override
+ public YangConstructType getYangConstructType() {
+ return YangConstructType.APP_EXTENDED_NAME_DATA;
+ }
+
+ @Override
+ public void validateDataOnEntry() throws DataModelException {
+ // TODO : to be implemented
+ }
+
+ @Override
+ public void validateDataOnExit() throws DataModelException {
+ // TODO : to be implemented
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangAtomicPath.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangAtomicPath.java
new file mode 100644
index 0000000..411aca3
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangAtomicPath.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * Representation of data model node to maintain absolute path defined in YANG path-arg.
+ */
+public class YangAtomicPath extends DefaultLocationInfo implements Serializable {
+
+ private static final long serialVersionUID = 806201688L;
+
+ // YANG node identifier.
+ private YangNodeIdentifier nodeIdentifier;
+
+ // List of path predicates expression.
+ private List<YangPathPredicate> pathPredicatesList;
+
+ /**
+ * Resolved node for the absolute path.
+ */
+ private YangNode resolvedNode;
+
+ /**
+ * Returns the node identifier.
+ *
+ * @return the node identifier
+ */
+ public YangNodeIdentifier getNodeIdentifier() {
+ return nodeIdentifier;
+ }
+
+ /**
+ * Sets the node identifier.
+ *
+ * @param nodeIdentifier Sets the node identifier
+ */
+ public void setNodeIdentifier(YangNodeIdentifier nodeIdentifier) {
+ this.nodeIdentifier = nodeIdentifier;
+ }
+
+ /**
+ * Returns the path predicate expression.
+ *
+ * @return the path predicate expression
+ */
+ public List<YangPathPredicate> getPathPredicatesList() {
+ return pathPredicatesList;
+ }
+
+ /**
+ * Sets the path predicate expression.
+ *
+ * @param pathPredicatesList Sets the path predicate expression
+ */
+ public void setPathPredicatesList(List<YangPathPredicate> pathPredicatesList) {
+ this.pathPredicatesList = pathPredicatesList;
+ }
+
+ /**
+ * Adds predicate expression in data holder.
+ *
+ * @param predicatesExp the predicate expression to be added
+ */
+ public void addLeavesPredicate(YangPathPredicate predicatesExp) {
+ getPathPredicatesList().add(predicatesExp);
+ }
+
+
+ /**
+ * Returns resolved node.
+ *
+ * @return resolved node
+ */
+ public YangNode getResolvedNode() {
+ return resolvedNode;
+ }
+
+ /**
+ * Sets resolved node.
+ *
+ * @param resolvedNode resolved node
+ */
+ public void setResolvedNode(YangNode resolvedNode) {
+ this.resolvedNode = resolvedNode;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangAugment.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangAugment.java
new file mode 100644
index 0000000..4ea139d
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangAugment.java
@@ -0,0 +1,535 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
+
+/*-
+ * Reference RFC 6020.
+ *
+ * The "augment" statement allows a module or submodule to add to the
+ * schema tree defined in an external module, or the current module and
+ * its submodules, and to add to the nodes from a grouping in a "uses"
+ * statement. The argument is a string that identifies a node in the
+ * schema tree. This node is called the augment's target node. The
+ * target node MUST be either a container, list, choice, case, input,
+ * output, or notification node. It is augmented with the nodes defined
+ * in the sub-statements that follow the "augment" statement.
+ *
+ * The argument string is a schema node identifier.
+ * If the "augment" statement is on the top level in a module or
+ * submodule, the absolute form of a schema node identifier
+ * MUST be used. If the "augment" statement is a sub-statement to the
+ * "uses" statement, the descendant form MUST be used.
+ *
+ * If the target node is a container, list, case, input, output, or
+ * notification node, the "container", "leaf", "list", "leaf-list",
+ * "uses", and "choice" statements can be used within the "augment"
+ * statement.
+ *
+ * If the target node is a choice node, the "case" statement, or a case
+ * shorthand statement can be used within the "augment" statement.
+ *
+ * If the target node is in another module, then nodes added by the
+ * augmentation MUST NOT be mandatory nodes.
+ *
+ * The "augment" statement MUST NOT add multiple nodes with the same
+ * name from the same module to the target node.
+ * The augment's sub-statements
+ *
+ * +--------------+---------+-------------+------------------+
+ * | substatement | section | cardinality |data model mapping|
+ * +--------------+---------+-------------+------------------+
+ * | anyxml | 7.10 | 0..n |-not supported |
+ * | case | 7.9.2 | 0..n |-child nodes |
+ * | choice | 7.9 | 0..n |-child nodes |
+ * | container | 7.5 | 0..n |-child nodes |
+ * | description | 7.19.3 | 0..1 |-string |
+ * | if-feature | 7.18.2 | 0..n |-YangIfFeature |
+ * | leaf | 7.6 | 0..n |-YangLeaf |
+ * | leaf-list | 7.7 | 0..n |-YangLeafList |
+ * | list | 7.8 | 0..n |-child nodes |
+ * | reference | 7.19.4 | 0..1 |-String |
+ * | status | 7.19.2 | 0..1 |-YangStatus |
+ * | uses | 7.12 | 0..n |-child nodes |
+ * | when | 7.19.5 | 0..1 |-YangWhen |
+ * +--------------+---------+-------------+------------------+
+ */
+
+/**
+ * Representation of data model node to maintain information defined in YANG
+ * augment.
+ */
+public abstract class YangAugment
+ extends YangNode
+ implements YangLeavesHolder, YangCommonInfo, Parsable,
+ CollisionDetector, Resolvable,
+ YangXPathResolver, YangWhenHolder, YangIfFeatureHolder {
+
+ private static final long serialVersionUID = 806201602L;
+
+ /**
+ * Description of augment.
+ */
+ private String description;
+
+ /**
+ * List of leaves.
+ */
+ private List<YangLeaf> listOfLeaf;
+
+ /**
+ * List of leaf-lists.
+ */
+ private List<YangLeafList> listOfLeafList;
+
+ /**
+ * List of node identifiers.
+ */
+ private List<YangAtomicPath> targetNode;
+
+ /**
+ * Reference of the YANG augment.
+ */
+ private String reference;
+
+ /**
+ * Status of the node.
+ */
+ private YangStatusType status;
+
+ /**
+ * Resolved augmented node.
+ */
+ private YangNode augmentedNode;
+
+ /**
+ * Status of resolution. If completely resolved enum value is "RESOLVED",
+ * if not enum value is "UNRESOLVED", in case
+ * reference of grouping/typedef is added to uses/type but it's not
+ * resolved value of enum should be
+ * "INTRA_FILE_RESOLVED".
+ */
+ private ResolvableStatus resolvableStatus;
+
+ /**
+ * When data of the node.
+ */
+ private YangWhen when;
+
+ /**
+ * List of if-feature.
+ */
+ private List<YangIfFeature> ifFeatureList;
+
+ /**
+ * Name of augment when prefix is removed if it is in the same file. For
+ * linking purpose the name with same prefix of the file is removed and
+ * maintained.
+ */
+ private String prefixRemovedName;
+
+ /**
+ * Name of augment's setter method.
+ */
+ private String setterMethodName;
+
+ /**
+ * Create a YANG augment node.
+ */
+ public YangAugment() {
+ super(YangNodeType.AUGMENT_NODE, new HashMap<>());
+ listOfLeaf = new LinkedList<>();
+ listOfLeafList = new LinkedList<>();
+ targetNode = new LinkedList<>();
+ ifFeatureList = new LinkedList<>();
+ resolvableStatus = ResolvableStatus.UNRESOLVED;
+ }
+
+ @Override
+ public void addToChildSchemaMap(
+ YangSchemaNodeIdentifier schemaNodeIdentifier,
+ YangSchemaNodeContextInfo yangSchemaNodeContextInfo)
+ throws DataModelException {
+ getYsnContextInfoMap()
+ .put(schemaNodeIdentifier, yangSchemaNodeContextInfo);
+ YangSchemaNodeContextInfo yangSchemaNodeContextInfo1 =
+ new YangSchemaNodeContextInfo();
+ yangSchemaNodeContextInfo1
+ .setSchemaNode(yangSchemaNodeContextInfo.getSchemaNode());
+ yangSchemaNodeContextInfo1.setContextSwitchedNode(this);
+ getAugmentedNode().addToChildSchemaMap(schemaNodeIdentifier,
+ yangSchemaNodeContextInfo1);
+ }
+
+ @Override
+ public void setNameSpaceAndAddToParentSchemaMap() {
+ // Get parent namespace and set namespace for self node.
+ setNameSpace(getParent().getNameSpace());
+ /*
+ * Check if node contains leaf/leaf-list, if yes add namespace for leaf
+ * and leaf list.
+ */
+ setLeafNameSpaceAndAddToParentSchemaMap();
+ }
+
+ @Override
+ public void incrementMandatoryChildCount() {
+ // TODO
+ }
+
+ @Override
+ public void addToDefaultChildMap(
+ YangSchemaNodeIdentifier yangSchemaNodeIdentifier,
+ YangSchemaNode yangSchemaNode) {
+ // TODO
+ }
+
+ @Override
+ public YangSchemaNodeType getYangSchemaNodeType() {
+ /*
+ * Augment node to switch the name space in YMS
+ */
+ return YangSchemaNodeType.YANG_AUGMENT_NODE;
+ }
+
+ /**
+ * Returns the augmented node.
+ *
+ * @return the augmented node
+ */
+ public List<YangAtomicPath> getTargetNode() {
+ return targetNode;
+ }
+
+ /**
+ * Sets the augmented node.
+ *
+ * @param nodeIdentifiers the augmented node
+ */
+ public void setTargetNode(List<YangAtomicPath> nodeIdentifiers) {
+ targetNode = nodeIdentifiers;
+ }
+
+ /**
+ * Returns the name of augment after removing the prefix, in each atomic
+ * content, which is equal to the root prefix.
+ *
+ * @return prefix removed augment name
+ */
+ public String getPrefixRemovedName() {
+ return prefixRemovedName;
+ }
+
+ /**
+ * Sets the name of augment after removing the prefix, in each atomic
+ * content, which is equal to the root prefix.
+ *
+ * @param prefixRemovedName augment name
+ */
+ public void setPrefixRemovedName(String prefixRemovedName) {
+ this.prefixRemovedName = prefixRemovedName;
+ }
+
+ /**
+ * Returns the when.
+ *
+ * @return the when
+ */
+ @Override
+ public YangWhen getWhen() {
+ return when;
+ }
+
+ /**
+ * Sets the when.
+ *
+ * @param when the when to set
+ */
+ @Override
+ public void setWhen(YangWhen when) {
+ this.when = when;
+ }
+
+ /**
+ * Returns the description.
+ *
+ * @return the description
+ */
+ @Override
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * Set the description.
+ *
+ * @param description set the description
+ */
+ @Override
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ @Override
+ public void detectCollidingChild(String identifierName,
+ YangConstructType dataType)
+ throws DataModelException {
+ // Detect colliding child.
+ detectCollidingChildUtil(identifierName, dataType, this);
+ }
+
+ @Override
+ public void detectSelfCollision(String identifierName,
+ YangConstructType dataType)
+ throws DataModelException {
+ if (getName().equals(identifierName)) {
+ throw new DataModelException(
+ "YANG file error: Duplicate input identifier detected, " +
+ "same as input \"" +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition() +
+ " in " + getFileName() + "\"");
+ }
+ }
+
+ /**
+ * Returns the list of leaves.
+ *
+ * @return the list of leaves
+ */
+ @Override
+ public List<YangLeaf> getListOfLeaf() {
+ return listOfLeaf;
+ }
+
+ /**
+ * Sets the list of leaves.
+ *
+ * @param leafsList the list of leaf to set
+ */
+ @Override
+ public void setListOfLeaf(List<YangLeaf> leafsList) {
+ listOfLeaf = leafsList;
+ }
+
+ /**
+ * Adds a leaf.
+ *
+ * @param leaf the leaf to be added
+ */
+ @Override
+ public void addLeaf(YangLeaf leaf) {
+ getListOfLeaf().add(leaf);
+ }
+
+ /**
+ * Returns the list of leaf-list.
+ *
+ * @return the list of leaf-list
+ */
+ @Override
+ public List<YangLeafList> getListOfLeafList() {
+ return listOfLeafList;
+ }
+
+ /**
+ * Sets the list of leaf-list.
+ *
+ * @param listOfLeafList the list of leaf-list to set
+ */
+ @Override
+ public void setListOfLeafList(List<YangLeafList> listOfLeafList) {
+ this.listOfLeafList = listOfLeafList;
+ }
+
+ /**
+ * Adds a leaf-list.
+ *
+ * @param leafList the leaf-list to be added
+ */
+ @Override
+ public void addLeafList(YangLeafList leafList) {
+ getListOfLeafList().add(leafList);
+ }
+
+ @Override
+ public void setLeafNameSpaceAndAddToParentSchemaMap() {
+ // Add namespace for all leafs.
+ for (YangLeaf yangLeaf : getListOfLeaf()) {
+ yangLeaf.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
+ }
+ // Add namespace for all leaf list.
+ for (YangLeafList yangLeafList : getListOfLeafList()) {
+ yangLeafList
+ .setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
+ }
+ }
+
+ /**
+ * Returns the textual reference.
+ *
+ * @return the reference
+ */
+ @Override
+ public String getReference() {
+ return reference;
+ }
+
+ /**
+ * Sets the textual reference.
+ *
+ * @param reference the reference to set
+ */
+ @Override
+ public void setReference(String reference) {
+ this.reference = reference;
+ }
+
+ /**
+ * Returns the status.
+ *
+ * @return the status
+ */
+ @Override
+ public YangStatusType getStatus() {
+ return status;
+ }
+
+ /**
+ * Sets the status.
+ *
+ * @param status the status to set
+ */
+ @Override
+ public void setStatus(YangStatusType status) {
+ this.status = status;
+ }
+
+ /**
+ * Returns the type of the data as belongs-to.
+ *
+ * @return returns AUGMENT_DATA
+ */
+ @Override
+ public YangConstructType getYangConstructType() {
+ return YangConstructType.AUGMENT_DATA;
+ }
+
+ /**
+ * Validates the data on entering the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnEntry()
+ throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+
+ /**
+ * Validates the data on exiting the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnExit()
+ throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+
+ /**
+ * Returns augmented node.
+ *
+ * @return augmented node
+ */
+ public YangNode getAugmentedNode() {
+ return augmentedNode;
+ }
+
+ /**
+ * Sets augmented node.
+ *
+ * @param augmentedNode augmented node
+ */
+ public void setAugmentedNode(YangNode augmentedNode) {
+ this.augmentedNode = augmentedNode;
+ }
+
+ @Override
+ public List<YangIfFeature> getIfFeatureList() {
+ return ifFeatureList;
+ }
+
+ @Override
+ public void setIfFeatureList(List<YangIfFeature> ifFeatureList) {
+ this.ifFeatureList = ifFeatureList;
+ }
+
+ @Override
+ public void addIfFeatureList(YangIfFeature ifFeature) {
+ if (getIfFeatureList() == null) {
+ setIfFeatureList(new LinkedList<>());
+ }
+ getIfFeatureList().add(ifFeature);
+ }
+
+ @Override
+ public ResolvableStatus getResolvableStatus() {
+ return resolvableStatus;
+ }
+
+ @Override
+ public void setResolvableStatus(ResolvableStatus resolvableStatus) {
+ this.resolvableStatus = resolvableStatus;
+
+ }
+
+ @Override
+ public Object resolve()
+ throws DataModelException {
+ // Resolving of target node is being done in XPathLinker.
+ return null;
+ }
+
+ /**
+ * Returns setter method name for augment in application.
+ *
+ * @return setter method name for augment in application
+ */
+ public String getSetterMethodName() {
+ return setterMethodName;
+ }
+
+ /**
+ * Sets setter method name for augment in application.
+ *
+ * @param name setter method name for augment in application
+ */
+ public void setSetterMethodName(String name) {
+ setterMethodName = name;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangAugmentableNode.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangAugmentableNode.java
new file mode 100644
index 0000000..5d24723
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangAugmentableNode.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import java.util.List;
+
+/**
+ * Represents YANG constructs which can be augmented.
+ */
+public interface YangAugmentableNode {
+
+ /**
+ * Adds augment info to the augment info list.
+ *
+ * @param augmentInfo augment info of node
+ */
+ void addAugmentation(YangAugment augmentInfo);
+
+ /**
+ * Removes augment info from the node.
+ *
+ * @param augmentInfo augment info of node
+ */
+ void removeAugmentation(YangAugment augmentInfo);
+
+ /**
+ * Returns list of augment info.
+ *
+ * @return list of augment info
+ */
+ List<YangAugment> getAugmentedInfoList();
+
+ /**
+ * Clones augment info.
+ */
+ void cloneAugmentInfo();
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangBase.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangBase.java
new file mode 100644
index 0000000..a0194bb
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangBase.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus;
+
+import java.io.Serializable;
+
+import static org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus.UNRESOLVED;
+
+/**
+ * Reference RFC 6020.
+ * <p>
+ * Represents data model node to maintain information defined in YANG base.
+ * The "base" statement, which is optional, takes as an argument a
+ * string that is the name of an existing identity, from which the new
+ * identity is derived. If no "base" statement is present, the identity
+ * is defined from scratch.
+ * <p>
+ * If a prefix is present on the base name, it refers to an identity
+ * defined in the module that was imported with that prefix, or the
+ * local module if the prefix matches the local module's prefix.
+ * Otherwise, an identity with the matching name MUST be defined in the
+ * current module or an included submodule.
+ */
+
+/**
+ * Represents data model node to maintain information defined in YANG base.
+ */
+public class YangBase extends DefaultLocationInfo implements Resolvable, Serializable {
+
+ private static final long serialVersionUID = 806201693L;
+
+ // YANG node identifier.
+ private YangNodeIdentifier baseIdentifier;
+
+ // Referred identity parent information.
+ private YangIdentity referredIdentity;
+
+ /**
+ * Status of resolution. If completely resolved enum value is "RESOLVED",
+ * if not enum value is "UNRESOLVED", in case reference of grouping/typedef/base/identityref
+ * is added to uses/type/base/identityref but it's not resolved value of enum should be
+ * "INTRA_FILE_RESOLVED".
+ */
+ private ResolvableStatus resolvableStatus;
+
+ // Creates a base type of node.
+ public YangBase() {
+ resolvableStatus = UNRESOLVED;
+ }
+
+ /**
+ * Returns the YANG node identifier.
+ *
+ * @return the YANG node identifier
+ */
+ public YangNodeIdentifier getBaseIdentifier() {
+ return baseIdentifier;
+ }
+
+ /**
+ * Sets the YANG node identifier.
+ *
+ * @param baseIdentifier the YANG node identifier to set
+ */
+ public void setBaseIdentifier(YangNodeIdentifier baseIdentifier) {
+ this.baseIdentifier = baseIdentifier;
+ }
+
+ /**
+ * Returns the parent identity node.
+ *
+ * @return the parent identity node
+ */
+ public YangIdentity getReferredIdentity() {
+ return referredIdentity;
+ }
+
+ /**
+ * Sets the parent identity node.
+ *
+ * @param referredIdentity the parent identity node to set
+ */
+ public void setReferredIdentity(YangIdentity referredIdentity) {
+ this.referredIdentity = referredIdentity;
+ }
+
+ @Override
+ public ResolvableStatus getResolvableStatus() {
+ return resolvableStatus;
+ }
+
+ @Override
+ public void setResolvableStatus(ResolvableStatus resolvableStatus) {
+ this.resolvableStatus = resolvableStatus;
+ }
+
+ @Override
+ public Object resolve() throws DataModelException {
+ return null;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangBelongsTo.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangBelongsTo.java
new file mode 100644
index 0000000..74b6338
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangBelongsTo.java
@@ -0,0 +1,196 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import java.io.Serializable;
+import java.util.Set;
+
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.findReferredNode;
+
+/*-
+ * Reference 6020.
+ *
+ * The "belongs-to" statement specifies the module to which the
+ * submodule belongs. The argument is an identifier that is the name of
+ * the module.
+ *
+ * A submodule MUST only be included by the module to which it belongs,
+ * or by another submodule that belongs to that module.
+ *
+ * The mandatory "prefix" sub-statement assigns a prefix for the module
+ * to which the submodule belongs. All definitions in the local
+ * submodule and any included submodules can be accessed by using the
+ * prefix.
+ *
+ * The belongs-to's sub-statements
+ *
+ * +--------------+---------+-------------+
+ * | substatement | section | cardinality |
+ * +--------------+---------+-------------+
+ * | prefix | 7.1.4 | 1 |
+ * +--------------+---------+-------------+
+ */
+
+/**
+ * Represents the belongs-to data type information.
+ */
+public class YangBelongsTo extends DefaultLocationInfo implements Parsable, Serializable {
+
+ private static final long serialVersionUID = 806201639L;
+
+ /**
+ * Reference RFC 6020.
+ * <p>
+ * The "belongs-to" statement specifies the module to which the submodule
+ * belongs. The argument is an identifier that is the name of the module.
+ */
+ private String belongsToModuleName;
+
+ /**
+ * Module node to which sub-module belongs to.
+ */
+ private YangNode moduleNode;
+
+ /**
+ * Reference RFC 6020.
+ * <p>
+ * The mandatory "prefix" substatement assigns a prefix for the module to
+ * which the submodule belongs. All definitions in the local submodule and
+ * any included submodules can be accessed by using the prefix.
+ */
+ private String prefix;
+
+ /**
+ * Create a belongs to object.
+ */
+ public YangBelongsTo() {
+
+ }
+
+ /**
+ * Returns the belongs to module name.
+ *
+ * @return the belongs to module name
+ */
+ public String getBelongsToModuleName() {
+ return belongsToModuleName;
+ }
+
+ /**
+ * Sets the belongs to module name.
+ *
+ * @param belongsToModuleName the belongs to module name to set
+ */
+ public void setBelongsToModuleName(String belongsToModuleName) {
+ this.belongsToModuleName = belongsToModuleName;
+ }
+
+ /**
+ * Returns the prefix.
+ *
+ * @return the prefix
+ */
+ public String getPrefix() {
+ return prefix;
+ }
+
+ /**
+ * Sets the prefix.
+ *
+ * @param prefix the prefix to set
+ */
+ public void setPrefix(String prefix) {
+ this.prefix = prefix;
+ }
+
+ /**
+ * Returns the module data model node.
+ *
+ * @return the module data model node
+ */
+ public YangNode getModuleNode() {
+ return moduleNode;
+ }
+
+ /**
+ * Sets the module node.
+ *
+ * @param moduleNode module data model node
+ */
+ public void setModuleNode(YangNode moduleNode) {
+ this.moduleNode = moduleNode;
+ }
+
+ /**
+ * Returns the type of the data as belongs-to.
+ *
+ * @return ParsedDataType returns BELONGS_TO_DATA
+ */
+ @Override
+ public YangConstructType getYangConstructType() {
+ return YangConstructType.BELONGS_TO_DATA;
+ }
+
+ /**
+ * Validates the data on entering the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnEntry() throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+
+ /**
+ * Validates the data on exiting the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnExit() throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+
+ /**
+ * Links the belongs to with a module.
+ *
+ * @param yangNodeSet YANG file information set
+ * @throws DataModelException a violation in data model rule
+ */
+ public void linkWithModule(Set<YangNode> yangNodeSet)
+ throws DataModelException {
+ String belongsToModuleName = getBelongsToModuleName();
+ YangNode moduleNode = findReferredNode(yangNodeSet, belongsToModuleName);
+ if (moduleNode != null) {
+ if (moduleNode instanceof YangModule) {
+ setModuleNode(moduleNode);
+ return;
+ }
+ }
+ DataModelException exception = new DataModelException("YANG file error : Module " + belongsToModuleName +
+ "to which sub-module belongs to is not found. " + " in " +
+ getLineNumber() + " at " +
+ getCharPosition() +
+ " in " + getFileName());
+ exception.setLine(getLineNumber());
+ exception.setCharPosition(getCharPosition());
+ throw exception;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangBinary.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangBinary.java
new file mode 100644
index 0000000..22f6e82
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangBinary.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangBuiltInDataTypeInfo;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+
+import java.io.Serializable;
+import java.util.Base64;
+
+/*
+ * Reference RFC 6020.
+ *
+ * The binary built-in type represents any binary data,
+ * i.e., a sequence of octets.
+ */
+public class YangBinary extends DefaultLocationInfo implements YangBuiltInDataTypeInfo<YangBinary>,
+ Serializable, Comparable<YangBinary> {
+
+ private static final long serialVersionUID = 2106201608L;
+
+ // Binary data is a decoded value by base64 decoding scheme from data input (jason)
+ private byte[] binaryData;
+
+ /**
+ * Creates a binary object corresponding to the base 64 encoding value.
+ *
+ * @param strValue base64 encoded value
+ */
+ public YangBinary(String strValue) {
+ setBinaryData(Base64.getDecoder().decode(strValue));
+ }
+
+ /**
+ * Retrieves decoded binary data.
+ *
+ * @return binary data
+ */
+ public byte[] getBinaryData() {
+ return binaryData;
+ }
+
+ /**
+ * Sets binary data.
+ *
+ * @param binaryData binary data
+ */
+ public void setBinaryData(byte[] binaryData) {
+ this.binaryData = binaryData;
+ }
+
+ /**
+ * Encodes binary data by base64 encoding scheme.
+ *
+ * @return encoded binary data
+ */
+ public String toString() {
+ return Base64.getEncoder()
+ .encodeToString(binaryData);
+ }
+
+ @Override
+ public YangDataTypes getYangType() {
+ return YangDataTypes.BINARY;
+ }
+
+ @Override
+ public int compareTo(YangBinary o) {
+ for (int i = 0, j = 0; i < this.binaryData.length && j < o.binaryData.length; i++, j++) {
+ int a = (this.binaryData[i] & 0xff);
+ int b = (o.binaryData[j] & 0xff);
+ if (a != b) {
+ return a - b;
+ }
+ }
+ return this.binaryData.length - o.binaryData.length;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangBit.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangBit.java
new file mode 100644
index 0000000..8482905
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangBit.java
@@ -0,0 +1,229 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+/*-
+ * The "bit" statement, which is a sub-statement to the "type" statement,
+ * MUST be present if the type is "bits". It is repeatedly used to
+ * specify each assigned named bit of a bits type. It takes as an
+ * argument a string that is the assigned name of the bit. It is
+ * followed by a block of sub-statements that holds detailed bit
+ * information.
+ * All assigned names in a bits type MUST be unique.
+ *
+ * The bit's sub-statements
+ *
+ * +--------------+---------+-------------+------------------+
+ * | substatement | section | cardinality |data model mapping|
+ * +--------------+---------+-------------+------------------+
+ * | description | 7.19.3 | 0..1 | - string |
+ * | reference | 7.19.4 | 0..1 | - string |
+ * | status | 7.19.2 | 0..1 | - YangStatus |
+ * | position | 9.7.4.2 | 0..1 | - int |
+ * +--------------+---------+-------------+------------------+
+ */
+
+/**
+ * Represents the bit data type information.
+ */
+public class YangBit extends DefaultLocationInfo implements YangCommonInfo, Parsable, Serializable {
+
+ private static final long serialVersionUID = 806201640L;
+
+ /**
+ * Name of the bit.
+ */
+ private String bitName;
+
+ /**
+ * Description of the bit field.
+ */
+ private String description;
+
+ /**
+ * Reference info of the bit field.
+ */
+ private String reference;
+
+ /**
+ * Status of the bit field.
+ */
+ private YangStatusType status;
+
+ /**
+ * Position of the bit whose name bit is described.
+ */
+ private int position;
+
+ /**
+ * Create a YANG bit type object.
+ */
+ public YangBit() {
+
+ }
+
+ /**
+ * Returns bit name.
+ *
+ * @return the bit name
+ */
+ public String getBitName() {
+ return bitName;
+ }
+
+ /**
+ * Sets the bit name.
+ *
+ * @param bitName the bit name to set
+ */
+ public void setBitName(String bitName) {
+ this.bitName = bitName;
+ }
+
+ /**
+ * Returns description.
+ *
+ * @return the description
+ */
+ @Override
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * Sets the description.
+ *
+ * @param description set the description
+ */
+ @Override
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ /**
+ * Returns textual reference.
+ *
+ * @return the reference
+ */
+ @Override
+ public String getReference() {
+ return reference;
+ }
+
+ /**
+ * Sets the textual reference.
+ *
+ * @param reference the reference to set
+ */
+ @Override
+ public void setReference(String reference) {
+ this.reference = reference;
+ }
+
+ /**
+ * Returns status.
+ *
+ * @return the status
+ */
+ @Override
+ public YangStatusType getStatus() {
+ return status;
+ }
+
+ /**
+ * Sets the status.
+ *
+ * @param status the status to set
+ */
+ @Override
+ public void setStatus(YangStatusType status) {
+ this.status = status;
+ }
+
+ /**
+ * Returns bit position.
+ *
+ * @return the position
+ */
+ public int getPosition() {
+ return position;
+ }
+
+ /**
+ * Sets the bit position.
+ *
+ * @param position the position to set
+ */
+ public void setPosition(int position) {
+ this.position = position;
+ }
+
+ /**
+ * Returns the type of the data.
+ *
+ * @return ParsedDataType returns BIT_DATA
+ */
+ @Override
+ public YangConstructType getYangConstructType() {
+ return YangConstructType.BIT_DATA;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+
+ if (this == obj) {
+ return true;
+ }
+ if (obj instanceof YangBit) {
+ final YangBit other = (YangBit) obj;
+ return Objects.equals(bitName, other.bitName);
+ }
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(bitName);
+ }
+
+ /**
+ * Validates the data on entering the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnEntry() throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+
+ /**
+ * Validates the data on exiting the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnExit() throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangBits.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangBits.java
new file mode 100644
index 0000000..fd97e38
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangBits.java
@@ -0,0 +1,260 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import java.io.Serializable;
+import java.util.BitSet;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Pattern;
+
+/*
+ * Reference RFC 6020.
+ *
+ * The bits built-in type represents a bit set. That is, a bits value
+ * is a set of flags identified by small integer position numbers
+ * starting at 0. Each bit number has an assigned name.
+ */
+
+/**
+ * Represents the bits data type information.
+ */
+public class YangBits extends DefaultLocationInfo implements Parsable, Serializable {
+
+ private static final long serialVersionUID = 806201641L;
+ private static final String SPACE = " ";
+
+ // Bits name
+ private String bitsName;
+ // Bits data contains bit-positions will be used to send to ONOS application
+ private BitSet bitDataSet;
+ /**
+ * Mapping bit name to YangBit. In data input (jason), only bit name will be received.
+ * By using the bit name corresponding (yang) bit-position will be retrieved from bitNameMap map.
+ */
+ private Map<String, YangBit> bitNameMap;
+ /**
+ * Mapping bit position to YangBit. The bit-position received from ONOS application
+ * will be converted into bit-name by using bitPositionMap map to send (jason) output data as response.
+ */
+ private Map<Integer, YangBit> bitPositionMap;
+
+ /**
+ * Creates a YANG bits type object.
+ */
+ public YangBits() {
+ bitDataSet = new BitSet();
+ setBitNameMap(new HashMap<>());
+ setBitPositionMap(new HashMap<>());
+ }
+
+ /**
+ * Returns the bits name.
+ *
+ * @return the bits name
+ */
+ public String getBitsName() {
+ return bitsName;
+ }
+
+ /**
+ * Sets the bits name.
+ *
+ * @param bitsName the bits name
+ */
+ public void setBitsName(String bitsName) {
+ this.bitsName = bitsName;
+ }
+
+ /**
+ * Returns the bit data set.
+ *
+ * @return the bit data set
+ */
+ public BitSet getBitDataSet() {
+ return bitDataSet;
+ }
+
+ /**
+ * Sets the bit data set.
+ *
+ * @param bitNames the set of bit names
+ * @throws DataModelException due to violation in data model rules
+ */
+ public void setBitDataSet(String[] bitNames) throws DataModelException {
+ YangBit bit;
+ for (String bitName : bitNames) {
+ bit = bitNameMap.get(bitName);
+ if (bit == null) {
+ throw new DataModelException("YANG file error: Unable to find " +
+ "corresponding bit position for bit name: " + bitName +
+ " in " +
+ getLineNumber() + " at " +
+ getCharPosition() +
+ " in " + getFileName());
+ }
+ bitDataSet.set(bit.getPosition());
+ }
+ }
+
+ /**
+ * Returns the bit name map.
+ *
+ * @return the bit name map
+ */
+ public Map<String, YangBit> getBitNameMap() {
+ return bitNameMap;
+ }
+
+ /**
+ * Sets the bit name map.
+ *
+ * @param bitNameMap the bit name map
+ */
+ public void setBitNameMap(Map<String, YangBit> bitNameMap) {
+ this.bitNameMap = bitNameMap;
+ }
+
+ /**
+ * Checks whether bit name already available.
+ *
+ * @param bitName bit name
+ * @return true if bit name already available otherwise returns false
+ */
+ public boolean isBitNameExists(String bitName) {
+ return bitNameMap.containsKey(bitName);
+ }
+
+ /**
+ * Returns the bit position map.
+ *
+ * @return the bit position map
+ */
+ public Map<Integer, YangBit> getBitPositionMap() {
+ return bitPositionMap;
+ }
+
+ /**
+ * Sets the bit position map.
+ *
+ * @param bitPositionMap the bit position map
+ */
+ public void setBitPositionMap(Map<Integer, YangBit> bitPositionMap) {
+ this.bitPositionMap = bitPositionMap;
+ }
+
+ /**
+ * Checks whether bit position already available.
+ *
+ * @param bitPosition bit position
+ * @return true if bit position already available otherwise returns false
+ */
+ public boolean isBitPositionExists(Integer bitPosition) {
+ return bitPositionMap.containsKey(bitPosition);
+ }
+
+ /**
+ * Adds bit info.
+ *
+ * @param bitInfo the bit information to be added
+ * @throws DataModelException due to violation in data model rules
+ */
+ public void addBitInfo(YangBit bitInfo) throws DataModelException {
+ if (bitNameMap.put(bitInfo.getBitName(), bitInfo) != null) {
+ throw new DataModelException("YANG file error: Duplicate bit name detected, same as bit name \""
+ + bitInfo.getBitName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition() +
+ " in " + getFileName() + "\"");
+ }
+ if (bitPositionMap.put(bitInfo.getPosition(), bitInfo) != null) {
+ throw new DataModelException("YANG file error: Duplicate bit position detected, same as bit position \""
+ + bitInfo.getPosition() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition() +
+ " in " + getFileName() + "\"");
+ }
+ }
+
+ /**
+ * Returns the type of the data.
+ *
+ * @return ParsedDataType returns BITS_DATA
+ */
+ @Override
+ public YangConstructType getYangConstructType() {
+ return YangConstructType.BITS_DATA;
+ }
+
+ @Override
+ public String toString() {
+ YangBit bit;
+ String bits = new String();
+ for (int i = bitDataSet.nextSetBit(0); i >= 0; i = bitDataSet.nextSetBit(i + 1)) {
+ bit = bitPositionMap.get(i);
+ if (bit == null) {
+ return null;
+ }
+ if (bits.isEmpty()) {
+ bits = bit.getBitName();
+ } else {
+ bits += " " + bit.getBitName();
+ }
+ }
+ return bits.trim();
+ }
+
+ /**
+ * Returns the object of YANG bits based on specific set of bit names.
+ *
+ * @param bits set of bit names
+ * @return Object of YANG bits
+ */
+ public YangBits fromString(String bits) {
+ try {
+ String[] bitNames = bits.trim().split(Pattern.quote(SPACE));
+ setBitDataSet(bitNames);
+ return this;
+ } catch (Exception e) {
+ }
+ return null;
+ }
+
+ /**
+ * Validates the data on entering the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnEntry() throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+
+ /**
+ * Validates the data on exiting the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnExit() throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangCase.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangCase.java
new file mode 100644
index 0000000..8c1f491
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangCase.java
@@ -0,0 +1,448 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+
+import static java.util.Collections.unmodifiableList;
+import static org.onosproject.yang.compiler.datamodel.YangNodeType.CASE_NODE;
+import static org.onosproject.yang.compiler.datamodel.YangSchemaNodeType.YANG_NON_DATA_NODE;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.CASE;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.COLLISION_DETECTION;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.INVALID_CASE_HOLDER;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.getErrorMsg;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.getErrorMsgCollision;
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.CASE_DATA;
+
+/*-
+ * Reference RFC 6020.
+ *
+ * The "case" statement is used to define branches of the choice. It takes as an
+ * argument an identifier, followed by a block of sub-statements that holds
+ * detailed case information.
+ *
+ * The identifier is used to identify the case node in the schema tree. A case
+ * node does not exist in the data tree.
+ *
+ * Within a "case" statement, the "anyxml", "choice", "container", "leaf",
+ * "list", "leaf-list", and "uses" statements can be used to define child nodes
+ * to the case node. The identifiers of all these child nodes MUST be unique
+ * within all cases in a choice. For example, the following is illegal:
+ *
+ * choice interface-type { // This example is illegal YANG
+ * case a {
+ * leaf ethernet { ... }
+ * }
+ * case b {
+ * container ethernet { ...}
+ * }
+ * }
+ *
+ * As a shorthand, the "case" statement can be omitted if the branch
+ * contains a single "anyxml", "container", "leaf", "list", or
+ * "leaf-list" statement. In this case, the identifier of the case node
+ * is the same as the identifier in the branch statement. The following
+ * example:
+ *
+ * choice interface-type {
+ * container ethernet { ... }
+ * }
+ *
+ * is equivalent to:
+ *
+ * choice interface-type {
+ * case ethernet {
+ * container ethernet { ... }
+ * }
+ * }
+ *
+ * The case identifier MUST be unique within a choice.
+ *
+ * The case's sub-statements
+ *
+ * +--------------+---------+-------------+------------------+
+ * | substatement | section | cardinality |data model mapping|
+ * +--------------+---------+-------------+------------------+
+ * | anyxml | 7.10 | 0..n |-not supported |
+ * | choice | 7.9 | 0..n |-child nodes |
+ * | container | 7.5 | 0..n |-child nodes |
+ * | description | 7.19.3 | 0..1 |-string |
+ * | if-feature | 7.18.2 | 0..n |-YangIfFeature |
+ * | leaf | 7.6 | 0..n |-YangLeaf |
+ * | leaf-list | 7.7 | 0..n |-YangLeafList |
+ * | list | 7.8 | 0..n |-child nodes |
+ * | reference | 7.19.4 | 0..1 |-string |
+ * | status | 7.19.2 | 0..1 |-YangStatus |
+ * | uses | 7.12 | 0..n |-child node |
+ * | when | 7.19.5 | 0..1 |-YangWhen |
+ * +--------------+---------+-------------+------------------+
+ */
+
+/**
+ * Represents data model node to maintain information defined in YANG case.
+ */
+public abstract class YangCase
+ extends YangNode
+ implements YangLeavesHolder, YangCommonInfo, Parsable, CollisionDetector,
+ YangAugmentableNode, YangWhenHolder, YangIfFeatureHolder, YangIsFilterContentNodes {
+
+ private static final long serialVersionUID = 806201603L;
+
+ /**
+ * Description of case.
+ */
+ private String description;
+
+ /**
+ * List of leaves.
+ */
+ private List<YangLeaf> listOfLeaf;
+
+ /**
+ * List of leaf lists.
+ */
+ private List<YangLeafList> listOfLeafList;
+
+ /**
+ * Reference of the module.
+ */
+ private String reference;
+
+ /**
+ * Status of the node.
+ */
+ private YangStatusType status;
+
+ /**
+ * When data of the node.
+ */
+ private YangWhen when;
+
+ /**
+ * List of if-feature.
+ */
+ private List<YangIfFeature> ifFeatureList;
+
+ private List<YangAugment> yangAugmentedInfo;
+
+ /**
+ * Creates a choice node.
+ */
+ public YangCase() {
+ super(CASE_NODE, new HashMap<>());
+ listOfLeaf = new LinkedList<>();
+ listOfLeafList = new LinkedList<>();
+ ifFeatureList = new LinkedList<>();
+ yangAugmentedInfo = new ArrayList<>();
+ }
+
+ @Override
+ public void addToChildSchemaMap(YangSchemaNodeIdentifier id,
+ YangSchemaNodeContextInfo context)
+ throws DataModelException {
+ getYsnContextInfoMap().put(id, context);
+ YangSchemaNodeContextInfo contextInfo = new YangSchemaNodeContextInfo();
+ contextInfo.setSchemaNode(context.getSchemaNode());
+ contextInfo.setContextSwitchedNode(this);
+ getParent().addToChildSchemaMap(id, contextInfo);
+ }
+
+ @Override
+ public void setNameSpaceAndAddToParentSchemaMap() {
+ // Get parent namespace and set namespace for self node.
+ setNameSpace(getParent().getNameSpace());
+ /*
+ * Check if node contains leaf/leaf-list, if yes add namespace for leaf
+ * and leaf list.
+ */
+ setLeafNameSpaceAndAddToParentSchemaMap();
+ }
+
+ @Override
+ public void incrementMandatoryChildCount() {
+ //For non data nodes, mandatory child to be added to parent node.
+ // TODO
+ }
+
+ @Override
+ public void addToDefaultChildMap(YangSchemaNodeIdentifier id,
+ YangSchemaNode node) {
+ //For non data nodes, default child to be added to parent node.
+ // TODO
+ }
+
+ @Override
+ public YangSchemaNodeType getYangSchemaNodeType() {
+ return YANG_NON_DATA_NODE;
+ }
+
+ /**
+ * Returns the when.
+ *
+ * @return the when
+ */
+ @Override
+ public YangWhen getWhen() {
+ return when;
+ }
+
+ /**
+ * Sets the when.
+ *
+ * @param when the when to set
+ */
+ @Override
+ public void setWhen(YangWhen when) {
+ this.when = when;
+ }
+
+ /**
+ * Returns the description.
+ *
+ * @return the description
+ */
+ @Override
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * Sets the description.
+ *
+ * @param description set the description
+ */
+ @Override
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ /**
+ * Returns the list of leaves.
+ *
+ * @return the list of leaves
+ */
+ @Override
+ public List<YangLeaf> getListOfLeaf() {
+ return unmodifiableList(listOfLeaf);
+ }
+
+ /**
+ * Sets the list of leaves.
+ *
+ * @param leafsList the list of leaf to set
+ */
+ @Override
+ public void setListOfLeaf(List<YangLeaf> leafsList) {
+ listOfLeaf = leafsList;
+ }
+
+ /**
+ * Adds a leaf.
+ *
+ * @param leaf the leaf to be added
+ */
+ @Override
+ public void addLeaf(YangLeaf leaf) {
+ listOfLeaf.add(leaf);
+ }
+
+ /**
+ * Returns the list of leaf-list.
+ *
+ * @return the list of leaf-list
+ */
+ @Override
+ public List<YangLeafList> getListOfLeafList() {
+ return unmodifiableList(listOfLeafList);
+ }
+
+ /**
+ * Sets the list of leaf-list.
+ *
+ * @param listOfLeafList the list of leaf-list to set
+ */
+ @Override
+ public void setListOfLeafList(List<YangLeafList> listOfLeafList) {
+ this.listOfLeafList = listOfLeafList;
+ }
+
+ /**
+ * Adds a leaf-list.
+ *
+ * @param leafList the leaf-list to be added
+ */
+ @Override
+ public void addLeafList(YangLeafList leafList) {
+ listOfLeafList.add(leafList);
+ }
+
+ /**
+ * Returns the textual reference.
+ *
+ * @return the reference
+ */
+ @Override
+ public String getReference() {
+ return reference;
+ }
+
+ /**
+ * Sets the textual reference.
+ *
+ * @param reference the reference to set
+ */
+ @Override
+ public void setReference(String reference) {
+ this.reference = reference;
+ }
+
+ /**
+ * Returns the status.
+ *
+ * @return the status
+ */
+ @Override
+ public YangStatusType getStatus() {
+ return status;
+ }
+
+ /**
+ * Sets the status.
+ *
+ * @param status the status to set
+ */
+ @Override
+ public void setStatus(YangStatusType status) {
+ this.status = status;
+ }
+
+ /**
+ * Returns the type of the data.
+ *
+ * @return returns CASE_DATA
+ */
+ @Override
+ public YangConstructType getYangConstructType() {
+ return CASE_DATA;
+ }
+
+ /**
+ * Validates the data on entering the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnEntry()
+ throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+
+ /**
+ * Validates the data on exiting the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnExit()
+ throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+
+ @Override
+ public void detectCollidingChild(String identifierName, YangConstructType dataType)
+ throws DataModelException {
+ if (!(getParent() instanceof YangChoice ||
+ getParent() instanceof YangAugment)) {
+ throw new DataModelException(getErrorMsg(
+ INVALID_CASE_HOLDER, getName(), getLineNumber(),
+ getCharPosition(), getFileName()));
+ }
+ // Traverse up in tree to ask parent choice start collision detection.
+ ((CollisionDetector) getParent()).detectCollidingChild(identifierName, dataType);
+ }
+
+ @Override
+ public void detectSelfCollision(String identifierName, YangConstructType dataType)
+ throws DataModelException {
+
+ if (dataType == CASE_DATA) {
+ if (getName().equals(identifierName)) {
+ throw new DataModelException(getErrorMsgCollision(
+ COLLISION_DETECTION, getName(), getLineNumber(),
+ getCharPosition(), CASE, getFileName()));
+ }
+ return;
+ }
+
+ // Asks helper to detect colliding child.
+ detectCollidingChildUtil(identifierName, dataType, this);
+ }
+
+ @Override
+ public List<YangIfFeature> getIfFeatureList() {
+ return unmodifiableList(ifFeatureList);
+ }
+
+ @Override
+ public void addIfFeatureList(YangIfFeature ifFeature) {
+ ifFeatureList.add(ifFeature);
+ }
+
+ @Override
+ public void setIfFeatureList(List<YangIfFeature> ifFeatureList) {
+ this.ifFeatureList = ifFeatureList;
+ }
+
+ @Override
+ public void addAugmentation(YangAugment augmentInfo) {
+ yangAugmentedInfo.add(augmentInfo);
+ }
+
+ @Override
+ public void removeAugmentation(YangAugment augmentInfo) {
+ yangAugmentedInfo.remove(augmentInfo);
+ }
+
+ @Override
+ public List<YangAugment> getAugmentedInfoList() {
+ return unmodifiableList(yangAugmentedInfo);
+ }
+
+ @Override
+ public void setLeafNameSpaceAndAddToParentSchemaMap() {
+ // Add namespace for all leafs.
+ for (YangLeaf yangLeaf : listOfLeaf) {
+ yangLeaf.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
+ }
+ // Add namespace for all leaf list.
+ for (YangLeafList yangLeafList : listOfLeafList) {
+ yangLeafList.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
+ }
+ }
+
+
+ public void cloneAugmentInfo() {
+ yangAugmentedInfo = new ArrayList<>();
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangChoice.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangChoice.java
new file mode 100644
index 0000000..8e54d48
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangChoice.java
@@ -0,0 +1,493 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+
+import static java.util.Collections.unmodifiableList;
+import static org.onosproject.yang.compiler.datamodel.YangNodeType.CHOICE_NODE;
+import static org.onosproject.yang.compiler.datamodel.YangSchemaNodeType.YANG_CHOICE_NODE;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.CHOICE;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.COLLISION_DETECTION;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.getErrorMsgCollision;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.CASE_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.CHOICE_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangErrMsgConstants.DATA_MISSING_ERROR_TAG;
+import static org.onosproject.yang.compiler.datamodel.utils.YangErrMsgConstants.ERROR_PATH_MISSING_CHOICE;
+import static org.onosproject.yang.compiler.datamodel.utils.YangErrMsgConstants.MISSING_CHOICE_ERROR_APP_TAG;
+
+/*-
+ * Reference RFC 6020.
+ *
+ * The "choice" statement defines a set of alternatives, only one of
+ * which may exist at any one time. The argument is an identifier,
+ * followed by a block of sub-statements that holds detailed choice
+ * information. The identifier is used to identify the choice node in
+ * the schema tree. A choice node does not exist in the data tree.
+ *
+ * A choice consists of a number of branches, defined with the "case"
+ * sub-statement. Each branch contains a number of child nodes. The
+ * nodes from at most one of the choice's branches exist at the same
+ * time.
+ *
+ * The choice's sub-statements
+ *
+ * +--------------+---------+-------------+------------------+
+ * | substatement | section | cardinality |data model mapping|
+ * +--------------+---------+-------------+------------------+
+ * | anyxml | 7.10 | 0..n |-not supported |
+ * | case | 7.9.2 | 0..n |-YangChoice |
+ * | config | 7.19.1 | 0..1 |-boolean |
+ * | container | 7.5 | 0..n |-child case nodes |
+ * | default | 7.9.3 | 0..1 |-string |
+ * | description | 7.19.3 | 0..1 |-string |
+ * | if-feature | 7.18.2 | 0..n |-YangIfFeature |
+ * | leaf | 7.6 | 0..n |-child case nodes |
+ * | leaf-list | 7.7 | 0..n |-child case nodes |
+ * | list | 7.8 | 0..n |-child case nodes |
+ * | mandatory | 7.9.4 | 0..1 |-string |
+ * | reference | 7.19.4 | 0..1 |-string |
+ * | status | 7.19.2 | 0..1 |-string |
+ * | when | 7.19.5 | 0..1 |-YangWhen |
+ * +--------------+---------+-------------+------------------+
+ */
+
+/**
+ * Represents data model node to maintain information defined in YANG choice.
+ */
+public abstract class YangChoice
+ extends YangNode
+ implements YangCommonInfo, Parsable, CollisionDetector,
+ YangAugmentableNode, YangWhenHolder, YangIfFeatureHolder,
+ YangAppErrorHolder, YangIsFilterContentNodes, YangConfig {
+
+ private static final long serialVersionUID = 806201604L;
+
+ /**
+ * If the choice represents config data.
+ */
+ private boolean isConfig;
+
+ /**
+ * Description of choice.
+ */
+ private String description;
+
+ /**
+ * Reference RFC 6020.
+ * <p>
+ * The "mandatory" statement, which is optional, takes as an argument the
+ * string "true" or "false", and puts a constraint on valid data. If
+ * "mandatory" is "true", at least one node from exactly one of the choice's
+ * case branches MUST exist.
+ * <p>
+ * If not specified, the default is "false".
+ * <p>
+ * The behavior of the constraint depends on the type of the choice's
+ * closest ancestor node in the schema tree which is not a non-presence
+ * container:
+ * <p>
+ * o If this ancestor is a case node, the constraint is enforced if any
+ * other node from the case exists.
+ * <p>
+ * o Otherwise, it is enforced if the ancestor node exists.
+ */
+ private String mandatory;
+
+ /**
+ * Reference of the choice.
+ */
+ private String reference;
+
+ /**
+ * Status of the node.
+ */
+ private YangStatusType status;
+
+ /**
+ * Reference RFC 6020.
+ * <p>
+ * The "default" statement indicates if a case should be considered as the
+ * default if no child nodes from any of the choice's cases exist. The
+ * argument is the identifier of the "case" statement. If the "default"
+ * statement is missing, there is no default case.
+ * <p>
+ * The "default" statement MUST NOT be present on choices where "mandatory"
+ * is true.
+ * <p>
+ * The default case is only important when considering the default values of
+ * nodes under the cases. The default values for nodes under the default
+ * case are used if none of the nodes under any of the cases are present.
+ * <p>
+ * There MUST NOT be any mandatory nodes directly under the default case.
+ * <p>
+ * Default values for child nodes under a case are only used if one of the
+ * nodes under that case is present, or if that case is the default case. If
+ * none of the nodes under a case are present and the case is not the
+ * default case, the default values of the cases' child nodes are ignored.
+ * <p>
+ * the default case to be used if no case members is present.
+ */
+ private String defaultValueInString;
+
+ /**
+ * When data of the node.
+ */
+ private YangWhen when;
+
+ /**
+ * List of if-feature.
+ */
+ private List<YangIfFeature> ifFeatureList;
+
+ private List<YangAugment> yangAugmentedInfo;
+
+ /**
+ * YANG application error information.
+ */
+ private YangAppErrorInfo yangAppErrorInfo;
+
+ /**
+ * Create a choice node.
+ */
+ public YangChoice() {
+ super(CHOICE_NODE, new HashMap<>());
+ yangAppErrorInfo = new YangAppErrorInfo();
+ ifFeatureList = new LinkedList<>();
+ yangAugmentedInfo = new ArrayList<>();
+ yangAppErrorInfo.setErrorTag(DATA_MISSING_ERROR_TAG);
+ yangAppErrorInfo.setErrorAppTag(MISSING_CHOICE_ERROR_APP_TAG);
+ yangAppErrorInfo.setErrorAppPath(ERROR_PATH_MISSING_CHOICE);
+ }
+
+ @Override
+ public void addToChildSchemaMap(YangSchemaNodeIdentifier id,
+ YangSchemaNodeContextInfo context)
+ throws DataModelException {
+ getYsnContextInfoMap().put(id, context);
+ YangSchemaNodeContextInfo contextInfo =
+ new YangSchemaNodeContextInfo();
+ contextInfo.setSchemaNode(context.getSchemaNode());
+ contextInfo.setContextSwitchedNode(this);
+ getParent().addToChildSchemaMap(id, contextInfo);
+ }
+
+ @Override
+ public void setNameSpaceAndAddToParentSchemaMap() {
+ // Get parent namespace and set namespace for self node.
+ setNameSpace(getParent().getNameSpace());
+ }
+
+ @Override
+ public void incrementMandatoryChildCount() {
+ //For non data nodes, mandatory child to be added to parent node.
+ // TODO
+ }
+
+ @Override
+ public void addToDefaultChildMap(
+ YangSchemaNodeIdentifier yangSchemaNodeIdentifier,
+ YangSchemaNode yangSchemaNode) {
+ //For non data nodes, default child to be added to parent node.
+ // TODO
+ }
+
+ @Override
+ public YangSchemaNodeType getYangSchemaNodeType() {
+ /*Choice node to be skipped in YANG data tree preparation*/
+ return YANG_CHOICE_NODE;
+ }
+
+ /**
+ * Returns the when.
+ *
+ * @return the when
+ */
+ @Override
+ public YangWhen getWhen() {
+ return when;
+ }
+
+ /**
+ * Sets the when.
+ *
+ * @param when the when to set
+ */
+ @Override
+ public void setWhen(YangWhen when) {
+ this.when = when;
+ }
+
+ /**
+ * Returns config flag.
+ *
+ * @return the config flag
+ */
+ @Override
+ public boolean isConfig() {
+ return isConfig;
+ }
+
+ /**
+ * Sets config flag.
+ *
+ * @param isConfig the config flag
+ */
+ @Override
+ public void setConfig(boolean isConfig) {
+ this.isConfig = isConfig;
+ }
+
+ /**
+ * Returns the mandatory status.
+ *
+ * @return the mandatory status
+ */
+ public String getMandatory() {
+ return mandatory;
+ }
+
+ /**
+ * Sets the mandatory status.
+ *
+ * @param mandatory the mandatory status
+ */
+ public void setMandatory(String mandatory) {
+ this.mandatory = mandatory;
+ }
+
+ /**
+ * Returns the description.
+ *
+ * @return the description
+ */
+ @Override
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * Sets the description.
+ *
+ * @param description set the description
+ */
+ @Override
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ /**
+ * Returns the textual reference.
+ *
+ * @return the reference
+ */
+ @Override
+ public String getReference() {
+ return reference;
+ }
+
+ /**
+ * Sets the textual reference.
+ *
+ * @param reference the reference to set
+ */
+ @Override
+ public void setReference(String reference) {
+ this.reference = reference;
+ }
+
+ /**
+ * Returns the status.
+ *
+ * @return the status
+ */
+ @Override
+ public YangStatusType getStatus() {
+ return status;
+ }
+
+ /**
+ * Sets the status.
+ *
+ * @param status the status to set
+ */
+ @Override
+ public void setStatus(YangStatusType status) {
+ this.status = status;
+ }
+
+ /**
+ * Returns the default value.
+ *
+ * @return the default value
+ */
+ public String getDefaultValueInString() {
+ return defaultValueInString;
+ }
+
+ /**
+ * Sets the default value.
+ *
+ * @param defaultValueInString the default value
+ */
+ public void setDefaultValueInString(String defaultValueInString) {
+ this.defaultValueInString = defaultValueInString;
+ }
+
+ /**
+ * Returns the type of the data.
+ *
+ * @return choice data
+ */
+ @Override
+ public YangConstructType getYangConstructType() {
+ return CHOICE_DATA;
+ }
+
+ /**
+ * Validates the data on entering the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnEntry()
+ throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+
+ /**
+ * Validates the data on exiting the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnExit()
+ throws DataModelException {
+ if (defaultValueInString != null && !defaultValueInString.isEmpty()) {
+ YangNode node = getChild();
+ boolean matched = false;
+ // Check whether default string matches the case
+ while (node != null) {
+ if (node instanceof YangCase) {
+ if (defaultValueInString.equals(node.getName())) {
+ matched = true;
+ break;
+ }
+ }
+ node = node.getNextSibling();
+ }
+
+ if (!matched) {
+ throw new DataModelException(
+ "YANG file error: default string \"" +
+ defaultValueInString + "\" not matching choice \"" +
+ getName() + "\" case.");
+ }
+ }
+ }
+
+ @Override
+ public void detectCollidingChild(String idName, YangConstructType type)
+ throws DataModelException {
+
+ if (getParent() instanceof YangCase && type != CASE_DATA) {
+ ((CollisionDetector) getParent()).detectCollidingChild(idName, type);
+ }
+ YangNode node = getChild();
+ while (node != null) {
+ if (node instanceof CollisionDetector) {
+ ((CollisionDetector) node).detectSelfCollision(idName, type);
+ }
+ node = node.getNextSibling();
+ }
+ }
+
+ @Override
+ public void detectSelfCollision(String identifierName,
+ YangConstructType dataType)
+ throws DataModelException {
+
+ if (dataType == CHOICE_DATA) {
+ if (getName().equals(identifierName)) {
+ throw new DataModelException(
+ getErrorMsgCollision(COLLISION_DETECTION, getName(),
+ getLineNumber(), getCharPosition(),
+ CHOICE, getFileName()));
+ }
+ return;
+ }
+
+ YangNode node = getChild();
+ while (node != null) {
+ if (node instanceof CollisionDetector) {
+ ((CollisionDetector) node)
+ .detectSelfCollision(identifierName, dataType);
+ }
+ node = node.getNextSibling();
+ }
+ }
+
+ @Override
+ public List<YangIfFeature> getIfFeatureList() {
+ return unmodifiableList(ifFeatureList);
+ }
+
+ @Override
+ public void addIfFeatureList(YangIfFeature ifFeature) {
+ ifFeatureList.add(ifFeature);
+ }
+
+ @Override
+ public void setIfFeatureList(List<YangIfFeature> ifFeatureList) {
+ this.ifFeatureList = ifFeatureList;
+ }
+
+ @Override
+ public void addAugmentation(YangAugment augmentInfo) {
+ yangAugmentedInfo.add(augmentInfo);
+ }
+
+ @Override
+ public void removeAugmentation(YangAugment augmentInfo) {
+ yangAugmentedInfo.remove(augmentInfo);
+ }
+
+ @Override
+ public List<YangAugment> getAugmentedInfoList() {
+ return unmodifiableList(yangAugmentedInfo);
+ }
+
+ @Override
+ public void setAppErrorInfo(YangAppErrorInfo yangAppErrorInfo) {
+ this.yangAppErrorInfo = yangAppErrorInfo;
+ }
+
+ @Override
+ public YangAppErrorInfo getAppErrorInfo() {
+ return yangAppErrorInfo;
+ }
+
+ public void cloneAugmentInfo() {
+ yangAugmentedInfo = new ArrayList<>();
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangCommonInfo.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangCommonInfo.java
new file mode 100644
index 0000000..82872f0
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangCommonInfo.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+/**
+ * Abstraction of YANG entity's common meta data. Abstracted to unify the
+ * parsing and translator processing.
+ */
+public interface YangCommonInfo extends YangDesc, YangReference, YangStatus {
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangCompilerAnnotation.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangCompilerAnnotation.java
new file mode 100644
index 0000000..f106689
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangCompilerAnnotation.java
@@ -0,0 +1,189 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import java.io.Serializable;
+import java.util.LinkedList;
+import java.util.List;
+
+import static java.util.Collections.unmodifiableList;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.COMPILER_ANNOTATION_DATA;
+
+/**
+ * Represents data model node to maintain information defined in YANG compiler-annotation.
+ */
+public class YangCompilerAnnotation extends DefaultLocationInfo
+ implements Parsable, YangXPathResolver, Resolvable, Serializable {
+
+ private static final long serialVersionUID = 806201602L;
+
+ /**
+ * App data structure information.
+ */
+ private YangAppDataStructure yangAppDataStructure;
+
+ /**
+ * App extended name information.
+ */
+ private YangAppExtended yangAppExtended;
+
+ /**
+ * Prefix of compiler-annotation.
+ */
+ private String prefix;
+
+ /**
+ * Path of compiler-annotation.
+ */
+ private String path;
+
+ /**
+ * Path of compiler-annotation.
+ */
+ private List<YangAtomicPath> atomicPathList = new LinkedList<>();
+
+ /**
+ * Resolution status.
+ */
+ private ResolvableStatus resolvableStatus;
+
+ /**
+ * Returns the YANG app data structure information.
+ *
+ * @return the YANG app data structure information
+ */
+ public YangAppDataStructure getYangAppDataStructure() {
+ return yangAppDataStructure;
+ }
+
+ /**
+ * Sets the YANG app data structure information.
+ *
+ * @param yangAppDataStructure the YANG app data structure to set
+ */
+ public void setYangAppDataStructure(YangAppDataStructure yangAppDataStructure) {
+ this.yangAppDataStructure = yangAppDataStructure;
+ }
+
+ /**
+ * Returns the prefix.
+ *
+ * @return the prefix
+ */
+ public String getPrefix() {
+ return prefix;
+ }
+
+ /**
+ * Sets the prefix information.
+ *
+ * @param prefix the prefix to set
+ */
+ public void setPrefix(String prefix) {
+ this.prefix = prefix;
+ }
+
+ /**
+ * Returns the path.
+ *
+ * @return the path
+ */
+ public String getPath() {
+ return path;
+ }
+
+ /**
+ * Sets the path.
+ *
+ * @param path the path to set
+ */
+ public void setPath(String path) {
+ this.path = path;
+ }
+
+ /**
+ * Returns the YANG app extended name information.
+ *
+ * @return the YANG app extended name information
+ */
+ public YangAppExtended getYangAppExtendedName() {
+ return yangAppExtended;
+ }
+
+ /**
+ * Sets the YANG app extended name information.
+ *
+ * @param yangAppExtendedName the YANG app extended name to set
+ */
+ public void setYangAppExtendedName(YangAppExtended yangAppExtendedName) {
+ yangAppExtended = yangAppExtendedName;
+ }
+
+ /**
+ * Returns the list of atomic path.
+ *
+ * @return the list of atomic path
+ */
+ public List<YangAtomicPath> getAtomicPathList() {
+ return unmodifiableList(atomicPathList);
+ }
+
+ /**
+ * Sets the atomic path.
+ *
+ * @param atomicPathList the atomic path list to set
+ */
+ public void setAtomicPathList(List<YangAtomicPath> atomicPathList) {
+ this.atomicPathList = atomicPathList;
+ }
+
+ @Override
+ public YangConstructType getYangConstructType() {
+ return COMPILER_ANNOTATION_DATA;
+ }
+
+ @Override
+ public void validateDataOnEntry() throws DataModelException {
+ // TODO : to be implemented
+ }
+
+ @Override
+ public void validateDataOnExit() throws DataModelException {
+ // TODO : to be implemented
+ }
+
+ @Override
+ public ResolvableStatus getResolvableStatus() {
+ return resolvableStatus;
+ }
+
+ @Override
+ public void setResolvableStatus(ResolvableStatus resolvableStatus) {
+ this.resolvableStatus = resolvableStatus;
+ }
+
+ @Override
+ public Object resolve()
+ throws DataModelException {
+ return null;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangConfig.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangConfig.java
new file mode 100644
index 0000000..3659396
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangConfig.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+/**
+ * Abstraction of config entity. It is used to abstract the data holders of config statement.
+ */
+public interface YangConfig {
+
+ /**
+ * Returns the config flag.
+ *
+ * @return if config flag
+ */
+ boolean isConfig();
+
+ /**
+ * Sets the config flag.
+ *
+ * @param isConfig the flag value to set
+ */
+ void setConfig(boolean isConfig);
+
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangContainer.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangContainer.java
new file mode 100644
index 0000000..04d99a4
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangContainer.java
@@ -0,0 +1,523 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
+
+/*-
+ * Reference RFC 6020.
+ *
+ * The "container" statement is used to define an interior data node in the
+ * schema tree. It takes one argument, which is an identifier, followed by a
+ * block of sub-statements that holds detailed container information.
+ *
+ * A container node does not have a value, but it has a list of child nodes in
+ * the data tree. The child nodes are defined in the container's sub-statements.
+ *
+ * Containers with Presence
+ *
+ * YANG supports two styles of containers, those that exist only for organizing
+ * the hierarchy of data nodes, and those whose presence in the configuration
+ * has an explicit meaning.
+ *
+ * In the first style, the container has no meaning of its own, existing only to
+ * contain child nodes. This is the default style.
+ *
+ * For example, the set of scrambling options for Synchronous Optical Network
+ * (SONET) interfaces may be placed inside a "scrambling" container to enhance
+ * the organization of the configuration hierarchy, and to keep these nodes
+ * together. The "scrambling" node itself has no meaning, so removing the node
+ * when it becomes empty relieves the user from performing this task.
+ *
+ * In the second style, the presence of the container itself is configuration
+ * data, representing a single bit of configuration data. The container acts as
+ * both a configuration knob and a means of organizing related configuration.
+ * These containers are explicitly created and deleted.
+ *
+ * YANG calls this style a "presence container" and it is indicated using the
+ * "presence" statement, which takes as its argument a text string indicating
+ * what the presence of the node means.
+ *
+ * The container's Substatements
+ *
+ * +--------------+---------+-------------+------------------+
+ * | substatement | section | cardinality |data model mapping|
+ * +--------------+---------+-------------+------------------+
+ * | anyxml | 7.10 | 0..n | -not supported |
+ * | choice | 7.9 | 0..n | -child nodes |
+ * | config | 7.19.1 | 0..1 | -boolean |
+ * | container | 7.5 | 0..n | -child nodes |
+ * | description | 7.19.3 | 0..1 | -string |
+ * | grouping | 7.11 | 0..n | -child nodes |
+ * | if-feature | 7.18.2 | 0..n | -YangIfFeature |
+ * | leaf | 7.6 | 0..n | -YangLeaf |
+ * | leaf-list | 7.7 | 0..n | -YangLeafList |
+ * | list | 7.8 | 0..n | -child nodes |
+ * | must | 7.5.3 | 0..n | -YangMust |
+ * | presence | 7.5.5 | 0..1 | -boolean |
+ * | reference | 7.19.4 | 0..1 | -string |
+ * | status | 7.19.2 | 0..1 | -YangStatus |
+ * | typedef | 7.3 | 0..n | -child nodes |
+ * | uses | 7.12 | 0..n | -child nodes |
+ * | when | 7.19.5 | 0..1 | -YangWhen |
+ * +--------------+---------+-------------+------------------+
+ */
+
+/**
+ * Represents data model node to maintain information defined in YANG container.
+ */
+public abstract class YangContainer
+ extends YangNode
+ implements YangLeavesHolder, YangCommonInfo, Parsable, CollisionDetector,
+ YangAugmentableNode, YangMustHolder, YangWhenHolder, YangIfFeatureHolder, YangIsFilterContentNodes,
+ YangConfig {
+
+ private static final long serialVersionUID = 806201605L;
+
+ /**
+ * If container maintains config data.
+ */
+ private boolean isConfig;
+
+ /**
+ * Description of container.
+ */
+ private String description;
+
+ /**
+ * List of leaves contained.
+ */
+ private List<YangLeaf> listOfLeaf;
+
+ /**
+ * List of leaf-lists contained.
+ */
+ private List<YangLeafList> listOfLeafList;
+
+ /**
+ * If it is a presence container, then the textual documentation of presence
+ * usage.
+ */
+ private String presence;
+
+ /**
+ * Reference of the module.
+ */
+ private String reference;
+
+ private List<YangAugment> yangAugmentedInfo = new ArrayList<>();
+
+ /**
+ * Status of the node.
+ */
+ private YangStatusType status = YangStatusType.CURRENT;
+
+ /**
+ * List of must statement constraints.
+ */
+ private List<YangMust> mustConstraintList;
+
+ /**
+ * When data of the node.
+ */
+ private YangWhen when;
+
+ /**
+ * List of if-feature.
+ */
+ private List<YangIfFeature> ifFeatureList;
+
+ /**
+ * Create a container node.
+ */
+ public YangContainer() {
+ super(YangNodeType.CONTAINER_NODE, new HashMap<>());
+ listOfLeaf = new LinkedList<>();
+ listOfLeafList = new LinkedList<>();
+ mustConstraintList = new LinkedList<>();
+ ifFeatureList = new LinkedList<>();
+ }
+
+ @Override
+ public void addToChildSchemaMap(YangSchemaNodeIdentifier schemaNodeIdentifier,
+ YangSchemaNodeContextInfo yangSchemaNodeContextInfo) {
+ getYsnContextInfoMap().put(schemaNodeIdentifier, yangSchemaNodeContextInfo);
+ }
+
+ @Override
+ public void incrementMandatoryChildCount() {
+ // TODO
+ }
+
+ @Override
+ public void addToDefaultChildMap(YangSchemaNodeIdentifier yangSchemaNodeIdentifier, YangSchemaNode yangSchemaNode) {
+ // TODO
+ }
+
+ @Override
+ public YangSchemaNodeType getYangSchemaNodeType() {
+ return YangSchemaNodeType.YANG_SINGLE_INSTANCE_NODE;
+ }
+
+ /**
+ * Returns the when.
+ *
+ * @return the when
+ */
+ @Override
+ public YangWhen getWhen() {
+ return when;
+ }
+
+ /**
+ * Sets the when.
+ *
+ * @param when the when to set
+ */
+ @Override
+ public void setWhen(YangWhen when) {
+ this.when = when;
+ }
+
+ /**
+ * Returns the config flag.
+ *
+ * @return the isConfig
+ */
+ @Override
+ public boolean isConfig() {
+ return isConfig;
+ }
+
+ /**
+ * Sets the config flag.
+ *
+ * @param isConfig the config flag
+ */
+ @Override
+ public void setConfig(boolean isConfig) {
+ this.isConfig = isConfig;
+ }
+
+ /**
+ * Returns the description.
+ *
+ * @return the description
+ */
+ @Override
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * Sets the description.
+ *
+ * @param description set the description
+ */
+ @Override
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ /**
+ * Returns the list of leaves.
+ *
+ * @return the list of leaves
+ */
+ @Override
+ public List<YangLeaf> getListOfLeaf() {
+ return listOfLeaf;
+ }
+
+ /**
+ * Sets the list of leaves.
+ *
+ * @param leafsList the list of leaf to set
+ */
+ @Override
+ public void setListOfLeaf(List<YangLeaf> leafsList) {
+ listOfLeaf = leafsList;
+ }
+
+ /**
+ * Adds a leaf.
+ *
+ * @param leaf the leaf to be added
+ */
+ @Override
+ public void addLeaf(YangLeaf leaf) {
+ getListOfLeaf().add(leaf);
+ }
+
+ /**
+ * Returns the list of leaf-list.
+ *
+ * @return the list of leaf-list
+ */
+ @Override
+ public List<YangLeafList> getListOfLeafList() {
+ return listOfLeafList;
+ }
+
+ /**
+ * Sets the list of leaf-list.
+ *
+ * @param listOfLeafList the list of leaf-list to set
+ */
+ @Override
+ public void setListOfLeafList(List<YangLeafList> listOfLeafList) {
+ this.listOfLeafList = listOfLeafList;
+ }
+
+ /**
+ * Adds a leaf-list.
+ *
+ * @param leafList the leaf-list to be added
+ */
+ @Override
+ public void addLeafList(YangLeafList leafList) {
+ getListOfLeafList().add(leafList);
+ }
+
+
+ /**
+ * Returns the presence string if present.
+ *
+ * @return the presence
+ */
+ public String getPresence() {
+ return presence;
+ }
+
+ /**
+ * Sets the presence string.
+ *
+ * @param presence the presence flag
+ */
+ public void setPresence(String presence) {
+ this.presence = presence;
+ }
+
+ /**
+ * Returns the textual reference.
+ *
+ * @return the reference
+ */
+ @Override
+ public String getReference() {
+ return reference;
+ }
+
+ /**
+ * Sets the textual reference.
+ *
+ * @param reference the reference to set
+ */
+ @Override
+ public void setReference(String reference) {
+ this.reference = reference;
+ }
+
+ /**
+ * Returns the status.
+ *
+ * @return the status
+ */
+ @Override
+ public YangStatusType getStatus() {
+ return status;
+ }
+
+ /**
+ * Sets the status.
+ *
+ * @param status the status to set
+ */
+ @Override
+ public void setStatus(YangStatusType status) {
+ this.status = status;
+ }
+
+ /**
+ * Returns the type of the data.
+ *
+ * @return returns CONTAINER_DATA
+ */
+ @Override
+ public YangConstructType getYangConstructType() {
+ return YangConstructType.CONTAINER_DATA;
+ }
+
+ /**
+ * Validates the data on entering the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnEntry()
+ throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+
+ /**
+ * Validates the data on exiting the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnExit()
+ throws DataModelException {
+ List<YangLeaf> leaves = getListOfLeaf();
+ List<YangLeafList> leafLists = getListOfLeafList();
+ validateConfig(leaves, leafLists);
+ }
+
+ /**
+ * Validates config statement of container.
+ *
+ * @param leaves list of leaf attributes of container
+ * @param leafLists list of leaf-list attributes of container
+ * @throws DataModelException a violation of data model rules
+ */
+ private void validateConfig(List<YangLeaf> leaves, List<YangLeafList> leafLists)
+ throws DataModelException {
+
+ /*
+ * If a node has "config" set to "false", no node underneath it can have
+ * "config" set to "true".
+ */
+ if (!isConfig && leaves != null) {
+ for (YangLeaf leaf : leaves) {
+ if (leaf.isConfig()) {
+ throw new DataModelException("If a container has \"config\" set to \"false\", no node underneath " +
+ "it can have \"config\" set to \"true\"." + getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition() +
+ " in " + getFileName() + "\"");
+ }
+ }
+ }
+
+ if (!isConfig && leafLists != null) {
+ for (YangLeafList leafList : leafLists) {
+ if (leafList.isConfig()) {
+ throw new DataModelException("If a container has \"config\" set to \"false\", no node underneath " +
+ "it can have \"config\" set to \"true\"." +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition() +
+ " in " + getFileName() + "\"");
+ }
+ }
+ }
+ }
+
+ @Override
+ public void detectCollidingChild(String identifierName, YangConstructType dataType)
+ throws DataModelException {
+ // Asks helper to detect colliding child.
+ detectCollidingChildUtil(identifierName, dataType, this);
+ }
+
+ @Override
+ public void detectSelfCollision(String identifierName, YangConstructType dataType)
+ throws DataModelException {
+ if (getName().equals(identifierName)) {
+ throw new DataModelException("YANG file error: Duplicate input identifier detected, same as container \"" +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition() +
+ " in " + getFileName() + "\"");
+ }
+ }
+
+ @Override
+ public List<YangIfFeature> getIfFeatureList() {
+ return ifFeatureList;
+ }
+
+ @Override
+ public void addIfFeatureList(YangIfFeature ifFeature) {
+ if (getIfFeatureList() == null) {
+ setIfFeatureList(new LinkedList<>());
+ }
+ getIfFeatureList().add(ifFeature);
+ }
+
+ @Override
+ public void setIfFeatureList(List<YangIfFeature> ifFeatureList) {
+ this.ifFeatureList = ifFeatureList;
+ }
+
+ @Override
+ public List<YangMust> getListOfMust() {
+ return mustConstraintList;
+ }
+
+ @Override
+ public void setListOfMust(List<YangMust> mustConstraintList) {
+ this.mustConstraintList = mustConstraintList;
+ }
+
+ @Override
+ public void addMust(YangMust must) {
+ if (getListOfMust() == null) {
+ setListOfMust(new LinkedList<>());
+ }
+ getListOfMust().add(must);
+ }
+
+ @Override
+ public void addAugmentation(YangAugment augmentInfo) {
+ yangAugmentedInfo.add(augmentInfo);
+ }
+
+ @Override
+ public void removeAugmentation(YangAugment augmentInfo) {
+ yangAugmentedInfo.remove(augmentInfo);
+ }
+
+ @Override
+ public List<YangAugment> getAugmentedInfoList() {
+ return yangAugmentedInfo;
+ }
+
+ @Override
+ public void setLeafNameSpaceAndAddToParentSchemaMap() {
+ // Add namespace for all leafs.
+ for (YangLeaf yangLeaf : getListOfLeaf()) {
+ yangLeaf.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
+ }
+ // Add namespace for all leaf list.
+ for (YangLeafList yangLeafList : getListOfLeafList()) {
+ yangLeafList.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
+ }
+ }
+
+ public void cloneAugmentInfo() {
+ yangAugmentedInfo = new ArrayList<>();
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangDataStructure.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangDataStructure.java
new file mode 100644
index 0000000..0896a48
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangDataStructure.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+/**
+ * Represents ENUM to identify the YANG data type.
+ */
+public enum YangDataStructure {
+
+ QUEUE,
+
+ LIST,
+
+ MAP,
+
+ SET;
+
+ /**
+ * Returns YANG data structure type for corresponding data structure name.
+ *
+ * @param name data structure name from YANG file.
+ * @return YANG data structure for corresponding data structure name.
+ */
+ public static YangDataStructure getDataStructureType(String name) {
+ name = name.replace("\"", "");
+ for (YangDataStructure dataStructure : values()) {
+ if (dataStructure.name().toLowerCase().equals(name.toLowerCase())) {
+ return dataStructure;
+ }
+ }
+ return null;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangDecimal64.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangDecimal64.java
new file mode 100644
index 0000000..56ae4f3
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangDecimal64.java
@@ -0,0 +1,360 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.FractionDigits;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.DataTypeException;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangBuiltInDataTypeInfo;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.ListIterator;
+
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.getErrorMsg;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.DECIMAL64_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.DECIMAL64;
+
+/**
+ * Represents YANG decimal 64.
+ */
+public class YangDecimal64<T> extends DefaultLocationInfo
+ implements YangBuiltInDataTypeInfo<YangDecimal64>, Parsable, Serializable,
+ Comparable<YangDecimal64> {
+
+ private static final long serialVersionUID = 8006201668L;
+
+ /**
+ * YANG's min keyword.
+ */
+ private static final String MIN_KEYWORD = "min";
+
+ /**
+ * YANG's max keyword.
+ */
+ private static final String MAX_KEYWORD = "max";
+
+ /**
+ * Valid minimum value of YANG's fraction-digits.
+ */
+ public static final int MIN_FRACTION_DIGITS_VALUE = 1;
+
+ /**
+ * Valid maximum value of YANG's fraction-digits.
+ */
+ public static final int MAX_FRACTION_DIGITS_VALUE = 18;
+
+ /**
+ * Valid minimum value of YANG's decimal64.
+ */
+ private static final BigDecimal MIN_VALUE =
+ BigDecimal.valueOf(-922337203685477580.8);
+
+ /**
+ * Valid maximum value of YANG's decimal64.
+ */
+ private static final BigDecimal MAX_VALUE =
+ BigDecimal.valueOf(922337203685477580.7);
+
+ private static final int MIN_FRACTION_DIGIT_RANGE = 1;
+ private static final int MAX_FRACTION_DIGIT_RANGE = 18;
+ private static final int ZERO = 0;
+
+
+ // Decimal64 value
+ private BigDecimal value;
+
+ // fraction-digits
+ private int fractionDigit;
+
+ /**
+ * Additional information about range restriction.
+ */
+ private T rangeRestrictedExtendedInfo;
+
+ /**
+ * Creates an instance of YANG decimal64.
+ */
+ public YangDecimal64() {
+ }
+
+ /**
+ * Creates an instance of YANG decimal64.
+ *
+ * @param value of decimal64
+ */
+ public YangDecimal64(BigDecimal value) {
+ setValue(value);
+ }
+
+ /**
+ * Creates an instance of YANG decimal64.
+ *
+ * @param valueInString of decimal64 in string
+ */
+ YangDecimal64(String valueInString) {
+ if (valueInString.matches(MIN_KEYWORD)) {
+ value = MIN_VALUE;
+ } else if (valueInString.matches(MAX_KEYWORD)) {
+ value = MAX_VALUE;
+ } else {
+ try {
+ value = new BigDecimal(valueInString);
+ } catch (Exception e) {
+ throw new DataTypeException(
+ "YANG file error : Input value \"" + valueInString + "\"" +
+ " is not a valid decimal64.");
+ }
+ }
+
+ if (value.doubleValue() < MIN_VALUE.doubleValue()) {
+ throw new DataTypeException("YANG file error : " + valueInString +
+ " is less than minimum value "
+ + MIN_VALUE + ".");
+ } else if (value.doubleValue() > MAX_VALUE.doubleValue()) {
+ throw new DataTypeException("YANG file error : " + valueInString +
+ " is greater than maximum value "
+ + MAX_VALUE + ".");
+ }
+ }
+
+ /**
+ * Returns decimal64 value.
+ *
+ * @return value
+ */
+ public BigDecimal getValue() {
+ return value;
+ }
+
+ /**
+ * Sets the decimal64 value.
+ *
+ * @param value of decimal64
+ */
+ public void setValue(BigDecimal value) {
+ this.value = value;
+ }
+
+ /**
+ * Returns fraction digit.
+ *
+ * @return the fractionDigit
+ */
+ public int getFractionDigit() {
+ return fractionDigit;
+ }
+
+ /**
+ * Sets fraction digit.
+ *
+ * @param fractionDigit fraction digits.
+ */
+ public void setFractionDigit(int fractionDigit) {
+ this.fractionDigit = fractionDigit;
+ }
+
+ /**
+ * Returns additional information about range restriction.
+ *
+ * @return resolved range restricted extended information
+ */
+ public T getRangeRestrictedExtendedInfo() {
+ return rangeRestrictedExtendedInfo;
+ }
+
+ /**
+ * Sets additional information about range restriction.
+ *
+ * @param resolvedExtendedInfo resolved range restricted extended information
+ */
+ public void setRangeRestrictedExtendedInfo(T resolvedExtendedInfo) {
+ rangeRestrictedExtendedInfo = resolvedExtendedInfo;
+ }
+
+ /**
+ * Returns object of YANG decimal64.
+ *
+ * @param value of decimal64
+ * @return YANG decimal64 object
+ */
+ public static YangDecimal64 of(BigDecimal value) {
+ return new YangDecimal64(value);
+ }
+
+ @Override
+ public YangDataTypes getYangType() {
+ return DECIMAL64;
+ }
+
+ @Override
+ public YangConstructType getYangConstructType() {
+ return DECIMAL64_DATA;
+ }
+
+ @Override
+ public String toString() {
+ return value.toString();
+ }
+
+ /**
+ * Returns the object of YANG decimal64 from input string.
+ *
+ * @param valInString input String
+ * @return Object of YANG decimal64
+ */
+ static YangDecimal64 fromString(String valInString) {
+ return new YangDecimal64(valInString);
+ }
+
+ /**
+ * Checks whether specific fraction-digit in its range.
+ *
+ * @return true if fraction-digit is in its range otherwise false
+ */
+ public boolean isValidFractionDigit() {
+ return fractionDigit >= MIN_FRACTION_DIGIT_RANGE &&
+ fractionDigit <= MAX_FRACTION_DIGIT_RANGE;
+ }
+
+
+ /**
+ * Checks whether value is in correct decimal64 value range.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ public void validateDecimal64() throws DataModelException {
+ YangRangeRestriction rangeRestriction =
+ (YangRangeRestriction) getRangeRestrictedExtendedInfo();
+ if (rangeRestriction != null) {
+ // Check whether value is within provided range value
+ ListIterator<YangRangeInterval> rangeListIterator =
+ rangeRestriction.getAscendingRangeIntervals().listIterator();
+
+ boolean isMatched = false;
+ while (rangeListIterator.hasNext()) {
+ YangRangeInterval rangeInterval = rangeListIterator.next();
+ rangeInterval.setCharPosition(getCharPosition());
+ rangeInterval.setLineNumber(getLineNumber());
+ rangeInterval.setFileName(getFileName());
+ BigDecimal startValue = ((YangDecimal64) rangeInterval.getStartValue()).getValue();
+ BigDecimal endValue = ((YangDecimal64) rangeInterval.getEndValue()).getValue();
+ if (value.compareTo(startValue) >= ZERO &&
+ value.compareTo(endValue) <= ZERO) {
+ isMatched = true;
+ break;
+ }
+ }
+ // If range is not matched then throw error
+ if (!isMatched) {
+ throw new DataModelException(getErrorMsg(
+ "YANG file error : decimal64 validation failed.", "decimal64",
+ getLineNumber(), getCharPosition(), getFileName() + "\""));
+ }
+ } else {
+ // Check value is in fraction-digits decimal64 value range
+ if (!FractionDigits.isValueInDecimal64Range(value, getFractionDigit())) {
+ throw new DataModelException(
+ "YANG file error : value is not in decimal64 range.");
+ }
+ }
+ }
+
+ /**
+ * Validate range restriction values based on fraction-digits decimal64 range value.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ public void validateRange() throws DataModelException {
+ YangRangeRestriction rangeRestriction =
+ (YangRangeRestriction) getRangeRestrictedExtendedInfo();
+ if (rangeRestriction == null) {
+ // No need to validate. Range is optional.
+ return;
+ }
+ ListIterator<YangRangeInterval> rangeListIterator =
+ rangeRestriction.getAscendingRangeIntervals().listIterator();
+ while (rangeListIterator.hasNext()) {
+ YangRangeInterval rangeInterval = rangeListIterator.next();
+ rangeInterval.setCharPosition(getCharPosition());
+ rangeInterval.setLineNumber(getLineNumber());
+ rangeInterval.setFileName(getFileName());
+ if (!FractionDigits.isValueInDecimal64Range(
+ ((YangDecimal64) rangeInterval.getStartValue()).getValue(),
+ getFractionDigit())) {
+ throw new DataModelException(getErrorMsg(
+ "YANG file error : decimal64 validation failed.", "decimal64",
+ getLineNumber(), getCharPosition(), getFileName() + "\""));
+ }
+ if (!FractionDigits.isValueInDecimal64Range(
+ ((YangDecimal64) rangeInterval.getEndValue()).getValue(),
+ getFractionDigit())) {
+ throw new DataModelException(getErrorMsg(
+ "YANG file error : decimal64 validation failed.", "decimal64",
+ getLineNumber(), getCharPosition(), getFileName() + "\""));
+ }
+ }
+ }
+
+ @Override
+ public int compareTo(YangDecimal64 o) {
+ return Double.compare(value.doubleValue(), o.value.doubleValue());
+ }
+
+ /**
+ * Returns decimal64 default range restriction based on fraction-digits.
+ * If range restriction is not provided then this default range value will be applicable.
+ *
+ * @return range restriction
+ * @throws DataModelException a violation of data model rules
+ */
+ public YangRangeRestriction getDefaultRangeRestriction() throws DataModelException {
+ YangRangeRestriction refRangeRestriction = new YangRangeRestriction();
+ YangRangeInterval rangeInterval = new YangRangeInterval<>();
+ rangeInterval.setCharPosition(getCharPosition());
+ rangeInterval.setLineNumber(getLineNumber());
+ rangeInterval.setFileName(getFileName());
+ FractionDigits.Range range = FractionDigits.getRange(fractionDigit);
+ rangeInterval.setStartValue(new YangDecimal64(new BigDecimal((range.getMin()))));
+ rangeInterval.setEndValue(new YangDecimal64(new BigDecimal((range.getMax()))));
+ refRangeRestriction.addRangeRestrictionInterval(rangeInterval);
+ return refRangeRestriction;
+ }
+
+ /**
+ * Validates the data on entering the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnEntry() throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+
+ /**
+ * Validates the data on exiting the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnExit() throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangDerivedInfo.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangDerivedInfo.java
new file mode 100644
index 0000000..88adac0
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangDerivedInfo.java
@@ -0,0 +1,684 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+
+import java.io.Serializable;
+
+import static com.google.common.base.Strings.isNullOrEmpty;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.getErrorMsg;
+import static org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus.INTRA_FILE_RESOLVED;
+import static org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus.RESOLVED;
+import static org.onosproject.yang.compiler.datamodel.utils.RestrictionResolver.processLengthRestriction;
+import static org.onosproject.yang.compiler.datamodel.utils.RestrictionResolver.processRangeRestriction;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypeUtils.isOfRangeRestrictedType;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.BINARY;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.DECIMAL64;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.IDENTITYREF;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.LEAFREF;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.STRING;
+
+/**
+ * Represents the derived information.
+ *
+ * @param <T> extended information.
+ */
+public class YangDerivedInfo<T> extends DefaultLocationInfo
+ implements Cloneable, Serializable {
+
+ private static final long serialVersionUID = 806201641L;
+
+ /**
+ * YANG typedef reference.
+ */
+ private YangTypeDef referredTypeDef;
+
+ /**
+ * Resolved additional information about data type after linking, example
+ * restriction info, named values, etc. The extra information is based
+ * on the data type. Based on the data type, the extended info can vary.
+ */
+ private T resolvedExtendedInfo;
+
+ /**
+ * Effective built-in type, required in case type of typedef is again a
+ * derived type. This information is to be added during linking.
+ */
+ private YangDataTypes effectiveBuiltInType;
+
+ /**
+ * Length restriction string to temporary store the length restriction when the type
+ * is derived.
+ */
+ private String lengthRestrictionString;
+
+ /**
+ * Range restriction string to temporary store the range restriction when the type
+ * is derived.
+ */
+ private String rangeRestrictionString;
+
+ /**
+ * Pattern restriction string to temporary store the pattern restriction when the type
+ * is derived.
+ */
+ private YangPatternRestriction patternRestriction;
+
+ /**
+ * Returns the referred typedef reference.
+ *
+ * @return referred typedef reference
+ */
+ public YangTypeDef getReferredTypeDef() {
+ return referredTypeDef;
+ }
+
+ /**
+ * Sets the referred typedef reference.
+ *
+ * @param referredTypeDef referred typedef reference
+ */
+ public void setReferredTypeDef(YangTypeDef referredTypeDef) {
+ this.referredTypeDef = referredTypeDef;
+ }
+
+ /**
+ * Returns resolved extended information after successful linking.
+ *
+ * @return resolved extended information
+ */
+ public T getResolvedExtendedInfo() {
+ return resolvedExtendedInfo;
+ }
+
+ /**
+ * Returns the length restriction string.
+ *
+ * @return the length restriction string
+ */
+ public String getLengthRestrictionString() {
+ return lengthRestrictionString;
+ }
+
+ /**
+ * Sets the length restriction string.
+ *
+ * @param lengthRestrictionString the length restriction string
+ */
+ public void setLengthRestrictionString(String lengthRestrictionString) {
+ this.lengthRestrictionString = lengthRestrictionString;
+ }
+
+ /**
+ * Returns the range restriction string.
+ *
+ * @return the range restriction string
+ */
+ public String getRangeRestrictionString() {
+ return rangeRestrictionString;
+ }
+
+ /**
+ * Sets the range restriction string.
+ *
+ * @param rangeRestrictionString the range restriction string
+ */
+ public void setRangeRestrictionString(String rangeRestrictionString) {
+ this.rangeRestrictionString = rangeRestrictionString;
+ }
+
+ /**
+ * Returns the pattern restriction.
+ *
+ * @return the pattern restriction
+ */
+ public YangPatternRestriction getPatternRestriction() {
+ return patternRestriction;
+ }
+
+ /**
+ * Sets the pattern restriction.
+ *
+ * @param patternRestriction the pattern restriction
+ */
+ public void setPatternRestriction(YangPatternRestriction patternRestriction) {
+ this.patternRestriction = patternRestriction;
+ }
+
+ /**
+ * Returns effective built-in type.
+ *
+ * @return effective built-in type
+ */
+ public YangDataTypes getEffectiveBuiltInType() {
+ return effectiveBuiltInType;
+ }
+
+ /**
+ * Resolves the type derived info, by obtaining the effective built-in type
+ * and resolving the restrictions.
+ *
+ * @return resolution status
+ * @throws DataModelException a violation in data mode rule
+ */
+ public ResolvableStatus resolve() throws DataModelException {
+ YangType<?> baseType = getReferredTypeDef().getTypeDefBaseType();
+ YangDataTypes type = baseType.getDataType();
+ T extended = (T) baseType.getDataTypeExtendedInfo();
+
+ /*
+ * Checks the data type of the referred typedef, if it's derived, obtain
+ * effective built-in type and restrictions from it's derived info,
+ * otherwise take from the base type of type itself.
+ */
+ if (type == DERIVED) {
+ ResolvableStatus resolvableStatus = resolveTypeDerivedInfo(baseType);
+ if (resolvableStatus != null) {
+ return resolvableStatus;
+ }
+ } else if (type == LEAFREF || type == IDENTITYREF) {
+ effectiveBuiltInType = type;
+ return RESOLVED;
+ } else {
+ effectiveBuiltInType = type;
+ /*
+ * Check whether the effective built-in type can have range
+ * restrictions, if yes call resolution of range.
+ */
+ if (isOfRangeRestrictedType(effectiveBuiltInType)) {
+ return getResolveStatusForRangeRestrictionType(extended);
+ } else if (effectiveBuiltInType == STRING) {
+ return getResolveStatusForString(extended);
+ } else if (effectiveBuiltInType == BINARY) {
+ return getResolveStatusForBinary(extended);
+ } else if (effectiveBuiltInType == DECIMAL64) {
+ return getResolveStatusForDecimal64(extended);
+ }
+ }
+
+ /*
+ * Check if the data type is the one which can't be restricted, in this
+ * case check whether no self restrictions should be present.
+ */
+ if (effectiveBuiltInType.isNonRestrictedType()) {
+ if (isNullOrEmpty(getLengthRestrictionString()) &&
+ isNullOrEmpty(getRangeRestrictionString()) &&
+ getPatternRestriction() == null) {
+ return RESOLVED;
+ } else {
+ throw new DataModelException(getErrorMsg(
+ "YANG file error: Restrictions can't be applied to a " +
+ "given type ", "type.", getLineNumber(),
+ getCharPosition(), getFileName() + "\""));
+ }
+ }
+ // Throw exception for unsupported types
+ throw new DataModelException(getErrorMsg(
+ "Linker error: Unable to process the derived type. ", "type.",
+ getLineNumber(), getCharPosition(), getFileName() + "\""));
+ }
+
+ //Returns resolve status for range restrictions.
+ private ResolvableStatus getResolveStatusForRangeRestrictionType(T extended)
+ throws DataModelException {
+ if (extended == null) {
+ resolveRangeRestriction(null);
+ /*
+ * Return the resolution status as resolved, if it's not
+ * resolve range/string restriction will throw exception in
+ * previous function.
+ */
+ return RESOLVED;
+ } else {
+ if (!(extended instanceof YangRangeRestriction)) {
+ throwError();
+ }
+ resolveRangeRestriction((YangRangeRestriction) extended);
+ /*
+ * Return the resolution status as resolved, if it's not
+ * resolve range/string restriction will throw exception in
+ * previous function.
+ */
+ return RESOLVED;
+ }
+ }
+
+ //Returns resolve status for string.
+ private ResolvableStatus getResolveStatusForString(T extended)
+ throws DataModelException {
+ if (extended == null) {
+ resolveStringRestriction(null);
+ /*
+ * Return the resolution status as resolved, if it's not
+ * resolve range/string restriction will throw exception in
+ * previous function.
+ */
+ return RESOLVED;
+ } else {
+ if (!(extended instanceof YangStringRestriction)) {
+ throwError();
+ }
+ resolveStringRestriction((YangStringRestriction) extended);
+ /*
+ * Return the resolution status as resolved, if it's not
+ * resolve range/string restriction will throw exception in
+ * previous function.
+ */
+ return RESOLVED;
+ }
+ }
+
+ //Returns resolve status for binary type.
+ private ResolvableStatus getResolveStatusForBinary(T extended)
+ throws DataModelException {
+ if (extended == null) {
+ resolveBinaryRestriction(null);
+ /*
+ * Return the resolution status as resolved, if it's not
+ * resolve length restriction will throw exception in
+ * previous function.
+ */
+ return RESOLVED;
+ } else {
+ if (!(extended instanceof YangRangeRestriction)) {
+ throwError();
+ }
+ resolveBinaryRestriction((YangRangeRestriction) extended);
+ /*
+ * Return the resolution status as resolved, if it's not
+ * resolve length restriction will throw exception in
+ * previous function.
+ */
+ return RESOLVED;
+ }
+ }
+
+ //Returns resolve status for decimal64 type.
+ private ResolvableStatus getResolveStatusForDecimal64(T extended)
+ throws DataModelException {
+ if (extended != null) {
+ if (((YangDecimal64) extended).getRangeRestrictedExtendedInfo() == null) {
+ resolveRangeRestriction(null);
+ /*
+ * Return the resolution status as resolved, if it's not;
+ * resolve range restriction will throw exception in
+ * previous function.
+ */
+ return RESOLVED;
+ } else {
+ if (!(((YangDecimal64) extended)
+ .getRangeRestrictedExtendedInfo() instanceof YangRangeRestriction)) {
+ throwError();
+ }
+ resolveRangeRestriction((YangRangeRestriction) (
+ (YangDecimal64) extended).getRangeRestrictedExtendedInfo());
+ /*
+ * Return the resolution status as resolved, if it's not
+ * resolve range/string restriction will throw exception in
+ * previous function.
+ */
+ return RESOLVED;
+ }
+
+ } else {
+ throw new DataModelException(getErrorMsg(
+ "Linker error: Unable to find type extended info " +
+ "for decimal64.", "type.", getLineNumber(),
+ getCharPosition(), getFileName() + "\""));
+ }
+ }
+
+ private void throwError() throws DataModelException {
+ throw new DataModelException(getErrorMsg(
+ "Linker error: Referred typedef restriction info is of invalid ",
+ "type.", getLineNumber(), getCharPosition(), getFileName() + "\""));
+ }
+
+ /**
+ * Resolves the type derived info, by obtaining the effective built-in type
+ * and resolving the restrictions.
+ *
+ * @param baseType base type of typedef
+ * @return resolution status
+ * @throws DataModelException a violation in data mode rule
+ */
+ private ResolvableStatus resolveTypeDerivedInfo(YangType<?> baseType)
+ throws DataModelException {
+
+ //Check whether the referred typedef is resolved.
+ if (baseType.getResolvableStatus() != INTRA_FILE_RESOLVED &&
+ baseType.getResolvableStatus() != RESOLVED) {
+ throwError();
+ }
+
+ /*
+ * Check if the referred typedef is intra file resolved, if yes sets
+ * current status also to intra file resolved .
+ */
+ if (getReferredTypeDef().getTypeDefBaseType()
+ .getResolvableStatus() == INTRA_FILE_RESOLVED) {
+ return INTRA_FILE_RESOLVED;
+ }
+ effectiveBuiltInType = ((YangDerivedInfo<?>) baseType
+ .getDataTypeExtendedInfo()).getEffectiveBuiltInType();
+ YangDerivedInfo refDerivedInfo = (YangDerivedInfo<?>) baseType.getDataTypeExtendedInfo();
+ T extendedInfo = (T) refDerivedInfo.getResolvedExtendedInfo();
+ /*
+ * Check whether the effective built-in type can have range
+ * restrictions, if yes call resolution of range.
+ */
+ if (isOfRangeRestrictedType(effectiveBuiltInType)) {
+ return getResolveStatusForRangeRestrictionType(extendedInfo);
+ } else if (effectiveBuiltInType == STRING) {
+ return getResolveStatusForString(extendedInfo);
+ } else if (effectiveBuiltInType == BINARY) {
+ return getResolveStatusForBinary(extendedInfo);
+ } else if (effectiveBuiltInType == DECIMAL64) {
+ if (extendedInfo == null) {
+ resolveRangeRestriction(null);
+ /*
+ * Return the resolution status as resolved, if it's not;
+ * resolve range restriction will throw exception in
+ * previous function.
+ */
+ return RESOLVED;
+ } else {
+ if (!(extendedInfo instanceof YangRangeRestriction)) {
+ throwError();
+ }
+ resolveRangeRestriction((YangRangeRestriction) extendedInfo);
+ /*
+ * Return the resolution status as resolved, if it's not
+ * resolve range/string restriction will throw exception in
+ * previous function.
+ */
+ return RESOLVED;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Resolves the string restrictions.
+ *
+ * @param refSr referred string restriction of typedef
+ * @throws DataModelException a violation in data model rule
+ */
+ private void resolveStringRestriction(YangStringRestriction refSr)
+ throws DataModelException {
+ YangStringRestriction curSr = null;
+ YangRangeRestriction refRr = null;
+ YangPatternRestriction refPr = null;
+
+ /*
+ * Check that range restriction should be null when built-in type is
+ * string.
+ */
+ if (!isNullOrEmpty(getRangeRestrictionString())) {
+ throw new DataModelException(getErrorMsg(
+ "YANG file error: Range restriction should't be present for" +
+ " string data type.", ".", getLineNumber(),
+ getCharPosition(), getFileName()));
+ }
+
+ /*
+ * If referred restriction and self restriction both are null, no
+ * resolution is required.
+ */
+ if (refSr == null && isNullOrEmpty(getLengthRestrictionString()) &&
+ getPatternRestriction() == null) {
+ return;
+ }
+
+ /*
+ * If referred string restriction is not null, take value of length and
+ * pattern restriction and assign.
+ */
+ if (refSr != null) {
+ refRr = refSr.getLengthRestriction();
+ refPr = refSr.getPatternRestriction();
+ }
+
+ YangRangeRestriction lr = resolveLengthRestriction(refRr);
+ YangPatternRestriction pr = resolvePatternRestriction(refPr);
+
+ /*
+ * Check if either of length or pattern restriction is present, if yes
+ * create string restriction and assign value.
+ */
+ if (lr != null || pr != null) {
+ curSr = new YangStringRestriction();
+ curSr.setCharPosition(getCharPosition());
+ curSr.setFileName(getFileName());
+ curSr.setLineNumber(getLineNumber());
+ curSr.setLengthRestriction(lr);
+ curSr.setPatternRestriction(pr);
+ }
+ resolvedExtendedInfo = (T) curSr;
+ }
+
+ /**
+ * Resolves the binary restrictions.
+ *
+ * @param refLr referred length restriction of typedef
+ * @throws DataModelException a violation in data model rule
+ */
+ private void resolveBinaryRestriction(YangRangeRestriction refLr)
+ throws DataModelException {
+
+ if (rangeRestrictionString != null || patternRestriction != null) {
+ throw new DataModelException(getErrorMsg(
+ "YANG file error: for binary range restriction or pattern " +
+ "restriction is not allowed.", "type.",
+ getLineNumber(), getCharPosition(), getFileName()));
+ }
+
+ // Get the final resolved length restriction
+ YangRangeRestriction lr = resolveLengthRestriction(refLr);
+ // Set the length restriction.
+ resolvedExtendedInfo = (T) lr;
+ }
+
+ /**
+ * Resolves pattern restriction.
+ *
+ * @param refPr referred pattern restriction of typedef
+ * @return resolved pattern restriction
+ */
+ private YangPatternRestriction resolvePatternRestriction(YangPatternRestriction refPr) {
+ /*
+ * If referred restriction and self restriction both are null, no
+ * resolution is required.
+ */
+ if (refPr == null && getPatternRestriction() == null) {
+ return null;
+ }
+
+ /*
+ * If self restriction is null, and referred restriction is present
+ * shallow copy the referred to self.
+ */
+ if (getPatternRestriction() == null) {
+ return refPr;
+ }
+
+ /*
+ * If referred restriction is null, and self restriction is present
+ * carry out self resolution.
+ */
+ if (refPr == null) {
+ return getPatternRestriction();
+ }
+
+ /*
+ * Get patterns of referred type and add it to current pattern
+ * restrictions.
+ */
+ for (String pattern : refPr.getPatternList()) {
+ getPatternRestriction().addPattern(pattern);
+ }
+ return getPatternRestriction();
+ }
+
+ /**
+ * Resolves the length restrictions.
+ *
+ * @param refLenRestriction referred length restriction of typedef
+ * @return resolved length restriction
+ * @throws DataModelException a violation in data model rule
+ */
+ private YangRangeRestriction resolveLengthRestriction(
+ YangRangeRestriction refLenRestriction) throws DataModelException {
+
+ /*
+ * If referred restriction and self restriction both are null, no
+ * resolution is required.
+ */
+ if (refLenRestriction == null && isNullOrEmpty(getLengthRestrictionString())) {
+ return null;
+ }
+
+ /*
+ * If self restriction is null, and referred restriction is present
+ * shallow copy the referred to self.
+ */
+ if (isNullOrEmpty(getLengthRestrictionString())) {
+ return refLenRestriction;
+ }
+
+ /*
+ * If referred restriction is null, and self restriction is present
+ * carry out self resolution.
+ */
+ if (refLenRestriction == null) {
+ return processLengthRestriction(
+ null, getLineNumber(), getCharPosition(), false,
+ getLengthRestrictionString(), getFileName());
+ }
+
+ /*
+ * Carry out self resolution based with obtained effective built-in type
+ * and MIN/MAX values as per the referred typedef's values.
+ */
+ YangRangeRestriction curLengthRestriction =
+ processLengthRestriction(refLenRestriction, getLineNumber(),
+ getCharPosition(), true,
+ getLengthRestrictionString(), getFileName());
+
+ // Resolve the range with referred typedef's restriction.
+ resolveLengthAndRangeRestriction(refLenRestriction, curLengthRestriction);
+ return curLengthRestriction;
+ }
+
+ /**
+ * Resolves the length/range self and referred restriction, to check whether
+ * the all the range interval in self restriction is stricter than the
+ * referred typedef's restriction.
+ *
+ * @param refRestriction referred restriction
+ * @param curRestriction self restriction
+ */
+ private void resolveLengthAndRangeRestriction(YangRangeRestriction refRestriction,
+ YangRangeRestriction curRestriction)
+ throws DataModelException {
+ for (Object curInterval : curRestriction.getAscendingRangeIntervals()) {
+ if (!(curInterval instanceof YangRangeInterval)) {
+ throw new DataModelException(getErrorMsg(
+ "Linker error: Current range intervals not processed correctly.",
+ "type.", getLineNumber(), getCharPosition(), getFileName()));
+ }
+ try {
+ refRestriction.isValidInterval((YangRangeInterval)
+ curInterval, getFileName());
+ } catch (DataModelException e) {
+ throw new DataModelException(getErrorMsg(
+ e.getMessage(), "type.", getLineNumber(), getCharPosition(),
+ getFileName()));
+ }
+ }
+ }
+
+ /**
+ * Resolves the range restrictions.
+ *
+ * @param refRangeRestriction referred range restriction of typedef
+ * @throws DataModelException a violation in data model rule
+ */
+ private void resolveRangeRestriction(YangRangeRestriction refRangeRestriction)
+ throws DataModelException {
+
+ /*
+ * Check that string restriction should be null when built-in type is of
+ * range type.
+ */
+ if (!isNullOrEmpty(getLengthRestrictionString())
+ || getPatternRestriction() != null) {
+ throw new DataModelException(getErrorMsg(
+ "YANG file error: Length/Pattern restriction should't be present" +
+ " for int/uint/decimal data type.", "type.", getLineNumber(),
+ getCharPosition(), getFileName()));
+ }
+
+ /*
+ * If referred restriction and self restriction both are null, no
+ * resolution is required.
+ */
+ if (refRangeRestriction == null && isNullOrEmpty(getRangeRestrictionString())) {
+ return;
+ }
+
+ /*
+ * If self restriction is null, and referred restriction is present
+ * shallow copy the referred to self.
+ */
+ if (isNullOrEmpty(getRangeRestrictionString())) {
+ resolvedExtendedInfo = (T) refRangeRestriction;
+ return;
+ }
+
+ /*
+ * If referred restriction is null, and self restriction is present
+ * carry out self resolution.
+ */
+ if (refRangeRestriction == null) {
+ YangRangeRestriction curRangeRestriction =
+ processRangeRestriction(null, getLineNumber(),
+ getCharPosition(), false, getRangeRestrictionString(),
+ effectiveBuiltInType, getFileName());
+ resolvedExtendedInfo = (T) curRangeRestriction;
+ return;
+ }
+
+ /*
+ * Carry out self resolution based with obtained effective built-in type
+ * and MIN/MAX values as per the referred typedef's values.
+ */
+ YangRangeRestriction curRangeRestriction =
+ processRangeRestriction(refRangeRestriction, getLineNumber(),
+ getCharPosition(), true,
+ getRangeRestrictionString(),
+ effectiveBuiltInType, getFileName());
+
+ // Resolve the range with referred typedef's restriction.
+ resolveLengthAndRangeRestriction(refRangeRestriction, curRangeRestriction);
+ resolvedExtendedInfo = (T) curRangeRestriction;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangDesc.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangDesc.java
new file mode 100644
index 0000000..7bfbf38
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangDesc.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+/**
+ * Abstraction of textual description for a YANG entity. Abstracted to unify the
+ * parsing and translator processing of description.
+ */
+public interface YangDesc {
+
+ /**
+ * Returns the description of YANG entity.
+ *
+ * @return the description of YANG entity.
+ */
+ String getDescription();
+
+ /**
+ * Set the description of YANG entity.
+ *
+ * @param description set the description of YANG entity.
+ */
+ void setDescription(String description);
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangEntityToResolveInfo.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangEntityToResolveInfo.java
new file mode 100644
index 0000000..f4efa8b
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangEntityToResolveInfo.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+/**
+ * Abstraction of information about entity being resolved.
+ *
+ * @param <T> type of entity being resolved, uses / grouping
+ */
+public interface YangEntityToResolveInfo<T> {
+
+ /**
+ * Retrieves the entity to be resolved.
+ *
+ * @return entity to be resolved
+ */
+ T getEntityToResolve();
+
+ /**
+ * Sets entity to be resolved.
+ *
+ * @param entityToResolve entity to be resolved
+ */
+ void setEntityToResolve(T entityToResolve);
+
+ /**
+ * Retrieves the parent node which contains the entity to be resolved.
+ *
+ * @return parent node which contains the entity to be resolved
+ */
+ YangNode getHolderOfEntityToResolve();
+
+ /**
+ * Sets parent node which contains the entity to be resolved.
+ *
+ * @param holderOfEntityToResolve parent node which contains the entity to
+ * be resolved
+ */
+ void setHolderOfEntityToResolve(YangNode holderOfEntityToResolve);
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangEntityToResolveInfoImpl.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangEntityToResolveInfoImpl.java
new file mode 100644
index 0000000..14cced0
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangEntityToResolveInfoImpl.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel;
+
+import java.io.Serializable;
+
+/**
+ * Represents implementation of information about entity being resolved.
+ *
+ * @param <T> type of entity being resolved, uses / grouping
+ */
+public class YangEntityToResolveInfoImpl<T> extends DefaultLocationInfo
+ implements YangEntityToResolveInfo<T>, Serializable {
+
+ private static final long serialVersionUID = 806201659L;
+
+ /**
+ * Parsable node for which resolution is to be performed.
+ */
+ private T entityToResolve;
+
+ /**
+ * Holder of the YANG construct for which resolution has to be carried out.
+ */
+ private YangNode holderOfEntityToResolve;
+
+ @Override
+ public T getEntityToResolve() {
+ return entityToResolve;
+ }
+
+ @Override
+ public void setEntityToResolve(T entityToResolve) {
+ this.entityToResolve = entityToResolve;
+ }
+
+ @Override
+ public YangNode getHolderOfEntityToResolve() {
+ return holderOfEntityToResolve;
+ }
+
+ @Override
+ public void setHolderOfEntityToResolve(YangNode holderOfEntityToResolve) {
+ this.holderOfEntityToResolve = holderOfEntityToResolve;
+ }
+
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangEnum.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangEnum.java
new file mode 100644
index 0000000..cc8da44
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangEnum.java
@@ -0,0 +1,243 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.ENUM_DATA;
+
+/*-
+ * The "ENUM" statement, which is a sub-statement to the "type"
+ * statement, MUST be present if the type is "enumeration". It is
+ * repeatedly used to specify each assigned name of an enumeration type.
+ * It takes as an argument a string which is the assigned name. The
+ * string MUST NOT be empty and MUST NOT have any leading or trailing
+ * whitespace characters. The use of Unicode control codes SHOULD be
+ * avoided.
+ *
+ * The statement is optionally followed by a block of sub-statements that
+ * holds detailed ENUM information.
+ * All assigned names in an enumeration MUST be unique.
+ *
+ * The ENUM's sub-statements
+ *
+ * +--------------+---------+-------------+------------------+
+ * | substatement | section | cardinality |data model mapping|
+ * +--------------+---------+-------------+------------------+
+ * | description | 7.19.3 | 0..1 | - string |
+ * | reference | 7.19.4 | 0..1 | - string |
+ * | status | 7.19.2 | 0..1 | - YangStatus |
+ * | value | 9.6.4.2 | 0..1 | - int |
+ * +--------------+---------+-------------+------------------+
+ */
+
+/**
+ * Represents the ENUM data type information.
+ */
+public class YangEnum extends DefaultLocationInfo implements YangCommonInfo, Parsable, Comparable<YangEnum>,
+ Serializable {
+
+ private static final long serialVersionUID = 806201643L;
+
+ /**
+ * Named value for the ENUM.
+ */
+ private String namedValue;
+
+ /**
+ * Description of the ENUM value.
+ */
+ private String description;
+
+ /**
+ * Reference info of the ENUM value.
+ */
+ private String reference;
+
+ /**
+ * Status of the ENUM value.
+ */
+ private YangStatusType status;
+
+ /**
+ * Value of ENUM.
+ */
+ private int value;
+
+ /**
+ * Create a YANG ENUM.
+ */
+ public YangEnum() {
+
+ }
+
+ /**
+ * Returns the named value.
+ *
+ * @return the named value
+ */
+ public String getNamedValue() {
+ return namedValue;
+ }
+
+ /**
+ * Sets the named value.
+ *
+ * @param namedValue the named value to set
+ */
+ public void setNamedValue(String namedValue) {
+ this.namedValue = namedValue;
+ }
+
+ /**
+ * Returns the description.
+ *
+ * @return the description
+ */
+ @Override
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * Sets the description.
+ *
+ * @param description set the description
+ */
+ @Override
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ /**
+ * Returns the textual reference.
+ *
+ * @return the reference
+ */
+ @Override
+ public String getReference() {
+ return reference;
+ }
+
+ /**
+ * Sets the textual reference.
+ *
+ * @param reference the reference to set
+ */
+ @Override
+ public void setReference(String reference) {
+ this.reference = reference;
+ }
+
+ /**
+ * Returns the status.
+ *
+ * @return the status
+ */
+ @Override
+ public YangStatusType getStatus() {
+ return status;
+ }
+
+ /**
+ * Sets the status.
+ *
+ * @param status the status to set
+ */
+ @Override
+ public void setStatus(YangStatusType status) {
+ this.status = status;
+ }
+
+ /**
+ * Returns the value.
+ *
+ * @return the value
+ */
+ public int getValue() {
+ return value;
+ }
+
+ /**
+ * Sets the value.
+ *
+ * @param value the value to set
+ */
+ public void setValue(int value) {
+ this.value = value;
+ }
+
+ /**
+ * Returns the type of the data.
+ *
+ * @return ParsedDataType returns ENUM_DATA
+ */
+ @Override
+ public YangConstructType getYangConstructType() {
+ return ENUM_DATA;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj instanceof YangEnum) {
+ final YangEnum other = (YangEnum) obj;
+ return Objects.equals(namedValue, other.namedValue);
+ }
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(namedValue);
+ }
+
+ /**
+ * Validates the data on entering the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnEntry() throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+
+ /**
+ * Validates the data on exiting the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnExit() throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+
+ @Override
+ public int compareTo(YangEnum otherEnum) {
+ if (namedValue.equals(otherEnum.getNamedValue())) {
+ return 0;
+ }
+ return new Integer(value).compareTo(otherEnum.getValue());
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangEnumeration.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangEnumeration.java
new file mode 100644
index 0000000..37e747c
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangEnumeration.java
@@ -0,0 +1,158 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import static org.onosproject.yang.compiler.datamodel.YangSchemaNodeType.YANG_NON_DATA_NODE;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.ENUMERATION_DATA;
+
+/*
+ * The enumeration built-in type represents values from a set of
+ * assigned names.
+ */
+
+/**
+ * Represents the enumeration data type information.
+ */
+public abstract class YangEnumeration
+ extends YangNode
+ implements Parsable, CollisionDetector {
+
+ private static final long serialVersionUID = 806201606L;
+
+ // Enumeration info set.
+ private SortedSet<YangEnum> enumSet;
+
+ /**
+ * Creates an enumeration object.
+ */
+ public YangEnumeration() {
+ super(YangNodeType.ENUMERATION_NODE, null);
+ setEnumSet(new TreeSet<>());
+ }
+
+ @Override
+ public void addToChildSchemaMap(YangSchemaNodeIdentifier schemaNodeIdentifier,
+ YangSchemaNodeContextInfo yangSchemaNodeContextInfo)
+ throws DataModelException {
+ // Do nothing.
+ }
+
+ @Override
+ public void incrementMandatoryChildCount() {
+ // TODO
+ }
+
+ @Override
+ public void addToDefaultChildMap(YangSchemaNodeIdentifier yangSchemaNodeIdentifier, YangSchemaNode yangSchemaNode) {
+ // TODO
+ }
+
+ @Override
+ public YangSchemaNodeType getYangSchemaNodeType() {
+ return YANG_NON_DATA_NODE;
+ }
+
+ /**
+ * Returns the ENUM set.
+ *
+ * @return the ENUM set
+ */
+ public SortedSet<YangEnum> getEnumSet() {
+ return enumSet;
+ }
+
+ /**
+ * Sets the ENUM set.
+ *
+ * @param enumSet the ENUM set to set
+ */
+ private void setEnumSet(SortedSet<YangEnum> enumSet) {
+ this.enumSet = enumSet;
+ }
+
+ /**
+ * Adds ENUM information.
+ *
+ * @param enumInfo the ENUM information to be added
+ * @throws DataModelException due to violation in data model rules
+ */
+ public void addEnumInfo(YangEnum enumInfo)
+ throws DataModelException {
+ if (!getEnumSet().add(enumInfo)) {
+ throw new DataModelException("YANG ENUM already exists " +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition() +
+ " in " + getFileName() + "\"");
+ }
+ }
+
+ /**
+ * Returns the type of the data.
+ *
+ * @return returns ENUMERATION_DATA
+ */
+ @Override
+ public YangConstructType getYangConstructType() {
+ return ENUMERATION_DATA;
+ }
+
+ /**
+ * Validates the data on entering the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnEntry()
+ throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+
+ /**
+ * Validates the data on exiting the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnExit()
+ throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+
+ @Override
+ public void detectCollidingChild(String identifierName, YangConstructType dataType)
+ throws DataModelException {
+ /*
+ Do nothing, since it is not part of the schema tree, it is only type of an existing node in schema tree.
+ */
+ }
+
+ @Override
+ public void detectSelfCollision(String identifierName, YangConstructType dataType)
+ throws DataModelException {
+ /*
+ Do nothing, since it is not part of the schema tree, it is only type of an existing node in schema tree.
+ */
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangExtension.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangExtension.java
new file mode 100644
index 0000000..b6e469e
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangExtension.java
@@ -0,0 +1,220 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import java.io.Serializable;
+
+/*-
+ * Reference RFC 6020.
+ *
+ * The "extension" statement allows the definition of new statements
+ * within the YANG language. This new statement definition can be
+ * imported and used by other modules.
+ *
+ * The statement's argument is an identifier that is the new keyword for
+ * the extension and must be followed by a block of sub-statements that
+ * holds detailed extension information. The purpose of the "extension"
+ * statement is to define a keyword, so that it can be imported and used
+ * by other modules.
+ *
+ * The extension can be used like a normal YANG statement, with the
+ * statement name followed by an argument if one is defined by the
+ * extension, and an optional block of sub-statements. The statement's
+ * name is created by combining the prefix of the module in which the
+ * extension was defined, a colon (":"), and the extension's keyword,
+ * with no interleaving whitespace. The sub-statements of an extension
+ * are defined by the extension, using some mechanism outside the scope
+ * of this specification. Syntactically, the sub-statements MUST be YANG
+ * statements, or also defined using "extension" statements.
+ *
+ * The extension's Sub-statements
+ *
+ * +--------------+---------+-------------+------------------+
+ * | substatement | section | cardinality |data model mapping|
+ * +--------------+---------+-------------+------------------+
+ * | description | 7.19.3 | 0..1 | -string |
+ * | reference | 7.19.4 | 0..1 | -string |
+ * | status | 7.19.2 | 0..1 | -YangStatus |
+ * | argument | 7.17.2 | 0..1 | -string |
+ * +--------------+---------+-------------+------------------+
+ */
+
+/**
+ * Represents data model node to maintain information defined in YANG extension.
+ */
+public class YangExtension extends DefaultLocationInfo
+ implements YangCommonInfo, Serializable, Parsable {
+
+ private static final long serialVersionUID = 806201605L;
+
+ /**
+ * Name of the extension.
+ */
+ private String name;
+
+ /**
+ * Name of the argument.
+ */
+ private String argumentName;
+
+ /**
+ * Description of extension.
+ */
+ private String description;
+
+ /**
+ * Reference of the extension.
+ */
+ private String reference;
+
+ /**
+ * Status of the extension.
+ */
+ private YangStatusType status = YangStatusType.CURRENT;
+
+ /**
+ * Returns the YANG name of extension.
+ *
+ * @return the name of extension as defined in YANG file
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * Sets the YANG name of extension.
+ *
+ * @param name the name of extension as defined in YANG file
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ /**
+ * Returns the YANG argument name of extension.
+ *
+ * @return the name of argument as defined in YANG file
+ */
+ public String getArgumentName() {
+ return argumentName;
+ }
+
+ /**
+ * Sets the YANG argument name of extension.
+ *
+ * @param argumentName the name of argument as defined in YANG file
+ */
+ public void setArgumentName(String argumentName) {
+ this.argumentName = argumentName;
+ }
+
+ /**
+ * Returns the description.
+ *
+ * @return the description
+ */
+ @Override
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * Sets the description.
+ *
+ * @param description set the description
+ */
+ @Override
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ /**
+ * Returns the textual reference.
+ *
+ * @return the reference
+ */
+ @Override
+ public String getReference() {
+ return reference;
+ }
+
+ /**
+ * Sets the textual reference.
+ *
+ * @param reference the reference to set
+ */
+ @Override
+ public void setReference(String reference) {
+ this.reference = reference;
+ }
+
+ /**
+ * Returns the status.
+ *
+ * @return the status
+ */
+ @Override
+ public YangStatusType getStatus() {
+ return status;
+ }
+
+ /**
+ * Sets the status.
+ *
+ * @param status the status to set
+ */
+ @Override
+ public void setStatus(YangStatusType status) {
+ this.status = status;
+ }
+
+ /**
+ * Returns the type of the data.
+ *
+ * @return returns EXTENSION_DATA
+ */
+ @Override
+ public YangConstructType getYangConstructType() {
+ return YangConstructType.EXTENSION_DATA;
+ }
+
+ /**
+ * Validates the data on entering the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnEntry()
+ throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+
+ /**
+ * Validates the data on exiting the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnExit()
+ throws DataModelException {
+ // TODO : to be implemented
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangFeature.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangFeature.java
new file mode 100644
index 0000000..76a3515
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangFeature.java
@@ -0,0 +1,158 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import java.io.Serializable;
+import java.util.LinkedList;
+import java.util.List;
+
+/*
+ * Reference RFC 6020.
+ *
+ * The "feature" statement is used to define a mechanism by which
+ * portions of the schema are marked as conditional. A feature name is
+ * defined that can later be referenced using the "if-feature" statement.
+ * Schema nodes tagged with a feature are ignored by the device unless
+ * the device supports the given feature. This allows portions of the
+ * YANG module to be conditional based on conditions on the device.
+ * The model can represent the abilities of the device within the model,
+ * giving a richer model that allows for differing device abilities and roles.
+ *
+ * The argument to the "feature" statement is the name of the new
+ * feature, and follows the rules for identifiers. This name is used by the
+ * "if-feature" statement to tie the schema nodes to the feature.
+ *
+ * The feature's Substatements
+ *
+ * +--------------+---------+-------------+------------------+
+ * | substatement | section | cardinality |data model mapping|
+ * +--------------+---------+-------------+------------------+
+ * | description | 7.19.3 | 0..1 | -string |
+ * | if-feature | 7.18.2 | 0..n | -YangIfFeature |
+ * | reference | 7.19.4 | 0..1 | -string |
+ * | status | 7.19.2 | 0..1 | -YangStatus |
+ * +--------------+---------+-------------+------------------+
+ */
+
+/**
+ * Represents data model node to maintain information defined in YANG feature.
+ */
+public class YangFeature extends DefaultLocationInfo
+ implements YangCommonInfo, Parsable, YangIfFeatureHolder, Serializable {
+
+ private static final long serialVersionUID = 806201635L;
+
+ /**
+ * Name of the feature.
+ */
+ private String name;
+
+ /**
+ * Description of feature.
+ */
+ private String description;
+
+ /**
+ * Reference of the feature.
+ */
+ private String reference;
+
+ /**
+ * Status of feature.
+ */
+ private YangStatusType statusType;
+
+ /**
+ * List of if-feature.
+ */
+ private List<YangIfFeature> ifFeatureList;
+
+ @Override
+ public String getDescription() {
+ return description;
+ }
+
+ @Override
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ @Override
+ public String getReference() {
+ return reference;
+ }
+
+ @Override
+ public void setReference(String reference) {
+ this.reference = reference;
+ }
+
+ @Override
+ public YangStatusType getStatus() {
+ return statusType;
+ }
+
+ @Override
+ public void setStatus(YangStatusType status) {
+ this.statusType = status;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public YangConstructType getYangConstructType() {
+ return YangConstructType.FEATURE_DATA;
+ }
+
+ @Override
+ public void validateDataOnEntry() throws DataModelException {
+ //TODO : To be implemented
+ }
+
+ @Override
+ public void validateDataOnExit() throws DataModelException {
+ //TODO : To be implemented
+ }
+
+ @Override
+ public List<YangIfFeature> getIfFeatureList() {
+ return ifFeatureList;
+ }
+
+ @Override
+ public void addIfFeatureList(YangIfFeature ifFeature) {
+ if (getIfFeatureList() == null) {
+ setIfFeatureList(new LinkedList<>());
+ }
+ getIfFeatureList().add(ifFeature);
+ }
+
+ @Override
+ public void setIfFeatureList(List<YangIfFeature> ifFeatureList) {
+ this.ifFeatureList = ifFeatureList;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangFeatureHolder.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangFeatureHolder.java
new file mode 100644
index 0000000..d6f588d
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangFeatureHolder.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import java.util.List;
+
+/**
+ * Abstraction of feature entity. It is used to abstract the data holders of feature.
+ */
+public interface YangFeatureHolder {
+
+ /**
+ * Returns the list of feature from data holder like container / list.
+ *
+ * @return the list of feature
+ */
+ List<YangFeature> getFeatureList();
+
+ /**
+ * Adds feature in feature list.
+ *
+ * @param feature the feature to be added
+ */
+ void addFeatureList(YangFeature feature);
+
+ /**
+ * Sets the list of feature.
+ *
+ * @param listOfFeature the list of feature to set
+ */
+ void setListOfFeature(List<YangFeature> listOfFeature);
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangGrouping.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangGrouping.java
new file mode 100644
index 0000000..da87a1d
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangGrouping.java
@@ -0,0 +1,367 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import static java.util.Collections.unmodifiableList;
+import static org.onosproject.yang.compiler.datamodel.YangNodeType.GROUPING_NODE;
+import static org.onosproject.yang.compiler.datamodel.YangSchemaNodeType.YANG_NON_DATA_NODE;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.COLLISION_DETECTION;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.GROUPING;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.getErrorMsgCollision;
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.GROUPING_DATA;
+
+/*-
+ * Reference RFC 6020.
+ *
+ * The "grouping" statement is used to define a reusable block of nodes,
+ * which may be used locally in the module, in modules that include it,
+ * and by other modules that import from it. It takes one argument,
+ * which is an identifier, followed by a block of sub-statements that
+ * holds detailed grouping information.
+ *
+ * The "grouping" statement is not a data definition statement and, as
+ * such, does not define any nodes in the schema tree.
+ *
+ * A grouping is like a "structure" or a "record" in conventional
+ * programming languages.
+ * Once a grouping is defined, it can be referenced in a "uses"
+ * statement. A grouping MUST NOT reference itself,
+ * neither directly nor indirectly through a chain of other groupings.
+ *
+ * If the grouping is defined at the top level of a YANG module or
+ * submodule, the grouping's identifier MUST be unique within the
+ * module.
+ *
+ * A grouping is more than just a mechanism for textual substitution,
+ * but defines a collection of nodes. Identifiers appearing inside the
+ * grouping are resolved relative to the scope in which the grouping is
+ * defined, not where it is used. Prefix mappings, type names, grouping
+ * names, and extension usage are evaluated in the hierarchy where the
+ * "grouping" statement appears. For extensions, this means that
+ * extensions are applied to the grouping node, not the uses node.
+ *
+ * The grouping's sub-statements
+ *
+ * +--------------+---------+-------------+------------------+
+ * | substatement | section | cardinality |data model mapping|
+ * +--------------+---------+-------------+------------------+
+ * | anyxml | 7.10 | 0..n |-not supported |
+ * | choice | 7.9 | 0..n |-child nodes |
+ * | container | 7.5 | 0..n |-child nodes |
+ * | description | 7.19.3 | 0..1 |-string |
+ * | grouping | 7.11 | 0..n |-child nodes |
+ * | leaf | 7.6 | 0..n |-YangLeaf |
+ * | leaf-list | 7.7 | 0..n |-YangLeafList |
+ * | list | 7.8 | 0..n |-child nodes |
+ * | reference | 7.19.4 | 0..1 |-string |
+ * | status | 7.19.2 | 0..1 |-YangStatus |
+ * | typedef | 7.3 | 0..n |-child nodes |
+ * | uses | 7.12 | 0..n |-child nodes |
+ * +--------------+---------+-------------+------------------+
+ */
+
+/**
+ * Represents data model node to maintain information defined in YANG grouping.
+ */
+public abstract class YangGrouping
+ extends YangNode
+ implements YangLeavesHolder, YangCommonInfo, Parsable, CollisionDetector,
+ YangTranslatorOperatorNode {
+
+ private static final long serialVersionUID = 806201607L;
+
+ /**
+ * Description.
+ */
+ private String description;
+
+ /**
+ * List of leaves.
+ */
+ private List<YangLeaf> listOfLeaf;
+
+ /**
+ * List of leaf lists.
+ */
+ private List<YangLeafList> listOfLeafList;
+
+ /**
+ * Reference of the module.
+ */
+ private String reference;
+
+ /**
+ * Status of the node.
+ */
+ private YangStatusType status;
+
+ /**
+ * Grouping depth.
+ */
+ private int groupingDepth;
+
+ /**
+ * Creates the grouping node.
+ */
+ public YangGrouping() {
+ super(GROUPING_NODE, null);
+ listOfLeaf = new LinkedList<>();
+ listOfLeafList = new LinkedList<>();
+ }
+
+ @Override
+ public void addToChildSchemaMap(YangSchemaNodeIdentifier id,
+ YangSchemaNodeContextInfo context)
+ throws DataModelException {
+ // Do nothing, to be handled during linking.
+ }
+
+ @Override
+ public void incrementMandatoryChildCount() {
+ // Do nothing, to be handled during linking.
+ }
+
+ @Override
+ public void addToDefaultChildMap(YangSchemaNodeIdentifier id,
+ YangSchemaNode node) {
+ // Do nothing, to be handled during linking.
+ }
+
+ @Override
+ public YangSchemaNodeType getYangSchemaNodeType() {
+ return YANG_NON_DATA_NODE;
+ }
+
+ /**
+ * Returns the description.
+ *
+ * @return the description
+ */
+ @Override
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * Sets the description.
+ *
+ * @param description set the description
+ */
+ @Override
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ /**
+ * Returns the list of leaves.
+ *
+ * @return the list of leaves
+ */
+ @Override
+ public List<YangLeaf> getListOfLeaf() {
+ return unmodifiableList(listOfLeaf);
+ }
+
+ /**
+ * Sets the list of leaves.
+ *
+ * @param leafsList the list of leaf to set
+ */
+ @Override
+ public void setListOfLeaf(List<YangLeaf> leafsList) {
+ listOfLeaf = leafsList;
+ }
+
+ /**
+ * Adds a leaf.
+ *
+ * @param leaf the leaf to be added
+ */
+ @Override
+ public void addLeaf(YangLeaf leaf) {
+ listOfLeaf.add(leaf);
+ }
+
+ /**
+ * Returns the list of leaf-list.
+ *
+ * @return the list of leaf-list
+ */
+ @Override
+ public List<YangLeafList> getListOfLeafList() {
+ return unmodifiableList(listOfLeafList);
+ }
+
+ /**
+ * Sets the list of leaf-list.
+ *
+ * @param listOfLeafList the list of leaf-list to set
+ */
+ @Override
+ public void setListOfLeafList(List<YangLeafList> listOfLeafList) {
+ this.listOfLeafList = listOfLeafList;
+ }
+
+ /**
+ * Adds a leaf-list.
+ *
+ * @param leafList the leaf-list to be added
+ */
+ @Override
+ public void addLeafList(YangLeafList leafList) {
+ listOfLeafList.add(leafList);
+ }
+
+ /**
+ * Returns the textual reference.
+ *
+ * @return the reference
+ */
+ @Override
+ public String getReference() {
+ return reference;
+ }
+
+ /**
+ * Sets the textual reference.
+ *
+ * @param reference the reference to set
+ */
+ @Override
+ public void setReference(String reference) {
+ this.reference = reference;
+ }
+
+ /**
+ * Returns the status.
+ *
+ * @return the status
+ */
+ @Override
+ public YangStatusType getStatus() {
+ return status;
+ }
+
+ /**
+ * Sets the status.
+ *
+ * @param status the status to set
+ */
+ @Override
+ public void setStatus(YangStatusType status) {
+ this.status = status;
+ }
+
+ /**
+ * Returns the type of the data.
+ *
+ * @return returns GROUPING_DATA
+ */
+ @Override
+ public YangConstructType getYangConstructType() {
+ return GROUPING_DATA;
+ }
+
+ /**
+ * Validates the data on entering the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnEntry()
+ throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+
+ /**
+ * Validates the data on exiting the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnExit()
+ throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+
+ /*
+ * Reference RFC6020
+ *
+ * Once a grouping is defined, it can be referenced in a "uses"
+ * statement (see Section 7.12). A grouping MUST NOT reference itself,
+ * neither directly nor indirectly through a chain of other groupings.
+ *
+ * If the grouping is defined at the top level of a YANG module or
+ * submodule, the grouping's identifier MUST be unique within the
+ * module.
+ */
+ @Override
+ public void detectCollidingChild(String identifierName, YangConstructType dataType)
+ throws DataModelException {
+ // Asks helper to detect colliding child.
+ detectCollidingChildUtil(identifierName, dataType, this);
+ }
+
+ @Override
+ public void detectSelfCollision(String identifierName, YangConstructType dataType)
+ throws DataModelException {
+ if (getName().equals(identifierName)) {
+ throw new DataModelException(
+ getErrorMsgCollision(COLLISION_DETECTION, getName(),
+ getLineNumber(), getCharPosition(),
+ GROUPING, getFileName()));
+ }
+ }
+
+ @Override
+ public void setLeafNameSpaceAndAddToParentSchemaMap() {
+ // Add namespace for all leafs.
+ for (YangLeaf yangLeaf : listOfLeaf) {
+ yangLeaf.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
+ }
+ // Add namespace for all leaf list.
+ for (YangLeafList yangLeafList : listOfLeafList) {
+ yangLeafList.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
+ }
+ }
+ // TODO A grouping MUST NOT reference itself, neither directly nor indirectly through a chain of other groupings.
+
+ /**
+ * Returns grouping depth.
+ *
+ * @return grouping depth
+ */
+ public int getGroupingDepth() {
+ return groupingDepth;
+ }
+
+ /**
+ * Sets grouping depth.
+ *
+ * @param groupingDepth grouping depth
+ */
+ public void setGroupingDepth(int groupingDepth) {
+ this.groupingDepth = groupingDepth;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangIdentity.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangIdentity.java
new file mode 100644
index 0000000..94732a9
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangIdentity.java
@@ -0,0 +1,157 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import java.io.Serializable;
+
+/*-
+ * Reference RFC 6020.
+ *
+ * The "identity" statement is used to define a new globally unique,
+ * abstract, and untyped identity. Its only purpose is to denote its
+ * name, semantics, and existence. An identity can either be defined
+ * from scratch or derived from a base identity. The identity's
+ * argument is an identifier that is the name of the identity. It is
+ * followed by a block of substatements that holds detailed identity
+ * information.
+ *
+ * The identity's Substatements
+ *
+ * +--------------+---------+-------------+-----------------------+
+ * | substatement | section | cardinality | data model mapping |
+ * +--------------+---------+-------------+-----------------------+
+ * | base | 7.16.2 | 0..1 | -YangNodeIdentifier |
+ * | description | 7.19.3 | 0..1 | -string |
+ * | reference | 7.19.4 | 0..1 | -string |
+ * | status | 7.19.2 | 0..1 | -YangStatus |
+ * +--------------+---------+-------------+-----------------------+
+ */
+
+/**
+ * Represents data model node to maintain information defined in YANG identity.
+ */
+public abstract class YangIdentity
+ extends YangNode
+ implements YangCommonInfo, Parsable, Serializable, YangTranslatorOperatorNode {
+
+ private static final long serialVersionUID = 806201691L;
+
+ //Base node of identity.
+ private YangBase baseNode;
+
+ //Status of YANG identity.
+ private YangStatusType status;
+
+ //Description of YANG identity.
+ private String description;
+
+ //YANG reference of the identity.
+ private String reference;
+
+ //Creates a identity type of node.
+ public YangIdentity() {
+ super(YangNodeType.IDENTITY_NODE, null);
+ }
+
+ @Override
+ public void addToChildSchemaMap(YangSchemaNodeIdentifier schemaNodeIdentifier,
+ YangSchemaNodeContextInfo yangSchemaNodeContextInfo)
+ throws DataModelException {
+ // Do nothing.
+ }
+
+ @Override
+ public void incrementMandatoryChildCount() {
+ // TODO
+ }
+
+ @Override
+ public void addToDefaultChildMap(YangSchemaNodeIdentifier yangSchemaNodeIdentifier, YangSchemaNode yangSchemaNode) {
+ // TODO
+ }
+
+ @Override
+ public YangSchemaNodeType getYangSchemaNodeType() {
+ return YangSchemaNodeType.YANG_NON_DATA_NODE;
+ }
+
+ @Override
+ public YangStatusType getStatus() {
+ return status;
+ }
+
+ @Override
+ public void setStatus(YangStatusType status) {
+ this.status = status;
+ }
+
+ @Override
+ public String getDescription() {
+ return description;
+ }
+
+ @Override
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ @Override
+ public String getReference() {
+ return reference;
+ }
+
+ @Override
+ public void setReference(String reference) {
+ this.reference = reference;
+ }
+
+ @Override
+ public YangConstructType getYangConstructType() {
+ return YangConstructType.IDENTITY_DATA;
+ }
+
+ @Override
+ public void validateDataOnEntry()
+ throws DataModelException {
+ }
+
+ @Override
+ public void validateDataOnExit()
+ throws DataModelException {
+ }
+
+ /**
+ * Returns base node of identity.
+ *
+ * @return the base node of identity
+ */
+ public YangBase getBaseNode() {
+ return baseNode;
+ }
+
+ /**
+ * Sets the base node.
+ *
+ * @param baseNode the base node to set
+ */
+ public void setBaseNode(YangBase baseNode) {
+ this.baseNode = baseNode;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangIdentityRef.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangIdentityRef.java
new file mode 100644
index 0000000..6c5817f
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangIdentityRef.java
@@ -0,0 +1,299 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import java.io.Serializable;
+
+import static org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus.INTRA_FILE_RESOLVED;
+import static org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus.RESOLVED;
+import static org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus.UNRESOLVED;
+
+/*-
+ * Reference RFC 6020.
+ *
+ * The identityref type is used to reference an existing identity.
+ *
+ * The identityref's base Statement :
+ * The "base" statement, which is a substatement to the "type"
+ * statement, MUST be present if the type is "identityref". The
+ * argument is the name of an identity, as defined by an "identity"
+ * statement. If a prefix is present on the identity name, it refers to
+ * an identity defined in the module that was imported with that prefix.
+ * Otherwise, an identity with the matching name MUST be defined in the
+ * current module or an included submodule.
+ * Valid values for an identityref are any identities derived from the
+ * identityref's base identity. On a particular server, the valid
+ * values are further restricted to the set of identities defined in the
+ * modules supported by the server.
+ */
+
+/**
+ * Represents data model node to maintain information defined in YANG identityref.
+ */
+public class YangIdentityRef
+ extends YangNode
+ implements Cloneable, Parsable, Resolvable, Serializable {
+
+ private static final long serialVersionUID = 806201692L;
+
+ // Get referred identity parent information.
+ private YangIdentity referredIdentity;
+
+ // YANG node identifier.
+ private YangNodeIdentifier baseIdentity;
+
+ /**
+ * Status of resolution. If completely resolved enum value is "RESOLVED",
+ * if not enum value is "UNRESOLVED", in case reference of grouping/typedef/identityref/base
+ * is added to uses/type/identityref/base but it's not resolved value of enum should be
+ * "INTRA_FILE_RESOLVED".
+ */
+ private ResolvableStatus resolvableStatus;
+
+ /**
+ * Resolution for interfile grouping.
+ */
+ private boolean isIdentityForInterFileGroupingResolution;
+
+ /**
+ * Flag to indicate whether the leaf ref is inside grouping.
+ */
+ private boolean inGrouping;
+
+ // Creates a specific identityref of node.
+ public YangIdentityRef() {
+ super(YangNodeType.IDENTITYREF_NODE, null);
+ baseIdentity = new YangNodeIdentifier();
+ resolvableStatus = UNRESOLVED;
+ }
+
+ @Override
+ public void addToChildSchemaMap(YangSchemaNodeIdentifier schemaNodeIdentifier,
+ YangSchemaNodeContextInfo yangSchemaNodeContextInfo)
+ throws DataModelException {
+ // Do nothing.
+ }
+
+ @Override
+ public void incrementMandatoryChildCount() {
+ // TODO
+ }
+
+ @Override
+ public void addToDefaultChildMap(YangSchemaNodeIdentifier yangSchemaNodeIdentifier, YangSchemaNode yangSchemaNode) {
+ // TODO
+ }
+
+ @Override
+ public YangSchemaNodeType getYangSchemaNodeType() {
+ return YangSchemaNodeType.YANG_NON_DATA_NODE;
+ }
+
+ @Override
+ public ResolvableStatus getResolvableStatus() {
+ return resolvableStatus;
+ }
+
+ @Override
+ public void setResolvableStatus(ResolvableStatus resolvableStatus) {
+ this.resolvableStatus = resolvableStatus;
+ }
+
+ @Override
+ public Object resolve()
+ throws DataModelException {
+
+ // Check if the derived info is present.
+ YangIdentity identity = getReferredIdentity();
+
+ if (identity == null) {
+ throw new DataModelException("Linker Error: Identity information is missing. " +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition() +
+ " in " + getFileName() + "\"");
+ }
+
+ while (identity.getBaseNode() != null) {
+ if (identity.getBaseNode().getResolvableStatus() != RESOLVED) {
+ setResolvableStatus(INTRA_FILE_RESOLVED);
+ return null;
+ }
+ identity = identity.getBaseNode().getReferredIdentity();
+ }
+ return null;
+ }
+
+ /**
+ * Returns the YANG base node identifier.
+ *
+ * @return the YANG base node identifier
+ */
+ public YangNodeIdentifier getBaseIdentity() {
+ return baseIdentity;
+ }
+
+ /**
+ * Sets the YANG node identifier.
+ *
+ * @param baseIdentity the YANG node identifier to set
+ */
+ public void setBaseIdentity(YangNodeIdentifier baseIdentity) {
+ this.baseIdentity = baseIdentity;
+ }
+
+ /**
+ * Returns the name of identity.
+ *
+ * @return the identity name
+ */
+ @Override
+ public String getName() {
+ return baseIdentity.getName();
+ }
+
+ /**
+ * Sets the name of identity.
+ *
+ * @param name the identity name to set
+ */
+ @Override
+ public void setName(String name) {
+ baseIdentity.setName(name);
+ }
+
+ /**
+ * Sets node identifier.
+ *
+ * @param nodeIdentifier the node identifier
+ */
+ public void setNodeIdentifier(YangNodeIdentifier nodeIdentifier) {
+ this.baseIdentity = nodeIdentifier;
+ }
+
+ /**
+ * Returns prefix associated with base.
+ *
+ * @return prefix associated with base
+ */
+ public String getPrefix() {
+ return baseIdentity.getPrefix();
+ }
+
+ /**
+ * Sets prefix associated with base.
+ *
+ * @param prefix prefix associated with base
+ */
+ public void setPrefix(String prefix) {
+ baseIdentity.setPrefix(prefix);
+ }
+
+ @Override
+ public YangConstructType getYangConstructType() {
+ return YangConstructType.IDENTITYREF_DATA;
+ }
+
+ @Override
+ public void validateDataOnEntry()
+ throws DataModelException {
+ }
+
+ @Override
+ public void validateDataOnExit()
+ throws DataModelException {
+ }
+
+ /**
+ * Returns the parent identity node.
+ *
+ * @return the parent identity node
+ */
+ public YangIdentity getReferredIdentity() {
+ return referredIdentity;
+ }
+
+ /**
+ * Sets the parent identity node.
+ *
+ * @param referredIdentity the parent identity node to set
+ */
+ public void setReferredIdentity(YangIdentity referredIdentity) {
+ this.referredIdentity = referredIdentity;
+ }
+
+ public boolean isIdentityForInterFileGroupingResolution() {
+ return isIdentityForInterFileGroupingResolution;
+ }
+
+ public void setIdentityForInterFileGroupingResolution(
+ boolean identityForInterFileGroupingResolution) {
+ isIdentityForInterFileGroupingResolution =
+ identityForInterFileGroupingResolution;
+ }
+
+ @Override
+ public YangIdentityRef clone()
+ throws CloneNotSupportedException {
+ YangIdentityRef identityRef = (YangIdentityRef) super.clone();
+ return identityRef;
+ }
+
+ @Override
+ public String getJavaPackage() {
+ //TODO: throw exception
+ return null;
+ }
+
+ @Override
+ public String getJavaClassNameOrBuiltInType() {
+ //TODO: throw exception
+ return null;
+ }
+
+ @Override
+ public String getJavaAttributeName() {
+ throw new RuntimeException("Attribute name is not applicable ");
+ }
+
+ /**
+ * Returns flag value indicating whether leafref is inside grouping.
+ *
+ * @return true if leafref is in grouping, false otherwise
+ */
+ public boolean isInGrouping() {
+ return inGrouping;
+ }
+
+ /**
+ * Sets in grouping flag.
+ *
+ * @param inGrouping flag
+ */
+ public void setInGrouping(boolean inGrouping) {
+ this.inGrouping = inGrouping;
+ }
+
+ @Override
+ public YangNode clone(YangUses yangUses) throws CloneNotSupportedException {
+ return (YangNode) super.clone();
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangIfFeature.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangIfFeature.java
new file mode 100644
index 0000000..a4e50c4
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangIfFeature.java
@@ -0,0 +1,192 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import java.io.Serializable;
+import java.util.Iterator;
+import java.util.List;
+
+/*
+ * Reference RFC 6020.
+ *
+ * The "if-feature" statement makes its parent statement conditional.
+ * The argument is the name of a feature, as defined by a "feature"
+ * statement. The parent statement is implemented by servers that
+ * support this feature. If a prefix is present on the feature name, it
+ * refers to a feature defined in the module that was imported with that
+ * prefix, or the local module if the prefix matches the local module's
+ * prefix. Otherwise, a feature with the matching name MUST be defined
+ * in the current module or an included submodule.
+ *
+ * Since submodules cannot include the parent module, any features in
+ * the module that need to be exposed to submodules MUST be defined in a
+ * submodule. Submodules can then include this submodule to find the
+ * definition of the feature.
+ */
+
+/**
+ * Represents data model node to maintain information defined in YANG if-feature.
+ */
+public class YangIfFeature extends DefaultLocationInfo
+ implements Parsable, Resolvable, Serializable {
+
+ private static final long serialVersionUID = 806201635L;
+
+ /**
+ * if-feature argument.
+ */
+ private YangNodeIdentifier name;
+
+ /**
+ * Referred feature information.
+ */
+ private YangFeature referredFeature;
+
+ /**
+ * Referred feature parent information.
+ */
+ private YangNode referredFeatureHolder;
+
+ /**
+ * Status of resolution. If completely resolved enum value is "RESOLVED",
+ * if not enum value is "UNRESOLVED", in case reference of grouping/typedef
+ * is added to uses/type but it's not resolved value of enum should be
+ * "INTRA_FILE_RESOLVED".
+ */
+ private ResolvableStatus resolvableStatus;
+
+ /**
+ * Returns referred feature holder.
+ *
+ * @return referred feature holder
+ */
+ public YangNode getReferredFeatureHolder() {
+ return referredFeatureHolder;
+ }
+
+ /**
+ * Sets the referred feature holder.
+ *
+ * @param referredFeatureHolder referred feature holder
+ */
+ public void setReferredFeatureHolder(YangNode referredFeatureHolder) {
+ this.referredFeatureHolder = referredFeatureHolder;
+ }
+
+ /**
+ * Returns prefix associated with identifier.
+ *
+ * @return prefix associated with identifier
+ */
+ public String getPrefix() {
+ return name.getPrefix();
+ }
+
+ /**
+ * Sets prefix associated with identifier.
+ *
+ * @param prefix prefix associated with identifier
+ */
+ public void setPrefix(String prefix) {
+ name.setPrefix(prefix);
+ }
+
+ /**
+ * Returns referred feature associated with if-feature.
+ *
+ * @return referred feature associated with if-feature
+ */
+ public YangFeature getReferredFeature() {
+ return referredFeature;
+ }
+
+ /**
+ * Sets referred feature associated with if-feature.
+ *
+ * @param referredFeature referred feature associated with if-feature
+ */
+ public void setReferredFeature(YangFeature referredFeature) {
+ this.referredFeature = referredFeature;
+ }
+
+ /**
+ * Returns the YANG name of if-feature.
+ *
+ * @return the name of if-feature as defined in YANG file
+ */
+ public YangNodeIdentifier getName() {
+ return name;
+ }
+
+ /**
+ * Sets the YANG name of if-feature.
+ *
+ * @param name the name of if-feature as defined in YANG file
+ */
+ public void setName(YangNodeIdentifier name) {
+ this.name = name;
+ }
+
+ @Override
+ public YangConstructType getYangConstructType() {
+ return YangConstructType.IF_FEATURE_DATA;
+ }
+
+ @Override
+ public void validateDataOnEntry() throws DataModelException {
+ // do nothing, no validation required for if-feature
+ }
+
+ @Override
+ public void validateDataOnExit() throws DataModelException {
+ // do nothing, no validation required for if-feature
+ }
+
+ @Override
+ public ResolvableStatus getResolvableStatus() {
+ return resolvableStatus;
+ }
+
+ @Override
+ public void setResolvableStatus(ResolvableStatus resolvableStatus) {
+ this.resolvableStatus = resolvableStatus;
+ }
+
+ @Override
+ public Object resolve() throws DataModelException {
+ YangFeature feature = getReferredFeature();
+
+ // check whether feature has if-feature
+ List<YangIfFeature> ifFeatureList = feature.getIfFeatureList();
+ if (ifFeatureList != null && !ifFeatureList.isEmpty()) {
+ Iterator<YangIfFeature> ifFeatureIterator = ifFeatureList.iterator();
+ while (ifFeatureIterator.hasNext()) {
+ YangIfFeature ifFeature = ifFeatureIterator.next();
+ if (ifFeature.getResolvableStatus() != ResolvableStatus.RESOLVED) {
+ setResolvableStatus(ResolvableStatus.INTRA_FILE_RESOLVED);
+ return null;
+ }
+ }
+ }
+ return null;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangIfFeatureHolder.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangIfFeatureHolder.java
new file mode 100644
index 0000000..a7eda66
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangIfFeatureHolder.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import java.util.List;
+
+/**
+ * Abstraction of if-feature entity. It is used to abstract the data holders of if-feature.
+ */
+public interface YangIfFeatureHolder {
+
+ /**
+ * Returns the list of if-feature from data holder like container / list.
+ *
+ * @return the list of if-feature
+ */
+ List<YangIfFeature> getIfFeatureList();
+
+ /**
+ * Adds if-feature in if-feature list.
+ *
+ * @param ifFeature the if-feature to be added
+ */
+ void addIfFeatureList(YangIfFeature ifFeature);
+
+ /**
+ * Sets the list of if-feature.
+ *
+ * @param ifFeatureList the list of if-feature to set
+ */
+ void setIfFeatureList(List<YangIfFeature> ifFeatureList);
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangImport.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangImport.java
new file mode 100644
index 0000000..bef36ab
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangImport.java
@@ -0,0 +1,266 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.Set;
+
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.findReferredNode;
+
+/*
+ * Reference:RFC 6020.
+ * The "import" statement makes definitions from one module available
+ * inside another module or submodule. The argument is the name of the
+ * module to import, and the statement is followed by a block of
+ * sub statements that holds detailed import information.
+ * When a module is imported, the importing module may:
+ * o use any grouping and typedef defined at the top level in the
+ * imported module or its submodules.
+ *
+ * o use any extension, feature, and identity defined in the imported
+ * module or its submodules.
+ *
+ * o use any node in the imported module's schema tree in "must",
+ * "path", and "when" statements, or as the target node in "augment"
+ * and "deviation" statements.
+ *
+ * The mandatory "prefix" sub statement assigns a prefix for the imported
+ * module that is scoped to the importing module or submodule. Multiple
+ * "import" statements may be specified to import from different
+ * modules.
+ * When the optional "revision-date" sub-statement is present, any
+ * typedef, grouping, extension, feature, and identity referenced by
+ * definitions in the local module are taken from the specified revision
+ * of the imported module. It is an error if the specified revision of
+ * the imported module does not exist. If no "revision-date"
+ * sub-statement is present, it is undefined from which revision of the
+ * module they are taken.
+ *
+ * Multiple revisions of the same module MUST NOT be imported.
+ *
+ * The import's Substatements
+ *
+ * +---------------+---------+-------------+------------------+
+ * | substatement | section | cardinality |data model mapping|
+ * +---------------+---------+-------------+------------------+
+ * | prefix | 7.1.4 | 1 | string |
+ * | revision-date | 7.1.5.1 | 0..1 | Date |
+ * +---------------+---------+-------------+------------------+
+ */
+
+/**
+ * Represents the information about the imported modules.
+ */
+public class YangImport extends DefaultLocationInfo
+ implements Parsable, Serializable {
+
+ private static final long serialVersionUID = 806201642L;
+
+ /**
+ * Name of the module that is being imported.
+ */
+ private String name;
+
+ /**
+ * Prefix used to identify the entities from the imported module.
+ */
+ private String prefixId;
+
+ /**
+ * Reference:RFC 6020.
+ * <p>
+ * The import's "revision-date" statement is used to specify the exact
+ * version of the module to import. The "revision-date" statement MUST match
+ * the most recent "revision" statement in the imported module. organization
+ * which defined the YANG module.
+ */
+ private Date revision;
+
+ /**
+ * Reference to node which is imported.
+ */
+ private YangNode importedNode;
+
+ /**
+ * Creates a YANG import.
+ */
+ public YangImport() {
+ }
+
+ /**
+ * Returns the imported module name.
+ *
+ * @return the module name
+ */
+ public String getModuleName() {
+ return name;
+ }
+
+ /**
+ * Sets module name.
+ *
+ * @param moduleName the module name to set
+ */
+ public void setModuleName(String moduleName) {
+ name = moduleName;
+ }
+
+ /**
+ * Returns the prefix used to identify the entities from the imported module.
+ *
+ * @return the prefix used to identify the entities from the imported
+ * module
+ */
+ public String getPrefixId() {
+ return prefixId;
+ }
+
+ /**
+ * Sets prefix identifier.
+ *
+ * @param prefixId set the prefix identifier of the imported module
+ */
+ public void setPrefixId(String prefixId) {
+ this.prefixId = prefixId;
+ }
+
+ /**
+ * Returns the revision of the imported module.
+ *
+ * @return the revision of the imported module
+ */
+ public Date getRevision() {
+ return revision;
+ }
+
+ /**
+ * Sets the revision of the imported module.
+ *
+ * @param rev set the revision of the imported module
+ */
+ public void setRevision(Date rev) {
+ revision = rev;
+ }
+
+ /**
+ * Returns the type of the parsed data.
+ *
+ * @return returns IMPORT_DATA
+ */
+ @Override
+ public YangConstructType getYangConstructType() {
+ return YangConstructType.IMPORT_DATA;
+ }
+
+ /**
+ * Validates the data on entering the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnEntry()
+ throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+
+ }
+
+ /**
+ * Validates the data on exiting the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnExit()
+ throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+
+ }
+
+ /**
+ * Returns imported node.
+ *
+ * @return imported node
+ */
+ public YangNode getImportedNode() {
+ return importedNode;
+ }
+
+ /**
+ * Sets imported node.
+ *
+ * @param importedNode imported node
+ */
+ public void setImportedNode(YangNode importedNode) {
+ this.importedNode = importedNode;
+ }
+
+ /**
+ * Adds reference to an import.
+ *
+ * @param yangNodeSet YANG file info set
+ * @throws DataModelException a violation of data model rules
+ */
+ public void addReferenceToImport(Set<YangNode> yangNodeSet) throws DataModelException {
+ String importedModuleName = getModuleName();
+ Date importedModuleRevision = getRevision();
+ YangNode moduleNode = null;
+ /*
+ * Find the imported module node for a given module name with a
+ * specified revision if revision is not null.
+ */
+ if (importedModuleRevision != null) {
+ String importedModuleNameWithRevision = importedModuleName + "@" + importedModuleRevision;
+ moduleNode = findReferredNode(yangNodeSet, importedModuleNameWithRevision);
+ }
+
+ /*
+ * Find the imported module node for a given module name without
+ * revision if can't find with revision.
+ */
+ if (moduleNode == null) {
+ moduleNode = findReferredNode(yangNodeSet, importedModuleName);
+ }
+
+ if (moduleNode != null) {
+ if (moduleNode instanceof YangModule) {
+ if (getRevision() == null) {
+ setImportedNode(moduleNode);
+ return;
+ }
+ // Match revision if import is with revision.
+ if (moduleNode.getRevision() != null && (moduleNode
+ .getRevision().getRevDate()
+ .equals(importedModuleRevision))) {
+ setImportedNode(moduleNode);
+ return;
+ }
+ }
+ }
+
+ // Exception if there is no match.
+ DataModelException exception = new DataModelException("YANG file error : Imported module "
+ + importedModuleName + " with revision " + importedModuleRevision + " is not found.");
+ exception.setLine(getLineNumber());
+ exception.setCharPosition(getCharPosition());
+ exception.setFileName(getFileName());
+ throw exception;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangInclude.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangInclude.java
new file mode 100644
index 0000000..83c6bbe
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangInclude.java
@@ -0,0 +1,222 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.Set;
+
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.findReferredNode;
+
+/*
+ * Reference:RFC 6020.
+ * The "include" statement is used to make content from a submodule
+ * available to that submodule's parent module, or to another submodule
+ * of that parent module. The argument is an identifier that is the
+ * name of the submodule to include.
+ * The includes's Substatements
+ *
+ * +---------------+---------+-------------+------------------+
+ * | substatement | section | cardinality |data model mapping|
+ * +---------------+---------+-------------+------------------+
+ * | revision-date | 7.1.5.1 | 0..1 | string |
+ * +---------------+---------+-------------+------------------+
+ */
+
+/**
+ * Represents the information about the included sub-modules.
+ */
+public class YangInclude extends DefaultLocationInfo
+ implements Parsable, Serializable {
+
+ private static final long serialVersionUID = 806201644L;
+
+ /**
+ * Name of the sub-module that is being included.
+ */
+ private String subModuleName;
+
+ /**
+ * The include's "revision-date" statement is used to specify the exact
+ * version of the submodule to import.
+ */
+ private Date revision;
+
+ /**
+ * Reference to node which is included.
+ */
+ private YangNode includedNode;
+
+ /**
+ * Creates a YANG include.
+ */
+ public YangInclude() {
+ }
+
+ /**
+ * Returns the name of included sub-module.
+ *
+ * @return the sub-module name
+ */
+ public String getSubModuleName() {
+ return subModuleName;
+ }
+
+ /**
+ * Sets the name of included sub-modules.
+ *
+ * @param subModuleName the sub-module name to set
+ */
+ public void setSubModuleName(String subModuleName) {
+ this.subModuleName = subModuleName;
+ }
+
+ /**
+ * Returns the revision.
+ *
+ * @return the revision
+ */
+ public Date getRevision() {
+ return revision;
+ }
+
+ /**
+ * Sets the revision.
+ *
+ * @param revision the revision to set
+ */
+ public void setRevision(Date revision) {
+ this.revision = revision;
+ }
+
+ /**
+ * Returns the type of parsed data.
+ *
+ * @return returns INCLUDE_DATA
+ */
+ @Override
+ public YangConstructType getYangConstructType() {
+ return YangConstructType.INCLUDE_DATA;
+ }
+
+ /**
+ * Validates the data on entering the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnEntry()
+ throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+
+ }
+
+ /**
+ * Validates the data on exiting the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnExit()
+ throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+
+ }
+
+ public YangNode getIncludedNode() {
+ return includedNode;
+ }
+
+ public void setIncludedNode(YangNode includedNode) {
+ this.includedNode = includedNode;
+ }
+
+ /**
+ * Adds reference to an include.
+ *
+ * @param yangNodeSet YANG node set
+ * @return YANG sub module node
+ * @throws DataModelException a violation of data model rules
+ */
+ public YangSubModule addReferenceToInclude(Set<YangNode> yangNodeSet) throws DataModelException {
+ String includedSubModuleName = getSubModuleName();
+ Date includedSubModuleRevision = getRevision();
+ YangNode subModuleNode = null;
+
+ /*
+ * Find the included sub-module node for a given module name with a
+ * specified revision if revision is not null.
+ */
+ if (includedSubModuleRevision != null) {
+ String includedSubModuleNameWithRevision = includedSubModuleName + "@" + includedSubModuleRevision;
+ subModuleNode = findReferredNode(yangNodeSet, includedSubModuleNameWithRevision);
+ }
+
+ /*
+ * Find the imported sub module node for a given module name without
+ * revision if can't find with revision.
+ */
+ if (subModuleNode == null) {
+ subModuleNode = findReferredNode(yangNodeSet, includedSubModuleName);
+ }
+
+ if (subModuleNode != null) {
+ if (subModuleNode instanceof YangSubModule) {
+ if (getRevision() == null) {
+ setIncludedNode(subModuleNode);
+ return (YangSubModule) subModuleNode;
+ }
+
+ // Match revision if inclusion is with revision.
+ if (subModuleNode.getRevision() != null && subModuleNode
+ .getRevision().getRevDate()
+ .equals(includedSubModuleRevision)) {
+ setIncludedNode(subModuleNode);
+ return (YangSubModule) subModuleNode;
+ }
+ }
+ }
+ // Exception if there is no match.
+ DataModelException exception = new DataModelException("YANG file error : Included sub module " +
+ includedSubModuleName + "with a given revision is not found.");
+ exception.setLine(getLineNumber());
+ exception.setCharPosition(getCharPosition());
+ exception.setFileName(getFileName());
+ throw exception;
+ }
+
+ /**
+ * Reports an error when included sub-module doesn't meet condition that
+ * "included sub-modules should belong module, as defined by the
+ * "belongs-to" statement or sub-modules are only allowed to include other
+ * sub-modules belonging to the same module.
+ *
+ * @throws DataModelException a violation in data model rule
+ */
+ public void reportIncludeError() throws DataModelException {
+ DataModelException exception = new DataModelException("YANG file error : Included sub-module " +
+ getSubModuleName() + "doesn't belongs to parent module also it doesn't belongs" +
+ "to sub-module belonging to the same parent module.");
+ exception.setLine(getLineNumber());
+ exception.setCharPosition(getCharPosition());
+ exception.setFileName(getFileName());
+ throw exception;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangInput.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangInput.java
new file mode 100644
index 0000000..10d7188
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangInput.java
@@ -0,0 +1,231 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+
+import static java.util.Collections.unmodifiableList;
+import static org.onosproject.yang.compiler.datamodel.YangNodeType.INPUT_NODE;
+import static org.onosproject.yang.compiler.datamodel.YangSchemaNodeType.YANG_SINGLE_INSTANCE_NODE;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.COLLISION_DETECTION;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.INPUT;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.getErrorMsgCollision;
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.INPUT_DATA;
+
+/*
+ * Reference RFC 6020.
+ *
+ * The "input" statement, which is optional, is used to define input
+ * parameters to the RPC operation. It does not take an argument. The
+ * substatements to "input" define nodes under the RPC's input node.
+ *
+ * If a leaf in the input tree has a "mandatory" statement with the
+ * value "true", the leaf MUST be present in a NETCONF RPC invocation.
+ * Otherwise, the server MUST return a "missing-element" error.
+ *
+ * If a leaf in the input tree has a default value, the NETCONF server
+ * MUST use this value in the same cases as described in Section 7.6.1.
+ * In these cases, the server MUST operationally behave as if the leaf
+ * was present in the NETCONF RPC invocation with the default value as
+ * its value.
+ *
+ * If a "config" statement is present for any node in the input tree,
+ * the "config" statement is ignored.
+ *
+ * If any node has a "when" statement that would evaluate to false, then
+ * this node MUST NOT be present in the input tree.
+ *
+ * The input substatements
+ *
+ * +--------------+---------+-------------+------------------+
+ * | substatement | section | cardinality |data model mapping|
+ * +--------------+---------+-------------+------------------+
+ * | anyxml | 7.10 | 0..n | -not supported |
+ * | choice | 7.9 | 0..n | -child nodes |
+ * | container | 7.5 | 0..n | -child nodes |
+ * | grouping | 7.11 | 0..n | -child nodes |
+ * | leaf | 7.6 | 0..n | -YangLeaf |
+ * | leaf-list | 7.7 | 0..n | -YangLeafList |
+ * | list | 7.8 | 0..n | -child nodes |
+ * | typedef | 7.3 | 0..n | -child nodes |
+ * | uses | 7.12 | 0..n | -child nodes |
+ * +--------------+---------+-------------+------------------+
+ */
+
+/**
+ * Represents data model node to maintain information defined in YANG input.
+ */
+public abstract class YangInput
+ extends YangNode
+ implements YangLeavesHolder, Parsable, CollisionDetector,
+ YangAugmentableNode, YangIsFilterContentNodes, InvalidOpTypeHolder {
+
+ private static final long serialVersionUID = 806201608L;
+
+ /**
+ * List of leaves contained.
+ */
+ private List<YangLeaf> listOfLeaf;
+
+ /**
+ * List of leaf-lists contained.
+ */
+ private List<YangLeafList> listOfLeafList;
+
+ private List<YangAugment> yangAugmentedInfo;
+
+ /**
+ * Create a rpc input node.
+ */
+ public YangInput() {
+ super(INPUT_NODE, new HashMap<>());
+ listOfLeaf = new LinkedList<>();
+ listOfLeafList = new LinkedList<>();
+ yangAugmentedInfo = new ArrayList<>();
+ }
+
+ @Override
+ public void addToChildSchemaMap(YangSchemaNodeIdentifier id,
+ YangSchemaNodeContextInfo context)
+ throws DataModelException {
+ getYsnContextInfoMap().put(id, context);
+ }
+
+ @Override
+ public void incrementMandatoryChildCount() {
+ //For non data nodes, mandatory child to be added to parent node.
+ // TODO
+ }
+
+ @Override
+ public void addToDefaultChildMap(YangSchemaNodeIdentifier id,
+ YangSchemaNode yangSchemaNode) {
+ //For non data nodes, default child to be added to parent node.
+ // TODO
+ }
+
+ @Override
+ public YangSchemaNodeType getYangSchemaNodeType() {
+ return YANG_SINGLE_INSTANCE_NODE;
+ }
+
+ @Override
+ public void detectCollidingChild(String identifierName,
+ YangConstructType dataType)
+ throws DataModelException {
+ // Detect colliding child.
+ detectCollidingChildUtil(identifierName, dataType, this);
+ }
+
+ @Override
+ public void detectSelfCollision(String identifierName,
+ YangConstructType dataType)
+ throws DataModelException {
+ if (getName().equals(identifierName)) {
+ throw new DataModelException(
+ getErrorMsgCollision(COLLISION_DETECTION, getName(),
+ getLineNumber(), getCharPosition(),
+ INPUT, getFileName()));
+ }
+ }
+
+ @Override
+ public YangConstructType getYangConstructType() {
+ return INPUT_DATA;
+ }
+
+ @Override
+ public void validateDataOnEntry()
+ throws DataModelException {
+ //TODO: implement the method.
+ }
+
+ @Override
+ public void validateDataOnExit()
+ throws DataModelException {
+ //TODO: implement the method.
+ }
+
+ @Override
+ public List<YangLeaf> getListOfLeaf() {
+ return unmodifiableList(listOfLeaf);
+ }
+
+ @Override
+ public void setListOfLeaf(List<YangLeaf> leafsList) {
+ listOfLeaf = leafsList;
+ }
+
+ @Override
+ public void addLeaf(YangLeaf leaf) {
+ listOfLeaf.add(leaf);
+ }
+
+ @Override
+ public List<YangLeafList> getListOfLeafList() {
+ return unmodifiableList(listOfLeafList);
+ }
+
+ @Override
+ public void setListOfLeafList(List<YangLeafList> listOfLeafList) {
+ this.listOfLeafList = listOfLeafList;
+ }
+
+ @Override
+ public void addLeafList(YangLeafList leafList) {
+ listOfLeafList.add(leafList);
+ }
+
+ @Override
+ public void addAugmentation(YangAugment augmentInfo) {
+ yangAugmentedInfo.add(augmentInfo);
+ }
+
+ @Override
+ public void removeAugmentation(YangAugment augmentInfo) {
+ yangAugmentedInfo.remove(augmentInfo);
+ }
+
+ @Override
+ public List<YangAugment> getAugmentedInfoList() {
+ return unmodifiableList(yangAugmentedInfo);
+ }
+
+ @Override
+ public void setLeafNameSpaceAndAddToParentSchemaMap() {
+ // Add namespace for all leafs.
+ for (YangLeaf yangLeaf : listOfLeaf) {
+ yangLeaf.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
+ }
+ // Add namespace for all leaf list.
+ for (YangLeafList yangLeafList : listOfLeafList) {
+ yangLeafList.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
+ }
+ }
+
+ public void cloneAugmentInfo() {
+ yangAugmentedInfo = new ArrayList<>();
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangIsFilterContentNodes.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangIsFilterContentNodes.java
new file mode 100644
index 0000000..ec097c1
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangIsFilterContentNodes.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+/**
+ * Represent the YANG nodes which can contain is filter content match.
+ */
+public interface YangIsFilterContentNodes {
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangLeaf.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangLeaf.java
new file mode 100644
index 0000000..a1cf665
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangLeaf.java
@@ -0,0 +1,577 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import java.io.Serializable;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import static org.onosproject.yang.compiler.datamodel.YangStatusType.CURRENT;
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.validateEmptyDataType;
+
+/*
+ * Reference:RFC 6020.
+ * The "leaf" statement is used to define a leaf node in the schema
+ * tree. It takes one argument, which is an identifier, followed by a
+ * block of sub-statements that holds detailed leaf information.
+ *
+ * A leaf node has a value, but no child nodes in the data tree.
+ * Conceptually, the value in the data tree is always in the canonical
+ * form.
+ *
+ * A leaf node exists in zero or one instances in the data tree.
+ *
+ * The "leaf" statement is used to define a scalar variable of a
+ * particular built-in or derived type.
+ *
+ * The leaf's sub-statements
+ *
+ * +--------------+---------+-------------+------------------+
+ * | substatement | section | cardinality |data model mapping|
+ * +--------------+---------+-------------+------------------+
+ * | config | 7.19.1 | 0..1 | - boolean |
+ * | default | 7.6.4 | 0..1 | - string |
+ * | description | 7.19.3 | 0..1 | - string |
+ * | if-feature | 7.18.2 | 0..n | - YangIfFeature |
+ * | mandatory | 7.6.5 | 0..1 | - boolean |
+ * | must | 7.5.3 | 0..n | - YangMust |
+ * | reference | 7.19.4 | 0..1 | - string |
+ * | status | 7.19.2 | 0..1 | - YangStatus |
+ * | type | 7.6.3 | 1 | - YangType |
+ * | units | 7.3.3 | 0..1 | - String |
+ * | when | 7.19.5 | 0..1 | - YangWhen |
+ * +--------------+---------+-------------+------------------+
+ */
+
+/**
+ * Represents leaf data represented in YANG.
+ */
+public abstract class YangLeaf extends DefaultLocationInfo
+ implements YangCommonInfo, Parsable, Cloneable, Serializable,
+ YangMustHolder, YangIfFeatureHolder, YangWhenHolder, YangSchemaNode,
+ YangConfig {
+
+ private static final long serialVersionUID = 806201635L;
+
+ /**
+ * YANG schema node identifier.
+ */
+ private YangSchemaNodeIdentifier yangSchemaNodeIdentifier;
+
+ /**
+ * If the leaf is a config parameter.
+ */
+ private boolean isConfig;
+
+ /**
+ * description of leaf.
+ */
+ private String description;
+
+ /**
+ * If mandatory leaf.
+ */
+ private boolean isMandatory;
+
+ /**
+ * The textual reference to this leaf.
+ */
+ private String reference;
+
+ /**
+ * Status of leaf in YANG definition.
+ */
+ private YangStatusType status = CURRENT;
+
+ /**
+ * Textual units info.
+ */
+ private String units;
+
+ /**
+ * Data type of the leaf.
+ */
+ private YangType<?> dataType;
+
+ /**
+ * Default value in string, needs to be converted to the target object,
+ * based on the type.
+ */
+ private String defaultValueInString;
+
+ /**
+ * When data of the leaf.
+ */
+ private YangWhen when;
+
+ /**
+ * YANG Node in which the leaf is contained.
+ */
+ private YangLeavesHolder containedIn;
+
+ /**
+ * List of must statement constraints.
+ */
+ private List<YangMust> mustConstraintList;
+
+ /**
+ * List of if-feature.
+ */
+ private List<YangIfFeature> ifFeatureList;
+
+ /**
+ * Referred schema leaf.
+ */
+ private YangLeaf referredLeaf;
+
+ private boolean isKeyLeaf;
+ /**
+ * Creates a YANG leaf.
+ */
+ public YangLeaf() {
+ mustConstraintList = new LinkedList<>();
+ ifFeatureList = new LinkedList<>();
+ }
+
+ /**
+ * Returns the config flag.
+ *
+ * @return if config flag
+ */
+ @Override
+ public boolean isConfig() {
+ return isConfig;
+ }
+
+ /**
+ * Sets the config flag.
+ *
+ * @param isConfig the flag value to set
+ */
+ @Override
+ public void setConfig(boolean isConfig) {
+ this.isConfig = isConfig;
+ }
+
+ /**
+ * Returns the when.
+ *
+ * @return the when
+ */
+ @Override
+ public YangWhen getWhen() {
+ return when;
+ }
+
+ /**
+ * Sets the when.
+ *
+ * @param when the when to set
+ */
+ @Override
+ public void setWhen(YangWhen when) {
+ this.when = when;
+ }
+
+ /**
+ * Returns the description.
+ *
+ * @return the description
+ */
+ @Override
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * Sets the description.
+ *
+ * @param description set the description
+ */
+ @Override
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ /**
+ * Returns if the leaf is mandatory.
+ *
+ * @return if leaf is mandatory
+ */
+ public boolean isMandatory() {
+ return isMandatory;
+ }
+
+ /**
+ * Sets if the leaf is mandatory.
+ *
+ * @param isReq if the leaf is mandatory
+ */
+ public void setMandatory(boolean isReq) {
+ isMandatory = isReq;
+ }
+
+ /**
+ * Returns the textual reference.
+ *
+ * @return the reference
+ */
+ @Override
+ public String getReference() {
+ return reference;
+ }
+
+ /**
+ * Sets the textual reference.
+ *
+ * @param reference the reference to set
+ */
+ @Override
+ public void setReference(String reference) {
+ this.reference = reference;
+ }
+
+ /**
+ * Returns the status.
+ *
+ * @return the status
+ */
+ @Override
+ public YangStatusType getStatus() {
+ return status;
+ }
+
+ /**
+ * Sets the status.
+ *
+ * @param status the status to set
+ */
+ @Override
+ public void setStatus(YangStatusType status) {
+ this.status = status;
+ }
+
+ /**
+ * Returns the units.
+ *
+ * @return the units
+ */
+ public String getUnits() {
+ return units;
+ }
+
+ /**
+ * Sets the units.
+ *
+ * @param units the units to set
+ */
+ public void setUnits(String units) {
+ this.units = units;
+ }
+
+ /**
+ * Returns the default value.
+ *
+ * @return the default value
+ */
+ public String getDefaultValueInString() {
+ return defaultValueInString;
+ }
+
+ /**
+ * Sets the default value.
+ *
+ * @param defaultValueInString the default value
+ */
+ public void setDefaultValueInString(String defaultValueInString) {
+ this.defaultValueInString = defaultValueInString;
+ }
+
+ /**
+ * Returns the data type.
+ *
+ * @return the data type
+ */
+ public YangType<?> getDataType() {
+ return dataType;
+ }
+
+ @Override
+ public boolean isEmptyDataType() {
+ return validateEmptyDataType(dataType);
+ }
+
+ /**
+ * Sets the data type.
+ *
+ * @param dataType the data type to set
+ */
+ public void setDataType(YangType<?> dataType) {
+ this.dataType = dataType;
+ }
+
+ /**
+ * Retrieves the YANG node in which the leaf is defined.
+ *
+ * @return the YANG node in which the leaf is defined
+ */
+ public YangLeavesHolder getContainedIn() {
+ return containedIn;
+ }
+
+ /**
+ * Assigns the YANG node in which the leaf is defined.
+ *
+ * @param containedIn the YANG node in which the leaf is defined
+ */
+ public void setContainedIn(YangLeavesHolder containedIn) {
+ this.containedIn = containedIn;
+ }
+
+ @Override
+ public YangLeaf clone()
+ throws CloneNotSupportedException {
+ YangLeaf cl = (YangLeaf) super.clone();
+ cl.yangSchemaNodeIdentifier = yangSchemaNodeIdentifier.clone();
+ return cl;
+ }
+
+ /**
+ * Returns the type of the parsed data.
+ *
+ * @return returns LEAF_DATA
+ */
+ @Override
+ public YangConstructType getYangConstructType() {
+ return YangConstructType.LEAF_DATA;
+ }
+
+ /**
+ * Validates the data on entering the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnEntry()
+ throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+
+ }
+
+ /**
+ * Validates the data on exiting the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnExit()
+ throws DataModelException {
+ if (defaultValueInString != null && !defaultValueInString.isEmpty()
+ && dataType != null) {
+ dataType.isValidValue(defaultValueInString);
+ }
+ }
+
+ @Override
+ public List<YangMust> getListOfMust() {
+ return mustConstraintList;
+ }
+
+ @Override
+ public void setListOfMust(List<YangMust> mustConstraintList) {
+ this.mustConstraintList = mustConstraintList;
+ }
+
+ @Override
+ public void addMust(YangMust must) {
+ if (getListOfMust() == null) {
+ setListOfMust(new LinkedList<>());
+ }
+ getListOfMust().add(must);
+ }
+
+ @Override
+ public List<YangIfFeature> getIfFeatureList() {
+ return ifFeatureList;
+ }
+
+ @Override
+ public void addIfFeatureList(YangIfFeature ifFeature) {
+ if (getIfFeatureList() == null) {
+ setIfFeatureList(new LinkedList<>());
+ }
+ getIfFeatureList().add(ifFeature);
+ }
+
+ @Override
+ public void setIfFeatureList(List<YangIfFeature> ifFeatureList) {
+ this.ifFeatureList = ifFeatureList;
+ }
+
+ @Override
+ public YangSchemaNodeContextInfo getChildSchema(
+ YangSchemaNodeIdentifier dataNodeIdentifier)
+ throws DataModelException {
+ throw new DataModelException("leaf cannot have any child schema nodes " +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition() +
+ " in " + getFileName() + "\"");
+ }
+
+ @Override
+ public void isValueValid(String value)
+ throws DataModelException {
+ getDataType().isValidValue(value);
+ }
+
+ @Override
+ public int getMandatoryChildCount()
+ throws DataModelException {
+ throw new DataModelException("Leaf can't have child. " +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition() +
+ " in " + getFileName() + "\"");
+ }
+
+ @Override
+ public Map<YangSchemaNodeIdentifier, YangSchemaNode> getDefaultChild(YangSchemaNodeIdentifier dataNodeIdentifier) {
+ // Returns null as there is no child to leaf.
+ return null;
+ }
+
+ @Override
+ public boolean isNotificationPresent() throws DataModelException {
+ throw new DataModelException("Method is called for node other than module/sub-module.");
+ }
+
+ @Override
+ public YangSchemaNodeType getYangSchemaNodeType() {
+ return YangSchemaNodeType.YANG_SINGLE_INSTANCE_LEAF_NODE;
+ }
+
+ /**
+ * Sets leaf namespace and add itself to parent child schema map.
+ *
+ * @param nameSpace namespace
+ */
+ public void setLeafNameSpaceAndAddToParentSchemaMap(YangNamespace nameSpace) {
+ setNameSpace(nameSpace);
+ // Process addition of leaf to schema node map.
+ ((YangNode) getContainedIn()).processAdditionOfSchemaNodeToCurNodeMap(getName(), getNameSpace(), this);
+ }
+
+ @Override
+ public YangSchemaNodeIdentifier getYangSchemaNodeIdentifier() {
+ return yangSchemaNodeIdentifier;
+ }
+
+ /**
+ * Sets YANG schema node identifier.
+ *
+ * @param yangSchemaNodeIdentifier YANG schema node identifier
+ */
+ public void setYangSchemaNodeIdentifier(YangSchemaNodeIdentifier
+ yangSchemaNodeIdentifier) {
+ if (this.yangSchemaNodeIdentifier == null) {
+ this.yangSchemaNodeIdentifier = new YangSchemaNodeIdentifier();
+ }
+ this.yangSchemaNodeIdentifier = yangSchemaNodeIdentifier;
+ }
+
+ /**
+ * Retrieve the name of leaf.
+ *
+ * @return leaf name
+ */
+ public String getName() {
+ return yangSchemaNodeIdentifier.getName();
+ }
+
+ /**
+ * Sets name of node.
+ *
+ * @param name name of the node
+ */
+ public void setName(String name) {
+ if (yangSchemaNodeIdentifier == null) {
+ yangSchemaNodeIdentifier = new YangSchemaNodeIdentifier();
+ }
+ yangSchemaNodeIdentifier.setName(name);
+ }
+
+ @Override
+ public YangNamespace getNameSpace() {
+ return yangSchemaNodeIdentifier.getNameSpace();
+ }
+
+ /**
+ * Sets namespace of node.
+ *
+ * @param namespace namespace of the node
+ */
+ public void setNameSpace(YangNamespace namespace) {
+ if (yangSchemaNodeIdentifier == null) {
+ yangSchemaNodeIdentifier = new YangSchemaNodeIdentifier();
+ }
+ yangSchemaNodeIdentifier.setNameSpace(namespace);
+ }
+
+ @Override
+ public YangSchemaNode getNotificationSchemaNode(String notificationNameInEnum)
+ throws DataModelException {
+ throw new DataModelException("Method called for schema node other " +
+ "then module/sub-module");
+ }
+
+ @Override
+ public YangLeaf getReferredSchema() {
+ return referredLeaf;
+ }
+
+ /**
+ * Sets referred schema leaf. This is only applicable for grouping.
+ *
+ * @param leaf referred schema leaf
+ */
+ public void setReferredLeaf(YangLeaf leaf) {
+ referredLeaf = leaf;
+ }
+ /**
+ * Returns true if its a key leaf.
+ *
+ * @return true if its a key leaf
+ */
+ public boolean isKeyLeaf() {
+ return isKeyLeaf;
+ }
+
+ /**
+ * Sets true if its a key leaf.
+ *
+ * @param keyLeaf true if its a key leaf
+ */
+ public void setKeyLeaf(boolean keyLeaf) {
+ isKeyLeaf = keyLeaf;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangLeafList.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangLeafList.java
new file mode 100644
index 0000000..2477d1a
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangLeafList.java
@@ -0,0 +1,574 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import java.io.Serializable;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import static org.onosproject.yang.compiler.datamodel.YangStatusType.CURRENT;
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.validateEmptyDataType;
+
+/*
+ * Reference:RFC 6020.
+ * Where the "leaf" statement is used to define a simple scalar variable
+ * of a particular type, the "leaf-list" statement is used to define an
+ * array of a particular type. The "leaf-list" statement takes one
+ * argument, which is an identifier, followed by a block of
+ * sub-statements that holds detailed leaf-list information.
+ *
+ * The values in a leaf-list MUST be unique.
+ *
+ * The leaf-list's sub-statements
+ *
+ * +--------------+---------+-------------+------------------+
+ * | substatement | section | cardinality |data model mapping|
+ * +--------------+---------+-------------+------------------+
+ * | config | 7.19.1 | 0..1 | -boolean |
+ * | description | 7.19.3 | 0..1 | -string |
+ * | if-feature | 7.18.2 | 0..n | -YangIfFeature |
+ * | max-elements | 7.7.4 | 0..1 | -int |
+ * | min-elements | 7.7.3 | 0..1 | -int |
+ * | must | 7.5.3 | 0..n | -YangMust |
+ * | ordered-by | 7.7.5 | 0..1 | -TODO |
+ * | reference | 7.19.4 | 0..1 | -string |
+ * | status | 7.19.2 | 0..1 | -YangStatus |
+ * | type | 7.4 | 1 | -YangType |
+ * | units | 7.3.3 | 0..1 | -string |
+ * | when | 7.19.5 | 0..1 | -YangWhen |
+ * +--------------+---------+-------------+------------------+
+ */
+
+/**
+ * Represents leaf-list data represented in YANG.
+ */
+public abstract class YangLeafList extends DefaultLocationInfo
+ implements YangCommonInfo, Parsable, Cloneable, Serializable,
+ YangMustHolder, YangWhenHolder, YangIfFeatureHolder, YangSchemaNode,
+ YangConfig {
+
+ private static final long serialVersionUID = 806201637L;
+
+ /**
+ * Name of leaf-list.
+ */
+ private YangSchemaNodeIdentifier yangSchemaNodeIdentifier;
+
+ /**
+ * If the leaf-list is a config parameter.
+ */
+ private boolean isConfig;
+
+ /**
+ * Description of leaf-list.
+ */
+ private String description;
+
+ /**
+ * Reference:RFC 6020.
+ * <p>
+ * The "max-elements" statement, which is optional, takes as an argument a
+ * positive integer or the string "unbounded", which puts a constraint on
+ * valid list entries. A valid leaf-list or list always has at most
+ * max-elements entries.
+ * <p>
+ * If no "max-elements" statement is present, it defaults to "unbounded".
+ */
+ private YangMaxElement maxElement;
+
+ /**
+ * Reference:RFC 6020.
+ * <p>
+ * The "min-elements" statement, which is optional, takes as an argument a
+ * non-negative integer that puts a constraint on valid list entries. A
+ * valid leaf-list or list MUST have at least min-elements entries.
+ * <p>
+ * If no "min-elements" statement is present, it defaults to zero.
+ * <p>
+ * The behavior of the constraint depends on the type of the leaf-list's or
+ * list's closest ancestor node in the schema tree that is not a non-
+ * presence container:
+ * <p>
+ * o If this ancestor is a case node, the constraint is enforced if any
+ * other node from the case exists.
+ * <p>
+ * o Otherwise, it is enforced if the ancestor node exists.
+ */
+ private YangMinElement minElements;
+
+ /**
+ * The textual reference to this leaf-list.
+ */
+ private String reference;
+
+ /**
+ * Status of the leaf-list in the YANG definition.
+ */
+ private YangStatusType status = CURRENT;
+
+ /**
+ * Textual units.
+ */
+ private String units;
+
+ /**
+ * Data type of leaf-list.
+ */
+ private YangType<?> dataType;
+
+ /**
+ * YANG Node in which the leaf is contained.
+ */
+ private YangLeavesHolder containedIn;
+
+ /**
+ * List of must statement constraints.
+ */
+ private List<YangMust> mustConstraintList;
+
+ /**
+ * When data of the leaf.
+ */
+ private YangWhen when;
+
+ /**
+ * List of if-feature.
+ */
+ private List<YangIfFeature> ifFeatureList;
+
+ /**
+ * Referred schema leaf list.
+ */
+ private YangLeafList referredLeafList;
+
+ /**
+ * Creates a YANG leaf-list.
+ */
+ public YangLeafList() {
+ mustConstraintList = new LinkedList<>();
+ ifFeatureList = new LinkedList<>();
+ setMinElements(new YangMinElement());
+ setMaxElements(new YangMaxElement());
+ }
+
+ /**
+ * Returns the config flag.
+ *
+ * @return the config flag
+ */
+ @Override
+ public boolean isConfig() {
+ return isConfig;
+ }
+
+ /**
+ * Sets the config flag.
+ *
+ * @param isConfig the config flag
+ */
+ @Override
+ public void setConfig(boolean isConfig) {
+ this.isConfig = isConfig;
+ }
+
+ /**
+ * Returns the when.
+ *
+ * @return the when
+ */
+ @Override
+ public YangWhen getWhen() {
+ return when;
+ }
+
+ /**
+ * Sets the when.
+ *
+ * @param when the when to set
+ */
+ @Override
+ public void setWhen(YangWhen when) {
+ this.when = when;
+ }
+
+ /**
+ * Returns the description.
+ *
+ * @return the description
+ */
+ @Override
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * Sets the description.
+ *
+ * @param description set the description
+ */
+ @Override
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ /**
+ * Returns the maximum elements number.
+ *
+ * @return the maximum elements number
+ */
+ public YangMaxElement getMaxElements() {
+ return maxElement;
+ }
+
+ /**
+ * Sets the maximum elements number.
+ *
+ * @param maxElement maximum elements number
+ */
+ public void setMaxElements(YangMaxElement maxElement) {
+ this.maxElement = maxElement;
+ }
+
+ /**
+ * Returns the minimum elements number.
+ *
+ * @return the minimum elements number
+ */
+ public YangMinElement getMinElements() {
+ return minElements;
+ }
+
+ /**
+ * Sets the minimum elements number.
+ *
+ * @param minElements the minimum elements number
+ */
+ public void setMinElements(YangMinElement minElements) {
+ this.minElements = minElements;
+ }
+
+ /**
+ * Returns the textual reference.
+ *
+ * @return the reference
+ */
+ @Override
+ public String getReference() {
+ return reference;
+ }
+
+ /**
+ * Sets the textual reference.
+ *
+ * @param reference the reference to set
+ */
+ @Override
+ public void setReference(String reference) {
+ this.reference = reference;
+ }
+
+ /**
+ * Returns the status.
+ *
+ * @return the status
+ */
+ @Override
+ public YangStatusType getStatus() {
+ return status;
+ }
+
+ /**
+ * Sets the status.
+ *
+ * @param status the status to set
+ */
+ @Override
+ public void setStatus(YangStatusType status) {
+ this.status = status;
+ }
+
+ /**
+ * Returns the units.
+ *
+ * @return the units
+ */
+ public String getUnits() {
+ return units;
+ }
+
+ /**
+ * Sets the units.
+ *
+ * @param units the units to set
+ */
+ public void setUnits(String units) {
+ this.units = units;
+ }
+
+ /**
+ * Returns the data type.
+ *
+ * @return the data type
+ */
+ public YangType<?> getDataType() {
+ return dataType;
+ }
+
+ @Override
+ public boolean isEmptyDataType() {
+ return validateEmptyDataType(dataType);
+ }
+
+ /**
+ * Sets the data type.
+ *
+ * @param dataType the data type to set
+ */
+ public void setDataType(YangType<?> dataType) {
+ this.dataType = dataType;
+ }
+
+ /**
+ * Retrieves the YANG node in which the leaf is defined.
+ *
+ * @return the YANG node in which the leaf is defined
+ */
+ public YangLeavesHolder getContainedIn() {
+ return containedIn;
+ }
+
+ /**
+ * Assigns the YANG node in which the leaf is defined.
+ *
+ * @param containedIn the YANG node in which the leaf is defined
+ */
+ public void setContainedIn(YangLeavesHolder containedIn) {
+ this.containedIn = containedIn;
+ }
+
+ @Override
+ public YangLeafList clone()
+ throws CloneNotSupportedException {
+ YangLeafList cll = (YangLeafList) super.clone();
+ cll.yangSchemaNodeIdentifier = yangSchemaNodeIdentifier.clone();
+ return cll;
+ }
+
+ /**
+ * Returns the type of the parsed data.
+ *
+ * @return returns LEAF_LIST_DATA
+ */
+ @Override
+ public YangConstructType getYangConstructType() {
+ return YangConstructType.LEAF_LIST_DATA;
+ }
+
+ /**
+ * Validates the data on entering the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnEntry()
+ throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+
+ }
+
+ /**
+ * Validates the data on exiting the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnExit()
+ throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+
+ }
+
+ @Override
+ public List<YangIfFeature> getIfFeatureList() {
+ return ifFeatureList;
+ }
+
+ @Override
+ public void addIfFeatureList(YangIfFeature ifFeature) {
+ if (getIfFeatureList() == null) {
+ setIfFeatureList(new LinkedList<>());
+ }
+ getIfFeatureList().add(ifFeature);
+ }
+
+ @Override
+ public void setIfFeatureList(List<YangIfFeature> ifFeatureList) {
+ this.ifFeatureList = ifFeatureList;
+ }
+
+ @Override
+ public List<YangMust> getListOfMust() {
+ return mustConstraintList;
+ }
+
+ @Override
+ public void setListOfMust(List<YangMust> mustConstraintList) {
+ this.mustConstraintList = mustConstraintList;
+ }
+
+ @Override
+ public void addMust(YangMust must) {
+ if (getListOfMust() == null) {
+ setListOfMust(new LinkedList<>());
+ }
+ getListOfMust().add(must);
+ }
+
+ @Override
+ public YangSchemaNodeContextInfo getChildSchema(
+ YangSchemaNodeIdentifier dataNodeIdentifier)
+ throws DataModelException {
+ throw new DataModelException("leaf cannot have any child schema nodes" +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition() +
+ " in " + getFileName() + "\"");
+ }
+
+ @Override
+ public void isValueValid(String value)
+ throws DataModelException {
+ getDataType().isValidValue(value);
+ }
+
+ @Override
+ public int getMandatoryChildCount()
+ throws DataModelException {
+ throw new DataModelException("leaf list can't have child " + getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition() +
+ " in " + getFileName() + "\"");
+ }
+
+ @Override
+ public Map<YangSchemaNodeIdentifier, YangSchemaNode> getDefaultChild(YangSchemaNodeIdentifier dataNodeIdentifier) {
+ // Returns null as there is no child to leaf list.
+ return null;
+ }
+
+ @Override
+ public boolean isNotificationPresent() throws DataModelException {
+ throw new DataModelException("Method is called for node other than module/sub-module.");
+ }
+
+ @Override
+ public YangSchemaNodeType getYangSchemaNodeType() {
+ return YangSchemaNodeType.YANG_MULTI_INSTANCE_LEAF_NODE;
+ }
+
+ /**
+ * Sets leaf namespace and add itself to parent child schema map.
+ *
+ * @param nameSpace namespace
+ */
+ public void setLeafNameSpaceAndAddToParentSchemaMap(YangNamespace nameSpace) {
+ setNameSpace(nameSpace);
+ // Process addition of leaf to schema node map.
+ ((YangNode) getContainedIn()).processAdditionOfSchemaNodeToCurNodeMap(getName(), getNameSpace(), this);
+ }
+
+ @Override
+ public YangSchemaNodeIdentifier getYangSchemaNodeIdentifier() {
+ return yangSchemaNodeIdentifier;
+ }
+
+ /**
+ * Sets YANG schema node identifier.
+ *
+ * @param yangSchemaNodeIdentifier YANG schema node identifier
+ */
+ public void setYangSchemaNodeIdentifier(YangSchemaNodeIdentifier
+ yangSchemaNodeIdentifier) {
+ if (this.yangSchemaNodeIdentifier == null) {
+ this.yangSchemaNodeIdentifier = new YangSchemaNodeIdentifier();
+ }
+ this.yangSchemaNodeIdentifier = yangSchemaNodeIdentifier;
+ }
+
+ /**
+ * Retrieve the name of leaf list
+ *
+ * @return leaf list name
+ */
+ public String getName() {
+ return yangSchemaNodeIdentifier.getName();
+ }
+
+ /**
+ * Sets name of node.
+ *
+ * @param name name of the node
+ */
+ public void setName(String name) {
+ if (yangSchemaNodeIdentifier == null) {
+ yangSchemaNodeIdentifier = new YangSchemaNodeIdentifier();
+ }
+ yangSchemaNodeIdentifier.setName(name);
+ }
+
+ @Override
+ public YangNamespace getNameSpace() {
+ return yangSchemaNodeIdentifier.getNameSpace();
+ }
+
+ /**
+ * Sets namespace of node.
+ *
+ * @param namespace namespace of the node
+ */
+ public void setNameSpace(YangNamespace namespace) {
+ if (yangSchemaNodeIdentifier == null) {
+ yangSchemaNodeIdentifier = new YangSchemaNodeIdentifier();
+ }
+ yangSchemaNodeIdentifier.setNameSpace(namespace);
+ }
+
+ @Override
+ public YangSchemaNode getNotificationSchemaNode(String notificationNameInEnum)
+ throws DataModelException {
+ throw new DataModelException("Method called for schema node other then module/sub-module");
+ }
+
+ @Override
+ public YangLeafList getReferredSchema() {
+ return referredLeafList;
+ }
+
+ /**
+ * Sets referred schema leaf-list. This is only applicable for grouping.
+ *
+ * @param leafList referred schema leaf-list
+ */
+ public void setReferredSchemaLeafList(YangLeafList leafList) {
+ referredLeafList = leafList;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangLeafRef.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangLeafRef.java
new file mode 100644
index 0000000..cdefeda
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangLeafRef.java
@@ -0,0 +1,553 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import static java.util.Collections.unmodifiableList;
+import static org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus.INTRA_FILE_RESOLVED;
+import static org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus.RESOLVED;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.LEAFREF_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangErrMsgConstants.DATA_MISSING_ERROR_TAG;
+import static org.onosproject.yang.compiler.datamodel.utils.YangErrMsgConstants.ERROR_PATH_LEAFREF_LEAF;
+import static org.onosproject.yang.compiler.datamodel.utils.YangErrMsgConstants.INSTANCE_REQUIRED_ERROR_APP_TAG;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.LEAFREF;
+
+/*
+ * Reference:RFC 6020.
+ * The leafref type is used to reference a particular leaf instance in
+ * the data tree. The "path" substatement (Section 9.9.2) selects a set
+ * of leaf instances, and the leafref value space is the set of values
+ * of these leaf instances.
+ */
+
+/**
+ * Represents the leafref information.
+ *
+ * @param <T> YANG leafref info
+ */
+public class YangLeafRef<T> extends DefaultLocationInfo
+ implements Cloneable, Parsable, Resolvable, Serializable, YangIfFeatureHolder,
+ YangXPathResolver, YangAppErrorHolder {
+
+ private static final long serialVersionUID = 286201644L;
+
+ /**
+ * YANG data type.
+ */
+ private YangType effectiveDataType;
+
+ /**
+ * Referred leaf/leaf-list for the path specified in the leafref type.
+ */
+ private T referredLeafOrLeafList;
+
+ /**
+ * Path of the leafref.
+ */
+ private String path;
+
+ /**
+ * Leafref path type. Either absolute or relative path.
+ */
+ private YangPathArgType pathType;
+
+ /**
+ * List of atomic paths in absolute Path.
+ */
+ private List<YangAtomicPath> atomicPath;
+
+ /**
+ * YANG relative path.
+ */
+ private YangRelativePath relativePath;
+
+ /**
+ * Status of resolution. If completely resolved enum value is "RESOLVED",
+ * if not enum value is "UNRESOLVED", in case reference of grouping/typedef/leafref
+ * is added to uses/type/leafref but it's not resolved value of enum should be
+ * "INTRA_FILE_RESOLVED".
+ */
+ private ResolvableStatus resolvableStatus;
+
+ /**
+ * Require instance status in leafref type.
+ */
+ private boolean requireInstance;
+
+ /**
+ * List of if-feature.
+ */
+ private List<YangIfFeature> ifFeatureList;
+
+ /**
+ * Parent node of the leafref's leaf.
+ */
+ private YangNode parentNode;
+
+ /**
+ * Prefix in the nodes of the leafref path and its imported node name.
+ */
+ private Map<String, String> prefixAndNode;
+
+ /**
+ * Flag to indicate whether the leaf ref is inside grouping.
+ */
+ private boolean inGrouping;
+
+ /**
+ * Returns the prefix in the leafref path and its imported node name.
+ *
+ * @return map of prefix with node
+ */
+ public Map<String, String> getPrefixAndNode() {
+ return prefixAndNode;
+ }
+
+ /**
+ * Sets the prefix in the leaf-ref path and its imported node name.
+ *
+ * @param prefixAndNode prefix with node map
+ */
+ public void setPrefixAndNode(Map<String, String> prefixAndNode) {
+ this.prefixAndNode = prefixAndNode;
+ }
+
+ /**
+ * Returns the parent node from the leafref's leaf.
+ *
+ * @return parent node of the leafref
+ */
+ public YangNode getParentNode() {
+ return parentNode;
+ }
+
+ /**
+ * Sets the parent node from the leafref's leaf.
+ *
+ * @param parentNode parent node
+ */
+ public void setParentNode(YangNode parentNode) {
+ this.parentNode = parentNode;
+ }
+
+ /**
+ * YANG application error information.
+ */
+ private YangAppErrorInfo yangAppErrorInfo;
+
+ /**
+ * Creates a YANG leaf ref.
+ */
+ public YangLeafRef() {
+ yangAppErrorInfo = new YangAppErrorInfo();
+ prefixAndNode = new HashMap<>();
+ atomicPath = new ArrayList<>();
+ ifFeatureList = new ArrayList<>();
+ yangAppErrorInfo.setErrorTag(DATA_MISSING_ERROR_TAG);
+ yangAppErrorInfo.setErrorAppTag(INSTANCE_REQUIRED_ERROR_APP_TAG);
+ yangAppErrorInfo.setErrorAppPath(ERROR_PATH_LEAFREF_LEAF);
+ }
+
+ /**
+ * Returns the status of the require instance in leafref.
+ *
+ * @return status of the require instance
+ */
+ public boolean getRequireInstance() {
+ return requireInstance;
+ }
+
+ /**
+ * Sets the status of the require instance in leafref.
+ *
+ * @param requireInstance status of the require instance
+ */
+ public void setRequireInstance(boolean requireInstance) {
+ this.requireInstance = requireInstance;
+ }
+
+ /**
+ * Returns the type of data.
+ *
+ * @return the data type
+ */
+ public YangType getEffectiveDataType() {
+ return effectiveDataType;
+ }
+
+ /**
+ * Sets the type of data.
+ *
+ * @param effectiveDataType data type
+ */
+ public void setEffectiveDataType(YangType effectiveDataType) {
+ this.effectiveDataType = effectiveDataType;
+ }
+
+ /**
+ * Returns the path of the leafref.
+ *
+ * @return path of the leafref
+ */
+ public String getPath() {
+ return path;
+ }
+
+ /**
+ * Sets the path of the leafref.
+ *
+ * @param path leafref path
+ */
+ public void setPath(String path) {
+ this.path = path;
+ }
+
+ /**
+ * Returns the type of path in the leafref.
+ *
+ * @return type of path
+ */
+ public YangPathArgType getPathType() {
+ return pathType;
+ }
+
+ /**
+ * Sets the type of path in the leafref. It can be either absolute or relative type.
+ *
+ * @param pathType type of path
+ */
+ public void setPathType(YangPathArgType pathType) {
+ this.pathType = pathType;
+ }
+
+ /**
+ * Returns the list of atomic path.
+ *
+ * @return list of atomic path
+ */
+ public List<YangAtomicPath> getAtomicPath() {
+ return unmodifiableList(atomicPath);
+ }
+
+ /**
+ * Sets the list of atomic path.
+ *
+ * @param atomicPath list of atomic path.
+ */
+ public void setAtomicPath(List<YangAtomicPath> atomicPath) {
+ this.atomicPath = atomicPath;
+ }
+
+ /**
+ * Returns the object of relative path.
+ *
+ * @return object of relative path
+ */
+ public YangRelativePath getRelativePath() {
+ return relativePath;
+ }
+
+ /**
+ * Sets the object of relative path.
+ *
+ * @param relativePath object of relative path.
+ */
+ public void setRelativePath(YangRelativePath relativePath) {
+ this.relativePath = relativePath;
+ }
+
+ /**
+ * Returns the object of referred leaf/leaf-list.
+ *
+ * @return object of referred leaf/leaf-list
+ */
+ public T getReferredLeafOrLeafList() {
+ return referredLeafOrLeafList;
+ }
+
+ /**
+ * Sets the object of referred leaf/leaf-list.
+ *
+ * @param targetExtendedInfo object of referred leaf/leaf-list
+ */
+ public void setReferredLeafOrLeafList(T targetExtendedInfo) {
+ this.referredLeafOrLeafList = targetExtendedInfo;
+ }
+
+ @Override
+ public List<YangIfFeature> getIfFeatureList() {
+ return unmodifiableList(ifFeatureList);
+ }
+
+ @Override
+ public void addIfFeatureList(YangIfFeature ifFeature) {
+ ifFeatureList.add(ifFeature);
+ }
+
+ @Override
+ public void setIfFeatureList(List<YangIfFeature> ifFeatureList) {
+ this.ifFeatureList = ifFeatureList;
+ }
+
+ @Override
+ public YangConstructType getYangConstructType() {
+ return LEAFREF_DATA;
+ }
+
+ @Override
+ public void validateDataOnEntry()
+ throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+
+ @Override
+ public void validateDataOnExit()
+ throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+
+ @Override
+ public ResolvableStatus getResolvableStatus() {
+ return resolvableStatus;
+ }
+
+ @Override
+ public void setResolvableStatus(ResolvableStatus resolvableStatus) {
+ this.resolvableStatus = resolvableStatus;
+ }
+
+ @Override
+ public void setAppErrorInfo(YangAppErrorInfo yangAppErrorInfo) {
+ this.yangAppErrorInfo = yangAppErrorInfo;
+ }
+
+ @Override
+ public YangAppErrorInfo getAppErrorInfo() {
+ return yangAppErrorInfo;
+ }
+
+ @Override
+ public Object resolve()
+ throws DataModelException {
+
+ if (getReferredLeafOrLeafList() == null) {
+ throw new DataModelException("Linker Error: The leafref does not refer to any leaf/leaf-list." +
+ " in " +
+ getLineNumber() + " at " +
+ getCharPosition() +
+ " in " + getFileName() + "\"");
+ }
+
+ // Initiate the resolution
+ try {
+ setResolvableStatus(getResolution());
+ } catch (DataModelException e) {
+ throw new DataModelException(e.getMessage());
+ }
+ return null;
+ }
+
+ /**
+ * Returns the resolution status by getting the effective built-in type.
+ *
+ * @return status of resolution
+ * @throws DataModelException a violation of data model rules
+ */
+ private ResolvableStatus getResolution()
+ throws DataModelException {
+
+ if (getReferredLeafOrLeafList() instanceof YangLeaf) {
+ YangLeaf yangLeaf = ((YangLeaf) getReferredLeafOrLeafList());
+ YangType baseType = yangLeaf.getDataType();
+
+ if (baseType.getDataType() == LEAFREF) {
+ YangLeafRef referredLeafRefInfo = (YangLeafRef) (yangLeaf.getDataType().getDataTypeExtendedInfo());
+
+ //Check whether the referred typedef is resolved.
+ if (referredLeafRefInfo.getResolvableStatus() != INTRA_FILE_RESOLVED
+ && referredLeafRefInfo.getResolvableStatus() != RESOLVED) {
+ throw new DataModelException("Linker Error: Referred typedef is not resolved for type." +
+ " in " +
+ getLineNumber() + " at " +
+ getCharPosition() +
+ " in " + getFileName() + "\"");
+ }
+
+ /*
+ * Check if the referred typedef is intra file resolved, if yes
+ * sets current status also to intra file resolved .
+ */
+ if ((referredLeafRefInfo.getResolvableStatus() == INTRA_FILE_RESOLVED)) {
+ return INTRA_FILE_RESOLVED;
+ }
+
+ // Add the if-feature list from referred leafref to current leafref.
+ List<YangIfFeature> referredLeafIfFeatureListFromLeafref = referredLeafRefInfo.getIfFeatureList();
+ if (referredLeafIfFeatureListFromLeafref != null && !referredLeafIfFeatureListFromLeafref.isEmpty()) {
+ Iterator<YangIfFeature> referredLeafIfFeature = referredLeafIfFeatureListFromLeafref.iterator();
+ while (referredLeafIfFeature.hasNext()) {
+ YangIfFeature ifFeature = referredLeafIfFeature.next();
+ addIfFeatureList(ifFeature);
+ }
+ }
+ setEffectiveDataType(referredLeafRefInfo.getEffectiveDataType());
+ } else if (baseType.getDataType() == YangDataTypes.DERIVED) {
+
+ // Check whether the referred typedef is resolved.
+ if (baseType.getResolvableStatus() != INTRA_FILE_RESOLVED
+ && baseType.getResolvableStatus() != RESOLVED) {
+ throw new DataModelException("Linker Error: Referred typedef is not resolved for type." +
+ " in " +
+ getLineNumber() + " at " +
+ getCharPosition() +
+ " in " + getFileName() + "\"");
+ }
+ /*
+ * Check if the referred typedef is intra file resolved, if yes
+ * sets current status also to intra file resolved .
+ */
+ if ((baseType.getResolvableStatus() == INTRA_FILE_RESOLVED)) {
+ return INTRA_FILE_RESOLVED;
+ }
+ setEffectiveDataType(baseType);
+ } else {
+ setEffectiveDataType(baseType);
+ }
+
+ // Add the if-feature list from referred leaf to current leafref.
+ List<YangIfFeature> referredLeafIfFeatureList = yangLeaf.getIfFeatureList();
+ if (referredLeafIfFeatureList != null && !referredLeafIfFeatureList.isEmpty()) {
+ Iterator<YangIfFeature> referredLeafIfFeature = referredLeafIfFeatureList.iterator();
+ while (referredLeafIfFeature.hasNext()) {
+ YangIfFeature ifFeature = referredLeafIfFeature.next();
+ addIfFeatureList(ifFeature);
+ }
+ }
+ return RESOLVED;
+ } else if (getReferredLeafOrLeafList() instanceof YangLeafList) {
+ YangLeafList yangLeafList = ((YangLeafList) getReferredLeafOrLeafList());
+ YangType baseType = yangLeafList.getDataType();
+
+ if (baseType.getDataType() == LEAFREF) {
+ YangLeafRef referredLeafRefInfo = (YangLeafRef) yangLeafList.getDataType().getDataTypeExtendedInfo();
+
+ //Check whether the referred typedef is resolved.
+ if (referredLeafRefInfo.getResolvableStatus() != INTRA_FILE_RESOLVED
+ && referredLeafRefInfo.getResolvableStatus() != RESOLVED) {
+ throw new DataModelException("Linker Error: Referred typedef is not resolved for type." +
+ " in " +
+ getLineNumber() + " at " +
+ getCharPosition() +
+ " in " + getFileName() + "\"");
+ }
+ /*
+ * Check if the referred typedef is intra file resolved, if yes
+ * sets current status also to intra file resolved .
+ */
+ if ((referredLeafRefInfo.getResolvableStatus() == INTRA_FILE_RESOLVED)) {
+ return INTRA_FILE_RESOLVED;
+ }
+ // Add the if-feature list from referred leafref to current leafref.
+ List<YangIfFeature> referredLeafListIfFeatureListFromLeafref = referredLeafRefInfo.getIfFeatureList();
+ if (referredLeafListIfFeatureListFromLeafref != null
+ && !referredLeafListIfFeatureListFromLeafref.isEmpty()) {
+ Iterator<YangIfFeature> referredLeafListIfFeature = referredLeafListIfFeatureListFromLeafref
+ .iterator();
+ while (referredLeafListIfFeature.hasNext()) {
+ YangIfFeature ifFeature = referredLeafListIfFeature.next();
+ addIfFeatureList(ifFeature);
+ }
+ }
+ setEffectiveDataType(referredLeafRefInfo.getEffectiveDataType());
+ } else if (baseType.getDataType() == YangDataTypes.DERIVED) {
+
+ //Check whether the referred typedef is resolved.
+ if (baseType.getResolvableStatus() != INTRA_FILE_RESOLVED
+ && baseType.getResolvableStatus() != RESOLVED) {
+ throw new DataModelException("Linker Error: Referred typedef is not resolved for type." +
+ " in " +
+ getLineNumber() + " at " +
+ getCharPosition() +
+ " in " + getFileName() + "\"");
+ }
+ /*
+ * Check if the referred typedef is intra file resolved, if yes
+ * sets current status also to intra file resolved .
+ */
+ if ((baseType.getResolvableStatus() == INTRA_FILE_RESOLVED)) {
+ return INTRA_FILE_RESOLVED;
+ }
+ setEffectiveDataType(baseType);
+ } else {
+ setEffectiveDataType(baseType);
+ }
+ // Add the if-feature list from referred leaf-list to current leafref.
+ List<YangIfFeature> referredLeafListIfFeatureList = yangLeafList.getIfFeatureList();
+ if (referredLeafListIfFeatureList != null && !referredLeafListIfFeatureList.isEmpty()) {
+ Iterator<YangIfFeature> referredLeafListIfFeature = referredLeafListIfFeatureList.iterator();
+ while (referredLeafListIfFeature.hasNext()) {
+ YangIfFeature ifFeature = referredLeafListIfFeature.next();
+ addIfFeatureList(ifFeature);
+ }
+ }
+ return RESOLVED;
+ } else {
+ throw new DataModelException("Linker Error: The leafref must refer only to leaf/leaf-list." +
+ " in " +
+ getLineNumber() + " at " +
+ getCharPosition() +
+ " in " + getFileName() + "\"");
+ }
+ }
+
+ @Override
+ public YangLeafRef<T> clone()
+ throws CloneNotSupportedException {
+ YangLeafRef<T> clonedLeafRef = (YangLeafRef<T>) super.clone();
+ return clonedLeafRef;
+ }
+
+ /**
+ * Returns flag value indicating whether leafref is inside grouping.
+ *
+ * @return true if leafref is in grouping, false otherwise
+ */
+ public boolean isInGrouping() {
+ return inGrouping;
+ }
+
+ /**
+ * Sets in grouping flag.
+ *
+ * @param inGrouping flag
+ */
+ public void setInGrouping(boolean inGrouping) {
+ this.inGrouping = inGrouping;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangLeavesHolder.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangLeavesHolder.java
new file mode 100644
index 0000000..ad39253
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangLeavesHolder.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import java.util.List;
+
+/**
+ * Abstraction of atomic configurable/status entity. It is used to abstract the
+ * data holders of leaf or leaf list. Used in leaves parsing or attribute code
+ * generation.
+ */
+public interface YangLeavesHolder extends LocationInfo {
+
+ /**
+ * Returns the list of leaves from data holder like container / list.
+ *
+ * @return the list of leaves
+ */
+ List<YangLeaf> getListOfLeaf();
+
+ /**
+ * Sets the list of leaves.
+ *
+ * @param leafsList the list of leaf to set
+ */
+ void setListOfLeaf(List<YangLeaf> leafsList);
+
+ /**
+ * Adds leaf in data holder like container / list.
+ *
+ * @param leaf the leaf to be added
+ */
+ void addLeaf(YangLeaf leaf);
+
+ /**
+ * Returns the list of leaf-list from data holder like container / list.
+ *
+ * @return the list of leaf-list
+ */
+ List<YangLeafList> getListOfLeafList();
+
+ /**
+ * Sets the list of leaf-list.
+ *
+ * @param listOfLeafList the list of leaf-list to set
+ */
+ void setListOfLeafList(List<YangLeafList> listOfLeafList);
+
+ /**
+ * Adds leaf-list in data holder like container / list.
+ *
+ * @param leafList the leaf-list to be added
+ */
+ void addLeafList(YangLeafList leafList);
+
+ /**
+ * Adds namespace for leafs and leaf-list, this is used in case of
+ * submodule.
+ *
+ */
+ void setLeafNameSpaceAndAddToParentSchemaMap();
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangLengthRestriction.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangLengthRestriction.java
new file mode 100644
index 0000000..797d1a3
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangLengthRestriction.java
@@ -0,0 +1,200 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangUint64;
+
+import java.io.Serializable;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.PATTERN_DATA;
+
+/*-
+ * Reference RFC 6020.
+ *
+ * Binary can be restricted with "length" statements alone.
+ *
+ */
+
+/**
+ * Represents the restriction for length data type.
+ */
+public class YangLengthRestriction extends DefaultLocationInfo
+ implements YangDesc, YangReference, Parsable, Serializable, YangAppErrorHolder {
+
+ /*-
+ * Reference RFC 6020.
+ * The length Statement
+ *
+ * The "length" statement, which is an optional sub-statement to the
+ * "type" statement, takes as an argument a length expression string.
+ * It is used to restrict the built-in type "string", or types derived
+ * from "string".
+ * A "length" statement restricts the number of unicode characters in
+ * the string.
+ * A length range consists of an explicit value, or a lower bound, two
+ * consecutive dots "..", and an upper bound. Multiple values or ranges
+ * can be given, separated by "|". Length-restricting values MUST NOT
+ * be negative. If multiple values or ranges are given, they all MUST
+ * be disjoint and MUST be in ascending order. If a length restriction
+ * is applied to an already length-restricted type, the new restriction
+ * MUST be equal or more limiting, that is, raising the lower bounds,
+ * reducing the upper bounds, removing explicit length values or ranges,
+ * or splitting ranges into multiple ranges with intermediate gaps. A
+ * length value is a non-negative integer, or one of the special values
+ * "min" or "max". "min" and "max" mean the minimum and maximum length
+ * accepted for the type being restricted, respectively. An
+ * implementation is not required to support a length value larger than
+ * 18446744073709551615.
+ * The length's sub-statements
+ *
+ * +---------------+---------+-------------+-----------------+
+ * | substatement | section | cardinality | mapped data type|
+ * +---------------+---------+-------------+-----------------+
+ * | description | 7.19.3 | 0..1 | string |
+ * | error-app-tag | 7.5.4.2 | 0..1 | string |
+ * | error-message | 7.5.4.1 | 0..1 | string |
+ * | reference | 7.19.4 | 0..1 | string |
+ * +---------------+---------+-------------+-----------------+
+ */
+
+ private static final long serialVersionUID = 806201645L;
+
+ /**
+ * Length restriction information.
+ */
+ private YangRangeRestriction<YangUint64> lengthRestriction;
+
+ /**
+ * Textual reference.
+ */
+ private String reference;
+
+ /**
+ * Textual description.
+ */
+ private String description;
+
+ /**
+ * YANG application error information.
+ */
+ private YangAppErrorInfo yangAppErrorInfo;
+
+ /**
+ * Creates a YANG length restriction object.
+ */
+ public YangLengthRestriction() {
+ setLengthRestriction(new YangRangeRestriction<>());
+ yangAppErrorInfo = new YangAppErrorInfo();
+ }
+
+ /**
+ * Returns the length restriction on the string data.
+ *
+ * @return length restriction on the string data
+ */
+ public YangRangeRestriction<YangUint64> getLengthRestriction() {
+ return lengthRestriction;
+ }
+
+ /**
+ * Sets the length restriction on the string data.
+ *
+ * @param lengthRestriction length restriction on the string data
+ */
+ public void setLengthRestriction(YangRangeRestriction<YangUint64> lengthRestriction) {
+ this.lengthRestriction = lengthRestriction;
+ }
+
+ /**
+ * Returns the textual reference of the length restriction.
+ *
+ * @return textual reference of the length restriction
+ */
+ @Override
+ public String getReference() {
+ return reference;
+ }
+
+ /**
+ * Sets the textual reference of the length restriction.
+ *
+ * @param ref textual reference of the length restriction
+ */
+ @Override
+ public void setReference(String ref) {
+ reference = ref;
+ }
+
+ /**
+ * Returns the description of the length restriction.
+ *
+ * @return description of the length restriction
+ */
+ @Override
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * Sets the description of the length restriction.
+ *
+ * @param desc description of the length restriction
+ */
+ @Override
+ public void setDescription(String desc) {
+ description = desc;
+
+ }
+
+ @Override
+ public YangConstructType getYangConstructType() {
+ return PATTERN_DATA;
+ }
+
+ @Override
+ public void validateDataOnEntry() throws DataModelException {
+ // TODO: implement the method.
+ }
+
+ @Override
+ public void validateDataOnExit() throws DataModelException {
+ // TODO: implement the method.
+ }
+
+ /**
+ * Sets the application's error information.
+ *
+ * @param yangAppErrorInfo the application's error information
+ */
+ @Override
+ public void setAppErrorInfo(YangAppErrorInfo yangAppErrorInfo) {
+ this.yangAppErrorInfo = yangAppErrorInfo;
+ }
+
+ /**
+ * Returns application's error information.
+ *
+ * @return application's error information
+ */
+ @Override
+ public YangAppErrorInfo getAppErrorInfo() {
+ return yangAppErrorInfo;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangList.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangList.java
new file mode 100644
index 0000000..343a8f2
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangList.java
@@ -0,0 +1,804 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.DataModelUtils;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+
+import static org.onosproject.yang.compiler.datamodel.YangNodeType.LIST_NODE;
+import static org.onosproject.yang.compiler.datamodel.YangSchemaNodeType.YANG_MULTI_INSTANCE_NODE;
+import static org.onosproject.yang.compiler.datamodel.YangStatusType.CURRENT;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.LIST_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.EMPTY;
+
+/*
+ * The "list" statement is used to define an interior data node in the
+ * schema tree. A list node may exist in multiple instances in the data
+ * tree. Each such instance is known as a list entry. The "list"
+ * statement takes one argument, which is an identifier, followed by a
+ * block of sub-statements that holds detailed list information.
+ *
+ * A list entry is uniquely identified by the values of the list's keys,
+ * if defined.
+ *
+ * The list's sub-statements
+ *
+ * +--------------+---------+-------------+------------------+
+ * | substatement | section | cardinality |data model mapping|
+ * +--------------+---------+-------------+------------------+
+ * | anyxml | 7.10 | 0..n |-not supported |
+ * | choice | 7.9 | 0..n |-child nodes |
+ * | config | 7.19.1 | 0..1 |-boolean |
+ * | container | 7.5 | 0..n |-child nodes |
+ * | description | 7.19.3 | 0..1 |-string |
+ * | grouping | 7.11 | 0..n |-child nodes |
+ * | if-feature | 7.18.2 | 0..n |-YangIfFeature |
+ * | key | 7.8.2 | 0..1 |-String list |
+ * | leaf | 7.6 | 0..n |-YangLeaf |
+ * | leaf-list | 7.7 | 0..n |-YangLeafList |
+ * | list | 7.8 | 0..n |-child nodes |
+ * | max-elements | 7.7.4 | 0..1 |-int |
+ * | min-elements | 7.7.3 | 0..1 |-int |
+ * | must | 7.5.3 | 0..n |-YangMust |
+ * | ordered-by | 7.7.5 | 0..1 |-TODO |
+ * | reference | 7.19.4 | 0..1 |-string |
+ * | status | 7.19.2 | 0..1 |-YangStatus |
+ * | typedef | 7.3 | 0..n |-child nodes |
+ * | unique | 7.8.3 | 0..n |-TODO |
+ * | uses | 7.12 | 0..n |-child nodes |
+ * | when | 7.19.5 | 0..1 |-YangWhen |
+ * +--------------+---------+-------------+------------------+
+ */
+
+/**
+ * Represents list data represented in YANG.
+ */
+public abstract class YangList
+ extends YangNode
+ implements YangLeavesHolder, YangCommonInfo, Parsable, CollisionDetector,
+ YangAugmentableNode, YangMustHolder, YangWhenHolder, YangIfFeatureHolder, YangSchemaNode,
+ YangIsFilterContentNodes, YangConfig {
+
+ private static final long serialVersionUID = 806201609L;
+
+ /**
+ * If list maintains config data.
+ */
+ private boolean isConfig;
+
+ /**
+ * Description of list.
+ */
+ private String description;
+
+ /**
+ * Reference RFC 6020.
+ * <p>
+ * The "key" statement, which MUST be present if the list represents
+ * configuration, and MAY be present otherwise, takes as an argument a
+ * string that specifies a space-separated list of leaf identifiers of this
+ * list. A leaf identifier MUST NOT appear more than once in the key. Each
+ * such leaf identifier MUST refer to a child leaf of the list. The leafs
+ * can be defined directly in sub-statements to the list, or in groupings
+ * used in the list.
+ * <p>
+ * The combined values of all the leafs specified in the key are used to
+ * uniquely identify a list entry. All key leafs MUST be given values when a
+ * list entry is created. Thus, any default values in the key leafs or their
+ * types are ignored. It also implies that any mandatory statement in the
+ * key leafs are ignored.
+ * <p>
+ * A leaf that is part of the key can be of any built-in or derived type,
+ * except it MUST NOT be the built-in type "empty".
+ * <p>
+ * All key leafs in a list MUST have the same value for their "config" as
+ * the list itself.
+ * <p>
+ * List of key leaf names.
+ */
+ private List<String> keyList;
+
+ /**
+ * Reference RFC 6020.
+ * <p>
+ * The "unique" statement is used to put constraints on valid list
+ * entries. It takes as an argument a string that contains a space-
+ * separated list of schema node identifiers, which MUST be given in the
+ * descendant form. Each such schema node identifier MUST refer to a leaf.
+ * <p>
+ * If one of the referenced leafs represents configuration data, then
+ * all of the referenced leafs MUST represent configuration data.
+ * <p>
+ * The "unique" constraint specifies that the combined values of all the
+ * leaf instances specified in the argument string, including leafs with
+ * default values, MUST be unique within all list entry instances in
+ * which all referenced leafs exist.
+ * <p>
+ * List of unique leaf/leaf-list names
+ */
+ private List<String> uniqueList;
+
+ /**
+ * List of leaves.
+ */
+ private List<YangLeaf> listOfLeaf;
+
+ /**
+ * List of leaf-lists.
+ */
+ private List<YangLeafList> listOfLeafList;
+
+ private List<YangAugment> yangAugmentedInfo = new ArrayList<>();
+
+ /**
+ * Reference RFC 6020.
+ * <p>
+ * The "max-elements" statement, which is optional, takes as an argument a
+ * positive integer or the string "unbounded", which puts a constraint on
+ * valid list entries. A valid leaf-list or list always has at most
+ * max-elements entries.
+ * <p>
+ * If no "max-elements" statement is present, it defaults to "unbounded".
+ */
+ private YangMaxElement maxElements;
+
+ /**
+ * Reference RFC 6020.
+ * <p>
+ * The "min-elements" statement, which is optional, takes as an argument a
+ * non-negative integer that puts a constraint on valid list entries. A
+ * valid leaf-list or list MUST have at least min-elements entries.
+ * <p>
+ * If no "min-elements" statement is present, it defaults to zero.
+ * <p>
+ * The behavior of the constraint depends on the type of the leaf-list's or
+ * list's closest ancestor node in the schema tree that is not a non-
+ * presence container:
+ * <p>
+ * o If this ancestor is a case node, the constraint is enforced if any
+ * other node from the case exists.
+ * <p>
+ * o Otherwise, it is enforced if the ancestor node exists.
+ */
+ private YangMinElement minElements;
+
+ /**
+ * reference.
+ */
+ private String reference;
+
+ /**
+ * Status of the node.
+ */
+ private YangStatusType status = CURRENT;
+
+ /**
+ * List of must statement constraints.
+ */
+ private List<YangMust> mustConstraintList;
+
+ /**
+ * When data of the node.
+ */
+ private YangWhen when;
+
+ /**
+ * List of if-feature.
+ */
+ private List<YangIfFeature> ifFeatureList;
+
+ /**
+ * Compiler Annotation.
+ */
+ private transient YangCompilerAnnotation compilerAnnotation;
+
+ /**
+ * Creates a YANG list object.
+ */
+ public YangList() {
+ super(LIST_NODE, new HashMap<>());
+ listOfLeaf = new LinkedList<>();
+ listOfLeafList = new LinkedList<>();
+ mustConstraintList = new LinkedList<>();
+ ifFeatureList = new LinkedList<>();
+ uniqueList = new LinkedList<>();
+ keyList = new LinkedList<>();
+ }
+
+ @Override
+ public void addToChildSchemaMap(YangSchemaNodeIdentifier schemaNodeIdentifier,
+ YangSchemaNodeContextInfo yangSchemaNodeContextInfo) {
+ getYsnContextInfoMap().put(schemaNodeIdentifier, yangSchemaNodeContextInfo);
+ }
+
+ @Override
+ public void incrementMandatoryChildCount() {
+ // TODO
+ }
+
+ @Override
+ public void addToDefaultChildMap(YangSchemaNodeIdentifier yangSchemaNodeIdentifier, YangSchemaNode yangSchemaNode) {
+ // TODO
+ }
+
+ @Override
+ public YangSchemaNodeType getYangSchemaNodeType() {
+ return YANG_MULTI_INSTANCE_NODE;
+ }
+
+ /**
+ * Returns the compiler annotation.
+ *
+ * @return the compiler annotation
+ */
+ public YangCompilerAnnotation getCompilerAnnotation() {
+ return compilerAnnotation;
+ }
+
+ /**
+ * Sets the compiler annotation.
+ *
+ * @param compilerAnnotation the compiler annotation to set
+ */
+ public void setCompilerAnnotation(YangCompilerAnnotation compilerAnnotation) {
+ this.compilerAnnotation = compilerAnnotation;
+ }
+
+ /**
+ * Returns the when.
+ *
+ * @return the when
+ */
+ @Override
+ public YangWhen getWhen() {
+ return when;
+ }
+
+ /**
+ * Sets the when.
+ *
+ * @param when the when to set
+ */
+ @Override
+ public void setWhen(YangWhen when) {
+ this.when = when;
+ }
+
+ /**
+ * Returns the config flag.
+ *
+ * @return the isConfig
+ */
+ @Override
+ public boolean isConfig() {
+ return isConfig;
+ }
+
+ /**
+ * Sets the config flag.
+ *
+ * @param isConfig the config flag
+ */
+ @Override
+ public void setConfig(boolean isConfig) {
+ this.isConfig = isConfig;
+ }
+
+ /**
+ * Returns the description.
+ *
+ * @return the description
+ */
+ @Override
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * Sets the description.
+ *
+ * @param description set the description
+ */
+ @Override
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ /**
+ * Returns the list of unique field names.
+ *
+ * @return the list of unique field names
+ */
+ public List<String> getUniqueList() {
+ return uniqueList;
+ }
+
+ /**
+ * Sets the list of unique field names.
+ *
+ * @param uniqueList the list of unique field names
+ */
+ private void setUniqueList(List<String> uniqueList) {
+ this.uniqueList = uniqueList;
+ }
+
+ /**
+ * Returns the list of key field names.
+ *
+ * @return the list of key field names
+ */
+ public List<String> getKeyList() {
+ return keyList;
+ }
+
+ /**
+ * Sets the list of key field names.
+ *
+ * @param keyList the list of key field names
+ */
+ private void setKeyList(List<String> keyList) {
+ this.keyList = keyList;
+ }
+
+ /**
+ * Adds a key field name.
+ *
+ * @param key key field name.
+ * @throws DataModelException a violation of data model rules
+ */
+ public void addKey(String key)
+ throws DataModelException {
+ if (getKeyList() == null) {
+ setKeyList(new LinkedList<>());
+ }
+
+ if (getKeyList().contains(key)) {
+ throw new DataModelException("A leaf identifier must not appear more than once in the\n" +
+ " key" +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition() +
+ " in " + getFileName() + "\"");
+ }
+
+ getKeyList().add(key);
+ }
+
+ /**
+ * Adds a unique field name.
+ *
+ * @param unique unique field name.
+ * @throws DataModelException a violation of data model rules
+ */
+ public void addUnique(String unique)
+ throws DataModelException {
+ if (getUniqueList() == null) {
+ setUniqueList(new LinkedList<>());
+ }
+ if (getUniqueList().contains(unique)) {
+ throw new DataModelException("A leaf identifier must not appear more than once in the\n" +
+ " unique" +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition() +
+ " in " + getFileName() + "\"");
+ }
+ getUniqueList().add(unique);
+ }
+
+ /**
+ * Returns the list of leaves.
+ *
+ * @return the list of leaves
+ */
+ @Override
+ public List<YangLeaf> getListOfLeaf() {
+ return listOfLeaf;
+ }
+
+ /**
+ * Sets the list of leaves.
+ *
+ * @param leafsList the list of leaf to set
+ */
+ @Override
+ public void setListOfLeaf(List<YangLeaf> leafsList) {
+ listOfLeaf = leafsList;
+ }
+
+ /**
+ * Adds a leaf.
+ *
+ * @param leaf the leaf to be added
+ */
+ @Override
+ public void addLeaf(YangLeaf leaf) {
+ getListOfLeaf().add(leaf);
+ }
+
+ /**
+ * Returns the list of leaf-list.
+ *
+ * @return the list of leaf-list
+ */
+ @Override
+ public List<YangLeafList> getListOfLeafList() {
+ return listOfLeafList;
+ }
+
+ /**
+ * Sets the list of leaf-list.
+ *
+ * @param listOfLeafList the list of leaf-list to set
+ */
+ @Override
+ public void setListOfLeafList(List<YangLeafList> listOfLeafList) {
+ this.listOfLeafList = listOfLeafList;
+ }
+
+ /**
+ * Adds a leaf-list.
+ *
+ * @param leafList the leaf-list to be added
+ */
+ @Override
+ public void addLeafList(YangLeafList leafList) {
+ getListOfLeafList().add(leafList);
+ }
+
+ /**
+ * Returns the max elements.
+ *
+ * @return the max elements
+ */
+ public YangMaxElement getMaxElements() {
+ return maxElements;
+ }
+
+ /**
+ * Sets the max elements.
+ *
+ * @param max the max elements
+ */
+ public void setMaxElements(YangMaxElement max) {
+ this.maxElements = max;
+ }
+
+ /**
+ * Returns the minimum elements.
+ *
+ * @return the minimum elements
+ */
+ public YangMinElement getMinElements() {
+ return minElements;
+ }
+
+ /**
+ * Sets the minimum elements.
+ *
+ * @param minElements the minimum elements
+ */
+ public void setMinElements(YangMinElement minElements) {
+ this.minElements = minElements;
+ }
+
+ /**
+ * Returns the textual reference.
+ *
+ * @return the reference
+ */
+ @Override
+ public String getReference() {
+ return reference;
+ }
+
+ /**
+ * Sets the textual reference.
+ *
+ * @param reference the reference to set
+ */
+ @Override
+ public void setReference(String reference) {
+ this.reference = reference;
+ }
+
+ /**
+ * Returns the status.
+ *
+ * @return the status
+ */
+ @Override
+ public YangStatusType getStatus() {
+ return status;
+ }
+
+ /**
+ * Sets the status.
+ *
+ * @param status the status to set
+ */
+ @Override
+ public void setStatus(YangStatusType status) {
+ this.status = status;
+ }
+
+ /**
+ * Returns the type of the parsed data.
+ *
+ * @return returns LIST_DATA
+ */
+ @Override
+ public YangConstructType getYangConstructType() {
+ return LIST_DATA;
+ }
+
+ /**
+ * Validates the data on entering the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnEntry()
+ throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+
+ /**
+ * Validates the data on exiting the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnExit()
+ throws DataModelException {
+ List<String> keys = getKeyList();
+ List<YangLeaf> leaves = getListOfLeaf();
+ List<YangLeafList> leafLists = getListOfLeafList();
+
+ validateConfig(leaves, leafLists);
+
+ //A list must have atleast one key leaf if config is true
+ if (isConfig && (keys.isEmpty() || leaves.isEmpty()) && !isUsesPresentInList()
+ && !isListPresentInGrouping()) {
+ throw new DataModelException("A list must have atleast one key leaf if config is true; " +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition() +
+ " in " + getFileName() + "\"");
+ } else if (keys != null) {
+ validateKey(leaves, keys);
+ }
+ }
+
+ /**
+ * Validates config statement of YANG list.
+ *
+ * @param leaves list of leaf attributes of YANG list
+ * @param leafLists list of leaf-list attributes of YANG list
+ * @throws DataModelException a violation of data model rules
+ */
+ private void validateConfig(List<YangLeaf> leaves, List<YangLeafList> leafLists)
+ throws DataModelException {
+
+ /*
+ * If a node has "config" set to "false", no node underneath it can have
+ * "config" set to "true".
+ */
+ if (!isConfig && leaves != null) {
+ for (YangLeaf leaf : leaves) {
+ if (leaf.isConfig()) {
+ throw new DataModelException("If a list has \"config\" set to \"false\", no node underneath " +
+ "it can have \"config\" set to \"true\"." +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition() +
+ " in " + getFileName() + "\"");
+ }
+ }
+ }
+
+ if (!isConfig && leafLists != null) {
+ for (YangLeafList leafList : leafLists) {
+ if (leafList.isConfig()) {
+ throw new DataModelException("If a list has \"config\" set to \"false\", no node underneath " +
+ "it can have \"config\" set to \"true\"." + getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition() +
+ " in " + getFileName() + "\"");
+ }
+ }
+ }
+ }
+
+ /**
+ * Validates key statement of list.
+ *
+ * @param leaves list of leaf attributes of list
+ * @param keys list of key attributes of list
+ * @throws DataModelException a violation of data model rules
+ */
+ private void validateKey(List<YangLeaf> leaves, List<String> keys)
+ throws DataModelException {
+ boolean leafFound = false;
+ List<YangLeaf> keyLeaves = new LinkedList<>();
+
+ /*
+ * 1. Leaf identifier must refer to a child leaf of the list 2. A leaf
+ * that is part of the key must not be the built-in type "empty".
+ */
+ for (String key : keys) {
+ if (leaves != null && !leaves.isEmpty()) {
+ for (YangLeaf leaf : leaves) {
+ if (key.equals(leaf.getName())) {
+ if (leaf.getDataType().getDataType() == EMPTY) {
+ throw new DataModelException(" A leaf that is part of the key must not be the built-in " +
+ "type \"empty\"." +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition() +
+ " in " + getFileName() + "\"");
+ }
+ leafFound = true;
+ keyLeaves.add(leaf);
+ break;
+ }
+ }
+ }
+
+ if (!leafFound && !isUsesPresentInList() && !isListPresentInGrouping()) {
+ throw new DataModelException("An identifier, in key, must refer to a child leaf of the list" +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition() +
+ " in " + getFileName() + "\"");
+ }
+ leafFound = false;
+ }
+
+ /*
+ * All key leafs in a list MUST have the same value for their "config"
+ * as the list itself.
+ */
+ for (YangLeaf keyLeaf : keyLeaves) {
+ if (isConfig != keyLeaf.isConfig()) {
+ throw new DataModelException("All key leafs in a list must have the same value for their" +
+ " \"config\" as the list itself." +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition() +
+ " in " + getFileName() + "\"");
+ }
+ }
+ }
+
+ @Override
+ public void detectCollidingChild(String identifierName, YangConstructType dataType)
+ throws DataModelException {
+ // Asks helper to detect colliding child.
+ DataModelUtils.detectCollidingChildUtil(identifierName, dataType, this);
+ }
+
+ @Override
+ public void detectSelfCollision(String identifierName, YangConstructType dataType)
+ throws DataModelException {
+ if (getName().equals(identifierName)) {
+ throw new DataModelException("YANG file error: Duplicate input identifier detected, same as list \"" +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition() +
+ " in " + getFileName() + "\"");
+ }
+ }
+
+ private boolean isUsesPresentInList() {
+ YangNode node = getChild();
+ while (node != null) {
+ if (node instanceof YangUses) {
+ return true;
+ }
+ node = node.getNextSibling();
+ }
+ return false;
+ // TODO When grouping linking is done this method has to be modified.
+ }
+
+ private boolean isListPresentInGrouping() {
+ YangNode node = getParent();
+ while (node != null) {
+ if (node instanceof YangGrouping) {
+ return true;
+ }
+ node = node.getParent();
+ }
+ return false;
+ // TODO When grouping linking is done this method has to be modified.
+ }
+
+ @Override
+ public List<YangIfFeature> getIfFeatureList() {
+ return ifFeatureList;
+ }
+
+ @Override
+ public void addIfFeatureList(YangIfFeature ifFeature) {
+ if (getIfFeatureList() == null) {
+ setIfFeatureList(new LinkedList<>());
+ }
+ getIfFeatureList().add(ifFeature);
+ }
+
+ @Override
+ public void setIfFeatureList(List<YangIfFeature> ifFeatureList) {
+ this.ifFeatureList = ifFeatureList;
+ }
+
+ @Override
+ public List<YangMust> getListOfMust() {
+ return mustConstraintList;
+ }
+
+ @Override
+ public void setListOfMust(List<YangMust> mustConstraintList) {
+ this.mustConstraintList = mustConstraintList;
+ }
+
+ @Override
+ public void addMust(YangMust must) {
+ if (getListOfMust() == null) {
+ setListOfMust(new LinkedList<>());
+ }
+ getListOfMust().add(must);
+ }
+
+ @Override
+ public void addAugmentation(YangAugment augmentInfo) {
+ yangAugmentedInfo.add(augmentInfo);
+ }
+
+ @Override
+ public void removeAugmentation(YangAugment augmentInfo) {
+ yangAugmentedInfo.remove(augmentInfo);
+ }
+
+ @Override
+ public List<YangAugment> getAugmentedInfoList() {
+ return yangAugmentedInfo;
+ }
+
+ @Override
+ public void setLeafNameSpaceAndAddToParentSchemaMap() {
+ // Add namespace for all leafs.
+ for (YangLeaf yangLeaf : getListOfLeaf()) {
+ yangLeaf.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
+ }
+ // Add namespace for all leaf list.
+ for (YangLeafList yangLeafList : getListOfLeafList()) {
+ yangLeafList.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
+ }
+ }
+
+ public void cloneAugmentInfo() {
+ yangAugmentedInfo = new ArrayList<>();
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangMaxElement.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangMaxElement.java
new file mode 100644
index 0000000..5ccd572
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangMaxElement.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import java.io.Serializable;
+
+import static java.lang.Integer.MAX_VALUE;
+import static org.onosproject.yang.compiler.datamodel.utils.YangErrMsgConstants.OPERATION_FAILED_ERROR_TAG;
+import static org.onosproject.yang.compiler.datamodel.utils.YangErrMsgConstants.TOO_MANY_ELEMENTS_ERROR_APP_TAG;
+
+/**
+ * Represents max element data represented in YANG.
+ */
+public class YangMaxElement extends DefaultLocationInfo
+ implements YangAppErrorHolder, Serializable {
+
+ private static final long serialVersionUID = 807201694L;
+
+ /**
+ * YANG application error information.
+ */
+ private YangAppErrorInfo yangAppErrorInfo;
+
+ /**
+ * Reference:RFC 6020.
+ * <p>
+ * The "max-elements" statement, which is optional, takes as an argument a
+ * positive integer or the string "unbounded", which puts a constraint on
+ * valid list entries. A valid leaf-list or list always has at most
+ * max-elements entries.
+ * <p>
+ * If no "max-elements" statement is present, it defaults to "unbounded".
+ */
+ private int maxElement = MAX_VALUE;
+
+ /**
+ * Creates a YANG maximum element.
+ */
+ public YangMaxElement() {
+ yangAppErrorInfo = new YangAppErrorInfo();
+ yangAppErrorInfo.setErrorTag(OPERATION_FAILED_ERROR_TAG);
+ yangAppErrorInfo.setErrorAppTag(TOO_MANY_ELEMENTS_ERROR_APP_TAG);
+ }
+
+ /**
+ * Returns the maximum element value.
+ *
+ * @return the maximum element value
+ */
+ public int getMaxElement() {
+ return maxElement;
+ }
+
+ /**
+ * Sets the maximum element value.
+ *
+ * @param maxElement the maximum element value
+ */
+ public void setMaxElement(int maxElement) {
+ this.maxElement = maxElement;
+ }
+
+ @Override
+ public void setAppErrorInfo(YangAppErrorInfo yangAppErrorInfo) {
+ this.yangAppErrorInfo = yangAppErrorInfo;
+ }
+
+ @Override
+ public YangAppErrorInfo getAppErrorInfo() {
+ return yangAppErrorInfo;
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangMinElement.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangMinElement.java
new file mode 100644
index 0000000..0c04837
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangMinElement.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import java.io.Serializable;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangErrMsgConstants.OPERATION_FAILED_ERROR_TAG;
+import static org.onosproject.yang.compiler.datamodel.utils.YangErrMsgConstants.TOO_FEW_ELEMENTS_ERROR_APP_TAG;
+
+/**
+ * Represents minimum element data represented in YANG.
+ */
+public class YangMinElement extends DefaultLocationInfo
+ implements YangAppErrorHolder, Serializable {
+
+ private static final long serialVersionUID = 807201695L;
+
+ /**
+ * YANG application error information.
+ */
+ private YangAppErrorInfo yangAppErrorInfo;
+
+ /**
+ * Reference:RFC 6020.
+ * <p>
+ * The "min-elements" statement, which is optional, takes as an argument a
+ * non-negative integer that puts a constraint on valid list entries. A
+ * valid leaf-list or list MUST have at least min-elements entries.
+ * <p>
+ * If no "min-elements" statement is present, it defaults to zero.
+ * <p>
+ * The behavior of the constraint depends on the type of the leaf-list's or
+ * list's closest ancestor node in the schema tree that is not a non-
+ * presence container:
+ * <p>
+ * If this ancestor is a case node, the constraint is enforced if any
+ * other node from the case exists.
+ * <p>
+ * Otherwise, it is enforced if the ancestor node exists.
+ */
+ private int minElement;
+
+ /**
+ * Creates a YANG minimum element.
+ */
+ public YangMinElement() {
+ yangAppErrorInfo = new YangAppErrorInfo();
+ yangAppErrorInfo.setErrorTag(OPERATION_FAILED_ERROR_TAG);
+ yangAppErrorInfo.setErrorAppTag(TOO_FEW_ELEMENTS_ERROR_APP_TAG);
+ }
+
+ /**
+ * Returns the minimum element value.
+ *
+ * @return the minimum element value
+ */
+ public int getMinElement() {
+ return minElement;
+ }
+
+ /**
+ * Sets the minimum element value.
+ *
+ * @param minElement the minimum element value
+ */
+ public void setMinElement(int minElement) {
+ this.minElement = minElement;
+ }
+
+ @Override
+ public void setAppErrorInfo(YangAppErrorInfo yangAppErrorInfo) {
+ this.yangAppErrorInfo = yangAppErrorInfo;
+ }
+
+ @Override
+ public YangAppErrorInfo getAppErrorInfo() {
+ return yangAppErrorInfo;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangModule.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangModule.java
new file mode 100644
index 0000000..360b192
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangModule.java
@@ -0,0 +1,820 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import static java.util.Collections.unmodifiableList;
+import static org.onosproject.yang.compiler.datamodel.ResolvableType.YANG_AUGMENT;
+import static org.onosproject.yang.compiler.datamodel.ResolvableType.YANG_BASE;
+import static org.onosproject.yang.compiler.datamodel.ResolvableType.YANG_COMPILER_ANNOTATION;
+import static org.onosproject.yang.compiler.datamodel.ResolvableType.YANG_DERIVED_DATA_TYPE;
+import static org.onosproject.yang.compiler.datamodel.ResolvableType.YANG_IDENTITYREF;
+import static org.onosproject.yang.compiler.datamodel.ResolvableType.YANG_IF_FEATURE;
+import static org.onosproject.yang.compiler.datamodel.ResolvableType.YANG_LEAFREF;
+import static org.onosproject.yang.compiler.datamodel.ResolvableType.YANG_USES;
+import static org.onosproject.yang.compiler.datamodel.YangSchemaNodeType.YANG_SINGLE_INSTANCE_NODE;
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.linkInterFileReferences;
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.resolveLinkingForResolutionList;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.MODULE_DATA;
+
+/*-
+ * Reference:RFC 6020.
+ * The "module" statement defines the module's name,
+ * and groups all statements that belong to the module together. The "module"
+ * statement's argument is the name of the module, followed by a block of
+ * sub statements that hold detailed module information.
+ * The module's sub statements
+ *
+ * +--------------+---------+-------------+-----------------------+
+ * |sub statement | section | cardinality | data model mapping |
+ * +--------------+---------+-------------+-----------------------+
+ * | anyxml | 7.10 | 0..n | not supported |
+ * | augment | 7.15 | 0..n | child nodes |
+ * | choice | 7.9 | 0..n | child nodes |
+ * | contact | 7.1.8 | 0..1 | string |
+ * | container | 7.5 | 0..n | child nodes |
+ * | description | 7.19.3 | 0..1 | string |
+ * | deviation | 7.18.3 | 0..n | TODO |
+ * | extension | 7.17 | 0..n | TODO |
+ * | feature | 7.18.1 | 0..n | TODO |
+ * | grouping | 7.11 | 0..n | child nodes |
+ * | identity | 7.16 | 0..n | TODO |
+ * | import | 7.1.5 | 0..n | list of import info |
+ * | include | 7.1.6 | 0..n | list of include info |
+ * | leaf | 7.6 | 0..n | list of leaf info |
+ * | leaf-list | 7.7 | 0..n | list of leaf-list info|
+ * | list | 7.8 | 0..n | child nodes |
+ * | namespace | 7.1.3 | 1 | string/uri |
+ * | notification | 7.14 | 0..n | TODO |
+ * | organization | 7.1.7 | 0..1 | string |
+ * | prefix | 7.1.4 | 1 | string |
+ * | reference | 7.19.4 | 0..1 | string |
+ * | revision | 7.1.9 | 0..n | revision |
+ * | rpc | 7.13 | 0..n | TODO |
+ * | typedef | 7.3 | 0..n | child nodes |
+ * | uses | 7.12 | 0..n | child nodes |
+ * | YANG-version | 7.1.2 | 0..1 | int |
+ * +--------------+---------+-------------+-----------------------+
+ */
+
+/**
+ * Represents data model node to maintain information defined in YANG module.
+ */
+public abstract class YangModule
+ extends YangNode
+ implements YangLeavesHolder, YangDesc, YangReference, Parsable,
+ CollisionDetector, YangReferenceResolver, RpcNotificationContainer,
+ YangFeatureHolder, YangIsFilterContentNodes, YangNamespace {
+
+ private static final long serialVersionUID = 806201610L;
+
+ /**
+ * Reference:RFC 6020.
+ * <p>
+ * The "contact" statement provides contact information for the module. The
+ * argument is a string that is used to specify contact information for the
+ * person or persons to whom technical queries concerning this module should
+ * be sent, such as their name, postal address, telephone number, and
+ * electronic mail address.
+ */
+ private String contact;
+
+ /**
+ * Reference:RFC 6020.
+ * <p>
+ * The "description" statement takes as an argument a string that contains a
+ * human-readable textual description of this definition. The text is
+ * provided in a language (or languages) chosen by the module developer; for
+ * the sake of interoperability.
+ */
+ private String description;
+
+ /**
+ * List of YANG modules imported.
+ */
+ private List<YangImport> importList;
+
+ /**
+ * List of YANG sub-modules included.
+ */
+ private List<YangInclude> includeList;
+
+ /**
+ * List of leaves at root level in the module.
+ */
+ private List<YangLeaf> listOfLeaf;
+
+ /**
+ * List of leaf-lists at root level in the module.
+ */
+ private List<YangLeafList> listOfLeafList;
+
+ /**
+ * List of feature at root level in the module.
+ */
+ private List<YangFeature> listOfFeature;
+
+ /**
+ * Reference:RFC 6020.
+ * <p>
+ * The "organization" statement defines the party responsible for this
+ * module. The argument is a string that is used to specify a textual
+ * description of the organization(s) under whose auspices this module was
+ * developed.
+ */
+ private String organization;
+
+ /**
+ * Prefix to refer to the objects in module.
+ */
+ private String prefix;
+
+ /**
+ * Reference of the module.
+ */
+ private String reference;
+
+ /**
+ * Revision info of the module.
+ */
+ private YangRevision revision;
+
+ /**
+ * YANG version.
+ */
+ private byte version;
+
+ /*-
+ * Reference RFC 6020.
+ *
+ * Nested typedefs and groupings.
+ * Typedefs and groupings may appear nested under many YANG statements,
+ * allowing these to be lexically scoped by the hierarchy under which
+ * they appear. This allows types and groupings to be defined near
+ * where they are used, rather than placing them at the top level of the
+ * hierarchy. The close proximity increases readability.
+ *
+ * Scoping also allows types to be defined without concern for naming
+ * conflicts between types in different submodules. Type names can be
+ * specified without adding leading strings designed to prevent name
+ * collisions within large modules.
+ *
+ * Finally, scoping allows the module author to keep types and groupings
+ * private to their module or submodule, preventing their reuse. Since
+ * only top-level types and groupings (i.e., those appearing as
+ * sub-statements to a module or submodule statement) can be used outside
+ * the module or submodule, the developer has more control over what
+ * pieces of their module are presented to the outside world, supporting
+ * the need to hide internal information and maintaining a boundary
+ * between what is shared with the outside world and what is kept
+ * private.
+ *
+ * Scoped definitions MUST NOT shadow definitions at a higher scope. A
+ * type or grouping cannot be defined if a higher level in the schema
+ * hierarchy has a definition with a matching identifier.
+ *
+ * A reference to an un-prefixed type or grouping, or one which uses the
+ * prefix of the current module, is resolved by locating the closest
+ * matching "typedef" or "grouping" statement among the immediate
+ * sub-statements of each ancestor statement.
+ */
+ private List<YangResolutionInfo> derivedTypeResolutionList;
+
+ /**
+ * Uses resolution list.
+ */
+ private List<YangResolutionInfo> usesResolutionList;
+
+ /**
+ * If-feature resolution list.
+ */
+ private List<YangResolutionInfo> ifFeatureResolutionList;
+
+ /**
+ * LeafRef resolution list.
+ */
+ private List<YangResolutionInfo> leafRefResolutionList;
+
+ /**
+ * Base resolution list.
+ */
+ private List<YangResolutionInfo> baseResolutionList;
+
+ /**
+ * IdentityRef resolution list.
+ */
+ private List<YangResolutionInfo> identityRefResolutionList;
+
+ /**
+ * Augment resolution list.
+ */
+ private List<YangResolutionInfo> augmentResolutionList;
+
+ /**
+ * Compiler annotation list.
+ */
+ private List<YangResolutionInfo> compilerAnnotationList;
+
+ /**
+ * Extension list.
+ */
+ private List<YangExtension> extensionList;
+
+ /**
+ * Flag to indicate the presence of notification.
+ */
+ private boolean isNotificationPresent;
+
+ /**
+ * Map of notification enum.
+ */
+ private final Map<String, YangSchemaNode> notificationEnumMap;
+
+ /**
+ * List of augments which augmenting to an input in rpc.
+ */
+ private final List<YangAugment> augments;
+
+ /**
+ * YANG defined namespace.
+ */
+ private String namespace;
+
+ /**
+ * Creates a YANG node of module type.
+ */
+ public YangModule() {
+
+ super(YangNodeType.MODULE_NODE, new HashMap<>());
+ derivedTypeResolutionList = new LinkedList<>();
+ augmentResolutionList = new LinkedList<>();
+ usesResolutionList = new LinkedList<>();
+ ifFeatureResolutionList = new LinkedList<>();
+ leafRefResolutionList = new LinkedList<>();
+ baseResolutionList = new LinkedList<>();
+ identityRefResolutionList = new LinkedList<>();
+ compilerAnnotationList = new LinkedList<>();
+ importList = new LinkedList<>();
+ includeList = new LinkedList<>();
+ listOfLeaf = new LinkedList<>();
+ listOfLeafList = new LinkedList<>();
+ extensionList = new LinkedList<>();
+ listOfFeature = new LinkedList<>();
+ notificationEnumMap = new HashMap<>();
+ augments = new LinkedList<>();
+ }
+
+ @Override
+ public void addToChildSchemaMap(YangSchemaNodeIdentifier id,
+ YangSchemaNodeContextInfo context) {
+ getYsnContextInfoMap().put(id, context);
+ }
+
+ @Override
+ public void incrementMandatoryChildCount() {
+ // TODO
+ }
+
+ @Override
+ public void addToDefaultChildMap(YangSchemaNodeIdentifier id,
+ YangSchemaNode node) {
+ // TODO
+ }
+
+ @Override
+ public YangSchemaNodeType getYangSchemaNodeType() {
+ return YANG_SINGLE_INSTANCE_NODE;
+ }
+
+ /**
+ * Returns the contact details of the module owner.
+ *
+ * @return the contact details of YANG owner
+ */
+ public String getContact() {
+ return contact;
+ }
+
+ /**
+ * Sets the contact details of the module owner.
+ *
+ * @param contact the contact details of YANG owner
+ */
+ public void setContact(String contact) {
+ this.contact = contact;
+ }
+
+ /**
+ * Returns the description of module.
+ *
+ * @return the description of YANG module
+ */
+ @Override
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * Sets the description of module.
+ *
+ * @param description set the description of YANG module
+ */
+ @Override
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ /**
+ * Returns the list of imported modules.
+ *
+ * @return the list of imported modules
+ */
+ @Override
+ public List<YangImport> getImportList() {
+ return unmodifiableList(importList);
+ }
+
+ /**
+ * Adds the imported module information to the import list.
+ *
+ * @param importedModule module being imported
+ */
+ @Override
+ public void addToImportList(YangImport importedModule) {
+ importList.add(importedModule);
+ }
+
+ @Override
+ public void setImportList(List<YangImport> importList) {
+ this.importList = importList;
+ }
+
+ /**
+ * Returns the list of included sub modules.
+ *
+ * @return the included list of sub modules
+ */
+ @Override
+ public List<YangInclude> getIncludeList() {
+ return unmodifiableList(includeList);
+ }
+
+ /**
+ * Adds the included sub module information to the include list.
+ *
+ * @param includeModule submodule being included
+ */
+ @Override
+ public void addToIncludeList(YangInclude includeModule) {
+ includeList.add(includeModule);
+ }
+
+ @Override
+ public void setIncludeList(List<YangInclude> includeList) {
+ this.includeList = includeList;
+ }
+
+ /**
+ * Returns the list of leaves in module.
+ *
+ * @return the list of leaves
+ */
+ @Override
+ public List<YangLeaf> getListOfLeaf() {
+ return unmodifiableList(listOfLeaf);
+ }
+
+ @Override
+ public void setListOfLeaf(List<YangLeaf> leafsList) {
+ listOfLeaf = leafsList;
+ }
+
+ /**
+ * Adds a leaf in module.
+ *
+ * @param leaf the leaf to be added
+ */
+ @Override
+ public void addLeaf(YangLeaf leaf) {
+ listOfLeaf.add(leaf);
+ }
+
+ /**
+ * Returns the list of leaf-list from module.
+ *
+ * @return the list of leaf-list
+ */
+ @Override
+ public List<YangLeafList> getListOfLeafList() {
+ return unmodifiableList(listOfLeafList);
+ }
+
+ @Override
+ public void setListOfLeafList(List<YangLeafList> listOfLeafList) {
+ this.listOfLeafList = listOfLeafList;
+ }
+
+
+ /**
+ * Adds a leaf-list in module.
+ *
+ * @param leafList the leaf-list to be added
+ */
+ @Override
+ public void addLeafList(YangLeafList leafList) {
+ listOfLeafList.add(leafList);
+ }
+
+ @Override
+ public List<YangFeature> getFeatureList() {
+ return unmodifiableList(listOfFeature);
+ }
+
+ @Override
+ public void addFeatureList(YangFeature feature) {
+ listOfFeature.add(feature);
+ }
+
+ @Override
+ public void setListOfFeature(List<YangFeature> listOfFeature) {
+ this.listOfFeature = listOfFeature;
+ }
+
+ /**
+ * Returns the modules organization.
+ *
+ * @return the organization
+ */
+ public String getOrganization() {
+ return organization;
+ }
+
+ /**
+ * Sets the modules organization.
+ *
+ * @param org the organization to set
+ */
+ public void setOrganization(String org) {
+ organization = org;
+ }
+
+ /**
+ * Returns the prefix.
+ *
+ * @return the prefix
+ */
+ @Override
+ public String getPrefix() {
+ return prefix;
+ }
+
+ /**
+ * Sets the prefix.
+ *
+ * @param prefix the prefix to set
+ */
+ @Override
+ public void setPrefix(String prefix) {
+ this.prefix = prefix;
+ }
+
+ @Override
+ public void resolveSelfFileLinking(ResolvableType type)
+ throws DataModelException {
+ // Get the list to be resolved.
+ List<YangResolutionInfo> resolutionList = getUnresolvedResolutionList(type);
+ // Resolve linking for a resolution list.
+ resolveLinkingForResolutionList(resolutionList, this);
+ }
+
+ @Override
+ public void resolveInterFileLinking(ResolvableType type)
+ throws DataModelException {
+ // Get the list to be resolved.
+ List<YangResolutionInfo> resolutionList = getUnresolvedResolutionList(type);
+ // Resolve linking for a resolution list.
+ linkInterFileReferences(resolutionList, this);
+ }
+
+ /**
+ * Returns the textual reference.
+ *
+ * @return the reference
+ */
+ @Override
+ public String getReference() {
+ return reference;
+ }
+
+ /**
+ * Sets the textual reference.
+ *
+ * @param reference the reference to set
+ */
+ @Override
+ public void setReference(String reference) {
+ this.reference = reference;
+ }
+
+ /**
+ * Returns the revision.
+ *
+ * @return the revision
+ */
+ public YangRevision getRevision() {
+ return revision;
+ }
+
+ /**
+ * Sets the revision.
+ *
+ * @param revision the revision to set
+ */
+ public void setRevision(YangRevision revision) {
+ this.revision = revision;
+ }
+
+ /**
+ * Returns the version.
+ *
+ * @return the version
+ */
+ public byte getVersion() {
+ return version;
+ }
+
+ /**
+ * Sets the version.
+ *
+ * @param version the version to set
+ */
+ public void setVersion(byte version) {
+ this.version = version;
+ }
+
+ /**
+ * Adds extension in extension list.
+ *
+ * @param extension the extension to be added
+ */
+ public void addExtension(YangExtension extension) {
+ extensionList.add(extension);
+ }
+
+ /**
+ * Returns the extension list.
+ *
+ * @return the extension list
+ */
+ public List<YangExtension> getExtensionList() {
+ return unmodifiableList(extensionList);
+ }
+
+ /**
+ * Sets the extension list.
+ *
+ * @param extensionList the list of extension
+ */
+ protected void setExtensionList(List<YangExtension> extensionList) {
+ this.extensionList = extensionList;
+ }
+
+ /**
+ * Adds to extension list.
+ *
+ * @param extension YANG extension
+ */
+ public void addToExtensionList(YangExtension extension) {
+ extensionList.add(extension);
+ }
+
+ /**
+ * Returns the type of the parsed data.
+ *
+ * @return returns MODULE_DATA
+ */
+ @Override
+ public YangConstructType getYangConstructType() {
+ return MODULE_DATA;
+ }
+
+ /**
+ * Validates the data on entering the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnEntry()
+ throws DataModelException {
+ /*
+ * Module is root in the data model tree, hence there is no entry
+ * validation
+ */
+ }
+
+ /**
+ * Validates the data on exiting the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnExit()
+ throws DataModelException {
+ /*
+ * TODO: perform symbol linking for the imported or included YANG info.
+ * TODO: perform symbol resolution for referred YANG entities.
+ */
+ }
+
+ @Override
+ public void detectCollidingChild(String identifierName,
+ YangConstructType dataType)
+ throws DataModelException {
+ // Asks helper to detect colliding child.
+ detectCollidingChildUtil(identifierName, dataType, this);
+ }
+
+ @Override
+ public void detectSelfCollision(String identifierName,
+ YangConstructType dataType)
+ throws DataModelException {
+ // Not required as module doesn't have any parent.
+ }
+
+ @Override
+ public List<YangResolutionInfo> getUnresolvedResolutionList(ResolvableType type) {
+ if (type == YANG_DERIVED_DATA_TYPE) {
+ return unmodifiableList(derivedTypeResolutionList);
+ } else if (type == YANG_USES) {
+ return unmodifiableList(usesResolutionList);
+ } else if (type == YANG_AUGMENT) {
+ return unmodifiableList(augmentResolutionList);
+ } else if (type == YANG_IF_FEATURE) {
+ return unmodifiableList(ifFeatureResolutionList);
+ } else if (type == YANG_LEAFREF) {
+ return unmodifiableList(leafRefResolutionList);
+ } else if (type == YANG_BASE) {
+ return unmodifiableList(baseResolutionList);
+ } else if (type == YANG_IDENTITYREF) {
+ return unmodifiableList(identityRefResolutionList);
+ } else {
+ return unmodifiableList(compilerAnnotationList);
+ }
+ }
+
+ @Override
+ public void addToResolutionList(YangResolutionInfo info,
+ ResolvableType type) {
+ if (type == YANG_DERIVED_DATA_TYPE) {
+ derivedTypeResolutionList.add(info);
+ } else if (type == YANG_USES) {
+ usesResolutionList.add(info);
+ } else if (type == YANG_IF_FEATURE) {
+ ifFeatureResolutionList.add(info);
+ } else if (type == YANG_LEAFREF) {
+ leafRefResolutionList.add(info);
+ } else if (type == YANG_BASE) {
+ baseResolutionList.add(info);
+ } else if (type == YANG_AUGMENT) {
+ augmentResolutionList.add(info);
+ } else if (type == YANG_IDENTITYREF) {
+ identityRefResolutionList.add(info);
+ } else if (type == YANG_COMPILER_ANNOTATION) {
+ compilerAnnotationList.add(info);
+ }
+ }
+
+ @Override
+ public void setResolutionList(List<YangResolutionInfo> resolutionList,
+ ResolvableType type) {
+ if (type == YANG_DERIVED_DATA_TYPE) {
+ derivedTypeResolutionList = resolutionList;
+ } else if (type == YANG_USES) {
+ usesResolutionList = resolutionList;
+ } else if (type == YANG_IF_FEATURE) {
+ ifFeatureResolutionList.add((YangResolutionInfo) resolutionList);
+ } else if (type == YANG_LEAFREF) {
+ leafRefResolutionList = resolutionList;
+ } else if (type == YANG_BASE) {
+ baseResolutionList = resolutionList;
+ } else if (type == YANG_AUGMENT) {
+ augmentResolutionList = resolutionList;
+ } else if (type == YANG_IDENTITYREF) {
+ identityRefResolutionList = resolutionList;
+ } else if (type == YANG_COMPILER_ANNOTATION) {
+ compilerAnnotationList = resolutionList;
+ }
+ }
+
+ @Override
+ public void addReferencesToImportList(Set<YangNode> yangNodeSet)
+ throws DataModelException {
+ // Run through the imported list to add references.
+ for (YangImport yangImport : getImportList()) {
+ yangImport.addReferenceToImport(yangNodeSet);
+ }
+ }
+
+ @Override
+ public void addReferencesToIncludeList(Set<YangNode> yangNodeSet)
+ throws DataModelException {
+ // Run through the included list to add references.
+ for (YangInclude yangInclude : getIncludeList()) {
+ YangSubModule subModule = yangInclude
+ .addReferenceToInclude(yangNodeSet);
+
+ // Check if the referred sub-modules parent is self
+ if (!subModule.getBelongsTo().getModuleNode().equals(this)) {
+ yangInclude.reportIncludeError();
+ }
+ }
+ }
+
+ @Override
+ public void setLeafNameSpaceAndAddToParentSchemaMap() {
+ // Add namespace for all leafs.
+ for (YangLeaf yangLeaf : getListOfLeaf()) {
+ yangLeaf.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
+ }
+ // Add namespace for all leaf list.
+ for (YangLeafList yangLeafList : getListOfLeafList()) {
+ yangLeafList.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
+ }
+ }
+
+ @Override
+ public boolean isNotificationPresent() {
+ return isNotificationPresent;
+ }
+
+ @Override
+ public void setNotificationPresenceFlag(boolean notificationPresent) {
+ isNotificationPresent = notificationPresent;
+ }
+
+ @Override
+ public void addToNotificationEnumMap(String enumName,
+ YangSchemaNode notification) {
+ notificationEnumMap.put(enumName, notification);
+ }
+
+ @Override
+ public YangSchemaNode getNotificationSchemaNode(String enumName) {
+ return notificationEnumMap.get(enumName);
+ }
+
+ /**
+ * Adds to augment list.
+ *
+ * @param augment augment which is augmenting input
+ */
+ public void addToAugmentList(YangAugment augment) {
+ augments.add(augment);
+ }
+
+ /**
+ * Returns augmented list.
+ *
+ * @return augmented list
+ */
+ public List<YangAugment> getAugmentList() {
+ return unmodifiableList(augments);
+ }
+
+ @Override
+ public String getModuleNamespace() {
+ return namespace;
+ }
+
+ @Override
+ public String getModuleName() {
+ return getName();
+ }
+
+ public void setModuleNamespace(String namespace) {
+ this.namespace = namespace;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangMust.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangMust.java
new file mode 100644
index 0000000..45c349f
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangMust.java
@@ -0,0 +1,186 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import java.io.Serializable;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.MUST_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangErrMsgConstants.MUST_VIOLATION_ERROR_APP_TAG;
+import static org.onosproject.yang.compiler.datamodel.utils.YangErrMsgConstants.OPERATION_FAILED_ERROR_TAG;
+
+/*-
+ * The "must" statement, which is optional, takes as an argument a string that
+ * contains an XPath expression. It is used to formally declare a constraint
+ * on valid data.
+ *
+ * When a datastore is validated, all "must" constraints are conceptually
+ * evaluated once for each data node in the data tree, and for all leafs with
+ * default values in use. If a data node does not exist in the data tree, and
+ * it does not have a default value, its "must" statements are not evaluated.
+ *
+ * All such constraints MUST evaluate to true for the data to be valid.
+ *
+ * The must's sub-statements
+ *
+ * +---------------+---------+-------------+------------------+
+ * | substatement | section | cardinality |data model mapping|
+ * +---------------+---------+-------------+------------------+
+ * | description | 7.19.3 | 0..1 | -string |
+ * | error-app-tag | 7.5.4.2 | 0..1 | -not supported |
+ * | error-message | 7.5.4.1 | 0..1 | -not supported |
+ * | reference | 7.19.4 | 0..1 | -string |
+ * +---------------+---------+-------------+------------------+
+ */
+
+/**
+ * Represents information defined in YANG must.
+ */
+public class YangMust extends DefaultLocationInfo
+ implements YangDesc, YangReference, Parsable, Serializable, YangAppErrorHolder {
+
+ private static final long serialVersionUID = 806201646L;
+
+ /**
+ * Constraint info.
+ */
+ private String constraint;
+
+ /**
+ * Description string.
+ */
+ private String description;
+
+ /**
+ * Reference string.
+ */
+ private String reference;
+
+ /**
+ * YANG application error information.
+ */
+ private YangAppErrorInfo yangAppErrorInfo;
+
+ /**
+ * Creates a YANG must restriction.
+ */
+ public YangMust() {
+ yangAppErrorInfo = new YangAppErrorInfo();
+ yangAppErrorInfo.setErrorTag(OPERATION_FAILED_ERROR_TAG);
+ yangAppErrorInfo.setErrorAppTag(MUST_VIOLATION_ERROR_APP_TAG);
+ }
+
+ /**
+ * Returns the constraint.
+ *
+ * @return the constraint
+ */
+ public String getConstraint() {
+ return constraint;
+ }
+
+ /**
+ * Sets the constraint.
+ *
+ * @param constraint the constraint to set
+ */
+ public void setConstraint(String constraint) {
+ this.constraint = constraint;
+ }
+
+ /**
+ * Returns the description.
+ *
+ * @return the description
+ */
+ @Override
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * Sets the description.
+ *
+ * @param description set the description
+ */
+ @Override
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ /**
+ * Returns the textual reference.
+ *
+ * @return the reference
+ */
+ @Override
+ public String getReference() {
+ return reference;
+ }
+
+ /**
+ * Sets the textual reference.
+ *
+ * @param reference the reference to set
+ */
+ @Override
+ public void setReference(String reference) {
+ this.reference = reference;
+ }
+
+ /**
+ * Returns the type of the parsed data.
+ *
+ * @return returns MUST_DATA
+ */
+ @Override
+ public YangConstructType getYangConstructType() {
+ return MUST_DATA;
+ }
+
+ /**
+ * Validates the data on entering the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnEntry() throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+
+ /**
+ * Validates the data on exiting the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnExit() throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+
+ @Override
+ public void setAppErrorInfo(YangAppErrorInfo yangAppErrorInfo) {
+ this.yangAppErrorInfo = yangAppErrorInfo;
+ }
+
+ @Override
+ public YangAppErrorInfo getAppErrorInfo() {
+ return yangAppErrorInfo;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangMustHolder.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangMustHolder.java
new file mode 100644
index 0000000..8a9b39a
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangMustHolder.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import java.util.List;
+
+/**
+ * Abstraction of must entity. It is used to abstract the data holders of must.
+ */
+public interface YangMustHolder {
+
+ /**
+ * Returns the list of must from data holder like container / list.
+ *
+ * @return the list of must
+ */
+ List<YangMust> getListOfMust();
+
+ /**
+ * Sets the list of must.
+ *
+ * @param mustConstraintList the list of must to set
+ */
+ void setListOfMust(List<YangMust> mustConstraintList);
+
+ /**
+ * Adds must in data holder like container / list.
+ *
+ * @param must the must to be added
+ */
+ void addMust(YangMust must);
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangNamespace.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangNamespace.java
new file mode 100644
index 0000000..5131c2c
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangNamespace.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+/**
+ * Representation of YANG namespace.
+ */
+public interface YangNamespace {
+
+ /**
+ * Returns module's namespace.
+ *
+ * @return module namespace
+ */
+ String getModuleNamespace();
+
+ /**
+ * Returns module name.
+ *
+ * @return module name
+ */
+ String getModuleName();
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangNode.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangNode.java
new file mode 100644
index 0000000..d962a39
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangNode.java
@@ -0,0 +1,930 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.onosproject.yang.compiler.datamodel.TraversalType.CHILD;
+import static org.onosproject.yang.compiler.datamodel.TraversalType.PARENT;
+import static org.onosproject.yang.compiler.datamodel.TraversalType.SIBILING;
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.cloneListOfLeaf;
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.cloneListOfLeafList;
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.updateClonedLeavesUnionEnumRef;
+
+/**
+ * Represents base class of a node in data model tree.
+ */
+public abstract class YangNode
+ implements Cloneable, Serializable, YangSchemaNode,
+ Comparable<YangNode> {
+
+ private static final long serialVersionUID = 806201601L;
+
+ /**
+ * YANG schema node identifier.
+ */
+ private YangSchemaNodeIdentifier yangSchemaNodeIdentifier;
+
+ /**
+ * Type of node.
+ */
+ private YangNodeType nodeType;
+
+ /**
+ * Parent reference.
+ */
+ private YangNode parent;
+
+ /**
+ * First child reference.
+ */
+ private YangNode child;
+
+ /**
+ * Next sibling reference.
+ */
+ private YangNode nextSibling;
+
+ /**
+ * Previous sibling reference.
+ */
+ private YangNode previousSibling;
+
+ /**
+ * Priority of the node.
+ */
+ private int priority;
+
+ /**
+ * Flag if the node is for translation.
+ */
+ private boolean isToTranslate = true;
+
+ private transient int lineNumber;
+ private transient int charPosition;
+ private String fileName;
+
+ /**
+ * Map of YANG context information. It is to be consumed by YMS.
+ */
+ private Map<YangSchemaNodeIdentifier, YangSchemaNodeContextInfo> ysnContextInfoMap;
+
+ /**
+ * Count of mandatory YANG schema nodes.
+ */
+ private int mandatoryChildCount;
+
+ /**
+ * Yang revision.
+ */
+ private YangRevision revision;
+
+ /**
+ * Map of default schema nodes.
+ */
+ private Map<YangSchemaNodeIdentifier, YangSchemaNode> defaultChildMap;
+
+ /**
+ * Flag to check whether any descendant node is augmented.
+ */
+ private boolean isDescendantNodeAugmented;
+
+ /**
+ * Referred schema node, only applicable during grouping.
+ */
+ private YangNode referredSchemaNode;
+
+ /**
+ * Returns the priority of the node.
+ *
+ * @return priority of the node
+ */
+ public int getPriority() {
+ return priority;
+ }
+
+ /**
+ * Sets the priority of the node.
+ *
+ * @param priority of the node
+ */
+ public void setPriority(int priority) {
+ this.priority = priority;
+ }
+
+ /**
+ * Creates a YANG node object.
+ */
+ @SuppressWarnings("unused")
+ private YangNode() {
+ }
+
+ /**
+ * Creates a specific type of node.
+ *
+ * @param type of YANG node
+ * @param ysnContextInfoMap YSN context info map
+ */
+ protected YangNode(YangNodeType type,
+ Map<YangSchemaNodeIdentifier, YangSchemaNodeContextInfo> ysnContextInfoMap) {
+ nodeType = type;
+ this.ysnContextInfoMap = ysnContextInfoMap;
+ }
+
+ /**
+ * Returns true if descendant node is augmented.
+ *
+ * @return true if descendant node is augmented
+ */
+ public boolean isDescendantNodeAugmented() {
+ return isDescendantNodeAugmented;
+ }
+
+ /**
+ * Sets true if descendant node is augmented.
+ *
+ * @param descendantNodeAugmented true if descendant node is augmented.
+ */
+ public void setDescendantNodeAugmented(boolean descendantNodeAugmented) {
+ isDescendantNodeAugmented = descendantNodeAugmented;
+ }
+
+ /**
+ * Returns the node type.
+ *
+ * @return node type
+ */
+ public YangNodeType getNodeType() {
+ return nodeType;
+ }
+
+ /**
+ * Sets the node type.
+ *
+ * @param nodeType type of node
+ */
+ private void setNodeType(YangNodeType nodeType) {
+ this.nodeType = nodeType;
+ }
+
+ /**
+ * Returns the parent of node.
+ *
+ * @return parent of node
+ */
+ public YangNode getParent() {
+ return parent;
+ }
+
+ /**
+ * Sets the parent of node.
+ *
+ * @param parent node
+ */
+ public void setParent(YangNode parent) {
+ this.parent = parent;
+ }
+
+ /**
+ * Returns the first child of node.
+ *
+ * @return first child of node
+ */
+ public YangNode getChild() {
+ return child;
+ }
+
+ /**
+ * Sets the first instance of a child node.
+ *
+ * @param child is only child to be set
+ */
+ public void setChild(YangNode child) {
+ this.child = child;
+ }
+
+ /**
+ * Returns the next sibling of node.
+ *
+ * @return next sibling of node
+ */
+ public YangNode getNextSibling() {
+ return nextSibling;
+ }
+
+ /**
+ * Sets the next sibling of node.
+ *
+ * @param sibling YANG node
+ */
+ public void setNextSibling(YangNode sibling) {
+ nextSibling = sibling;
+ }
+
+ /**
+ * Returns the previous sibling.
+ *
+ * @return previous sibling node
+ */
+ public YangNode getPreviousSibling() {
+ return previousSibling;
+ }
+
+ /**
+ * Sets the previous sibling.
+ *
+ * @param previousSibling points to predecessor sibling
+ */
+ public void setPreviousSibling(YangNode previousSibling) {
+ this.previousSibling = previousSibling;
+ }
+
+ /**
+ * Adds a child node, the children sibling list will be sorted based on node
+ * type.
+ *
+ * @param newChild refers to a child to be added
+ * @throws DataModelException due to violation in data model rules
+ */
+ public void addChild(YangNode newChild)
+ throws DataModelException {
+ if (newChild.getNodeType() == null) {
+ throw new DataModelException("Abstract node cannot be inserted " +
+ "into a tree " + getName() +
+ " in " + getLineNumber() +
+ " at " + getCharPosition() +
+ " in " + getFileName() + "\"");
+ }
+
+ if (newChild.getParent() == null) {
+ newChild.setParent(this);
+ } else if (newChild.getParent() != this) {
+ throw new DataModelException("Node is already part of a tree " +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition() + " in " +
+ getFileName() + "\"");
+ }
+
+ if (newChild.getChild() != null) {
+ throw new DataModelException("Child to be added is not atomic, " +
+ "it already has a child " +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition() + " in " +
+ getFileName() + "\"");
+ }
+
+ if (newChild.getNextSibling() != null) {
+ throw new DataModelException("Child to be added is not atomic, " +
+ "it already has a next " +
+ "sibling " + getName() +
+ " in " + getLineNumber() +
+ " at " + getCharPosition() +
+ " in " + getFileName() + "\"");
+ }
+
+ if (newChild.getPreviousSibling() != null) {
+ throw new DataModelException("Child to be added is not atomic, " +
+ "it already has a previous " +
+ "sibling " + getName() +
+ " in " + getLineNumber() +
+ " at " + getCharPosition() +
+ " in " + getFileName() + "\"");
+ }
+
+ /* First child to be added */
+ if (getChild() == null) {
+ setChild(newChild);
+ } else {
+
+ YangNode curNode;
+ curNode = getChild();
+
+ // Get the predecessor child of new child
+ while (curNode.getNextSibling() != null) {
+ curNode = curNode.getNextSibling();
+ }
+
+ // If the new node needs to be the last child
+ if (curNode.getNextSibling() == null) {
+ curNode.setNextSibling(newChild);
+ newChild.setPreviousSibling(curNode);
+ }
+ }
+ }
+
+ /**
+ * Processes addition of schema node child to parent map.
+ *
+ * @param name name of the node
+ * @param namespace namespace of the node
+ */
+ protected void processAdditionOfSchemaNodeToParentMap(String name,
+ YangNamespace namespace) {
+ processAdditionOfSchemaNodeToMap(name, namespace, this, getParent());
+ }
+
+ /**
+ * Processes addition of schema node child to parent map.
+ *
+ * @param name name of the node
+ * @param namespace namespace of the node
+ * @param yangSchemaNode YANG schema node
+ */
+ public void processAdditionOfSchemaNodeToCurNodeMap(String name,
+ YangNamespace namespace,
+ YangSchemaNode yangSchemaNode) {
+ processAdditionOfSchemaNodeToMap(name, namespace, yangSchemaNode, this);
+ }
+
+ /**
+ * Processes addition of schema node child to map.
+ *
+ * @param name name of the node
+ * @param namespace namespace of the node
+ * @param yangSchemaNode YANG schema node
+ * @param childSchemaMapHolder child schema map holder
+ */
+ private void processAdditionOfSchemaNodeToMap(String name,
+ YangNamespace namespace,
+ YangSchemaNode yangSchemaNode,
+ YangNode childSchemaMapHolder) {
+ // Addition of node to schema node map.
+ // Create YANG schema node identifier with child node name.
+ YangSchemaNodeIdentifier yangSchemaNodeIdentifier = new YangSchemaNodeIdentifier();
+ yangSchemaNodeIdentifier.setName(name);
+ yangSchemaNodeIdentifier.setNameSpace(namespace);
+ // Create YANG schema node context info and set child node.
+ YangSchemaNodeContextInfo yangSchemaNodeContextInfo = new YangSchemaNodeContextInfo();
+ yangSchemaNodeContextInfo.setSchemaNode(yangSchemaNode);
+ // Invoke parent method to add the created entry.
+ try {
+ childSchemaMapHolder.addToChildSchemaMap(yangSchemaNodeIdentifier,
+ yangSchemaNodeContextInfo);
+ } catch (DataModelException e) {
+ //TODO
+ }
+ }
+
+ @Override
+ public int compareTo(YangNode otherNode) {
+ if (priority == otherNode.getPriority()) {
+ return 0;
+ }
+ return ((Integer) otherNode.getPriority()).compareTo(priority);
+ }
+
+ /**
+ * Clones the current node contents and create a new node.
+ *
+ * @param yangUses YANG uses
+ * @return cloned node
+ * @throws CloneNotSupportedException clone is not supported by the referred
+ * node
+ */
+ public YangNode clone(YangUses yangUses)
+ throws CloneNotSupportedException {
+ YangNode clonedNode = (YangNode) super.clone();
+ clonedNode.referredSchemaNode = this;
+ if (clonedNode instanceof YangLeavesHolder) {
+ try {
+ cloneListOfLeaf((YangLeavesHolder) clonedNode, yangUses);
+ cloneListOfLeafList((YangLeavesHolder) clonedNode, yangUses);
+ } catch (DataModelException e) {
+ throw new CloneNotSupportedException(e.getMessage());
+ }
+ }
+
+ clonedNode.setParent(null);
+ clonedNode.setChild(null);
+ clonedNode.setNextSibling(null);
+ clonedNode.setPreviousSibling(null);
+ clonedNode.yangSchemaNodeIdentifier =
+ clonedNode.yangSchemaNodeIdentifier.clone();
+ clonedNode.ysnContextInfoMap = new HashMap<>();
+ if (clonedNode instanceof YangAugmentableNode) {
+ ((YangAugmentableNode) clonedNode).cloneAugmentInfo();
+ }
+ return clonedNode;
+ }
+
+ /**
+ * Clones the subtree from the specified source node to the mentioned target
+ * node. The source and target root node cloning is carried out by the
+ * caller.
+ *
+ * @param srcRootNode source node for sub tree cloning
+ * @param dstRootNode destination node where the sub tree needs to be cloned
+ * @param yangUses YANG uses
+ * @throws DataModelException data model error
+ */
+ public static void cloneSubTree(YangNode srcRootNode, YangNode dstRootNode,
+ YangUses yangUses)
+ throws DataModelException {
+
+ YangNode nextNodeToClone = srcRootNode;
+ TraversalType curTraversal;
+
+ YangNode clonedTreeCurNode = dstRootNode;
+ YangNode newNode = null;
+
+ nextNodeToClone = nextNodeToClone.getChild();
+ if (nextNodeToClone == null) {
+ return;
+ } else {
+ /*
+ * Root level cloning is taken care in the caller.
+ */
+ curTraversal = CHILD;
+ }
+
+ /*
+ * Caller ensures the cloning of the root nodes
+ */
+ try {
+ while (nextNodeToClone != srcRootNode) {
+ if (nextNodeToClone == null) {
+ throw new DataModelException("Internal error: Cloning " +
+ "failed, source " +
+ "tree null pointer " +
+ "reached " +
+ nextNodeToClone.getName() +
+ " in " + nextNodeToClone.getLineNumber() +
+ " at " + nextNodeToClone.getCharPosition() +
+ " in " + nextNodeToClone.getFileName() + "\"");
+ }
+ if (curTraversal != PARENT) {
+ newNode = nextNodeToClone.clone(yangUses);
+ detectCollisionWhileCloning(clonedTreeCurNode, newNode,
+ curTraversal);
+ }
+
+ if (curTraversal == CHILD) {
+
+ /*
+ * add the new node to the cloned tree.
+ */
+ clonedTreeCurNode.addChild(newNode);
+
+ /*
+ * update the cloned tree's traversal current node as the
+ * new node.
+ */
+ clonedTreeCurNode = newNode;
+ } else if (curTraversal == SIBILING) {
+
+ clonedTreeCurNode.addNextSibling(newNode);
+ clonedTreeCurNode = newNode;
+ } else {
+ if (clonedTreeCurNode instanceof YangLeavesHolder) {
+ updateClonedLeavesUnionEnumRef((YangLeavesHolder) clonedTreeCurNode);
+ }
+ clonedTreeCurNode = clonedTreeCurNode.getParent();
+ }
+
+ if (curTraversal != PARENT && nextNodeToClone.getChild() != null) {
+ curTraversal = CHILD;
+
+ /*
+ * update the traversal's current node.
+ */
+ nextNodeToClone = nextNodeToClone.getChild();
+ } else if (nextNodeToClone.getNextSibling() != null) {
+
+ curTraversal = SIBILING;
+
+ nextNodeToClone = nextNodeToClone.getNextSibling();
+ } else {
+ curTraversal = PARENT;
+ nextNodeToClone = nextNodeToClone.getParent();
+ }
+ }
+ } catch (CloneNotSupportedException e) {
+ throw new DataModelException("Failed to clone the tree " +
+ nextNodeToClone.getName() +
+ " in " + nextNodeToClone.getLineNumber() +
+ " at " + nextNodeToClone.getCharPosition() +
+ " in " + nextNodeToClone.getFileName() + "\"");
+ }
+ }
+
+ /**
+ * Detects collision when the grouping is deep copied to the uses's parent.
+ *
+ * @param currentNode parent/previous sibling node for the new node
+ * @param newNode node which has to be added
+ * @param addAs traversal type of the node
+ * @throws DataModelException data model error
+ */
+ private static void detectCollisionWhileCloning(YangNode currentNode,
+ YangNode newNode,
+ TraversalType addAs)
+ throws DataModelException {
+ if (!(currentNode instanceof CollisionDetector)
+ || !(newNode instanceof Parsable)) {
+ throw new DataModelException("Node in data model tree does not " +
+ "support collision detection " +
+ newNode.getName() + " in " +
+ newNode.getLineNumber() + " at " +
+ newNode.getCharPosition() +
+ " in " + newNode.getFileName() + "\"");
+ }
+
+ CollisionDetector collisionDetector = (CollisionDetector) currentNode;
+ Parsable parsable = (Parsable) newNode;
+ if (addAs == CHILD) {
+ collisionDetector.detectCollidingChild(newNode.getName(),
+ parsable.getYangConstructType());
+ } else if (addAs == SIBILING) {
+ currentNode = currentNode.getParent();
+ if (!(currentNode instanceof CollisionDetector)) {
+ throw new DataModelException("Node in data model tree does " +
+ "not support collision " +
+ "detection" + currentNode.getName() +
+ " in " + currentNode.getLineNumber() +
+ " at " + currentNode.getCharPosition() +
+ " in " + currentNode.getFileName() + "\"");
+ }
+ collisionDetector = (CollisionDetector) currentNode;
+ collisionDetector.detectCollidingChild(newNode.getName(),
+ parsable.getYangConstructType());
+ } else {
+ throw new DataModelException("Error tree cloning " +
+ currentNode.getName() + " in" +
+ " " + currentNode.getLineNumber() +
+ " at " + currentNode.getCharPosition() +
+ " in " + currentNode.getFileName() + "\"");
+ }
+ }
+
+ /**
+ * /** Returns true if translation required.
+ *
+ * @return true if translation required
+ */
+ public boolean isToTranslate() {
+ return isToTranslate;
+ }
+
+ /**
+ * Sest true if translation required.
+ *
+ * @param toTranslate true if translation required.
+ */
+ public void setToTranslate(boolean toTranslate) {
+ isToTranslate = toTranslate;
+ }
+
+ /**
+ * Adds a new next sibling.
+ *
+ * @param newSibling new sibling to be added
+ * @throws DataModelException data model error
+ */
+ private void addNextSibling(YangNode newSibling)
+ throws DataModelException {
+
+ if (newSibling.getNodeType() == null) {
+ throw new DataModelException("Cloned abstract node cannot be " +
+ "inserted into a tree "
+ + getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition()
+ + " in " + getFileName() + "\"");
+ }
+
+ if (newSibling.getParent() == null) {
+ /**
+ * Since the siblings needs to have a common parent, set the parent
+ * as the current node's parent
+ */
+ newSibling.setParent(getParent());
+ } else {
+ throw new DataModelException("Node is already part of a tree, " +
+ "and cannot be added as a " +
+ "sibling " + getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition() + " in " +
+ getFileName() + "\"");
+ }
+
+ if (newSibling.getPreviousSibling() == null) {
+ newSibling.setPreviousSibling(this);
+ setNextSibling(newSibling);
+ } else {
+ throw new DataModelException("New sibling to be added is not " +
+ "atomic, it already has a " +
+ "previous sibling " +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition() + " in " +
+ getFileName() + "\"");
+ }
+
+ if (newSibling.getChild() != null) {
+ throw new DataModelException("Sibling to be added is not atomic, " +
+ "it already has a child " +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition() + " in " +
+ getFileName() + "\"");
+ }
+
+ if (newSibling.getNextSibling() != null) {
+ throw new DataModelException("Sibling to be added is not atomic, " +
+ "it already has a next " +
+ "sibling " + getName() +
+ " in " + getLineNumber() +
+ " at " + getCharPosition() +
+ " in " + getFileName() + "\"");
+ }
+ }
+
+ @Override
+ public YangSchemaNodeContextInfo getChildSchema(YangSchemaNodeIdentifier dataNodeIdentifier)
+ throws DataModelException {
+ YangSchemaNodeContextInfo childSchemaContext =
+ ysnContextInfoMap.get(dataNodeIdentifier);
+ if (childSchemaContext == null) {
+ throw new DataModelException("Requested " +
+ dataNodeIdentifier.getName() +
+ " is not child in " +
+ getName());
+ }
+ return childSchemaContext;
+ }
+
+ @Override
+ public int getMandatoryChildCount()
+ throws DataModelException {
+ return mandatoryChildCount;
+ }
+
+ @Override
+ public Map<YangSchemaNodeIdentifier, YangSchemaNode> getDefaultChild(YangSchemaNodeIdentifier dataNodeIdentifier) {
+ return defaultChildMap;
+ }
+
+ @Override
+ public boolean isNotificationPresent() throws DataModelException {
+ throw new DataModelException("Method is called for node other than module/sub-module.");
+ }
+
+ @Override
+ public boolean isEmptyDataType() throws DataModelException {
+ throw new DataModelException("Method is called for node other than " +
+ "leaf/leaf-list.");
+ }
+
+ /**
+ * Adds child schema in child schema map, this is used to add the schema
+ * to the map in case of leaf as a child.
+ *
+ * @param schemaNodeIdentifier YANG schema node identifier
+ * @param yangSchemaNodeContextInfo YANG data node context information
+ * @throws DataModelException a violation in data model rule
+ */
+ public abstract void addToChildSchemaMap(YangSchemaNodeIdentifier schemaNodeIdentifier,
+ YangSchemaNodeContextInfo yangSchemaNodeContextInfo)
+ throws DataModelException;
+
+ /**
+ * Increments mandatory child count.
+ */
+ public abstract void incrementMandatoryChildCount();
+
+ /**
+ * Sets mandatory child count.
+ *
+ * @param mandatoryChildCount value of mandatory child count
+ */
+ public void setMandatoryChildCount(int mandatoryChildCount) {
+ this.mandatoryChildCount = mandatoryChildCount;
+ }
+
+ /**
+ * Adds default child information to map.
+ *
+ * @param yangSchemaNodeIdentifier YANG schema node identifier
+ * @param yangSchemaNode YANG schema node
+ */
+ public abstract void addToDefaultChildMap(YangSchemaNodeIdentifier yangSchemaNodeIdentifier,
+ YangSchemaNode yangSchemaNode);
+
+ /**
+ * Returns default child map.
+ *
+ * @return default child map
+ */
+ public Map<YangSchemaNodeIdentifier, YangSchemaNode> getDefaultChildMap() {
+ return defaultChildMap;
+ }
+
+ /**
+ * Returns YANG schema node context info map.
+ *
+ * @return YANG schema node context info map
+ */
+ public Map<YangSchemaNodeIdentifier,
+ YangSchemaNodeContextInfo> getYsnContextInfoMap() {
+ return ysnContextInfoMap;
+ }
+
+ /**
+ * Adds namespace for self, next sibling and first child. This is used
+ * after obtaining namespace in case of submodule after performing
+ * linking.
+ */
+ public void setNameSpaceAndAddToParentSchemaMap() {
+ // Get parent namespace.
+ if (getParent() != null) {
+ // Get parent namespace and set namespace for self node.
+ setNameSpace(getParent().getNameSpace());
+ // Process addition of leaf to the child schema map of parent.
+ processAdditionOfSchemaNodeToParentMap(getName(), getNameSpace());
+ } else {
+ // Module/Sub-module
+ setNameSpace((YangNamespace) this);
+ }
+ /*
+ * Check if node contains leaf/leaf-list, if yes add namespace for leaf
+ * and leaf list.
+ */
+ if (this instanceof YangLeavesHolder) {
+ ((YangLeavesHolder) this).setLeafNameSpaceAndAddToParentSchemaMap();
+ }
+ }
+
+ /**
+ * Sets YSN context info map.
+ *
+ * @param ysnContextInfoMap YSN context info map
+ */
+ public void setYsnContextInfoMap(Map<YangSchemaNodeIdentifier,
+ YangSchemaNodeContextInfo> ysnContextInfoMap) {
+ this.ysnContextInfoMap = ysnContextInfoMap;
+ }
+
+ /**
+ * Adds to YSN context info map.
+ *
+ * @param yangSchemaNodeIdentifier YANG schema node identifier
+ * @param yangSchemaNodeContextInfo YANG schema node context info
+ */
+ public void addToYsnContextInfoMap(YangSchemaNodeIdentifier
+ yangSchemaNodeIdentifier, YangSchemaNodeContextInfo
+ yangSchemaNodeContextInfo) {
+ getYsnContextInfoMap().put(yangSchemaNodeIdentifier, yangSchemaNodeContextInfo);
+ }
+
+ @Override
+ public void isValueValid(String value)
+ throws DataModelException {
+ throw new DataModelException("Value validation asked for YANG node. "
+ + getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition()
+ + " in " + getFileName() + "\"");
+ }
+
+ @Override
+ public YangSchemaNodeIdentifier getYangSchemaNodeIdentifier() {
+ return yangSchemaNodeIdentifier;
+ }
+
+ /**
+ * Sets YANG schema node identifier.
+ *
+ * @param yangSchemaNodeIdentifier YANG schema node identifier
+ */
+ public void setYangSchemaNodeIdentifier(YangSchemaNodeIdentifier yangSchemaNodeIdentifier) {
+ if (this.yangSchemaNodeIdentifier == null) {
+ this.yangSchemaNodeIdentifier = new YangSchemaNodeIdentifier();
+ }
+ this.yangSchemaNodeIdentifier = yangSchemaNodeIdentifier;
+ }
+
+ @Override
+ public String getName() {
+ return yangSchemaNodeIdentifier.getName();
+ }
+
+ /**
+ * Sets name of node.
+ *
+ * @param name name of the node
+ */
+ public void setName(String name) {
+ if (yangSchemaNodeIdentifier == null) {
+ yangSchemaNodeIdentifier = new YangSchemaNodeIdentifier();
+ }
+ yangSchemaNodeIdentifier.setName(name);
+ }
+
+ @Override
+ public YangNamespace getNameSpace() {
+ return yangSchemaNodeIdentifier.getNameSpace();
+ }
+
+ /**
+ * Sets namespace of node.
+ *
+ * @param namespace namespace of the node
+ */
+ public void setNameSpace(YangNamespace namespace) {
+ if (yangSchemaNodeIdentifier == null) {
+ yangSchemaNodeIdentifier = new YangSchemaNodeIdentifier();
+ }
+ yangSchemaNodeIdentifier.setNameSpace(namespace);
+ }
+
+ /**
+ * Returns YANG revision.
+ *
+ * @return YANG revision
+ */
+ public YangRevision getRevision() {
+ return revision;
+ }
+
+ /**
+ * Sets YANG revision.
+ *
+ * @param revision YANG revision
+ */
+ public void setRevision(YangRevision revision) {
+ this.revision = revision;
+ }
+
+ @Override
+ public YangSchemaNode getNotificationSchemaNode(String notificationNameInEnum)
+ throws DataModelException {
+ throw new DataModelException("Method called for schema node other " +
+ "then module/sub-module");
+ }
+
+ @Override
+ public YangSchemaNode getReferredSchema() {
+ return referredSchemaNode;
+ }
+
+ /**
+ * Returns true if op type info required for node.
+ *
+ * @return true if op type info required for node
+ */
+ public boolean isOpTypeReq() {
+ return this instanceof RpcNotificationContainer ||
+ !(this instanceof InvalidOpTypeHolder) &&
+ getParent().isOpTypeReq();
+ }
+
+ @Override
+ public int getLineNumber() {
+ return lineNumber;
+ }
+
+ @Override
+ public int getCharPosition() {
+ return charPosition;
+ }
+
+ @Override
+ public void setLineNumber(int lineNumber) {
+ this.lineNumber = lineNumber;
+ }
+
+ @Override
+ public void setCharPosition(int charPositionInLine) {
+ charPosition = charPositionInLine;
+ }
+
+ @Override
+ public String getFileName() {
+ return fileName;
+ }
+
+ @Override
+ public void setFileName(String name) {
+ fileName = name;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangNodeIdentifier.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangNodeIdentifier.java
new file mode 100644
index 0000000..f18633a
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangNodeIdentifier.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import java.io.Serializable;
+
+/**
+ * Represents YANG node identifier which is a combination of prefix and name.
+ */
+public class YangNodeIdentifier extends DefaultLocationInfo
+ implements Serializable {
+
+ private static final long serialVersionUID = 806201648L;
+
+ // Name of the node.
+ private String name;
+
+ // Prefix of the node.
+ private String prefix;
+
+ /**
+ * Creates an instance of YANG node identifier.
+ */
+ public YangNodeIdentifier() {
+ }
+
+ /**
+ * Returns name of the node identifier.
+ *
+ * @return name of the node identifier
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * Sets name of the node identifier.
+ *
+ * @param name name of the node identifier
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ /**
+ * Returns prefix of the node identifier.
+ *
+ * @return name of the node identifier
+ */
+ public String getPrefix() {
+ return prefix;
+ }
+
+ /**
+ * Sets prefix of the node identifier.
+ *
+ * @param prefix prefix of the node identifier
+ */
+ public void setPrefix(String prefix) {
+ this.prefix = prefix;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangNodeType.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangNodeType.java
new file mode 100644
index 0000000..1b178d3
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangNodeType.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel;
+
+/**
+ * Represents node type in data model tree corresponding to YANG schema.
+ */
+public enum YangNodeType {
+ /**
+ * Node contains module information.
+ */
+ MODULE_NODE,
+
+ /**
+ * Node contains sub module information.
+ */
+ SUB_MODULE_NODE,
+
+ /**
+ * Node contains "YANG's typedef" information.
+ */
+ TYPEDEF_NODE,
+
+ /**
+ * Node contains "YANG's type" information.
+ */
+ TYPE_NODE,
+
+ /**
+ * Node contains "YANG's choice" information.
+ */
+ CHOICE_NODE,
+
+ /**
+ * Node contains "YANG's case" information.
+ */
+ CASE_NODE,
+
+ /**
+ * Node contains "YANG's enumeration" information.
+ */
+ ENUMERATION_NODE,
+
+ /**
+ * Node contains grouping information.
+ */
+ GROUPING_NODE,
+
+ /**
+ * Node contains "YANG's uses" information.
+ */
+ USES_NODE,
+
+ /**
+ * Node contains augmentation information.
+ */
+ AUGMENT_NODE,
+
+ /**
+ * Node contains "YANG's container" information.
+ */
+ CONTAINER_NODE,
+
+ /**
+ * Node contains "YANG's notification" information.
+ */
+ NOTIFICATION_NODE,
+
+ /**
+ * Node contains "YANG's input" information.
+ */
+ INPUT_NODE,
+
+ /**
+ * Node contains "YANG's output" information.
+ */
+ OUTPUT_NODE,
+
+ /**
+ * Node contains "YANG's rpc" information.
+ */
+ RPC_NODE,
+
+ /**
+ * Node contains "YANG's union" information.
+ */
+ UNION_NODE,
+
+ /**
+ * Node contains "YANG's list" information.
+ */
+ LIST_NODE,
+
+ /**
+ * Identity node.
+ */
+ IDENTITY_NODE,
+
+ /**
+ * Identityref node.
+ */
+ IDENTITYREF_NODE
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangNotification.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangNotification.java
new file mode 100644
index 0000000..096b3dc
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangNotification.java
@@ -0,0 +1,299 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+
+import static java.util.Collections.unmodifiableList;
+import static org.onosproject.yang.compiler.datamodel.YangNodeType.NOTIFICATION_NODE;
+import static org.onosproject.yang.compiler.datamodel.YangSchemaNodeType.YANG_SINGLE_INSTANCE_NODE;
+import static org.onosproject.yang.compiler.datamodel.YangStatusType.CURRENT;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.COLLISION_DETECTION;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.NOTIFICATION;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.getErrorMsgCollision;
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.NOTIFICATION_DATA;
+
+/*
+ * Reference RFC 6020.
+ *
+ * YANG allows the definition of notifications suitable for NETCONF.
+ * YANG data definition statements are used to model the content of the
+ * notification.
+ *
+ * The "notification" statement is used to define a NETCONF
+ * notification. It takes one argument, which is an identifier,
+ * followed by a block of substatements that holds detailed notification
+ * information. The "notification" statement defines a notification
+ * node in the schema tree.
+ *
+ * If a leaf in the notification tree has a "mandatory" statement with
+ * the value "true", the leaf MUST be present in a NETCONF notification.
+ *
+ * If a leaf in the notification tree has a default value, the NETCONF
+ * client MUST use this value in the same cases as described in
+ * Section 7.6.1. In these cases, the client MUST operationally behave
+ * as if the leaf was present in the NETCONF notification with the
+ * default value as its value.
+ *
+ * If a "config" statement is present for any node in the notification
+ * tree, the "config" statement is ignored.
+ *
+ * The notification's substatements
+ *
+ * +--------------+---------+-------------+------------------+
+ * | substatement | section | cardinality |data model mapping|
+ * +--------------+---------+-------------+------------------+
+ * | anyxml | 7.10 | 0..n | -not supported |
+ * | choice | 7.9 | 0..n | -child nodes |
+ * | container | 7.5 | 0..n | -child nodes |
+ * | description | 7.19.3 | 0..1 | -string |
+ * | grouping | 7.11 | 0..n | -child nodes |
+ * | if-feature | 7.18.2 | 0..n | -YangIfFeature |
+ * | leaf | 7.6 | 0..n | -YangLeaf |
+ * | leaf-list | 7.7 | 0..n | -YangLeafList |
+ * | list | 7.8 | 0..n | -child nodes |
+ * | reference | 7.19.4 | 0..1 | -string |
+ * | status | 7.19.2 | 0..1 | -YangStatus |
+ * | typedef | 7.3 | 0..n | -child nodes |
+ * | uses | 7.12 | 0..n | -child nodes |
+ * +--------------+---------+-------------+------------------+
+ */
+
+/**
+ * Represents data model node to maintain information defined in YANG notification.
+ */
+public abstract class YangNotification
+ extends YangNode
+ implements YangLeavesHolder, YangCommonInfo, Parsable, CollisionDetector,
+ YangAugmentableNode, YangIfFeatureHolder, InvalidOpTypeHolder {
+
+ private static final long serialVersionUID = 806201611L;
+
+ /**
+ * Description of notification.
+ */
+ private String description;
+
+ /**
+ * List of leaves contained.
+ */
+ private List<YangLeaf> listOfLeaf;
+
+ /**
+ * List of leaf-lists contained.
+ */
+ private List<YangLeafList> listOfLeafList;
+
+ /**
+ * Reference of the module.
+ */
+ private String reference;
+
+ /**
+ * Status of the node.
+ */
+ private YangStatusType status = CURRENT;
+
+ /**
+ * List of if-feature.
+ */
+ private List<YangIfFeature> ifFeatureList;
+
+ private List<YangAugment> yangAugmentedInfo;
+
+ /**
+ * Create a notification node.
+ */
+ public YangNotification() {
+ super(NOTIFICATION_NODE, new HashMap<>());
+ listOfLeaf = new LinkedList<>();
+ listOfLeafList = new LinkedList<>();
+ ifFeatureList = new LinkedList<>();
+ yangAugmentedInfo = new LinkedList<>();
+ }
+
+ @Override
+ public void addToChildSchemaMap(YangSchemaNodeIdentifier id,
+ YangSchemaNodeContextInfo context)
+ throws DataModelException {
+ getYsnContextInfoMap().put(id, context);
+ }
+
+ @Override
+ public void incrementMandatoryChildCount() {
+ // TODO
+ }
+
+ @Override
+ public void addToDefaultChildMap(YangSchemaNodeIdentifier id,
+ YangSchemaNode yangSchemaNode) {
+ // TODO
+ }
+
+ @Override
+ public YangSchemaNodeType getYangSchemaNodeType() {
+ return YANG_SINGLE_INSTANCE_NODE;
+ }
+
+ @Override
+ public void detectCollidingChild(String identifierName, YangConstructType dataType)
+ throws DataModelException {
+ // Detect colliding child.
+ detectCollidingChildUtil(identifierName, dataType, this);
+ }
+
+ @Override
+ public void detectSelfCollision(String identifierName, YangConstructType dataType)
+ throws DataModelException {
+ if (getName().equals(identifierName)) {
+ throw new DataModelException(getErrorMsgCollision(
+ COLLISION_DETECTION, getName(), getLineNumber(),
+ getCharPosition(), NOTIFICATION, getFileName()));
+ }
+ }
+
+ @Override
+ public YangConstructType getYangConstructType() {
+ return NOTIFICATION_DATA;
+ }
+
+ @Override
+ public void validateDataOnEntry()
+ throws DataModelException {
+ //TODO: implement the method.
+ }
+
+ @Override
+ public void validateDataOnExit()
+ throws DataModelException {
+ //TODO: implement the method.
+ }
+
+ @Override
+ public String getDescription() {
+ return description;
+ }
+
+ @Override
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ @Override
+ public List<YangLeaf> getListOfLeaf() {
+ return unmodifiableList(listOfLeaf);
+ }
+
+ @Override
+ public void setListOfLeaf(List<YangLeaf> leafsList) {
+ listOfLeaf = leafsList;
+ }
+
+ @Override
+ public void addLeaf(YangLeaf leaf) {
+ listOfLeaf.add(leaf);
+ }
+
+ @Override
+ public List<YangLeafList> getListOfLeafList() {
+ return unmodifiableList(listOfLeafList);
+ }
+
+ @Override
+ public void setListOfLeafList(List<YangLeafList> listOfLeafList) {
+ this.listOfLeafList = listOfLeafList;
+ }
+
+ @Override
+ public void addLeafList(YangLeafList leafList) {
+ listOfLeafList.add(leafList);
+ }
+
+ @Override
+ public String getReference() {
+ return reference;
+ }
+
+ @Override
+ public void setReference(String reference) {
+ this.reference = reference;
+ }
+
+ @Override
+ public YangStatusType getStatus() {
+ return status;
+ }
+
+ @Override
+ public void setStatus(YangStatusType status) {
+ this.status = status;
+ }
+
+ @Override
+ public List<YangIfFeature> getIfFeatureList() {
+ return unmodifiableList(ifFeatureList);
+ }
+
+ @Override
+ public void addIfFeatureList(YangIfFeature ifFeature) {
+ ifFeatureList.add(ifFeature);
+ }
+
+ @Override
+ public void setIfFeatureList(List<YangIfFeature> ifFeatureList) {
+ this.ifFeatureList = ifFeatureList;
+ }
+
+ @Override
+ public void addAugmentation(YangAugment augmentInfo) {
+ yangAugmentedInfo.add(augmentInfo);
+ }
+
+ @Override
+ public void removeAugmentation(YangAugment augmentInfo) {
+ yangAugmentedInfo.remove(augmentInfo);
+ }
+
+ @Override
+ public List<YangAugment> getAugmentedInfoList() {
+ return unmodifiableList(yangAugmentedInfo);
+ }
+
+ @Override
+ public void setLeafNameSpaceAndAddToParentSchemaMap() {
+ // Add namespace for all leafs.
+ for (YangLeaf yangLeaf : listOfLeaf) {
+ yangLeaf.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
+ }
+ // Add namespace for all leaf list.
+ for (YangLeafList yangLeafList : listOfLeafList) {
+ yangLeafList.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
+ }
+ }
+
+ public void cloneAugmentInfo() {
+ yangAugmentedInfo = new ArrayList<>();
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangOutput.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangOutput.java
new file mode 100644
index 0000000..2c206f0
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangOutput.java
@@ -0,0 +1,227 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+
+import static java.util.Collections.unmodifiableList;
+import static org.onosproject.yang.compiler.datamodel.YangSchemaNodeType.YANG_SINGLE_INSTANCE_NODE;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.COLLISION_DETECTION;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.OUTPUT;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.getErrorMsgCollision;
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.OUTPUT_DATA;
+
+/*
+ * Reference RFC 6020.
+ *
+ * The "output" statement, which is optional, is used to define output
+ * parameters to the RPC operation. It does not take an argument. The
+ * substatements to "output" define nodes under the RPC's output node.
+ *
+ * If a leaf in the output tree has a "mandatory" statement with the
+ * value "true", the leaf MUST be present in a NETCONF RPC reply.
+ *
+ * If a leaf in the output tree has a default value, the NETCONF client
+ * MUST use this value in the same cases as described in Section 7.6.1.
+ * In these cases, the client MUST operationally behave as if the leaf
+ * was present in the NETCONF RPC reply with the default value as its
+ * value.
+ *
+ * If a "config" statement is present for any node in the output tree,
+ * the "config" statement is ignored.
+ *
+ * If any node has a "when" statement that would evaluate to false, then
+ * this node MUST NOT be present in the output tree.
+ *
+ * The output substatements
+ *
+ * +--------------+---------+-------------+------------------+
+ * | substatement | section | cardinality |data model mapping|
+ * +--------------+---------+-------------+------------------+
+ * | anyxml | 7.10 | 0..n | -not supported |
+ * | choice | 7.9 | 0..n | -child nodes |
+ * | container | 7.5 | 0..n | -child nodes |
+ * | grouping | 7.11 | 0..n | -child nodes |
+ * | leaf | 7.6 | 0..n | -YangLeaf |
+ * | leaf-list | 7.7 | 0..n | -YangLeafList |
+ * | list | 7.8 | 0..n | -child nodes |
+ * | typedef | 7.3 | 0..n | -child nodes |
+ * | uses | 7.12 | 0..n | -child nodes |
+ * +--------------+---------+-------------+------------------+
+ */
+
+/**
+ * Represents data model node to maintain information defined in YANG output.
+ */
+public abstract class YangOutput
+ extends YangNode
+ implements YangLeavesHolder, Parsable, CollisionDetector,
+ YangAugmentableNode, YangIsFilterContentNodes, InvalidOpTypeHolder {
+
+ private static final long serialVersionUID = 806201612L;
+
+ /**
+ * List of leaves contained.
+ */
+ private List<YangLeaf> listOfLeaf;
+
+ /**
+ * List of leaf-lists contained.
+ */
+ private List<YangLeafList> listOfLeafList;
+
+ private List<YangAugment> yangAugmentedInfo;
+
+ /**
+ * Create a rpc output node.
+ */
+ public YangOutput() {
+ super(YangNodeType.OUTPUT_NODE, new HashMap<>());
+ listOfLeaf = new LinkedList<>();
+ listOfLeafList = new LinkedList<>();
+ yangAugmentedInfo = new ArrayList<>();
+ }
+
+ @Override
+ public void addToChildSchemaMap(YangSchemaNodeIdentifier id,
+ YangSchemaNodeContextInfo context)
+ throws DataModelException {
+ getYsnContextInfoMap().put(id, context);
+ }
+
+ @Override
+ public void incrementMandatoryChildCount() {
+ // For non data nodes, mandatory child to be added to parent node.
+ // TODO
+ }
+
+ @Override
+ public void addToDefaultChildMap(YangSchemaNodeIdentifier id,
+ YangSchemaNode yangSchemaNode) {
+ // For non data nodes, default child to be added to parent node.
+ // TODO
+ }
+
+ @Override
+ public YangSchemaNodeType getYangSchemaNodeType() {
+ return YANG_SINGLE_INSTANCE_NODE;
+ }
+
+ @Override
+ public void detectCollidingChild(String idName, YangConstructType dataType)
+ throws DataModelException {
+ // Detect colliding child.
+ detectCollidingChildUtil(idName, dataType, this);
+ }
+
+ @Override
+ public void detectSelfCollision(String identifierName,
+ YangConstructType dataType)
+ throws DataModelException {
+ if (getName().equals(identifierName)) {
+ getErrorMsgCollision(COLLISION_DETECTION, getName(),
+ getLineNumber(), getCharPosition(),
+ OUTPUT, getFileName());
+ }
+ }
+
+ @Override
+ public YangConstructType getYangConstructType() {
+ return OUTPUT_DATA;
+ }
+
+ @Override
+ public void validateDataOnEntry()
+ throws DataModelException {
+ //TODO: implement the method.
+ }
+
+ @Override
+ public void validateDataOnExit()
+ throws DataModelException {
+ //TODO: implement the method.
+ }
+
+ @Override
+ public List<YangLeaf> getListOfLeaf() {
+ return unmodifiableList(listOfLeaf);
+ }
+
+ @Override
+ public void addLeaf(YangLeaf leaf) {
+ listOfLeaf.add(leaf);
+ }
+
+ @Override
+ public void setListOfLeaf(List<YangLeaf> leafsList) {
+ listOfLeaf = leafsList;
+ }
+
+ @Override
+ public List<YangLeafList> getListOfLeafList() {
+ return unmodifiableList(listOfLeafList);
+ }
+
+ @Override
+ public void setListOfLeafList(List<YangLeafList> listOfLeafList) {
+ this.listOfLeafList = listOfLeafList;
+ }
+
+ @Override
+ public void addLeafList(YangLeafList leafList) {
+ listOfLeafList.add(leafList);
+ }
+
+ @Override
+ public void addAugmentation(YangAugment augmentInfo) {
+ yangAugmentedInfo.add(augmentInfo);
+ }
+
+ @Override
+ public void removeAugmentation(YangAugment augmentInfo) {
+ yangAugmentedInfo.remove(augmentInfo);
+ }
+
+ @Override
+ public List<YangAugment> getAugmentedInfoList() {
+ return unmodifiableList(yangAugmentedInfo);
+ }
+
+ @Override
+ public void setLeafNameSpaceAndAddToParentSchemaMap() {
+ // Add namespace for all leafs.
+ for (YangLeaf yangLeaf : listOfLeaf) {
+ yangLeaf.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
+ }
+ // Add namespace for all leaf list.
+ for (YangLeafList yangLeafList : listOfLeafList) {
+ yangLeafList.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
+ }
+ }
+
+ public void cloneAugmentInfo() {
+ yangAugmentedInfo = new ArrayList<>();
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangPathArgType.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangPathArgType.java
new file mode 100644
index 0000000..2f4fd79
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangPathArgType.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel;
+
+/**
+ * Represents path argument type in data model tree.
+ */
+public enum YangPathArgType {
+
+ /**
+ * Absolute path.
+ */
+ ABSOLUTE_PATH,
+
+ /**
+ * Relative path.
+ */
+ RELATIVE_PATH
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangPathOperator.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangPathOperator.java
new file mode 100644
index 0000000..b911384
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangPathOperator.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel;
+
+/**
+ * Represents path-expr in data model tree.
+ */
+public enum YangPathOperator {
+
+ /**
+ * Path expression contains equal-to.
+ */
+ EQUALTO
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangPathPredicate.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangPathPredicate.java
new file mode 100644
index 0000000..c308d0a
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangPathPredicate.java
@@ -0,0 +1,143 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel;
+
+import java.io.Serializable;
+
+/**
+ * Representation of data model node to maintain path predicate in YANG
+ * absolute-path or relative-path.
+ */
+public class YangPathPredicate extends DefaultLocationInfo
+ implements Serializable {
+
+ private static final long serialVersionUID = 806201689L;
+
+ /**
+ * YANG node id.
+ */
+ private YangNodeIdentifier nodeId;
+
+ /**
+ * Left axis represents node-id before equality sign.
+ */
+ private Object leftAxisNode;
+
+ /**
+ * YANG path operator.
+ */
+ private YangPathOperator pathOp;
+
+ /**
+ * YANG right relative path in path-predicate.
+ */
+ private YangRelativePath relPath;
+
+ /**
+ * Right axis node represents the node-id after the equality sign.
+ */
+ private Object rightAxisNode;
+
+ /**
+ * Returns the path expression operator.
+ *
+ * @return path operator
+ */
+ public YangPathOperator getPathOp() {
+ return pathOp;
+ }
+
+ /**
+ * Sets the path expression operator.
+ *
+ * @param pathOp path operator
+ */
+ public void setPathOp(YangPathOperator pathOp) {
+ this.pathOp = pathOp;
+ }
+
+ /**
+ * Returns the right relative path expression.
+ *
+ * @return relative path
+ */
+ public YangRelativePath getRelPath() {
+ return relPath;
+ }
+
+ /**
+ * Sets the right relative path expression.
+ *
+ * @param relPath relative path
+ */
+ public void setRelPath(YangRelativePath relPath) {
+ this.relPath = relPath;
+ }
+
+ /**
+ * Returns the node identifier.
+ *
+ * @return node id
+ */
+ public YangNodeIdentifier getNodeId() {
+ return nodeId;
+ }
+
+ /**
+ * Sets the YANG node identifier.
+ *
+ * @param nodeId node id
+ */
+ public void setNodeId(YangNodeIdentifier nodeId) {
+ this.nodeId = nodeId;
+ }
+
+ /**
+ * Returns the left axis node.
+ *
+ * @return left axis node
+ */
+ public Object getLeftAxisNode() {
+ return leftAxisNode;
+ }
+
+ /**
+ * Sets the left axis node.
+ *
+ * @param leftAxisNode left axis node
+ */
+ public void setLeftAxisNode(Object leftAxisNode) {
+ this.leftAxisNode = leftAxisNode;
+ }
+
+ /**
+ * Returns the right axis node.
+ *
+ * @return right axis node
+ */
+ public Object getRightAxisNode() {
+ return rightAxisNode;
+ }
+
+ /**
+ * Sets the right axis node.
+ *
+ * @param rightAxisNode right axis node
+ */
+ public void setRightAxisNode(Object rightAxisNode) {
+ this.rightAxisNode = rightAxisNode;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangPatternRestriction.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangPatternRestriction.java
new file mode 100644
index 0000000..3e0363b
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangPatternRestriction.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import java.io.Serializable;
+import java.util.LinkedList;
+import java.util.List;
+
+import static java.util.Collections.unmodifiableList;
+
+/*-
+ * Reference RFC 6020.
+ *
+ * The pattern Statement
+ *
+ * The "pattern" statement, which is an optional sub-statement to the
+ * "type" statement, takes as an argument a regular expression string.
+ * It is used to restrict the built-in type "string", or types derived
+ * from "string", to values that match the pattern.
+ *
+ * If the type has multiple "pattern" statements, the expressions are
+ * ANDed together, i.e., all such expressions have to match.
+ *
+ * If a pattern restriction is applied to an already pattern-restricted
+ * type, values must match all patterns in the base type, in addition to
+ * the new patterns.
+ * The pattern's sub-statements
+ *
+ * +---------------+---------+-------------+
+ * | substatement | section | cardinality |
+ * +---------------+---------+-------------+
+ * | description | 7.19.3 | 0..1 |
+ * | error-app-tag | 7.5.4.2 | 0..1 |
+ * | error-message | 7.5.4.1 | 0..1 |
+ * | reference | 7.19.4 | 0..1 |
+ * +---------------+---------+-------------+
+ */
+
+/**
+ * Represents pattern restriction information. The regular expression restriction on string
+ * data type.
+ */
+public class YangPatternRestriction extends DefaultLocationInfo
+ implements Serializable, YangAppErrorHolder {
+
+ private static final long serialVersionUID = 806201649L;
+
+ /**
+ * Pattern restriction defined for the current type.
+ */
+ private final List<String> patternList;
+
+ /**
+ * YANG application error information.
+ */
+ private YangAppErrorInfo yangAppErrorInfo;
+
+ /**
+ * Creates a YANG pattern restriction object.
+ */
+ public YangPatternRestriction() {
+ patternList = new LinkedList<>();
+ yangAppErrorInfo = new YangAppErrorInfo();
+ }
+
+ /**
+ * Returns the pattern restriction defined for the current type.
+ *
+ * @return pattern restriction defined for the current type.
+ */
+ public List<String> getPatternList() {
+ return unmodifiableList(patternList);
+ }
+
+ /**
+ * Adds a new pattern to the list of pattern restriction.
+ *
+ * @param newPattern pattern restriction.
+ */
+ public void addPattern(String newPattern) {
+ patternList.add(newPattern);
+ }
+
+ @Override
+ public void setAppErrorInfo(YangAppErrorInfo yangAppErrorInfo) {
+ this.yangAppErrorInfo = yangAppErrorInfo;
+ }
+
+ @Override
+ public YangAppErrorInfo getAppErrorInfo() {
+ return yangAppErrorInfo;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangRangeInterval.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangRangeInterval.java
new file mode 100644
index 0000000..a298d20
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangRangeInterval.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangBuiltInDataTypeInfo;
+
+import java.io.Serializable;
+
+/**
+ * Represents single interval information of a range.
+ *
+ * @param <T> range type based on the data type
+ */
+public class YangRangeInterval<T extends YangBuiltInDataTypeInfo<T>> extends DefaultLocationInfo
+ implements Serializable {
+
+ private static final long serialVersionUID = 806201650L;
+
+ /**
+ * Starting value of the range interval.
+ */
+ private T startValue;
+
+ /**
+ * Last value of the range interval.
+ */
+ private T endValue;
+
+ /**
+ * Creates YANG range interval object.
+ */
+ public YangRangeInterval() {
+ }
+
+ /**
+ * Returns the starting value of the range interval.
+ *
+ * @return the starting value of the range interval
+ */
+ public T getStartValue() {
+ return startValue;
+ }
+
+ /**
+ * Sets the starting value of the range interval.
+ *
+ * @param startValue the starting value of the range interval
+ */
+ public void setStartValue(T startValue) {
+ this.startValue = startValue;
+ }
+
+ /**
+ * Returns the last value of the range interval.
+ *
+ * @return last value of the range interval
+ */
+ public T getEndValue() {
+ return endValue;
+ }
+
+ /**
+ * Sets the last value of the range interval.
+ *
+ * @param endValue last value of the range interval
+ */
+ public void setEndValue(T endValue) {
+ this.endValue = endValue;
+ }
+
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangRangeRestriction.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangRangeRestriction.java
new file mode 100644
index 0000000..f9f0da7
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangRangeRestriction.java
@@ -0,0 +1,308 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangBuiltInDataTypeInfo;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+
+import java.io.Serializable;
+import java.util.LinkedList;
+import java.util.List;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.onosproject.yang.compiler.datamodel.BuiltInTypeObjectFactory.getDataObjectFromString;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.getErrorMsg;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.RANGE_DATA;
+
+/*-
+ * Reference RFC 6020.
+ *
+ * The range Statement
+ *
+ * The "range" statement, which is an optional sub-statement to the
+ * "type" statement, takes as an argument a range expression string. It
+ * is used to restrict integer and decimal built-in types, or types
+ * derived from those.
+ *
+ * A range consists of an explicit value, or a lower-inclusive bound,
+ * two consecutive dots "..", and an upper-inclusive bound. Multiple
+ * values or ranges can be given, separated by "|". If multiple values
+ * or ranges are given, they all MUST be disjoint and MUST be in
+ * ascending order. If a range restriction is applied to an already
+ * range-restricted type, the new restriction MUST be equal or more
+ * limiting, that is raising the lower bounds, reducing the upper
+ * bounds, removing explicit values or ranges, or splitting ranges into
+ * multiple ranges with intermediate gaps. Each explicit value and
+ * range boundary value given in the range expression MUST match the
+ * type being restricted, or be one of the special values "min" or
+ * "max". "min" and "max" mean the minimum and maximum value accepted
+ * for the type being restricted, respectively.
+ */
+
+/**
+ * Represents ascending range restriction information.
+ *
+ * @param <T> range type (data type)
+ */
+public class YangRangeRestriction<T extends YangBuiltInDataTypeInfo<T>>
+ extends DefaultLocationInfo
+ implements YangDesc, YangReference, Parsable, Serializable, YangAppErrorHolder {
+
+ private static final long serialVersionUID = 8062016051L;
+
+ /**
+ * Ascending list of range interval restriction. If the restriction is a
+ * single value, the start and end length of the range is same.
+ */
+ private List<YangRangeInterval<T>> ascendingRangeIntervals;
+
+ /**
+ * Textual reference.
+ */
+ private String reference;
+
+ /**
+ * Textual description.
+ */
+ private String description;
+
+ /**
+ * YANG application error information.
+ */
+ private YangAppErrorInfo yangAppErrorInfo;
+
+ /**
+ * Creates YANG range restriction object.
+ */
+ public YangRangeRestriction() {
+ yangAppErrorInfo = new YangAppErrorInfo();
+ }
+
+ /**
+ * Returns the list of range interval restriction in ascending order.
+ *
+ * @return list of range interval restriction in ascending order
+ */
+ public List<YangRangeInterval<T>> getAscendingRangeIntervals() {
+ return ascendingRangeIntervals;
+ }
+
+ /**
+ * Returns the minimum valid value as per the restriction.
+ *
+ * @return minimum restricted value
+ * @throws DataModelException data model exception for minimum restriction
+ */
+ public T getMinRestrictedValue() throws DataModelException {
+ if (getAscendingRangeIntervals() == null) {
+ throw new DataModelException(getErrorMsg(
+ "No range restriction info ",
+ "", getLineNumber(), getCharPosition(), getFileName() + "\""));
+ }
+ if (getAscendingRangeIntervals().isEmpty()) {
+ throw new DataModelException(getErrorMsg(
+ "No range interval info ",
+ "", getLineNumber(), getCharPosition(), getFileName() + "\""));
+ }
+ return getAscendingRangeIntervals().get(0).getStartValue();
+ }
+
+ /**
+ * Returns the maximum valid value as per the restriction.
+ *
+ * @return minimum maximum value
+ * @throws DataModelException data model exception for maximum restriction
+ */
+ public T getMaxRestrictedValue() throws DataModelException {
+ if (getAscendingRangeIntervals() == null) {
+ throw new DataModelException(getErrorMsg(
+ "No range restriction info ",
+ "", getLineNumber(), getCharPosition(), getFileName() + "\""));
+ }
+ if (getAscendingRangeIntervals().isEmpty()) {
+ throw new DataModelException(getErrorMsg(
+ "No range interval info ",
+ "", getLineNumber(), getCharPosition(), getFileName() + "\""));
+ }
+ return getAscendingRangeIntervals()
+ .get(getAscendingRangeIntervals().size() - 1).getEndValue();
+ }
+
+ /**
+ * Adds new interval to extend its range in the last. i.e. newly added
+ * interval needs to be bigger than the biggest interval in the list.
+ *
+ * @param newInterval restricted length interval
+ * @throws DataModelException data model exception for range restriction
+ */
+ public void addRangeRestrictionInterval(YangRangeInterval<T> newInterval)
+ throws DataModelException {
+ checkNotNull(newInterval);
+ checkNotNull(newInterval.getStartValue());
+ if (ascendingRangeIntervals == null) {
+ /*
+ * First interval that is being added, and it must be the smallest
+ * interval.
+ */
+ ascendingRangeIntervals = new LinkedList<>();
+ ascendingRangeIntervals.add(newInterval);
+ return;
+ }
+
+ T curMaxvalue = getMaxRestrictedValue();
+ if (newInterval.getStartValue().compareTo(curMaxvalue) < 1) {
+ throw new DataModelException(getErrorMsg(
+ "New added range interval is lesser than the old interval(s) ",
+ "", getLineNumber(), getCharPosition(), getFileName() + "\""));
+ }
+ getAscendingRangeIntervals().add(getAscendingRangeIntervals().size(), newInterval);
+ }
+
+ /**
+ * Validates if the given value is correct as per the restriction.
+ *
+ * @param valueInString value
+ * @return true, if the value is confirming to restriction, false otherwise
+ * @throws DataModelException data model error
+ */
+ boolean isValidValueString(String valueInString) throws DataModelException {
+
+ if (getAscendingRangeIntervals() == null
+ || getAscendingRangeIntervals().isEmpty()) {
+ // Throw exception, At least one default range needs to be set in
+ // constructor or in linker.
+ throw new DataModelException(getErrorMsg(
+ "Range interval missing in range restriction. ",
+ "", getLineNumber(), getCharPosition(), getFileName() + "\""));
+ }
+
+ YangDataTypes type = getAscendingRangeIntervals().get(0).getStartValue().getYangType();
+ YangBuiltInDataTypeInfo<?> value = getDataObjectFromString(valueInString, type);
+
+ for (YangRangeInterval<T> interval : getAscendingRangeIntervals()) {
+ int rangeStartCompareRes = interval.getStartValue().compareTo((T) value);
+ int rangeEndCompareRes = interval.getEndValue().compareTo((T) value);
+
+ if (rangeStartCompareRes <= 0 && rangeEndCompareRes >= 0) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Validates if the given interval is correct as per the restriction.
+ *
+ * @param rangeInterval range interval
+ * @param fileName file name
+ * @return true, if the interval is confirming to restriction, false otherwise
+ * @throws DataModelException data model error
+ */
+ boolean isValidInterval(YangRangeInterval rangeInterval, String fileName)
+ throws DataModelException {
+
+ if (getAscendingRangeIntervals() == null
+ || getAscendingRangeIntervals().isEmpty()) {
+ // Throw exception, At least one default range needs to be set in
+ // constructor or in linker.
+ throw new DataModelException(getErrorMsg(
+ "Range interval missing in range restriction. ",
+ "restriction ranges.", getLineNumber(), getCharPosition(), fileName + "\""));
+ }
+
+ for (YangRangeInterval<T> interval : getAscendingRangeIntervals()) {
+ int rangeStartCompareRes = interval.getStartValue().compareTo((T) rangeInterval.getStartValue());
+ int rangeEndCompareRes = interval.getEndValue().compareTo((T) rangeInterval.getEndValue());
+
+ if (rangeStartCompareRes <= 0 && rangeEndCompareRes >= 0) {
+ return true;
+ }
+ }
+ throw new DataModelException(getErrorMsg(
+ "Range interval doesn't fall within the referred restriction ranges ",
+ "restriction ranges.", getLineNumber(), getCharPosition(), fileName + "\""));
+ }
+
+ /**
+ * Returns the textual reference of the length restriction.
+ *
+ * @return textual reference of the length restriction
+ */
+ @Override
+ public String getReference() {
+ return reference;
+ }
+
+ /**
+ * Sets the textual reference of the length restriction.
+ *
+ * @param ref textual reference of the length restriction
+ */
+ @Override
+ public void setReference(String ref) {
+ reference = ref;
+ }
+
+ /**
+ * Returns the description of the length restriction.
+ *
+ * @return description of the length restriction
+ */
+ @Override
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * Sets the description of the length restriction.
+ *
+ * @param desc description of the length restriction
+ */
+ @Override
+ public void setDescription(String desc) {
+ description = desc;
+
+ }
+
+ @Override
+ public YangConstructType getYangConstructType() {
+ return RANGE_DATA;
+ }
+
+ @Override
+ public void validateDataOnEntry() throws DataModelException {
+ // TODO: implement the method.
+ }
+
+ @Override
+ public void validateDataOnExit() throws DataModelException {
+ // TODO: implement the method.
+ }
+
+ @Override
+ public void setAppErrorInfo(YangAppErrorInfo yangAppErrorInfo) {
+ this.yangAppErrorInfo = yangAppErrorInfo;
+ }
+
+ @Override
+ public YangAppErrorInfo getAppErrorInfo() {
+ return yangAppErrorInfo;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangReference.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangReference.java
new file mode 100644
index 0000000..74ec1f4
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangReference.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel;
+
+/**
+ * Abstraction of textual reference for a YANG entity. Abstracted to unify the
+ * parsing and translator processing of reference.
+ */
+public interface YangReference {
+
+ /**
+ * Returns the textual reference.
+ *
+ * @return the reference
+ */
+ String getReference();
+
+ /**
+ * Sets the textual reference.
+ *
+ * @param reference the reference to set
+ */
+ void setReference(String reference);
+
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangReferenceResolver.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangReferenceResolver.java
new file mode 100644
index 0000000..d47387e
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangReferenceResolver.java
@@ -0,0 +1,147 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Abstraction of YANG dependency resolution information. Abstracted to obtain the
+ * resolution information.
+ */
+public interface YangReferenceResolver {
+
+ /**
+ * Returns unresolved resolution list.
+ *
+ * @param type resolvable type
+ * @return list of resolution information objects
+ */
+ List<YangResolutionInfo> getUnresolvedResolutionList(ResolvableType type);
+
+ /**
+ * Adds to the resolution list.
+ *
+ * @param resolutionInfo resolution information
+ * @param type resolvable type
+ */
+ void addToResolutionList(YangResolutionInfo resolutionInfo,
+ ResolvableType type);
+
+ /**
+ * Creates resolution list.
+ *
+ * @param resolutionList resolution list
+ * @param type resolvable type
+ */
+ void setResolutionList(List<YangResolutionInfo> resolutionList,
+ ResolvableType type);
+
+ /**
+ * Returns unresolved imported list.
+ *
+ * @return unresolved imported list
+ */
+ List<YangImport> getImportList();
+
+ /**
+ * Adds to the import list.
+ *
+ * @param yangImport import to be added
+ */
+ void addToImportList(YangImport yangImport);
+
+ /**
+ * Create import list.
+ *
+ * @param importList import list
+ */
+ void setImportList(List<YangImport> importList);
+
+ /**
+ * Returns unresolved include list.
+ *
+ * @return unresolved include list
+ */
+ List<YangInclude> getIncludeList();
+
+ /**
+ * Adds to the include list.
+ *
+ * @param yangInclude include to be added
+ */
+ void addToIncludeList(YangInclude yangInclude);
+
+ /**
+ * Creates include list.
+ *
+ * @param includeList include list
+ */
+ void setIncludeList(List<YangInclude> includeList);
+
+ /**
+ * Returns prefix of resolution root node.
+ *
+ * @return prefix resolution root node prefix
+ */
+ String getPrefix();
+
+ /**
+ * Sets prefix of resolution list root node.
+ *
+ * @param prefix resolution root node prefix
+ */
+ void setPrefix(String prefix);
+
+ /**
+ * Resolves self file linking.
+ *
+ * @param type resolvable type
+ * @throws DataModelException a violation in data model rule
+ */
+ void resolveSelfFileLinking(ResolvableType type)
+ throws DataModelException;
+
+ /**
+ * Resolves inter file linking.
+ *
+ * @param type resolvable type
+ * @throws DataModelException a violation in data model rule
+ */
+ void resolveInterFileLinking(ResolvableType type)
+ throws DataModelException;
+
+ /**
+ * Adds references to include.
+ *
+ * @param yangNodeSet YANG node info set
+ * @throws DataModelException a violation of data model rules
+ */
+ void addReferencesToIncludeList(Set<YangNode> yangNodeSet)
+ throws DataModelException;
+
+ /**
+ * Adds references to import.
+ *
+ * @param yangNodeSet YANG node info set
+ * @throws DataModelException a violation of data model rules
+ */
+ void addReferencesToImportList(Set<YangNode> yangNodeSet)
+ throws DataModelException;
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangRelativePath.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangRelativePath.java
new file mode 100644
index 0000000..007b914
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangRelativePath.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * Representation of data model node to maintain relative path defined in YANG path-arg.
+ */
+public class YangRelativePath extends DefaultLocationInfo
+ implements Serializable {
+
+ private static final long serialVersionUID = 806201690L;
+
+ // Relative path ancestor node count the number of node exist between current node to parent node.
+ private int ancestorNodeCount;
+
+ // Absolute path expression.
+ private List<YangAtomicPath> atomicPathList;
+
+ /**
+ * Returns the absolute path.
+ *
+ * @return the absolute path
+ */
+ public List<YangAtomicPath> getAtomicPathList() {
+ return atomicPathList;
+ }
+
+ /**
+ * Sets the absolute path.
+ *
+ * @param atomicPathList Sets the absolute path
+ */
+ public void setAtomicPathList(List<YangAtomicPath> atomicPathList) {
+ this.atomicPathList = atomicPathList;
+ }
+
+ /**
+ * Returns the relative path ancestor count.
+ *
+ * @return the relative path ancestor count
+ */
+ public int getAncestorNodeCount() {
+ return ancestorNodeCount;
+ }
+
+ /**
+ * Sets the relative path ancestor count.
+ *
+ * @param ancestorNodeCount Sets the relative path ancestor count
+ */
+ public void setAncestorNodeCount(int ancestorNodeCount) {
+ this.ancestorNodeCount = ancestorNodeCount;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangResolutionInfo.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangResolutionInfo.java
new file mode 100644
index 0000000..b5ad97d
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangResolutionInfo.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+
+/**
+ * Abstraction of resolution object which will be resolved by linker.
+ *
+ * @param <T> type of resolution entity uses / type
+ */
+public interface YangResolutionInfo<T> {
+
+ /**
+ * Resolves linking with all the ancestors node for a resolution info.
+ *
+ * @param dataModelRootNode module/sub-module node
+ * @throws DataModelException DataModelException a violation of data model
+ * rules
+ */
+ void resolveLinkingForResolutionInfo(YangReferenceResolver dataModelRootNode)
+ throws DataModelException;
+
+ /**
+ * Retrieves information about the entity that needs to be resolved.
+ *
+ * @return information about the entity that needs to be resolved
+ */
+ YangEntityToResolveInfo<T> getEntityToResolveInfo();
+
+ /**
+ * Performs inter file linking of uses/type referring to typedef/grouping
+ * of other YANG file.
+ *
+ * @param dataModelRootNode module/sub-module node
+ * @throws DataModelException a violation in data model rule
+ */
+ void linkInterFile(YangReferenceResolver dataModelRootNode)
+ throws DataModelException;
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangRevision.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangRevision.java
new file mode 100644
index 0000000..9e13144
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangRevision.java
@@ -0,0 +1,175 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/*
+ * Reference:RFC 6020.
+ * The "revision" statement specifies the editorial revision history of
+ * the module, including the initial revision. A series of revision
+ * statements detail the changes in the module's definition. The
+ * argument is a date string in the format "YYYY-MM-DD", followed by a
+ * block of sub-statements that holds detailed revision information. A
+ * module SHOULD have at least one initial "revision" statement. For
+ * every published editorial change, a new one SHOULD be added in front
+ * of the revisions sequence, so that all revisions are in reverse
+ * chronological order.
+ * The revision's sub-statement
+ *
+ * +--------------+---------+-------------+------------------+
+ * | substatement | section | cardinality |data model mapping|
+ * +--------------+---------+-------------+------------------+
+ * | description | 7.19.3 | 0..1 |string |
+ * | reference | 7.19.4 | 0..1 |sring |
+ * +--------------+---------+-------------+------------------+
+ */
+
+/**
+ * Represents the information about the revision.
+ */
+public class YangRevision
+ extends DefaultLocationInfo
+ implements YangDesc, YangReference, Parsable, Serializable, Comparable<YangRevision> {
+
+ private static final long serialVersionUID = 8062016052L;
+
+ /**
+ * Revision date. Date string in the format "YYYY-MM-DD"
+ */
+ private Date revDate;
+
+ /**
+ * Description of revision.
+ */
+ private String description;
+
+ /**
+ * Textual reference for revision.
+ */
+ private String reference;
+
+ /**
+ * Creates a YANG revision object.
+ */
+ public YangRevision() {
+ }
+
+ /**
+ * Returns the revision date.
+ *
+ * @return the revision date
+ */
+ public Date getRevDate() {
+ return revDate;
+ }
+
+ /**
+ * Sets the revision date.
+ *
+ * @param revDate the revision date to set
+ */
+ public void setRevDate(Date revDate) {
+ this.revDate = revDate;
+ }
+
+ /**
+ * Returns the description.
+ *
+ * @return the description
+ */
+ @Override
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * Sets the description.
+ *
+ * @param description set the description
+ */
+ @Override
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ /**
+ * Returns the textual reference.
+ *
+ * @return the reference
+ */
+ @Override
+ public String getReference() {
+ return reference;
+ }
+
+ /**
+ * Sets the textual reference.
+ *
+ * @param reference the reference to set
+ */
+ @Override
+ public void setReference(String reference) {
+ this.reference = reference;
+ }
+
+ /**
+ * Returns the type of the parsed data.
+ *
+ * @return returns REVISION_DATA
+ */
+ @Override
+ public YangConstructType getYangConstructType() {
+ return YangConstructType.REVISION_DATA;
+ }
+
+ /**
+ * Validates the data on entering the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnEntry()
+ throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+
+ }
+
+ /**
+ * Validates the data on exiting the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnExit()
+ throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+
+ }
+
+ @Override
+ public int compareTo(YangRevision obj) {
+ if (this == obj) {
+ return 0;
+ }
+ return getRevDate().compareTo(obj.getRevDate());
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangRpc.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangRpc.java
new file mode 100644
index 0000000..cd3f30e
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangRpc.java
@@ -0,0 +1,218 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+
+import static java.util.Collections.unmodifiableList;
+import static org.onosproject.yang.compiler.datamodel.YangNodeType.RPC_NODE;
+import static org.onosproject.yang.compiler.datamodel.YangSchemaNodeType.YANG_SINGLE_INSTANCE_NODE;
+import static org.onosproject.yang.compiler.datamodel.YangStatusType.CURRENT;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.COLLISION_DETECTION;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.RPC;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.getErrorMsgCollision;
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.RPC_DATA;
+
+/*
+ * Reference RFC 6020.
+ *
+ * The "rpc" statement is used to define a NETCONF RPC operation. It
+ * takes one argument, which is an identifier, followed by a block of
+ * substatements that holds detailed rpc information. This argument is
+ * the name of the RPC, and is used as the element name directly under
+ * the <rpc> element, as designated by the substitution group
+ * "rpcOperation" in [RFC4741].
+ *
+ * The "rpc" statement defines an rpc node in the schema tree. Under
+ * the rpc node, a schema node with the name "input", and a schema node
+ * with the name "output" are also defined. The nodes "input" and
+ * "output" are defined in the module's namespace.
+ *
+ * The rpc substatements
+ *
+ * +--------------+---------+-------------+------------------+
+ * | substatement | section | cardinality |data model mapping|
+ * +--------------+---------+-------------+------------------+
+ * | description | 7.19.3 | 0..1 | -string |
+ * | grouping | 7.11 | 0..n | -child nodes |
+ * | if-feature | 7.18.2 | 0..n | -YangIfFeature |
+ * | input | 7.13.2 | 0..1 | -child nodes |
+ * | output | 7.13.3 | 0..1 | -child nodes |
+ * | reference | 7.19.4 | 0..1 | -string |
+ * | status | 7.19.2 | 0..1 | -YangStatus |
+ * | typedef | 7.3 | 0..n | -child nodes |
+ * +--------------+---------+-------------+------------------+
+ */
+
+/**
+ * Represents data model node to maintain information defined in YANG rpc.
+ */
+public abstract class YangRpc
+ extends YangNode
+ implements YangCommonInfo, Parsable,
+ CollisionDetector, YangIfFeatureHolder, InvalidOpTypeHolder {
+
+ private static final long serialVersionUID = 806201613L;
+
+ /**
+ * Description of rpc.
+ */
+ private String description;
+
+ /**
+ * Reference of the module.
+ */
+ private String reference;
+
+ /**
+ * Status of the node.
+ */
+ private YangStatusType status = CURRENT;
+
+ /**
+ * List of if-feature.
+ */
+ private List<YangIfFeature> ifFeatureList;
+
+ /**
+ * Creates a rpc node.
+ */
+ public YangRpc() {
+ super(RPC_NODE, new HashMap<>());
+ ifFeatureList = new LinkedList<>();
+ }
+
+ @Override
+ public void addToChildSchemaMap(YangSchemaNodeIdentifier id,
+ YangSchemaNodeContextInfo context)
+ throws DataModelException {
+ getYsnContextInfoMap().put(id, context);
+ }
+
+ @Override
+ public void incrementMandatoryChildCount() {
+ /*
+ * This will maintain all mandatory child which are there inside
+ * input and
+ * output as input/output is non data node.
+ */
+ // TODO
+ }
+
+ @Override
+ public void addToDefaultChildMap(YangSchemaNodeIdentifier id,
+ YangSchemaNode yangSchemaNode) {
+ /*
+ * This will maintain all default child which are there inside input and
+ * output as input/output is non data node.
+ */
+ // TODO
+ }
+
+ @Override
+ public YangSchemaNodeType getYangSchemaNodeType() {
+ return YANG_SINGLE_INSTANCE_NODE;
+ }
+
+ @Override
+ public void detectCollidingChild(String identifierName,
+ YangConstructType dataType)
+ throws DataModelException {
+ // Detect colliding child.
+ detectCollidingChildUtil(identifierName, dataType, this);
+ }
+
+ @Override
+ public void detectSelfCollision(String identifierName,
+ YangConstructType dataType)
+ throws DataModelException {
+ if (getName().equals(identifierName)) {
+ throw new DataModelException(getErrorMsgCollision(
+ COLLISION_DETECTION, getName(), getLineNumber(),
+ getCharPosition(), RPC, getFileName()));
+ }
+ }
+
+ @Override
+ public YangConstructType getYangConstructType() {
+ return RPC_DATA;
+ }
+
+ @Override
+ public void validateDataOnEntry()
+ throws DataModelException {
+ //TODO: implement the method.
+ }
+
+ @Override
+ public void validateDataOnExit()
+ throws DataModelException {
+ //TODO: implement the method.
+ }
+
+ @Override
+ public String getDescription() {
+ return description;
+ }
+
+ @Override
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ @Override
+ public String getReference() {
+ return reference;
+ }
+
+ @Override
+ public void setReference(String reference) {
+ this.reference = reference;
+ }
+
+ @Override
+ public YangStatusType getStatus() {
+ return status;
+ }
+
+ @Override
+ public void setStatus(YangStatusType status) {
+ this.status = status;
+ }
+
+ @Override
+ public List<YangIfFeature> getIfFeatureList() {
+ return unmodifiableList(ifFeatureList);
+ }
+
+ @Override
+ public void addIfFeatureList(YangIfFeature ifFeature) {
+ ifFeatureList.add(ifFeature);
+ }
+
+ @Override
+ public void setIfFeatureList(List<YangIfFeature> ifFeatureList) {
+ this.ifFeatureList = ifFeatureList;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangSchemaNode.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangSchemaNode.java
new file mode 100644
index 0000000..155f522
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangSchemaNode.java
@@ -0,0 +1,159 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+
+import java.util.Map;
+
+/**
+ * Abstraction of YANG data node, used by YMS to abstractly refer the data
+ * nodes in YANG data tree.
+ */
+public interface YangSchemaNode extends LocationInfo {
+
+ /**
+ * Returns type of YANG schema node.
+ *
+ * @return type of YANG schema node
+ */
+ YangSchemaNodeType getYangSchemaNodeType();
+
+ /**
+ * Returns child schema information. It is used by YMS to obtain the child
+ * schema corresponding to data node identifier.
+ *
+ * @param dataNodeIdentifier YANG data node identifier
+ * @return YANG data node context information
+ * @throws DataModelException data model exception in searching the child
+ */
+ YangSchemaNodeContextInfo getChildSchema(YangSchemaNodeIdentifier dataNodeIdentifier)
+ throws DataModelException;
+
+ /**
+ * Validates whether the leaf/leaf-list value is valid as per YANG. It is
+ * used by YMS to validate input value.
+ *
+ * @param value value of leaf/leaf-list
+ * @throws DataModelException a violation in data model rule
+ */
+ void isValueValid(String value)
+ throws DataModelException;
+
+ /**
+ * Returns count of mandatory child nodes, this is used by YMS to identify
+ * whether in request all mandatory child nodes are available.
+ *
+ * @return count of YANG schema nodes
+ * @throws DataModelException a violation in data model rule
+ */
+ int getMandatoryChildCount()
+ throws DataModelException;
+
+ /**
+ * Returns map of default child nodes, this is used by YMS to identify
+ * whether
+ * in request all default child nodes are available.
+ *
+ * @param dataNodeIdentifier YANG data node identifier
+ * @return map of default child nodes
+ */
+ Map<YangSchemaNodeIdentifier, YangSchemaNode> getDefaultChild(
+ YangSchemaNodeIdentifier dataNodeIdentifier);
+
+ /**
+ * Get Java class's package corresponding to the schema node.
+ *
+ * @return java package, it is null, if the Java type is a built in data
+ * type
+ */
+ String getJavaPackage();
+
+ /**
+ * Get Java class or built in data type corresponding to the schema node.
+ *
+ * @return Java class or built in data type corresponding to the schema node
+ */
+ String getJavaClassNameOrBuiltInType();
+
+ /**
+ * Returns schema node identifier.
+ *
+ * @return schema node identifier
+ */
+ YangSchemaNodeIdentifier getYangSchemaNodeIdentifier();
+
+ /**
+ * Returns name of the node.
+ *
+ * @return name of the node
+ */
+ String getName();
+
+ /**
+ * Returns Java attribute name.
+ *
+ * @return Java attribute name
+ */
+ String getJavaAttributeName();
+
+ /**
+ * Returns namespace of the node.
+ *
+ * @return namespace of the node
+ */
+ YangNamespace getNameSpace();
+
+ /**
+ * Checks for the presence of notification in module/sub-module. Exception
+ * will be thrown if this is called for any other node type.
+ *
+ * @return true if notification is present, false otherwise
+ * @throws DataModelException a violation in data model rule
+ */
+ boolean isNotificationPresent()
+ throws DataModelException;
+
+ /**
+ * Returns notification schema node corresponding to the name of
+ * notification as per the generated code enumeration. This is to be used
+ * for notification processing in YMS.
+ *
+ * @param notificationNameInEnum notification name in enum
+ * @return notification schema node
+ * @throws DataModelException a violation in data model rule
+ */
+ YangSchemaNode getNotificationSchemaNode(String notificationNameInEnum)
+ throws DataModelException;
+
+ /**
+ * Returns referred schema node in case of grouping.
+ *
+ * @return referred schema node
+ */
+ YangSchemaNode getReferredSchema();
+
+ /**
+ * Checks for the presence of empty data-type in requested schema node.
+ * Exception will be thrown if this is called for other then leaf/leaf-list
+ * node type.
+ *
+ * @return true if empty data-type is present, false otherwise
+ * @throws DataModelException when fails to do data model operations
+ */
+ boolean isEmptyDataType() throws DataModelException;
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangSchemaNodeContextInfo.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangSchemaNodeContextInfo.java
new file mode 100644
index 0000000..3b42112
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangSchemaNodeContextInfo.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import java.io.Serializable;
+
+/**
+ * Abstraction of YANG data node context information, used by YMS to abstractly
+ * refer the YANG data nodes schema context information.
+ */
+public class YangSchemaNodeContextInfo extends DefaultLocationInfo
+ implements Serializable {
+
+ private static final long serialVersionUID = 806201613L;
+
+ // Current schema node
+ private YangSchemaNode schemaNode;
+
+ /*
+ * Context switched schema node, it will be non null only for the scenarios
+ * in which context switch is there like augment, choice etc, in this case
+ * this node will point to context switched node like YangAugmentInfo.
+ */
+ private YangSchemaNode contextSwitchedNode;
+
+ // Default instance of YangSchemaNodeContextInfo.
+ public YangSchemaNodeContextInfo() {
+ }
+
+ /**
+ * Returns the YANG schema node.
+ *
+ * @return YANG schema node
+ */
+ public YangSchemaNode getSchemaNode() {
+ return schemaNode;
+ }
+
+ /**
+ * Sets YANG schema node.
+ *
+ * @param schemaNode YANG schema node
+ */
+ void setSchemaNode(YangSchemaNode schemaNode) {
+ this.schemaNode = schemaNode;
+ }
+
+ /**
+ * Returns context switched node.
+ *
+ * @return context switched node
+ */
+ public YangSchemaNode getContextSwitchedNode() {
+ return contextSwitchedNode;
+ }
+
+ /**
+ * Set context switched node.
+ *
+ * @param contextSwitchedNode context switched node
+ */
+ void setContextSwitchedNode(YangSchemaNode contextSwitchedNode) {
+ this.contextSwitchedNode = contextSwitchedNode;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangSchemaNodeIdentifier.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangSchemaNodeIdentifier.java
new file mode 100644
index 0000000..4ee96fd
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangSchemaNodeIdentifier.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+/**
+ * Represents YANG data node identifier which is a combination of name and namespace.
+ * Namespace will be present only if node is module/sub-module or augmented node.
+ */
+public class YangSchemaNodeIdentifier extends DefaultLocationInfo
+ implements Serializable, Cloneable {
+
+ private static final long serialVersionUID = 806201648L;
+
+ // Name of YANG data node.
+ private String name;
+
+ // Namespace of YANG data node.
+ private YangNamespace namespace;
+
+ /**
+ * Creates an instance of YANG data node identifier.
+ */
+ public YangSchemaNodeIdentifier() {
+ }
+
+ /**
+ * Returns the name of the node.
+ *
+ * @return name of the node
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * Sets name of the node.
+ *
+ * @param name name of the node
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ /**
+ * Returns namespace of the node.
+ *
+ * @return namespace of the node
+ */
+ public YangNamespace getNameSpace() {
+ return namespace;
+ }
+
+ /**
+ * Sets namespace of the node.
+ *
+ * @param namespace namespace of the node
+ */
+ public void setNameSpace(YangNamespace namespace) {
+ this.namespace = namespace;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+
+ if (this == obj) {
+ return true;
+ }
+ if (obj instanceof YangSchemaNodeIdentifier) {
+ YangSchemaNodeIdentifier other = (YangSchemaNodeIdentifier) obj;
+
+ if (!Objects.equals(name, other.name)) {
+ return false;
+ }
+ String name = namespace.getModuleName();
+ String otherName = other.getNameSpace().getModuleName();
+ if (name != null && otherName != null) {
+ if (namespace.getModuleName()
+ .equals(other.getNameSpace().getModuleName())) {
+ return true;
+ }
+
+ }
+ String nSpace = namespace.getModuleNamespace();
+ String otherNspace = other.getNameSpace().getModuleNamespace();
+ if (nSpace != null && otherNspace != null) {
+ if (nSpace.equals(otherNspace)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public YangSchemaNodeIdentifier clone() throws CloneNotSupportedException {
+ return (YangSchemaNodeIdentifier) super.clone();
+ }
+
+ @Override
+ public int hashCode() {
+ return 0;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangSchemaNodeType.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangSchemaNodeType.java
new file mode 100644
index 0000000..ebcfd0a
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangSchemaNodeType.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+/**
+ * Represents the nature of YANG node, it is used by YMS to abstractly
+ * understand the nature of node without knowing details of the YANG
+ * construct.
+ */
+public enum YangSchemaNodeType {
+
+ /**
+ * Represents single instance of YANG node like YANG container, YANG module,
+ * YANG sub-module. This is used by YMS to abstractly understand the nature
+ * of node.
+ */
+ YANG_SINGLE_INSTANCE_NODE,
+
+ /**
+ * Represents multi instance of YANG node i.e. YANG list.
+ * This is used by YMS to abstractly understand the nature of node.
+ */
+ YANG_MULTI_INSTANCE_NODE,
+
+ /**
+ * Represents single instance of YANG leaf node i.e. YANG leaf
+ * This is used by YMS to abstractly understand the nature of node.
+ */
+ YANG_SINGLE_INSTANCE_LEAF_NODE,
+
+ /**
+ * Represents multi instance of YANG leaf node i.e. YANG leaflist
+ * This is used by YMS to abstractly understand the nature of node.
+ */
+ YANG_MULTI_INSTANCE_LEAF_NODE,
+
+ /**
+ * Represents node which is not a data node.
+ */
+ YANG_NON_DATA_NODE,
+
+ /**
+ * Represents node which cannot be instantiated.
+ */
+ YANG_CHOICE_NODE,
+
+ /**
+ * Represents the Augmented Node.
+ */
+ YANG_AUGMENT_NODE
+
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangStatus.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangStatus.java
new file mode 100644
index 0000000..044ba5a
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangStatus.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel;
+
+/**
+ * Abstraction for status on a YANG entity. Abstracted to unify the parsing and
+ * translator processing of status.
+ */
+public interface YangStatus {
+
+ /**
+ * Returns the status.
+ *
+ * @return the status
+ */
+ YangStatusType getStatus();
+
+ /**
+ * Sets the status.
+ *
+ * @param status the status to set
+ */
+ void setStatus(YangStatusType status);
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangStatusType.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangStatusType.java
new file mode 100644
index 0000000..6de81fd
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangStatusType.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel;
+
+/*
+ * Reference:RFC 6020.
+ * The "status" statement takes as an argument one of the strings
+ * "current", "deprecated", or "obsolete". If no status is specified,
+ * the default is "current".
+ */
+
+/**
+ * Represents the status of YANG entities.
+ */
+public enum YangStatusType {
+ /**
+ * Reference:RFC 6020.
+ *
+ * "current" means that the definition is current and valid.
+ */
+ CURRENT,
+
+ /**
+ * Reference:RFC 6020.
+ *
+ * "deprecated" indicates an obsolete definition, but it
+ * permits new/ continued implementation in order to foster interoperability
+ * with older/existing implementations.
+ */
+ DEPRECATED,
+
+ /**
+ * Reference:RFC 6020.
+ *
+ * "obsolete" means the definition is obsolete and
+ * SHOULD NOT be implemented and/or can be removed from implementations.
+ */
+ OBSOLETE
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangStringRestriction.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangStringRestriction.java
new file mode 100644
index 0000000..1934e8d
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangStringRestriction.java
@@ -0,0 +1,268 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangUint64;
+
+import java.io.Serializable;
+import java.math.BigInteger;
+import java.util.ListIterator;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.PATTERN_DATA;
+
+/*-
+ * Reference RFC 6020.
+ *
+ * A string can be restricted with the "length" and "pattern" statements.
+ *
+ */
+
+/**
+ * Represents the restriction for string data type.
+ */
+public class YangStringRestriction extends DefaultLocationInfo
+ implements YangDesc, YangReference, Parsable, Serializable {
+
+ /*-
+ * Reference RFC 6020.
+ * The length Statement
+ *
+ * The "length" statement, which is an optional sub-statement to the
+ * "type" statement, takes as an argument a length expression string.
+ * It is used to restrict the built-in type "string", or types derived
+ * from "string".
+ * A "length" statement restricts the number of unicode characters in
+ * the string.
+ * A length range consists of an explicit value, or a lower bound, two
+ * consecutive dots "..", and an upper bound. Multiple values or ranges
+ * can be given, separated by "|". Length-restricting values MUST NOT
+ * be negative. If multiple values or ranges are given, they all MUST
+ * be disjoint and MUST be in ascending order. If a length restriction
+ * is applied to an already length-restricted type, the new restriction
+ * MUST be equal or more limiting, that is, raising the lower bounds,
+ * reducing the upper bounds, removing explicit length values or ranges,
+ * or splitting ranges into multiple ranges with intermediate gaps. A
+ * length value is a non-negative integer, or one of the special values
+ * "min" or "max". "min" and "max" mean the minimum and maximum length
+ * accepted for the type being restricted, respectively. An
+ * implementation is not required to support a length value larger than
+ * 18446744073709551615.
+ * The length's sub-statements
+ *
+ * +---------------+---------+-------------+-----------------+
+ * | substatement | section | cardinality | mapped data type|
+ * +---------------+---------+-------------+-----------------+
+ * | description | 7.19.3 | 0..1 | string |
+ * | error-app-tag | 7.5.4.2 | 0..1 | string |
+ * | error-message | 7.5.4.1 | 0..1 | string |
+ * | reference | 7.19.4 | 0..1 | string |
+ * +---------------+---------+-------------+-----------------+
+ */
+
+ private static final long serialVersionUID = 8062016053L;
+
+ /**
+ * Length restriction information.
+ */
+ private YangRangeRestriction<YangUint64> lengthRestriction;
+
+ /**
+ * Effective pattern restriction for the type.
+ */
+ private YangPatternRestriction patternRestriction;
+
+ /**
+ * Textual reference.
+ */
+ private String reference;
+
+ /**
+ * Textual description.
+ */
+ private String description;
+
+ /**
+ * Creates a YANG string restriction object.
+ */
+ public YangStringRestriction() {
+ }
+
+ /**
+ * Returns the length restriction on the string data.
+ *
+ * @return length restriction on the string data
+ */
+ public YangRangeRestriction<YangUint64> getLengthRestriction() {
+ return lengthRestriction;
+ }
+
+ /**
+ * Sets the length restriction on the string data.
+ *
+ * @param rest length restriction on the string data
+ */
+ public void setLengthRestriction(YangRangeRestriction<YangUint64> rest) {
+ lengthRestriction = rest;
+ }
+
+ /**
+ * Returns the pattern restriction for the type.
+ *
+ * @return pattern restriction for the type
+ */
+ public YangPatternRestriction getPatternRestriction() {
+ return patternRestriction;
+ }
+
+ /**
+ * Sets the pattern restriction for the type.
+ *
+ * @param rest pattern restriction for the type
+ */
+ void setPatternRestriction(YangPatternRestriction rest) {
+ patternRestriction = rest;
+ }
+
+ /**
+ * Adds a new pattern restriction for the type.
+ *
+ * @param newPattern new pattern restriction for the type
+ */
+ public void addPattern(String newPattern) {
+ if (patternRestriction == null) {
+ patternRestriction = new YangPatternRestriction();
+ }
+ patternRestriction.addPattern(newPattern);
+ }
+
+ /**
+ * Returns the textual reference of the string restriction.
+ *
+ * @return textual reference of the string restriction
+ */
+ @Override
+ public String getReference() {
+ return reference;
+ }
+
+ /**
+ * Sets the textual reference of the string restriction.
+ *
+ * @param ref textual reference of the string restriction
+ */
+ @Override
+ public void setReference(String ref) {
+ reference = ref;
+ }
+
+ /**
+ * Returns the description of the string restriction.
+ *
+ * @return description of the string restriction
+ */
+ @Override
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * Sets the description of the string restriction.
+ *
+ * @param desc description of the string restriction
+ */
+ @Override
+ public void setDescription(String desc) {
+ description = desc;
+
+ }
+
+ @Override
+ public YangConstructType getYangConstructType() {
+ return PATTERN_DATA;
+ }
+
+ /**
+ * Validates if the given value is correct as per the length restriction.
+ *
+ * @param valueInString value
+ * @return true, if the value is confirming to length restriction, false otherwise
+ */
+ boolean isValidStringOnLengthRestriction(String valueInString) {
+ if (lengthRestriction == null || lengthRestriction.getAscendingRangeIntervals() == null
+ || lengthRestriction.getAscendingRangeIntervals().isEmpty()) {
+ // Length restriction is optional
+ return true;
+ }
+
+ ListIterator<YangRangeInterval<YangUint64>> rangeListIterator =
+ lengthRestriction.getAscendingRangeIntervals().listIterator();
+ boolean isMatched = false;
+ while (rangeListIterator.hasNext()) {
+ YangRangeInterval rangeInterval = rangeListIterator.next();
+ rangeInterval.setCharPosition(getCharPosition());
+ rangeInterval.setLineNumber(getLineNumber());
+ rangeInterval.setFileName(getFileName());
+ BigInteger startValue = ((YangUint64) rangeInterval.getStartValue()).getValue();
+ BigInteger endValue = ((YangUint64) rangeInterval.getEndValue()).getValue();
+ if (valueInString.length() >= startValue.intValue() &&
+ valueInString.length() <= endValue.intValue()) {
+ isMatched = true;
+ break;
+ }
+ }
+
+ return isMatched;
+ }
+
+ /**
+ * Validates if the given value is correct as per the pattern restriction.
+ *
+ * @param valueInString value
+ * @return true, if the value is confirming to pattern restriction, false otherwise
+ */
+ boolean isValidStringOnPatternRestriction(String valueInString) {
+ if (patternRestriction == null
+ || patternRestriction.getPatternList().isEmpty()) {
+ // Pattern restriction is optional
+ return true;
+ }
+
+ ListIterator<String> patternListIterator =
+ patternRestriction.getPatternList().listIterator();
+ boolean isMatched = false;
+ while (patternListIterator.hasNext()) {
+ if (valueInString.matches(patternListIterator.next())) {
+ isMatched = true;
+ break;
+ }
+ }
+ return isMatched;
+ }
+
+ @Override
+ public void validateDataOnEntry() throws DataModelException {
+ // TODO: implement the method.
+ }
+
+ @Override
+ public void validateDataOnExit() throws DataModelException {
+ // TODO: implement the method.
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangSubModule.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangSubModule.java
new file mode 100644
index 0000000..d67b15f
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangSubModule.java
@@ -0,0 +1,827 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+
+import static java.util.Collections.unmodifiableList;
+import static org.onosproject.yang.compiler.datamodel.ResolvableType.YANG_AUGMENT;
+import static org.onosproject.yang.compiler.datamodel.ResolvableType.YANG_BASE;
+import static org.onosproject.yang.compiler.datamodel.ResolvableType.YANG_COMPILER_ANNOTATION;
+import static org.onosproject.yang.compiler.datamodel.ResolvableType.YANG_DERIVED_DATA_TYPE;
+import static org.onosproject.yang.compiler.datamodel.ResolvableType.YANG_IDENTITYREF;
+import static org.onosproject.yang.compiler.datamodel.ResolvableType.YANG_IF_FEATURE;
+import static org.onosproject.yang.compiler.datamodel.ResolvableType.YANG_LEAFREF;
+import static org.onosproject.yang.compiler.datamodel.ResolvableType.YANG_USES;
+import static org.onosproject.yang.compiler.datamodel.YangSchemaNodeType.YANG_SINGLE_INSTANCE_NODE;
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.linkInterFileReferences;
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.resolveLinkingForResolutionList;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.SUB_MODULE_DATA;
+
+/*
+ * Reference RFC 6020.
+ *
+ * While the primary unit in YANG is a module, a YANG module can itself
+ * be constructed out of several submodules. Submodules allow a module
+ * designer to split a complex model into several pieces where all the
+ * submodules contribute to a single namespace, which is defined by the
+ * module that includes the submodules.
+ *
+ * The "submodule" statement defines the submodule's name, and groups
+ * all statements that belong to the submodule together. The
+ * "submodule" statement's argument is the name of the submodule,
+ * followed by a block of sub-statements that hold detailed submodule
+ * information.
+ *
+ * The submodule's sub-statements
+ *
+ * +--------------+---------+-------------+------------------+
+ * | substatement | section | cardinality |data model mapping|
+ * +--------------+---------+-------------+------------------+
+ * | anyxml | 7.10 | 0..n | - not supported |
+ * | augment | 7.15 | 0..n | - child nodes |
+ * | belongs-to | 7.2.2 | 1 | - YangBelongsTo |
+ * | choice | 7.9 | 0..n | - child nodes |
+ * | contact | 7.1.8 | 0..1 | - string |
+ * | container | 7.5 | 0..n | - child nodes |
+ * | description | 7.19.3 | 0..1 | - string |
+ * | deviation | 7.18.3 | 0..n | - TODO |
+ * | extension | 7.17 | 0..n | - TODO |
+ * | feature | 7.18.1 | 0..n | - YangFeature |
+ * | grouping | 7.11 | 0..n | - child nodes |
+ * | identity | 7.16 | 0..n | - TODO |
+ * | import | 7.1.5 | 0..n | - YangImport |
+ * | include | 7.1.6 | 0..n | - YangInclude |
+ * | leaf | 7.6 | 0..n | - YangLeaf |
+ * | leaf-list | 7.7 | 0..n | - YangLeafList |
+ * | list | 7.8 | 0..n | - child nodes |
+ * | notification | 7.14 | 0..n | - TODO |
+ * | organization | 7.1.7 | 0..1 | - string |
+ * | reference | 7.19.4 | 0..1 | - string |
+ * | revision | 7.1.9 | 0..n | - string |
+ * | rpc | 7.13 | 0..n | - TODO |
+ * | typedef | 7.3 | 0..n | - child nodes |
+ * | uses | 7.12 | 0..n | - child nodes |
+ * | YANG-version | 7.1.2 | 0..1 | - int |
+ * +--------------+---------+-------------+------------------+
+ */
+
+/**
+ * Represents data model node to maintain information defined in YANG sub-module.
+ */
+public abstract class YangSubModule
+ extends YangNode
+ implements YangLeavesHolder, YangDesc, YangReference, Parsable,
+ CollisionDetector, YangReferenceResolver, RpcNotificationContainer,
+ YangFeatureHolder, YangIsFilterContentNodes, YangNamespace {
+
+ private static final long serialVersionUID = 806201614L;
+
+ /**
+ * Module to which it belongs to.
+ */
+ private YangBelongsTo belongsTo;
+
+ /**
+ * Reference RFC 6020.
+ * <p>
+ * The "contact" statement provides contact information for the module. The
+ * argument is a string that is used to specify contact information for the
+ * person or persons to whom technical queries concerning this module should
+ * be sent, such as their name, postal address, telephone number, and
+ * electronic mail address.
+ */
+ private String contact;
+
+ /**
+ * Description.
+ */
+ private String description;
+
+ /**
+ * List of YANG modules imported.
+ */
+ private List<YangImport> importList;
+
+ /**
+ * List of YANG sub-modules included.
+ */
+ private List<YangInclude> includeList;
+
+ /**
+ * List of leaves at root level in the sub-module.
+ */
+ private List<YangLeaf> listOfLeaf;
+
+ /**
+ * List of leaf-lists at root level in the sub-module.
+ */
+ private List<YangLeafList> listOfLeafList;
+
+ /**
+ * List of feature at root level in the module.
+ */
+ private List<YangFeature> listOfFeature;
+
+ /**
+ * Organization owner of the sub-module.
+ */
+ private String organization;
+
+ /**
+ * Reference of the sub-module.
+ */
+ private String reference;
+
+ /**
+ * Revision info of the sub-module.
+ */
+ private YangRevision revision;
+
+ /**
+ * YANG version.
+ */
+ private byte version;
+
+ /**
+ * Prefix of parent module.
+ */
+ private String prefix;
+
+ /*-
+ * Reference RFC 6020.
+ *
+ * Nested typedefs and groupings.
+ * Typedefs and groupings may appear nested under many YANG statements,
+ * allowing these to be lexically scoped by the hierarchy under which
+ * they appear. This allows types and groupings to be defined near
+ * where they are used, rather than placing them at the top level of the
+ * hierarchy. The close proximity increases readability.
+ *
+ * Scoping also allows types to be defined without concern for naming
+ * conflicts between types in different submodules. Type names can be
+ * specified without adding leading strings designed to prevent name
+ * collisions within large modules.
+ *
+ * Finally, scoping allows the module author to keep types and groupings
+ * private to their module or submodule, preventing their reuse. Since
+ * only top-level types and groupings (i.e., those appearing as
+ * sub-statements to a module or submodule statement) can be used outside
+ * the module or submodule, the developer has more control over what
+ * pieces of their module are presented to the outside world, supporting
+ * the need to hide internal information and maintaining a boundary
+ * between what is shared with the outside world and what is kept
+ * private.
+ *
+ * Scoped definitions MUST NOT shadow definitions at a higher scope. A
+ * type or grouping cannot be defined if a higher level in the schema
+ * hierarchy has a definition with a matching identifier.
+ *
+ * A reference to an un-prefixed type or grouping, or one which uses the
+ * prefix of the current module, is resolved by locating the closest
+ * matching "typedef" or "grouping" statement among the immediate
+ * sub-statements of each ancestor statement.
+ */
+ private List<YangResolutionInfo> derivedTypeResolutionList;
+
+ /**
+ * Uses resolution list.
+ */
+ private List<YangResolutionInfo> usesResolutionList;
+
+ /**
+ * If-feature resolution list.
+ */
+ private List<YangResolutionInfo> ifFeatureResolutionList;
+
+ /**
+ * LeafRef resolution list.
+ */
+ private List<YangResolutionInfo> leafRefResolutionList;
+
+ /**
+ * Base resolution list.
+ */
+ private List<YangResolutionInfo> baseResolutionList;
+
+ /**
+ * IdentityRef resolution list.
+ */
+ private List<YangResolutionInfo> identityRefResolutionList;
+
+ /**
+ * Compiler annotation list.
+ */
+ private List<YangResolutionInfo> compilerAnnotationList;
+
+ /**
+ * extension list.
+ */
+ private List<YangExtension> extensionList;
+
+ /**
+ * Augment resolution list.
+ */
+ private List<YangResolutionInfo> augmentResolutionList;
+
+ /**
+ * Flag to indicate the presence of notification.
+ */
+ private boolean isNotificationPresent;
+
+ /**
+ * Map of notification enum.
+ */
+ private final Map<String, YangSchemaNode> notificationEnumMap;
+
+ /**
+ * List of augments which are augmenting input.
+ */
+ private final List<YangAugment> augments;
+
+ /**
+ * YANG defined namespace.
+ */
+ private String namespace;
+
+ /**
+ * Creates a sub module node.
+ */
+ public YangSubModule() {
+ super(YangNodeType.SUB_MODULE_NODE, new HashMap<>());
+ derivedTypeResolutionList = new LinkedList<>();
+ augmentResolutionList = new LinkedList<>();
+ usesResolutionList = new LinkedList<>();
+ ifFeatureResolutionList = new LinkedList<>();
+ leafRefResolutionList = new LinkedList<>();
+ baseResolutionList = new LinkedList<>();
+ identityRefResolutionList = new LinkedList<>();
+ compilerAnnotationList = new LinkedList<>();
+ importList = new LinkedList<>();
+ includeList = new LinkedList<>();
+ listOfLeaf = new LinkedList<>();
+ listOfLeafList = new LinkedList<>();
+ extensionList = new LinkedList<>();
+ compilerAnnotationList = new LinkedList<>();
+ listOfFeature = new LinkedList<>();
+ notificationEnumMap = new HashMap<>();
+ augments = new LinkedList<>();
+ }
+
+ @Override
+ public void addToChildSchemaMap(YangSchemaNodeIdentifier id,
+ YangSchemaNodeContextInfo context) {
+ getYsnContextInfoMap().put(id, context);
+ }
+
+ @Override
+ public void incrementMandatoryChildCount() {
+ // TODO
+ }
+
+ @Override
+ public void addToDefaultChildMap(YangSchemaNodeIdentifier id,
+ YangSchemaNode yangSchemaNode) {
+ // TODO
+ }
+
+ @Override
+ public YangSchemaNodeType getYangSchemaNodeType() {
+ return YANG_SINGLE_INSTANCE_NODE;
+ }
+
+ /**
+ * Returns the module info.
+ *
+ * @return the belongs to info
+ */
+ public YangBelongsTo getBelongsTo() {
+ return belongsTo;
+ }
+
+ /**
+ * Sets the module info.
+ *
+ * @param belongsTo module info to set
+ */
+ public void setBelongsTo(YangBelongsTo belongsTo) {
+ this.belongsTo = belongsTo;
+ }
+
+ /**
+ * Returns the contact.
+ *
+ * @return the contact
+ */
+ public String getContact() {
+ return contact;
+ }
+
+ /**
+ * Sets the contact.
+ *
+ * @param contact the contact to set
+ */
+ public void setContact(String contact) {
+ this.contact = contact;
+ }
+
+ /**
+ * Returns the description.
+ *
+ * @return the description
+ */
+ @Override
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * Sets the description.
+ *
+ * @param description set the description
+ */
+ @Override
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ /**
+ * Returns the list of imported modules.
+ *
+ * @return the list of imported modules
+ */
+ @Override
+ public List<YangImport> getImportList() {
+ return unmodifiableList(importList);
+ }
+
+ /**
+ * Adds the imported module information to the import list.
+ *
+ * @param importedModule module being imported
+ */
+ @Override
+ public void addToImportList(YangImport importedModule) {
+ importList.add(importedModule);
+ }
+
+ @Override
+ public void setImportList(List<YangImport> importList) {
+ this.importList = importList;
+ }
+
+ /**
+ * Returns the list of included sub modules.
+ *
+ * @return the included list of sub modules
+ */
+ @Override
+ public List<YangInclude> getIncludeList() {
+ return unmodifiableList(includeList);
+ }
+
+ /**
+ * Returns the included sub module information to the include list.
+ *
+ * @param includeModule submodule being included
+ */
+ @Override
+ public void addToIncludeList(YangInclude includeModule) {
+ includeList.add(includeModule);
+ }
+
+ @Override
+ public void setIncludeList(List<YangInclude> includeList) {
+ this.includeList = includeList;
+ }
+
+ @Override
+ public String getPrefix() {
+ return prefix;
+ }
+
+ @Override
+ public void setPrefix(String prefix) {
+ this.prefix = prefix;
+ }
+
+ @Override
+ public void resolveSelfFileLinking(ResolvableType type)
+ throws DataModelException {
+ // Get the list to be resolved.
+ List<YangResolutionInfo> resolutionList = getUnresolvedResolutionList(type);
+ // Resolve linking for a resolution list.
+ resolveLinkingForResolutionList(resolutionList, this);
+ }
+
+ @Override
+ public void resolveInterFileLinking(ResolvableType type)
+ throws DataModelException {
+ // Get the list to be resolved.
+ List<YangResolutionInfo> resolutionList = getUnresolvedResolutionList(type);
+ // Resolve linking for a resolution list.
+ linkInterFileReferences(resolutionList, this);
+ }
+
+ /**
+ * Returns the list of leaves.
+ *
+ * @return the list of leaves
+ */
+ @Override
+ public List<YangLeaf> getListOfLeaf() {
+ return unmodifiableList(listOfLeaf);
+ }
+
+ @Override
+ public void setListOfLeaf(List<YangLeaf> leafsList) {
+ listOfLeaf = leafsList;
+ }
+
+ /**
+ * Adds a leaf.
+ *
+ * @param leaf the leaf to be added
+ */
+ @Override
+ public void addLeaf(YangLeaf leaf) {
+ listOfLeaf.add(leaf);
+ }
+
+ /**
+ * Returns the list of leaf-list.
+ *
+ * @return the list of leaf-list
+ */
+ @Override
+ public List<YangLeafList> getListOfLeafList() {
+ return unmodifiableList(listOfLeafList);
+ }
+
+ @Override
+ public void setListOfLeafList(List<YangLeafList> listOfLeafList) {
+ this.listOfLeafList = listOfLeafList;
+ }
+
+ /**
+ * Adds a leaf-list.
+ *
+ * @param leafList the leaf-list to be added
+ */
+ @Override
+ public void addLeafList(YangLeafList leafList) {
+ listOfLeafList.add(leafList);
+ }
+
+ /**
+ * Returns the sub-modules organization.
+ *
+ * @return the organization
+ */
+ public String getOrganization() {
+ return organization;
+ }
+
+ /**
+ * Sets the sub-modules organization.
+ *
+ * @param org the organization to set
+ */
+ public void setOrganization(String org) {
+ organization = org;
+ }
+
+ /**
+ * Returns the textual reference.
+ *
+ * @return the reference
+ */
+ @Override
+ public String getReference() {
+ return reference;
+ }
+
+ /**
+ * Sets the textual reference.
+ *
+ * @param reference the reference to set
+ */
+ @Override
+ public void setReference(String reference) {
+ this.reference = reference;
+ }
+
+ /**
+ * Returns the revision.
+ *
+ * @return the revision
+ */
+ public YangRevision getRevision() {
+ return revision;
+ }
+
+ /**
+ * Sets the revision.
+ *
+ * @param revision the revision to set
+ */
+ public void setRevision(YangRevision revision) {
+ this.revision = revision;
+ }
+
+ /**
+ * Returns the version.
+ *
+ * @return the version
+ */
+ public byte getVersion() {
+ return version;
+ }
+
+ /**
+ * Sets the version.
+ *
+ * @param version the version to set
+ */
+ public void setVersion(byte version) {
+ this.version = version;
+ }
+
+ /**
+ * Returns the type of the parsed data.
+ *
+ * @return returns SUB_MODULE_DATA
+ */
+ @Override
+ public YangConstructType getYangConstructType() {
+ return SUB_MODULE_DATA;
+ }
+
+ /**
+ * Validates the data on entering the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnEntry()
+ throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+
+ /**
+ * Validates the data on exiting the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnExit()
+ throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+
+ @Override
+ public void detectCollidingChild(String id, YangConstructType dataType)
+ throws DataModelException {
+ // Asks helper to detect colliding child.
+ detectCollidingChildUtil(id, dataType, this);
+ }
+
+ @Override
+ public void detectSelfCollision(String id, YangConstructType dataType)
+ throws DataModelException {
+ // Not required as module doesn't have any parent.
+ }
+
+ @Override
+ public List<YangResolutionInfo> getUnresolvedResolutionList(ResolvableType type) {
+ if (type == YANG_DERIVED_DATA_TYPE) {
+ return unmodifiableList(derivedTypeResolutionList);
+ } else if (type == YANG_USES) {
+ return unmodifiableList(usesResolutionList);
+ } else if (type == YANG_AUGMENT) {
+ return unmodifiableList(augmentResolutionList);
+ } else if (type == YANG_IF_FEATURE) {
+ return unmodifiableList(ifFeatureResolutionList);
+ } else if (type == YANG_LEAFREF) {
+ return unmodifiableList(leafRefResolutionList);
+ } else if (type == YANG_BASE) {
+ return unmodifiableList(baseResolutionList);
+ } else if (type == YANG_IDENTITYREF) {
+ return unmodifiableList(identityRefResolutionList);
+ } else {
+ return unmodifiableList(compilerAnnotationList);
+ }
+ }
+
+ @Override
+ public void addToResolutionList(YangResolutionInfo resolutionInfo,
+ ResolvableType type) {
+ if (type == YANG_DERIVED_DATA_TYPE) {
+ derivedTypeResolutionList.add(resolutionInfo);
+ } else if (type == YANG_USES) {
+ usesResolutionList.add(resolutionInfo);
+ } else if (type == YANG_IF_FEATURE) {
+ ifFeatureResolutionList.add(resolutionInfo);
+ } else if (type == YANG_LEAFREF) {
+ leafRefResolutionList.add(resolutionInfo);
+ } else if (type == YANG_BASE) {
+ baseResolutionList.add(resolutionInfo);
+ } else if (type == YANG_AUGMENT) {
+ augmentResolutionList.add(resolutionInfo);
+ } else if (type == YANG_IDENTITYREF) {
+ identityRefResolutionList.add(resolutionInfo);
+ } else if (type == YANG_COMPILER_ANNOTATION) {
+ compilerAnnotationList.add(resolutionInfo);
+ }
+ }
+
+ @Override
+ public void setResolutionList(List<YangResolutionInfo> resolutionList,
+ ResolvableType type) {
+ if (type == YANG_DERIVED_DATA_TYPE) {
+ derivedTypeResolutionList = resolutionList;
+ } else if (type == YANG_USES) {
+ usesResolutionList = resolutionList;
+ } else if (type == YANG_IF_FEATURE) {
+ ifFeatureResolutionList.add((YangResolutionInfo) resolutionList);
+ } else if (type == YANG_LEAFREF) {
+ leafRefResolutionList = resolutionList;
+ } else if (type == YANG_BASE) {
+ baseResolutionList = resolutionList;
+ } else if (type == YANG_AUGMENT) {
+ augmentResolutionList = resolutionList;
+ } else if (type == YANG_IDENTITYREF) {
+ identityRefResolutionList = resolutionList;
+ } else if (type == YANG_COMPILER_ANNOTATION) {
+ compilerAnnotationList = resolutionList;
+ }
+ }
+
+ /**
+ * Links the sub-module with module.
+ *
+ * @param yangNodeSet YANG file information set
+ * @throws DataModelException a violation in data model rule
+ */
+ public void linkWithModule(Set<YangNode> yangNodeSet)
+ throws DataModelException {
+ belongsTo.linkWithModule(yangNodeSet);
+ namespace = ((YangNamespace) belongsTo.getModuleNode())
+ .getModuleNamespace();
+ }
+
+ @Override
+ public void addReferencesToIncludeList(Set<YangNode> yangNodeSet)
+ throws DataModelException {
+ // Run through the included list to add references.
+ for (YangInclude yangInclude : getIncludeList()) {
+ YangSubModule subModule = yangInclude.addReferenceToInclude(yangNodeSet);
+ // Check if the referred sub-modules parent is self
+ if (!Objects.equals(subModule.getBelongsTo().getModuleNode(), getBelongsTo()
+ .getModuleNode())) {
+ yangInclude.reportIncludeError();
+ }
+ }
+ }
+
+ @Override
+ public void addReferencesToImportList(Set<YangNode> yangNodeSet)
+ throws DataModelException {
+ // Run through the imported list to add references.
+ for (YangImport yangImport : getImportList()) {
+ yangImport.addReferenceToImport(yangNodeSet);
+ }
+ }
+
+ @Override
+ public List<YangFeature> getFeatureList() {
+ return unmodifiableList(listOfFeature);
+ }
+
+ @Override
+ public void addFeatureList(YangFeature feature) {
+ listOfFeature.add(feature);
+ }
+
+ @Override
+ public void setListOfFeature(List<YangFeature> listOfFeature) {
+ this.listOfFeature = listOfFeature;
+ }
+
+ /**
+ * Adds extension in extension list.
+ *
+ * @param extension the extension to be added
+ */
+ public void addExtension(YangExtension extension) {
+ extensionList.add(extension);
+ }
+
+ /**
+ * Returns the extension list.
+ *
+ * @return the extension list
+ */
+ public List<YangExtension> getExtensionList() {
+ return unmodifiableList(extensionList);
+ }
+
+ /**
+ * Sets the extension list.
+ *
+ * @param extensionList the list of extension
+ */
+ public void setExtensionList(List<YangExtension> extensionList) {
+ this.extensionList = extensionList;
+ }
+
+ @Override
+ public void setLeafNameSpaceAndAddToParentSchemaMap() {
+ // Add namespace for all leafs.
+ for (YangLeaf yangLeaf : getListOfLeaf()) {
+ yangLeaf.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
+ }
+ // Add namespace for all leaf list.
+ for (YangLeafList yangLeafList : getListOfLeafList()) {
+ yangLeafList.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
+ }
+ }
+
+
+ @Override
+ public boolean isNotificationPresent() {
+ return isNotificationPresent;
+ }
+
+ @Override
+ public void setNotificationPresenceFlag(boolean notificationPresent) {
+ isNotificationPresent = notificationPresent;
+ }
+
+ @Override
+ public void addToNotificationEnumMap(String enumName,
+ YangSchemaNode notification) {
+ notificationEnumMap.put(enumName, notification);
+ }
+
+ @Override
+ public YangSchemaNode getNotificationSchemaNode(String enumName) {
+ return notificationEnumMap.get(enumName);
+ }
+
+ /**
+ * Adds to augment list.
+ *
+ * @param augment augment which is augmenting input
+ */
+ public void addToAugmentList(YangAugment augment) {
+ augments.add(augment);
+ }
+
+ /**
+ * Returns augmented list.
+ *
+ * @return augmented list
+ */
+ public List<YangAugment> getAugmentList() {
+ return unmodifiableList(augments);
+ }
+
+ @Override
+ public String getModuleNamespace() {
+ return namespace;
+ }
+
+ @Override
+ public String getModuleName() {
+ return getName();
+ }
+
+ public void setModuleNamespace(String namespace) {
+ this.namespace = namespace;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangTranslatorOperatorNode.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangTranslatorOperatorNode.java
new file mode 100644
index 0000000..7045109
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangTranslatorOperatorNode.java
@@ -0,0 +1,25 @@
+
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+/**
+ * Abstraction of an entity which provides info about whether to translate module/submodule in manager and service
+ * classes.
+ */
+public interface YangTranslatorOperatorNode {
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangType.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangType.java
new file mode 100644
index 0000000..8105d37
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangType.java
@@ -0,0 +1,557 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.DataModelUtils;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.DataTypeException;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangUint64;
+
+import java.io.Serializable;
+import java.math.BigInteger;
+import java.util.Iterator;
+import java.util.ListIterator;
+
+import static org.onosproject.yang.compiler.datamodel.BuiltInTypeObjectFactory.getDataObjectFromString;
+import static org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus.UNRESOLVED;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.TYPE_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypeUtils.isOfRangeRestrictedType;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
+
+/*
+ * Reference:RFC 6020.
+ * The "type" statement takes as an argument a string that is the name
+ * of a YANG built-in type or a derived type, followed by an optional
+ * block of sub-statements that are used to put further restrictions
+ * on the type.
+ *
+ * The restrictions that can be applied depend on the type being restricted.
+ * The type's sub-statements
+ *
+ * +------------------+---------+-------------+------------------------------------+
+ * | substatement | section | cardinality | mapped data type |
+ * +------------------+---------+-------------+------------------------------------+
+ * | bit | 9.7.4 | 0..n | - YangBit used in YangBits |
+ * | enum | 9.6.4 | 0..n | - YangEnum used in YangEnumeration |
+ * | length | 9.4.4 | 0..1 | - used for string |
+ * | path | 9.9.2 | 0..1 | - path for referred leaf/leaf-list |
+ * | pattern | 9.4.6 | 0..n | - used for string |
+ * | range | 9.2.4 | 0..1 | - used for integer data type |
+ * | require-instance | 9.13.2 | 0..1 | - TODO instance-identifier |
+ * | type | 7.4 | 0..n | - TODO union |
+ * +------------------+---------+-------------+------------------------------------+
+ */
+
+/**
+ * Represents the data type information.
+ *
+ * @param <T> YANG data type info
+ */
+public class YangType<T> extends DefaultLocationInfo
+ implements Cloneable, Parsable, Resolvable, Serializable {
+
+ private static final long serialVersionUID = 8062016054L;
+
+ /**
+ * YANG node identifier.
+ */
+ private YangNodeIdentifier nodeId;
+
+ /**
+ * YANG data type.
+ */
+ private YangDataTypes dataType;
+
+ /**
+ * Additional information about data type, example restriction info, named
+ * values, etc. The extra information is based on the data type. Based on
+ * the data type, the extended info can vary.
+ */
+ private T dataTypeExtendedInfo;
+
+ /**
+ * Status of resolution. If completely resolved enum value is "RESOLVED",
+ * if not enum value is "UNRESOLVED", in case reference of grouping/typedef
+ * is added to uses/type but it's not resolved value of enum should be
+ * "INTRA_FILE_RESOLVED".
+ */
+ private ResolvableStatus resolvableStatus;
+
+
+ /**
+ * Resolution for interfile grouping.
+ */
+ private boolean isTypeForInterFileGroupingResolution;
+
+ /**
+ * Resolved within the grouping where the type is used.
+ */
+ private boolean isTypeNotResolvedTillRootNode;
+
+ /**
+ * Creates a YANG type object.
+ */
+ public YangType() {
+
+ nodeId = new YangNodeIdentifier();
+ resolvableStatus = UNRESOLVED;
+ }
+
+ /**
+ * Returns prefix associated with data type name.
+ *
+ * @return prefix associated with data type name
+ */
+ public String getPrefix() {
+ return nodeId.getPrefix();
+ }
+
+ /**
+ * Sets prefix associated with data type name.
+ *
+ * @param prefix prefix associated with data type name
+ */
+ public void setPrefix(String prefix) {
+ nodeId.setPrefix(prefix);
+ }
+
+ /**
+ * Returns the name of data type.
+ *
+ * @return the name of data type
+ */
+ public String getDataTypeName() {
+ return nodeId.getName();
+ }
+
+ /**
+ * Sets the name of the data type.
+ *
+ * @param typeName the name to set
+ */
+ public void setDataTypeName(String typeName) {
+ nodeId.setName(typeName);
+ }
+
+ /**
+ * Returns the type of data.
+ *
+ * @return the data type
+ */
+ public YangDataTypes getDataType() {
+ return dataType;
+ }
+
+ /**
+ * Sets the type of data.
+ *
+ * @param dataType data type
+ */
+ public void setDataType(YangDataTypes dataType) {
+ this.dataType = dataType;
+ }
+
+ /**
+ * Returns the data type meta data.
+ *
+ * @return the data type meta data
+ */
+ public T getDataTypeExtendedInfo() {
+ return dataTypeExtendedInfo;
+ }
+
+ /**
+ * Sets the data type meta data.
+ *
+ * @param dataTypeInfo the meta data to set
+ */
+ public void setDataTypeExtendedInfo(T dataTypeInfo) {
+ this.dataTypeExtendedInfo = dataTypeInfo;
+ }
+
+ /**
+ * Returns node identifier.
+ *
+ * @return node identifier
+ */
+ public YangNodeIdentifier getNodeId() {
+ return nodeId;
+ }
+
+ /**
+ * Sets node identifier.
+ *
+ * @param nodeId the node identifier
+ */
+ public void setNodeId(YangNodeIdentifier nodeId) {
+ this.nodeId = nodeId;
+ }
+
+ /**
+ * Resets the class attributes to its default value.
+ */
+ public void resetYangType() {
+ nodeId = new YangNodeIdentifier();
+ resolvableStatus = UNRESOLVED;
+ dataType = null;
+ dataTypeExtendedInfo = null;
+ }
+
+ /**
+ * Returns the type of the parsed data.
+ *
+ * @return returns TYPE_DATA
+ */
+ @Override
+ public YangConstructType getYangConstructType() {
+ return TYPE_DATA;
+ }
+
+ /**
+ * Validates the data on entering the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnEntry()
+ throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+
+ /**
+ * Validates the data on exiting the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnExit()
+ throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+
+ @Override
+ public ResolvableStatus getResolvableStatus() {
+ return resolvableStatus;
+ }
+
+ @Override
+ public void setResolvableStatus(ResolvableStatus resolvableStatus) {
+ this.resolvableStatus = resolvableStatus;
+ }
+
+ @Override
+ public Object resolve()
+ throws DataModelException {
+ /*
+ * Check whether the data type is derived.
+ */
+ if (getDataType() != DERIVED) {
+ throw new DataModelException("Linker Error: Resolve should only be called for derived data types. "
+ + " in " +
+ getLineNumber() + " at " +
+ getCharPosition()
+ + " in " + getFileName() + "\"");
+ }
+
+ // Check if the derived info is present.
+ YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) getDataTypeExtendedInfo();
+ if (derivedInfo == null) {
+ throw new DataModelException("Linker Error: Derived information is missing. " + " in " +
+ getLineNumber() + " at " +
+ getCharPosition()
+ + " in " + getFileName() + "\"");
+ }
+
+ // Initiate the resolution
+ try {
+ setResolvableStatus(derivedInfo.resolve());
+ } catch (DataModelException e) {
+ throw new DataModelException(e.getMessage());
+ }
+ return null;
+ }
+
+ /**
+ * Validates the input data value against the permissible value for the
+ * type as per the YANG file.
+ *
+ * @param value input data value
+ * @throws DataModelException a violation of data model rules
+ */
+ void isValidValue(String value)
+ throws DataModelException {
+ switch (getDataType()) {
+ case INT8:
+ case INT16:
+ case INT32:
+ case INT64:
+ case UINT8:
+ case UINT16:
+ case UINT32:
+ case UINT64: {
+ if (getDataTypeExtendedInfo() == null) {
+ getDataObjectFromString(value, getDataType());
+ } else {
+ if (!((YangRangeRestriction) getDataTypeExtendedInfo()).isValidValueString(value)) {
+ throw new DataTypeException("YANG file error : Input value \"" + value + "\" is not a valid " +
+ getDataType());
+ }
+ }
+ break;
+ }
+ case DECIMAL64: {
+ // Fraction-Digits and range needs to get it from yang
+ YangDecimal64<YangRangeRestriction> decimal64 =
+ (YangDecimal64<YangRangeRestriction>) getDataTypeExtendedInfo();
+ validateDecimal64(value, decimal64.getFractionDigit(),
+ decimal64.getRangeRestrictedExtendedInfo());
+ break;
+ }
+ case STRING: {
+ if (getDataTypeExtendedInfo() == null) {
+ break;
+ } else if (!(((YangStringRestriction) getDataTypeExtendedInfo()).isValidStringOnLengthRestriction(value)
+ && ((YangStringRestriction) getDataTypeExtendedInfo())
+ .isValidStringOnPatternRestriction(value))) {
+ throw new DataTypeException("YANG file error : Input value \"" + value + "\" is not a valid " +
+ getDataType());
+ }
+ break;
+ }
+ case BOOLEAN:
+ if (!(value.equals(DataModelUtils.TRUE) || value.equals(DataModelUtils.FALSE))) {
+ throw new DataTypeException("YANG file error : Input value \"" + value + "\" is not a valid " +
+ getDataType());
+ }
+ break;
+ case ENUMERATION: {
+ Iterator<YangEnum> iterator = ((YangEnumeration) getDataTypeExtendedInfo()).getEnumSet().iterator();
+ boolean isValidated = false;
+ while (iterator.hasNext()) {
+ YangEnum enumTemp = iterator.next();
+ if (enumTemp.getNamedValue().equals(value)) {
+ isValidated = true;
+ break;
+ }
+ }
+
+ if (!isValidated) {
+ throw new DataTypeException("YANG file error : Input value \"" + value + "\" is not a valid " +
+ getDataType());
+ }
+ break;
+ }
+ case BITS: {
+ YangBits bits = (YangBits) getDataTypeExtendedInfo();
+ if (bits.fromString(value) == null) {
+ throw new DataTypeException("YANG file error : Input value \"" + value + "\" is not a valid " +
+ getDataType());
+ }
+ break;
+ }
+ case BINARY: {
+ if (!isValidBinary(value, (YangRangeRestriction) getDataTypeExtendedInfo())) {
+ throw new DataTypeException("YANG file error : Input value \"" + value + "\" is not a valid " +
+ getDataType());
+ }
+ break;
+ }
+ case LEAFREF: {
+ YangLeafRef<?> leafRef = (YangLeafRef<?>) getDataTypeExtendedInfo();
+ leafRef.validateDataOnExit();
+ break;
+ }
+ case IDENTITYREF: {
+ // TODO TBD
+ break;
+ }
+ case EMPTY: {
+ if (value.length() > 0) {
+ throw new DataTypeException("YANG file error : Input value \"" + value
+ + "\" is not allowed for a data type " + getDataType());
+ }
+ break;
+ }
+ case UNION: {
+ ListIterator<YangType<?>> listIterator = ((YangUnion) getDataTypeExtendedInfo()).getTypeList()
+ .listIterator();
+ boolean isValidated = false;
+ while (listIterator.hasNext()) {
+ YangType<?> type = (YangType<?>) listIterator.next();
+ try {
+ type.isValidValue(value);
+ // If it is not thrown exception then validation is success
+ isValidated = true;
+ break;
+ } catch (Exception e) {
+ }
+ }
+
+ if (!isValidated) {
+ throw new DataTypeException("YANG file error : Input value \"" + value + "\" is not a valid " +
+ getDataType());
+ }
+ break;
+ }
+ case INSTANCE_IDENTIFIER: {
+ // TODO TBD
+ break;
+ }
+ case DERIVED: {
+ YangDataTypes dataType = ((YangDerivedInfo) getDataTypeExtendedInfo()).getEffectiveBuiltInType();
+ if (isOfRangeRestrictedType(dataType)) {
+ if (((YangDerivedInfo) getDataTypeExtendedInfo()).getResolvedExtendedInfo() == null) {
+ getDataObjectFromString(value,
+ ((YangDerivedInfo) getDataTypeExtendedInfo())
+ .getEffectiveBuiltInType());
+ } else {
+ if (!((YangRangeRestriction) ((YangDerivedInfo) getDataTypeExtendedInfo())
+ .getResolvedExtendedInfo()).isValidValueString(value)) {
+ throw new DataTypeException("YANG file error : Input value \"" + value
+ + "\" is not a valid " + dataType);
+ }
+ }
+ } else if (dataType == YangDataTypes.STRING) {
+ Object info = ((YangDerivedInfo) getDataTypeExtendedInfo())
+ .getResolvedExtendedInfo();
+ if (info != null) {
+ if (info instanceof YangStringRestriction) {
+ YangStringRestriction stringRestriction =
+ (YangStringRestriction) info;
+ if (!(stringRestriction.isValidStringOnLengthRestriction(value) &&
+ stringRestriction.isValidStringOnPatternRestriction(value))) {
+ throw new DataTypeException("YANG file error : Input value \"" + value
+ + "\" is not a valid " + dataType);
+ }
+ }
+ }
+ } else if (dataType == YangDataTypes.BITS) {
+ YangTypeDef prevTypedef = ((YangDerivedInfo) getDataTypeExtendedInfo())
+ .getReferredTypeDef();
+ YangType type = prevTypedef.getTypeList().iterator().next();
+ YangBits bits = (YangBits) type.getDataTypeExtendedInfo();
+ if (bits.fromString(value) == null) {
+ throw new DataTypeException("YANG file error : Input value \"" + value + "\" is not a valid " +
+ dataType);
+ }
+ } else if (dataType == YangDataTypes.BINARY) {
+ if (!isValidBinary(value, (YangRangeRestriction) ((YangDerivedInfo)
+ getDataTypeExtendedInfo()).getResolvedExtendedInfo())) {
+ throw new DataTypeException("YANG file error : Input value \"" + value + "\" is not a valid " +
+ dataType);
+ }
+ } else if (dataType == YangDataTypes.DECIMAL64) {
+ YangDerivedInfo derivedInfo = (YangDerivedInfo) getDataTypeExtendedInfo();
+ YangTypeDef typedef = (YangTypeDef) derivedInfo.getReferredTypeDef();
+ YangType<YangDecimal64> decimal64Type =
+ (YangType<YangDecimal64>) typedef.getTypeList().iterator().next();
+ YangDecimal64<YangRangeRestriction> decimal64 = decimal64Type.getDataTypeExtendedInfo();
+ // Fraction-Digits and range needs to get it from yang
+ validateDecimal64(value, decimal64.getFractionDigit(),
+ decimal64.getRangeRestrictedExtendedInfo());
+ }
+ break;
+ }
+ default: {
+ throw new DataTypeException("YANG file error : Input value \"" + value + "\" received for " +
+ "unsupported data type " + getDataType());
+ }
+ }
+ }
+
+
+ /**
+ * Checks whether specific string is valid decimal64 value.
+ *
+ * @param value decimal64 value
+ */
+ private void validateDecimal64(String value, int fractionDigit, YangRangeRestriction rangeRestriction)
+ throws DataModelException {
+ YangDecimal64<YangRangeRestriction> decimal64 = YangDecimal64.fromString(value);
+ decimal64.setFractionDigit(fractionDigit);
+ decimal64.setRangeRestrictedExtendedInfo(rangeRestriction);
+ decimal64.validateDecimal64();
+ }
+
+ /**
+ * Checks whether specific string is valid binary.
+ *
+ * @param value binary value
+ * @return true if validation success otherwise false
+ */
+ private boolean isValidBinary(String value, YangRangeRestriction lengthRestriction) {
+ YangBinary binary = new YangBinary(value);
+
+ // After decoding binary, its length should not be zero
+ if (binary.getBinaryData().length == 0) {
+ return false;
+ }
+
+ if (lengthRestriction == null || lengthRestriction.getAscendingRangeIntervals() == null
+ || lengthRestriction.getAscendingRangeIntervals().isEmpty()) {
+ // Length restriction is optional
+ return true;
+ }
+
+ ListIterator<YangRangeInterval<YangUint64>> rangeListIterator = lengthRestriction.getAscendingRangeIntervals()
+ .listIterator();
+ boolean isMatched = false;
+ while (rangeListIterator.hasNext()) {
+ YangRangeInterval rangeInterval = rangeListIterator.next();
+ rangeInterval.setFileName(getFileName());
+ rangeInterval.setLineNumber(getLineNumber());
+ rangeInterval.setCharPosition(getCharPosition());
+ BigInteger startValue = ((YangUint64) rangeInterval.getStartValue()).getValue();
+ BigInteger endValue = ((YangUint64) rangeInterval.getEndValue()).getValue();
+ // convert (encode) back and check length
+ if ((binary.toString().length() >= startValue.intValue()) &&
+ (binary.toString().length() <= endValue.intValue())) {
+ isMatched = true;
+ break;
+ }
+ }
+
+ return isMatched;
+ }
+
+ public boolean isTypeForInterFileGroupingResolution() {
+ return isTypeForInterFileGroupingResolution;
+ }
+
+ public void setTypeForInterFileGroupingResolution(boolean typeForInterFileGroupingResolution) {
+ isTypeForInterFileGroupingResolution = typeForInterFileGroupingResolution;
+ }
+
+ public boolean isTypeNotResolvedTillRootNode() {
+ return isTypeNotResolvedTillRootNode;
+ }
+
+ public void setTypeNotResolvedTillRootNode(boolean typeNotResolvedTillRootNode) {
+ isTypeNotResolvedTillRootNode = typeNotResolvedTillRootNode;
+ }
+
+ @Override
+ public YangType<T> clone()
+ throws CloneNotSupportedException {
+ YangType<T> clonedNode = (YangType<T>) super.clone();
+ return clonedNode;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangTypeDef.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangTypeDef.java
new file mode 100644
index 0000000..499269d
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangTypeDef.java
@@ -0,0 +1,313 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import static java.util.Collections.unmodifiableList;
+import static org.onosproject.yang.compiler.datamodel.YangNodeType.TYPEDEF_NODE;
+import static org.onosproject.yang.compiler.datamodel.YangSchemaNodeType.YANG_NON_DATA_NODE;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.COLLISION_DETECTION;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.TYPEDEF;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.getErrorMsgCollision;
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.TYPEDEF_DATA;
+
+/*-
+ * Reference RFC 6020.
+ *
+ * The "typedef" statement defines a new type that may be used locally in the
+ * module, in modules or submodules which include it, and by other modules that
+ * import from it. The new type is called the "derived type", and the type from
+ * which it was derived is called the "base type". All derived types can be
+ * traced back to a YANG built-in type.
+ *
+ * The "typedef" statement's argument is an identifier that is the name of the
+ * type to be defined, and MUST be followed by a block of sub-statements that
+ * holds detailed typedef information.
+ *
+ * The name of the type MUST NOT be one of the YANG built-in types. If the
+ * typedef is defined at the top level of a YANG module or submodule, the name
+ * of the type to be defined MUST be unique within the module.
+ * The typedef's sub-statements
+ *
+ * +--------------+---------+-------------+------------------+
+ * | substatement | section | cardinality |data model mapping|
+ * +--------------+---------+-------------+------------------+
+ * | default | 7.3.4 | 0..1 |-string |
+ * | description | 7.19.3 | 0..1 |-string |
+ * | reference | 7.19.4 | 0..1 |-string |
+ * | status | 7.19.2 | 0..1 |-YangStatus |
+ * | type | 7.3.2 | 1 |-yangType |
+ * | units | 7.3.3 | 0..1 |-string |
+ * +--------------+---------+-------------+------------------+
+ */
+
+/**
+ * Represents data model node to maintain information defined in YANG typedef.
+ */
+public abstract class YangTypeDef
+ extends YangNode
+ implements YangCommonInfo, Parsable, YangTypeHolder, CollisionDetector,
+ YangTranslatorOperatorNode {
+
+ private static final long serialVersionUID = 806201615L;
+
+ /**
+ * Default value in string, needs to be converted to the target object,
+ * based on the type.
+ */
+ private String defaultValueInString;
+
+ /**
+ * Description of new type.
+ */
+ private String description;
+
+ /**
+ * reference string.
+ */
+ private String reference;
+
+ /**
+ * Status of the data type.
+ */
+ private YangStatusType status;
+
+ /**
+ * Units of the data type.
+ */
+ private String units;
+
+ /**
+ * List of YANG type, for typedef it will have single type.
+ * This is done to unify the code with union.
+ */
+ private final List<YangType<?>> typeList;
+
+ /**
+ * Creates a typedef node.
+ */
+ public YangTypeDef() {
+ super(TYPEDEF_NODE, null);
+ typeList = new LinkedList<>();
+ }
+
+ @Override
+ public void addToChildSchemaMap(YangSchemaNodeIdentifier id,
+ YangSchemaNodeContextInfo yangSchemaNodeContextInfo)
+ throws DataModelException {
+ // Do nothing.
+ }
+
+ @Override
+ public void incrementMandatoryChildCount() {
+ // Do nothing, to be handled during linking.
+ // TODO
+ }
+
+ @Override
+ public void addToDefaultChildMap(YangSchemaNodeIdentifier id,
+ YangSchemaNode node) {
+ // Do nothing, to be handled during linking.
+ // TODO
+ }
+
+ @Override
+ public YangSchemaNodeType getYangSchemaNodeType() {
+ return YANG_NON_DATA_NODE;
+ }
+
+ /**
+ * Returns the default value.
+ *
+ * @return the default value
+ */
+ public String getDefaultValueInString() {
+ return defaultValueInString;
+ }
+
+ /**
+ * Sets the default value.
+ *
+ * @param defaultValueInString the default value
+ */
+ public void setDefaultValueInString(String defaultValueInString) {
+ this.defaultValueInString = defaultValueInString;
+ }
+
+ /**
+ * Returns the description.
+ *
+ * @return the description
+ */
+ @Override
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * Sets the description.
+ *
+ * @param description set the description
+ */
+ @Override
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ /**
+ * Returns the textual reference.
+ *
+ * @return the reference
+ */
+ @Override
+ public String getReference() {
+ return reference;
+ }
+
+ /**
+ * Sets the textual reference.
+ *
+ * @param reference the reference to set
+ */
+ @Override
+ public void setReference(String reference) {
+ this.reference = reference;
+ }
+
+ /**
+ * Returns the status.
+ *
+ * @return the status
+ */
+ @Override
+ public YangStatusType getStatus() {
+ return status;
+ }
+
+ /**
+ * Sets the status.
+ *
+ * @param status the status to set
+ */
+ @Override
+ public void setStatus(YangStatusType status) {
+ this.status = status;
+ }
+
+ /**
+ * Returns the data type.
+ *
+ * @return the data type
+ */
+ public YangType<?> getTypeDefBaseType() {
+ if (!typeList.isEmpty()) {
+ return typeList.get(0);
+ }
+ return null;
+ }
+
+ /**
+ * Sets the data type.
+ *
+ * @param dataType the data type
+ */
+ public void setDataType(YangType<?> dataType) {
+ typeList.add(0, dataType);
+ }
+
+ /**
+ * Returns the unit.
+ *
+ * @return the units
+ */
+ public String getUnits() {
+ return units;
+ }
+
+ /**
+ * Sets the unit.
+ *
+ * @param units the units to set
+ */
+ public void setUnits(String units) {
+ this.units = units;
+ }
+
+ /**
+ * Returns the type of the data.
+ *
+ * @return returns TYPEDEF_DATA
+ */
+ @Override
+ public YangConstructType getYangConstructType() {
+ return TYPEDEF_DATA;
+ }
+
+ /**
+ * Validates the data on entering the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnEntry()
+ throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+
+ /**
+ * Validates the data on exiting the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnExit()
+ throws DataModelException {
+ if (defaultValueInString != null && !defaultValueInString.isEmpty() &&
+ getTypeDefBaseType() != null) {
+ getTypeDefBaseType().isValidValue(defaultValueInString);
+ }
+ }
+
+ @Override
+ public List<YangType<?>> getTypeList() {
+ return unmodifiableList(typeList);
+ }
+
+ @Override
+ public void detectCollidingChild(String identifierName, YangConstructType dataType)
+ throws DataModelException {
+ // Asks helper to detect colliding child.
+ detectCollidingChildUtil(identifierName, dataType, this);
+ }
+
+ @Override
+ public void detectSelfCollision(String identifierName, YangConstructType dataType)
+ throws DataModelException {
+ if (getName().equals(identifierName)) {
+ throw new DataModelException(
+ getErrorMsgCollision(COLLISION_DETECTION, getName(),
+ getLineNumber(), getCharPosition(),
+ TYPEDEF, getFileName()));
+ }
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangTypeHolder.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangTypeHolder.java
new file mode 100644
index 0000000..443ec08
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangTypeHolder.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import java.util.List;
+
+/**
+ * Represents the holder with type(s).
+ */
+public interface YangTypeHolder {
+
+ /**
+ * Returns type list.
+ *
+ * @return type list
+ */
+ List<YangType<?>> getTypeList();
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangUnion.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangUnion.java
new file mode 100644
index 0000000..7dd545a
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangUnion.java
@@ -0,0 +1,187 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import static org.onosproject.yang.compiler.datamodel.YangSchemaNodeType.YANG_NON_DATA_NODE;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.getErrorMsg;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.UNION_DATA;
+
+/*
+ * Reference RFC 6020.
+ *
+ * The union built-in type represents a value that corresponds to one of
+ * its member types.
+ *
+ * When the type is "union", the "type" statement (Section 7.4) MUST be
+ * present. It is used to repeatedly specify each member type of the
+ * union. It takes as an argument a string that is the name of a member
+ * type.
+ *
+ * A member type can be of any built-in or derived type, except it MUST
+ * NOT be one of the built-in types "empty" or "leafref".
+ *
+ * When a string representing a union data type is validated, the string
+ * is validated against each member type, in the order they are
+ * specified in the "type" statement, until a match is found.
+ *
+ * Any default value or "units" property defined in the member types is
+ * not inherited by the union type.
+ */
+
+/**
+ * Represents data model node to maintain information defined in YANG union.
+ */
+public abstract class YangUnion
+ extends YangNode
+ implements Parsable, YangTypeHolder, CollisionDetector {
+
+ private static final long serialVersionUID = 806201616L;
+
+ // List of YANG type.
+ private List<YangType<?>> typeList;
+
+ // Current child union number.
+ private transient int childUnionNumber;
+
+ /**
+ * Creates a YANG union node.
+ */
+ public YangUnion() {
+ super(YangNodeType.UNION_NODE, null);
+ typeList = new LinkedList<>();
+ childUnionNumber = 1;
+ }
+
+ @Override
+ public void addToChildSchemaMap(YangSchemaNodeIdentifier schemaNodeIdentifier,
+ YangSchemaNodeContextInfo yangSchemaNodeContextInfo)
+ throws DataModelException {
+ // Do nothing.
+ }
+
+ @Override
+ public void incrementMandatoryChildCount() {
+ // Do nothing, as leaf can't come directly or indirectly below this construct.
+ // TODO
+ }
+
+ @Override
+ public void addToDefaultChildMap(YangSchemaNodeIdentifier yangSchemaNodeIdentifier, YangSchemaNode yangSchemaNode) {
+ // Do nothing, as leaf can't come directly or indirectly below this construct.
+ // TODO
+ }
+
+ @Override
+ public YangSchemaNodeType getYangSchemaNodeType() {
+ return YANG_NON_DATA_NODE;
+ }
+
+ @Override
+ public List<YangType<?>> getTypeList() {
+ return typeList;
+ }
+
+
+ /**
+ * Returns running child union number.
+ *
+ * @return running child union number
+ */
+ public int getChildUnionNumber() {
+ return childUnionNumber;
+ }
+
+ /**
+ * Sets the running child union number.
+ *
+ * @param childUnionNumber running child union number
+ */
+ public void setChildUnionNumber(int childUnionNumber) {
+ this.childUnionNumber = childUnionNumber;
+ }
+
+ /**
+ * Adds YANG type to type list.
+ *
+ * @param yangType YANG type to be added to list
+ * @throws DataModelException union member type must not be one of the
+ * built-in types "empty" or "leafref"
+ */
+ public void addType(YangType<?> yangType)
+ throws DataModelException {
+ YangDataTypes type = yangType.getDataType();
+ String msg = "Union member type must not be one of the built-in types" +
+ " \"empty\" or \"leafref\"";
+ switch (type) {
+ case EMPTY:
+ case LEAFREF:
+ throw new DataModelException(getErrorMsg(
+ msg, getName(), getLineNumber(), getCharPosition(),
+ getFileName()));
+
+ default:
+ typeList.add(yangType);
+ }
+ }
+
+ @Override
+ public YangConstructType getYangConstructType() {
+ return UNION_DATA;
+ }
+
+ /**
+ * Validates the data on entering the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnEntry()
+ throws DataModelException {
+ //TODO: implement the method.
+ }
+
+ /**
+ * Validates the data on exiting the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnExit()
+ throws DataModelException {
+ //TODO: implement the method.
+ }
+
+ @Override
+ public void detectCollidingChild(String identifierName, YangConstructType dataType)
+ throws DataModelException {
+ // Do nothing
+ }
+
+ @Override
+ public void detectSelfCollision(String identifierName, YangConstructType dataType)
+ throws DataModelException {
+ // Do nothing
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangUses.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangUses.java
new file mode 100644
index 0000000..b622e28
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangUses.java
@@ -0,0 +1,562 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import static java.util.Collections.unmodifiableList;
+import static org.onosproject.yang.compiler.datamodel.TraversalType.CHILD;
+import static org.onosproject.yang.compiler.datamodel.TraversalType.PARENT;
+import static org.onosproject.yang.compiler.datamodel.TraversalType.ROOT;
+import static org.onosproject.yang.compiler.datamodel.TraversalType.SIBILING;
+import static org.onosproject.yang.compiler.datamodel.YangNodeType.USES_NODE;
+import static org.onosproject.yang.compiler.datamodel.YangSchemaNodeType.YANG_NON_DATA_NODE;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.COLLISION_DETECTION;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.USES;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.getErrorMsgCollision;
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.addUnresolvedType;
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.getParentNodeInGenCode;
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.updateClonedLeavesUnionEnumRef;
+import static org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus.INTRA_FILE_RESOLVED;
+import static org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus.RESOLVED;
+import static org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus.UNRESOLVED;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.LEAF_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.LEAF_LIST_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.USES_DATA;
+
+/*-
+ * Reference RFC 6020.
+ *
+ * The "uses" statement is used to reference a "grouping" definition. It takes
+ * one argument, which is the name of the grouping.
+ *
+ * The effect of a "uses" reference to a grouping is that the nodes defined by
+ * the grouping are copied into the current schema tree, and then updated
+ * according to the "refine" and "augment" statements.
+ *
+ * The identifiers defined in the grouping are not bound to a namespace until
+ * the contents of the grouping are added to the schema tree via a "uses"
+ * statement that does not appear inside a "grouping" statement, at which point
+ * they are bound to the namespace of the current module.
+ *
+ * The uses's sub-statements
+ *
+ * +--------------+---------+-------------+------------------+
+ * | substatement | section | cardinality |data model mapping|
+ * +--------------+---------+-------------+------------------+
+ * | augment | 7.15 | 0..1 | -child nodes |
+ * | description | 7.19.3 | 0..1 | -string |
+ * | if-feature | 7.18.2 | 0..n | -YangIfFeature |
+ * | refine | 7.12.2 | 0..1 | -TODO |
+ * | reference | 7.19.4 | 0..1 | -string |
+ * | status | 7.19.2 | 0..1 | -YangStatus |
+ * | when | 7.19.5 | 0..1 | -YangWhen |
+ * +--------------+---------+-------------+------------------+
+ */
+
+/**
+ * Represents data model node to maintain information defined in YANG uses.
+ */
+public abstract class YangUses
+ extends YangNode
+ implements YangCommonInfo, Parsable, Resolvable, CollisionDetector,
+ YangWhenHolder, YangIfFeatureHolder, YangTranslatorOperatorNode,
+ LeafRefInvalidHolder {
+
+ private static final long serialVersionUID = 806201617L;
+
+ /**
+ * YANG node identifier.
+ */
+ private YangNodeIdentifier nodeIdentifier;
+
+ /**
+ * Referred group.
+ */
+ private YangGrouping refGroup;
+
+ /**
+ * Description of YANG uses.
+ */
+ private String description;
+
+ /**
+ * YANG reference.
+ */
+ private String reference;
+
+ /**
+ * Status of YANG uses.
+ */
+ private YangStatusType status;
+
+ /**
+ * When data of the node.
+ */
+ private YangWhen when;
+
+ /**
+ * List of if-feature.
+ */
+ private List<YangIfFeature> ifFeatureList;
+
+ /**
+ * Status of resolution. If completely resolved enum value is "RESOLVED",
+ * if not enum value is "UNRESOLVED", in case reference of grouping/typedef
+ * is added to uses/type but it's not resolved value of enum should be
+ * "INTRA_FILE_RESOLVED".
+ */
+ private ResolvableStatus resolvableStatus;
+
+ /**
+ * Effective list of leaf lists of grouping that needs to replicated at YANG uses.
+ */
+ private List<YangEntityToResolveInfoImpl> entityToResolveInfoList;
+
+ /**
+ * Current grouping depth for uses.
+ */
+ private int currentGroupingDepth;
+
+ /**
+ * Creates an YANG uses node.
+ */
+ public YangUses() {
+ super(USES_NODE, null);
+ nodeIdentifier = new YangNodeIdentifier();
+ resolvableStatus = UNRESOLVED;
+ ifFeatureList = new LinkedList<>();
+ entityToResolveInfoList = new LinkedList<>();
+ }
+
+ @Override
+ public void addToChildSchemaMap(YangSchemaNodeIdentifier id,
+ YangSchemaNodeContextInfo context)
+ throws DataModelException {
+ // Do nothing.
+ }
+
+ @Override
+ public void incrementMandatoryChildCount() {
+ // Do nothing.
+ // TODO
+ }
+
+ @Override
+ public void addToDefaultChildMap(YangSchemaNodeIdentifier id,
+ YangSchemaNode yangSchemaNode) {
+ // Do nothing.
+ // TODO
+ }
+
+ @Override
+ public YangSchemaNodeType getYangSchemaNodeType() {
+ return YANG_NON_DATA_NODE;
+ }
+
+ /**
+ * Adds an entity to resolve in list.
+ *
+ * @param entityToResolve entity to resolved
+ * @throws DataModelException a violation of data model rules
+ */
+ public void addEntityToResolve(
+ List<YangEntityToResolveInfoImpl> entityToResolve)
+ throws DataModelException {
+ if (entityToResolveInfoList == null) {
+ entityToResolveInfoList = new
+ LinkedList<>();
+ }
+ entityToResolveInfoList.addAll(entityToResolve);
+ }
+
+ /**
+ * Returns the referred group.
+ *
+ * @return the referred group
+ */
+ public YangGrouping getRefGroup() {
+ return refGroup;
+ }
+
+ /**
+ * Sets the referred group.
+ *
+ * @param refGroup the referred group
+ */
+ public void setRefGroup(YangGrouping refGroup) {
+ this.refGroup = refGroup;
+ }
+
+ /**
+ * Returns the when.
+ *
+ * @return the when
+ */
+ @Override
+ public YangWhen getWhen() {
+ return when;
+ }
+
+ /**
+ * Sets the when.
+ *
+ * @param when the when to set
+ */
+ @Override
+ public void setWhen(YangWhen when) {
+ this.when = when;
+ }
+
+ /**
+ * Returns the description.
+ *
+ * @return the description
+ */
+ @Override
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * Sets the description.
+ *
+ * @param description set the description
+ */
+ @Override
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ /**
+ * Returns the textual reference.
+ *
+ * @return the reference
+ */
+ @Override
+ public String getReference() {
+ return reference;
+ }
+
+ /**
+ * Sets the textual reference.
+ *
+ * @param reference the reference to set
+ */
+ @Override
+ public void setReference(String reference) {
+ this.reference = reference;
+ }
+
+ /**
+ * Returns the status.
+ *
+ * @return the status
+ */
+ @Override
+ public YangStatusType getStatus() {
+ return status;
+ }
+
+ /**
+ * Sets the status.
+ *
+ * @param status the status to set
+ */
+ @Override
+ public void setStatus(YangStatusType status) {
+ this.status = status;
+ }
+
+ /**
+ * Returns the type of the data.
+ *
+ * @return returns USES_DATA
+ */
+ @Override
+ public YangConstructType getYangConstructType() {
+ return USES_DATA;
+ }
+
+ /**
+ * Validates the data on entering the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnEntry()
+ throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+
+ /**
+ * Validates the data on exiting the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnExit()
+ throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+
+ /**
+ * Returns node identifier.
+ *
+ * @return node identifier
+ */
+ public YangNodeIdentifier getNodeIdentifier() {
+ return nodeIdentifier;
+ }
+
+ /**
+ * Sets node identifier.
+ *
+ * @param nodeIdentifier the node identifier
+ */
+ public void setNodeIdentifier(YangNodeIdentifier nodeIdentifier) {
+ this.nodeIdentifier = nodeIdentifier;
+ }
+
+ /**
+ * Returns prefix associated with uses.
+ *
+ * @return prefix associated with uses
+ */
+ public String getPrefix() {
+ return nodeIdentifier.getPrefix();
+ }
+
+ /**
+ * Get prefix associated with uses.
+ *
+ * @param prefix prefix associated with uses
+ */
+ public void setPrefix(String prefix) {
+ nodeIdentifier.setPrefix(prefix);
+ }
+
+ @Override
+ public Object resolve()
+ throws DataModelException {
+
+ YangGrouping referredGrouping = getRefGroup();
+
+ if (referredGrouping == null) {
+ throw new DataModelException("YANG uses linker error, cannot resolve" +
+ " uses " + getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition() + " in " +
+ getFileName() + "\"");
+ } else {
+ /*
+ * if referredGrouping has uses which is not resolved then set the status
+ * as Intra file resolved and return
+ */
+ if (checkIsUnresolvedRecursiveUsesInGrouping(referredGrouping)) {
+ return null;
+ }
+ }
+
+ YangNode usesParentNode = getParentNodeInGenCode(this);
+ if (!(usesParentNode instanceof YangLeavesHolder)
+ || !(usesParentNode instanceof CollisionDetector)) {
+ throw new DataModelException(
+ "YANG uses holder construct is wrong " + getName() + " in " +
+ getLineNumber() + " at " + getCharPosition() +
+ " in " + getFileName() + "\"");
+ }
+
+ YangLeavesHolder usesParent = (YangLeavesHolder) usesParentNode;
+ if (referredGrouping.getListOfLeaf() != null) {
+ for (YangLeaf leaf : referredGrouping.getListOfLeaf()) {
+ YangLeaf clonedLeaf;
+ try {
+ ((CollisionDetector) usesParent)
+ .detectCollidingChild(leaf.getName(), LEAF_DATA);
+ clonedLeaf = leaf.clone();
+ clonedLeaf.setReferredLeaf(leaf);
+ addUnresolvedType(this, clonedLeaf, (YangNode) usesParent);
+ } catch (CloneNotSupportedException | DataModelException e) {
+ throw new DataModelException(e.getMessage());
+ }
+
+ clonedLeaf.setContainedIn(usesParent);
+ usesParent.addLeaf(clonedLeaf);
+ }
+ }
+ if (referredGrouping.getListOfLeafList() != null) {
+ for (YangLeafList leafList : referredGrouping.getListOfLeafList()) {
+ YangLeafList clonedLeafList;
+ try {
+ ((CollisionDetector) usesParent)
+ .detectCollidingChild(leafList.getName(), LEAF_LIST_DATA);
+ clonedLeafList = leafList.clone();
+ clonedLeafList.setReferredSchemaLeafList(leafList);
+ addUnresolvedType(this, clonedLeafList,
+ (YangNode) usesParent);
+ } catch (CloneNotSupportedException | DataModelException e) {
+ throw new DataModelException(e.getMessage());
+ }
+ clonedLeafList.setContainedIn(usesParent);
+ usesParent.addLeafList(clonedLeafList);
+ }
+ }
+
+ try {
+ cloneSubTree(referredGrouping, usesParentNode, this);
+ } catch (DataModelException e) {
+ throw new DataModelException(e.getMessage());
+ }
+ updateClonedLeavesUnionEnumRef(usesParent);
+ return unmodifiableList(entityToResolveInfoList);
+ }
+
+ /**
+ * Checks if referred grouping has uses which is not resolved then it set the
+ * status of current uses as intra file resolved and returns true.
+ *
+ * @param referredGrouping referred grouping node of uses
+ * @return true if referred grouping has unresolved uses
+ */
+ private boolean checkIsUnresolvedRecursiveUsesInGrouping(YangGrouping referredGrouping) {
+
+ /*
+ * Search the grouping node's children for presence of uses node.
+ */
+ TraversalType curTraversal = ROOT;
+ YangNode curNode = referredGrouping.getChild();
+ while (curNode != null) {
+ if (curNode == referredGrouping || (curNode instanceof YangUses &&
+ curNode.getName().equals(referredGrouping.getName()))) {
+ // if we have traversed all the child nodes, then exit from loop
+ return false;
+ }
+
+ // if child nodes has uses, then add it to resolution stack
+ if (curNode instanceof YangUses) {
+ if (((YangUses) curNode).getResolvableStatus() != RESOLVED) {
+ setResolvableStatus(INTRA_FILE_RESOLVED);
+ return true;
+ }
+ }
+
+ // Traversing all the child nodes of grouping
+ if (curTraversal != PARENT && curNode.getChild() != null) {
+ curTraversal = CHILD;
+ curNode = curNode.getChild();
+ } else if (curNode.getNextSibling() != null) {
+ curTraversal = SIBILING;
+ curNode = curNode.getNextSibling();
+ } else {
+ curTraversal = PARENT;
+ curNode = curNode.getParent();
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public ResolvableStatus getResolvableStatus() {
+ return resolvableStatus;
+ }
+
+ @Override
+ public void setResolvableStatus(ResolvableStatus resolvableStatus) {
+ this.resolvableStatus = resolvableStatus;
+ }
+
+ @Override
+ public void detectCollidingChild(String identifierName, YangConstructType dataType)
+ throws DataModelException {
+ detectCollidingChildUtil(identifierName, dataType, this);
+ }
+
+ @Override
+ public void detectSelfCollision(String identifierName, YangConstructType dataType)
+ throws DataModelException {
+
+ if (getName().equals(identifierName)) {
+ throw new DataModelException(
+ getErrorMsgCollision(COLLISION_DETECTION, getName(),
+ getLineNumber(), getCharPosition(),
+ USES, getFileName()));
+ }
+ }
+
+ @Override
+ public List<YangIfFeature> getIfFeatureList() {
+ return unmodifiableList(ifFeatureList);
+ }
+
+ @Override
+ public void addIfFeatureList(YangIfFeature ifFeature) {
+ if (ifFeatureList == null) {
+ ifFeatureList = new LinkedList<>();
+ }
+ ifFeatureList.add(ifFeature);
+ }
+
+ @Override
+ public void setIfFeatureList(List<YangIfFeature> ifFeatureList) {
+ this.ifFeatureList = ifFeatureList;
+ }
+
+ /**
+ * Sets the current grouping depth.
+ *
+ * @param currentGroupingDepth current grouping depth
+ */
+ public void setCurrentGroupingDepth(int currentGroupingDepth) {
+ this.currentGroupingDepth = currentGroupingDepth;
+ }
+
+ /**
+ * Returns the current grouping depth.
+ *
+ * @return current grouping depth
+ */
+ public int getCurrentGroupingDepth() {
+ return currentGroupingDepth;
+ }
+
+ @Override
+ public String getName() {
+ return nodeIdentifier.getName();
+ }
+
+ @Override
+ public void setName(String name) {
+ nodeIdentifier.setName(name);
+ }
+
+ @Override
+ public YangNode clone(YangUses node) throws CloneNotSupportedException {
+ YangNode clnNode = (YangNode) super.clone();
+ clnNode.setParent(null);
+ clnNode.setChild(null);
+ clnNode.setNextSibling(null);
+ clnNode.setPreviousSibling(null);
+ return clnNode;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangWhen.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangWhen.java
new file mode 100644
index 0000000..68b6160
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangWhen.java
@@ -0,0 +1,165 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import java.io.Serializable;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.WHEN_DATA;
+
+/*
+ * Reference RFC 6020.
+ *
+ * The "when" statement makes its parent data definition statement
+ * conditional. The node defined by the parent data definition
+ * statement is only valid when the condition specified by the "when"
+ * statement is satisfied.
+ *
+ * The statement's argument is an XPath expression, which is used to formally
+ * specify this condition. If the XPath expression conceptually evaluates to
+ * "true" for a particular instance, then the node defined by the parent data
+ * definition statement is valid; otherwise, it is not.
+ *
+ * The when's sub-statements
+ *
+ * +---------------+---------+-------------+------------------+
+ * | substatement | section | cardinality |data model mapping|
+ * +---------------+---------+-------------+------------------+
+ * | description | 7.19.3 | 0..1 | -string |
+ * | reference | 7.19.4 | 0..1 | -string |
+ * +---------------+---------+-------------+------------------+
+ */
+
+/**
+ * Represents information defined in YANG when.
+ */
+public class YangWhen extends DefaultLocationInfo
+ implements YangDesc, YangReference, Parsable, Serializable {
+
+ private static final long serialVersionUID = 806201646L;
+
+ /**
+ * When condition info.
+ */
+ private String condition;
+
+ /**
+ * Description string.
+ */
+ private String description;
+
+ /**
+ * Reference string.
+ */
+ private String reference;
+
+ /**
+ * Creates a YANG when restriction.
+ */
+ public YangWhen() {
+ }
+
+ /**
+ * Returns the condition.
+ *
+ * @return the condition
+ */
+ public String getCondition() {
+ return condition;
+ }
+
+ /**
+ * Sets the condition.
+ *
+ * @param condition the condition to set
+ */
+ public void setCondition(String condition) {
+ this.condition = condition;
+ }
+
+ /**
+ * Returns the description.
+ *
+ * @return the description
+ */
+ @Override
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * Sets the description.
+ *
+ * @param description set the description
+ */
+ @Override
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ /**
+ * Returns the textual reference.
+ *
+ * @return the reference
+ */
+ @Override
+ public String getReference() {
+ return reference;
+ }
+
+ /**
+ * Sets the textual reference.
+ *
+ * @param reference the reference to set
+ */
+ @Override
+ public void setReference(String reference) {
+ this.reference = reference;
+ }
+
+ /**
+ * Returns the type of the parsed data.
+ *
+ * @return returns WHEN_DATA
+ */
+ @Override
+ public YangConstructType getYangConstructType() {
+ return WHEN_DATA;
+ }
+
+ /**
+ * Validates the data on entering the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnEntry() throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+
+ /**
+ * Validates the data on exiting the corresponding parse tree node.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ @Override
+ public void validateDataOnExit() throws DataModelException {
+ // TODO auto-generated method stub, to be implemented by parser
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangWhenHolder.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangWhenHolder.java
new file mode 100644
index 0000000..08a4ee7
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangWhenHolder.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+/**
+ * Abstraction of when entity. It is used to abstract the data holders of when.
+ */
+public interface YangWhenHolder {
+
+ /**
+ * Returns the when.
+ *
+ * @return the when
+ */
+ YangWhen getWhen();
+
+ /**
+ * Sets the when.
+ *
+ * @param when the when to set
+ */
+ void setWhen(YangWhen when);
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangXPathResolver.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangXPathResolver.java
new file mode 100644
index 0000000..075241c
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/YangXPathResolver.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel;
+
+/**
+ * Abstraction of an entity which can be resolved with x-path linker.
+ */
+public interface YangXPathResolver {
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/exceptions/DataModelException.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/exceptions/DataModelException.java
new file mode 100644
index 0000000..054b6e4
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/exceptions/DataModelException.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel.exceptions;
+
+/**
+ * Represents base class for exceptions in data model operations.
+ */
+public class DataModelException extends Exception {
+
+ private static final long serialVersionUID = 201601270658L;
+ private transient int lineNumber;
+ private transient int charPositionInLine;
+ private transient String fileName;
+
+ /**
+ * Creates a data model exception with message.
+ *
+ * @param message the detail of exception in string
+ */
+ public DataModelException(String message) {
+ super(message);
+ }
+
+ /**
+ * Creates exception from message and cause.
+ *
+ * @param message the detail of exception in string
+ * @param cause underlying cause of the error
+ */
+ public DataModelException(final String message, final Throwable cause) {
+ super(message, cause);
+ }
+
+ /**
+ * Creates exception from cause.
+ *
+ * @param cause underlying cause of the error
+ */
+ public DataModelException(final Throwable cause) {
+ super(cause);
+ }
+
+ /**
+ * Returns line number of the exception.
+ *
+ * @return line number of the exception
+ */
+ public int getLineNumber() {
+ return this.lineNumber;
+ }
+
+ /**
+ * Returns position of the exception.
+ *
+ * @return position of the exception
+ */
+ public int getCharPositionInLine() {
+ return this.charPositionInLine;
+ }
+
+ /**
+ * Sets line number of YANG file.
+ *
+ * @param line line number of YANG file
+ */
+ public void setLine(int line) {
+ this.lineNumber = line;
+ }
+
+ /**
+ * Sets position of exception.
+ *
+ * @param charPosition position of exception
+ */
+ public void setCharPosition(int charPosition) {
+ this.charPositionInLine = charPosition;
+ }
+
+ /**
+ * Returns YANG file name of the exception.
+ *
+ * @return YANG file name of the exception
+ */
+ public String getFileName() {
+ return this.fileName;
+ }
+
+ /**
+ * Sets file name in datamodel exception.
+ *
+ * @param fileName YANG file name
+ */
+ public void setFileName(String fileName) {
+ this.fileName = fileName;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/exceptions/ErrorMessages.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/exceptions/ErrorMessages.java
new file mode 100644
index 0000000..26f813e
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/exceptions/ErrorMessages.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel.exceptions;
+
+/**
+ * Represents error messages thrown by data model exception.
+ */
+public final class ErrorMessages {
+
+ private ErrorMessages() {
+ }
+
+ private static final String IN = " in ";
+ private static final String AT = " at ";
+ private static final String AS = "as ";
+ public static final String QUOTES = "\"";
+ public static final String CASE = " case ";
+ public static final String NOTIFICATION = " notificaiton ";
+ public static final String RPC = " rpc ";
+ public static final String INPUT = " input ";
+ public static final String OUTPUT = " output ";
+ public static final String CHOICE = " choice ";
+ public static final String GROUPING = " grouping ";
+ public static final String TYPEDEF = " typedef ";
+ public static final String USES = " uses ";
+ public static final String INVALID_CASE_HOLDER
+ = "\"Internal Data Model Tree Error: Invalid/Missing \"" +
+ " \"holder in case \"";
+ public static final String TARGET_NODE_LEAF_INFO = "target node leaf/leaf-list";
+ public static final String TARGET_NODE = "target node ";
+ public static final String COLLISION_DETECTION = "YANG File Error: " +
+ "Identifier collision detected in";
+ public static final String FAILED_TO_ADD_CASE = "Failed to add child " +
+ "nodes to case node of augment ";
+
+ /**
+ * Returns error message for datamodel exception for collision detection.
+ *
+ * @param msg message
+ * @param name name of construct
+ * @param line line number
+ * @param position character position
+ * @param fileName file name
+ * @return error message for datamodel exception for collision detection
+ */
+ public static String getErrorMsg(String msg, String name, int line,
+ int position, String fileName) {
+ StringBuilder builder = new StringBuilder();
+ builder.append(msg)
+ .append(name)
+ .append(IN)
+ .append(line)
+ .append(AT)
+ .append(position)
+ .append(IN)
+ .append(fileName);
+ return builder.toString();
+ }
+
+ /**
+ * Returns error message for datamodel exception for collision detection.
+ *
+ * @param msg message
+ * @param name name of construct
+ * @param line line number
+ * @param position character position
+ * @param construct construct name
+ * @param fileName file name
+ * @return error message for datamodel exception for collision detection
+ */
+ public static String getErrorMsgCollision(String msg, String name, int line,
+ int position, String construct,
+ String fileName) {
+ StringBuilder builder = new StringBuilder();
+ builder.append(msg)
+ .append(construct)
+ .append(AS)
+ .append(QUOTES)
+ .append(name)
+ .append(IN)
+ .append(line)
+ .append(AT)
+ .append(position)
+ .append(IN)
+ .append(fileName)
+ .append(QUOTES);
+ return builder.toString();
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/exceptions/package-info.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/exceptions/package-info.java
new file mode 100644
index 0000000..e22c2af
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/exceptions/package-info.java
@@ -0,0 +1,19 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+/**
+ * Custom data model exceptions.
+ */
+package org.onosproject.yang.compiler.datamodel.exceptions;
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/JavaFileInfo.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/JavaFileInfo.java
new file mode 100644
index 0000000..284378b
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/JavaFileInfo.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.javadatamodel;
+
+import java.io.Serializable;
+
+/**
+ * Represents cached java file handle, which supports the addition of member attributes and
+ * methods.
+ */
+public class JavaFileInfo
+ implements Serializable {
+
+ private static final long serialVersionUID = 806102633L;
+
+ /**
+ * Name of the module.
+ */
+ protected String javaName;
+
+ /**
+ * Java package of the mapped java class.
+ */
+ protected String pkg;
+
+ /**
+ * Java attribute name;
+ */
+ protected String javaAttributeName;
+
+ /**
+ * Returns the java name of the node.
+ *
+ * @return the java name of node
+ */
+ public String getJavaName() {
+ return javaName;
+ }
+
+ /**
+ * Sets the java name of the node.
+ *
+ * @param name the java name of node
+ */
+ public void setJavaName(String name) {
+ javaName = name;
+ }
+
+ /**
+ * Returns the mapped java package.
+ *
+ * @return the java package
+ */
+ public String getPackage() {
+ return pkg;
+ }
+
+ /**
+ * Sets the node's package.
+ *
+ * @param nodePackage node's package
+ */
+ public void setPackage(String nodePackage) {
+ pkg = nodePackage;
+ }
+
+ /**
+ * Retrieve Java attribute name.
+ *
+ * @return Java attribute name
+ */
+ public String getJavaAttributeName() {
+ return javaAttributeName;
+ }
+
+ /**
+ * Assign the Java attribute Name.
+ *
+ * @param javaAttributeName Java attribute name
+ */
+ public void setJavaAttributeName(String javaAttributeName) {
+ this.javaAttributeName = javaAttributeName;
+ }
+
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/JavaQualifiedTypeInfo.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/JavaQualifiedTypeInfo.java
new file mode 100644
index 0000000..fcf0da0
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/JavaQualifiedTypeInfo.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.javadatamodel;
+
+import java.io.Serializable;
+
+/**
+ * Represents the information about individual imports in the generated file.
+ */
+public class JavaQualifiedTypeInfo
+ implements Serializable {
+
+ private static final long serialVersionUID = 806201634L;
+
+ /**
+ * Package location where the imported class/interface is defined.
+ */
+ protected String pkgInfo;
+
+ /**
+ * Class/interface being referenced.
+ */
+ protected String classInfo;
+
+ /**
+ * attribute name being used.
+ */
+ protected String javaAttributeName;
+ /**
+ * Returns the imported package info.
+ *
+ * @return the imported package info
+ */
+ public String getPkgInfo() {
+ return pkgInfo;
+ }
+
+ /**
+ * Sets the imported package info.
+ *
+ * @param pkgInfo the imported package info
+ */
+ public void setPkgInfo(String pkgInfo) {
+ this.pkgInfo = pkgInfo;
+ }
+
+ /**
+ * Returns the imported class/interface info.
+ *
+ * @return the imported class/interface info
+ */
+ public String getClassInfo() {
+ return classInfo;
+ }
+
+ /**
+ * Sets the imported class/interface info.
+ *
+ * @param classInfo the imported class/interface info
+ */
+ public void setClassInfo(String classInfo) {
+ this.classInfo = classInfo;
+ }
+
+ /**
+ * Retrieve Java attribute name.
+ *
+ * @return Java attribute name
+ */
+ public String getJavaAttributeName() {
+ return javaAttributeName;
+ }
+
+ /**
+ * Assign Java attribute name.
+ *
+ * @param javaAttributeName Java attribute name
+ */
+ public void setJavaAttributeName(String javaAttributeName) {
+ this.javaAttributeName = javaAttributeName;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/JavaQualifiedTypeInfoContainer.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/JavaQualifiedTypeInfoContainer.java
new file mode 100644
index 0000000..dc14455
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/JavaQualifiedTypeInfoContainer.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel.javadatamodel;
+
+/**
+ * Maintain the java qualified access details for an attribute or a class.
+ */
+public interface JavaQualifiedTypeInfoContainer {
+
+ /**
+ * Obtain the java qualified details.
+ *
+ * @return java qualified type details
+ */
+ JavaQualifiedTypeInfo getJavaQualifiedInfo();
+
+ /**
+ * Assign the qualified type info.
+ *
+ * @param typeInfo qualified type information
+ */
+ void setJavaQualifiedInfo(JavaQualifiedTypeInfo typeInfo);
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaAugment.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaAugment.java
new file mode 100644
index 0000000..c358326
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaAugment.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.javadatamodel;
+
+import org.onosproject.yang.compiler.datamodel.YangAugment;
+
+/**
+ * Represents YANG java augment.
+ */
+public class YangJavaAugment
+ extends YangAugment {
+
+ private static final long serialVersionUID = 208201601L;
+
+ protected JavaFileInfo javaFileInfo;
+
+ /**
+ * Returns java file info.
+ *
+ * @return java file info
+ */
+ public JavaFileInfo getJavaFileInfo() {
+ return javaFileInfo;
+ }
+
+ @Override
+ public String getJavaPackage() {
+ return getJavaFileInfo().getPackage();
+ }
+
+ @Override
+ public String getJavaClassNameOrBuiltInType() {
+ return getJavaFileInfo().getJavaName();
+ }
+
+ @Override
+ public String getJavaAttributeName() {
+ return getJavaFileInfo().getJavaAttributeName();
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaCase.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaCase.java
new file mode 100644
index 0000000..bc5bd70
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaCase.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.javadatamodel;
+
+import org.onosproject.yang.compiler.datamodel.YangCase;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+
+/**
+ * Represents YANG java case.
+ */
+public class YangJavaCase
+ extends YangCase {
+
+ private static final long serialVersionUID = 208201602L;
+
+ protected JavaFileInfo javaFileInfo;
+
+ /**
+ * Returns java file info.
+ *
+ * @return java file info
+ */
+ public JavaFileInfo getJavaFileInfo() {
+ return javaFileInfo;
+ }
+
+ @Override
+ public String getJavaPackage() {
+ return getJavaFileInfo().getPackage();
+ }
+
+ @Override
+ public String getJavaClassNameOrBuiltInType() {
+ return getJavaFileInfo().getJavaName();
+ }
+
+ @Override
+ public String getJavaAttributeName() {
+ YangNode parent = getParent();
+ if (parent instanceof YangJavaChoice) {
+ return ((YangJavaChoice) parent).getJavaFileInfo()
+ .getJavaAttributeName();
+ }
+ throw new RuntimeException("Attribute name is not applicable ");
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaChoice.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaChoice.java
new file mode 100644
index 0000000..406b442
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaChoice.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.javadatamodel;
+
+import org.onosproject.yang.compiler.datamodel.YangChoice;
+
+/**
+ * Represents YANG java choice.
+ */
+public class YangJavaChoice
+ extends YangChoice {
+
+ private static final long serialVersionUID = 208201603L;
+
+ protected JavaFileInfo javaFileInfo;
+
+ /**
+ * Returns java file info.
+ *
+ * @return java file info
+ */
+ public JavaFileInfo getJavaFileInfo() {
+ return javaFileInfo;
+ }
+
+ @Override
+ public String getJavaPackage() {
+ return getJavaFileInfo().getPackage();
+ }
+
+ @Override
+ public String getJavaClassNameOrBuiltInType() {
+ return getJavaFileInfo().getJavaName();
+ }
+
+ @Override
+ public String getJavaAttributeName() {
+ return getJavaFileInfo().getJavaAttributeName();
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaContainer.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaContainer.java
new file mode 100644
index 0000000..68dc622
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaContainer.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.javadatamodel;
+
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+
+/**
+ * Represents YANG java container.
+ */
+public class YangJavaContainer
+ extends YangContainer {
+
+ private static final long serialVersionUID = 208201604L;
+
+ protected JavaFileInfo javaFileInfo;
+
+ /**
+ * Returns java file info.
+ *
+ * @return java file info
+ */
+ public JavaFileInfo getJavaFileInfo() {
+ return javaFileInfo;
+ }
+
+ @Override
+ public String getJavaPackage() {
+ return getJavaFileInfo().getPackage();
+ }
+
+ @Override
+ public String getJavaClassNameOrBuiltInType() {
+ return getJavaFileInfo().getJavaName();
+ }
+
+ @Override
+ public String getJavaAttributeName() {
+ return getJavaFileInfo().getJavaAttributeName();
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaEnumeration.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaEnumeration.java
new file mode 100644
index 0000000..9f41d3a
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaEnumeration.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.javadatamodel;
+
+import org.onosproject.yang.compiler.datamodel.YangEnumeration;
+
+/**
+ * Represents YANG java enumeration.
+ */
+public class YangJavaEnumeration
+ extends YangEnumeration {
+
+ private static final long serialVersionUID = 208201605L;
+
+ protected JavaFileInfo javaFileInfo;
+
+ /**
+ * Returns java file info.
+ *
+ * @return java file info
+ */
+ public JavaFileInfo getJavaFileInfo() {
+ return javaFileInfo;
+ }
+
+ @Override
+ public String getJavaPackage() {
+ return getJavaFileInfo().getPackage();
+ }
+
+ @Override
+ public String getJavaClassNameOrBuiltInType() {
+ return getJavaFileInfo().getJavaName();
+ }
+
+ @Override
+ public String getJavaAttributeName() {
+ throw new RuntimeException("Attribute name is not applicable ");
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaGrouping.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaGrouping.java
new file mode 100644
index 0000000..7fc247c
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaGrouping.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.javadatamodel;
+
+import org.onosproject.yang.compiler.datamodel.YangGrouping;
+
+/**
+ * Represents YANG java grouping.
+ */
+public class YangJavaGrouping
+ extends YangGrouping {
+
+ private static final long serialVersionUID = 208201606L;
+
+ protected JavaFileInfo javaFileInfo;
+
+ /**
+ * Returns java file info.
+ *
+ * @return java file info
+ */
+ public JavaFileInfo getJavaFileInfo() {
+ return javaFileInfo;
+ }
+
+ @Override
+ public String getJavaPackage() {
+ return getJavaFileInfo().getPackage();
+ }
+
+ @Override
+ public String getJavaClassNameOrBuiltInType() {
+ return getJavaFileInfo().getJavaName();
+ }
+
+ @Override
+ public String getJavaAttributeName() {
+ throw new RuntimeException("Attribute name is not applicable ");
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaIdentity.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaIdentity.java
new file mode 100644
index 0000000..bd447e4
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaIdentity.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.javadatamodel;
+
+import org.onosproject.yang.compiler.datamodel.YangIdentity;
+
+/**
+ * Represents YANG java identity.
+ */
+public class YangJavaIdentity
+ extends YangIdentity {
+
+ private static final long serialVersionUID = 208201616L;
+
+ protected JavaFileInfo javaFileInfo;
+
+ /**
+ * Returns java file info.
+ *
+ * @return java file info
+ */
+ public JavaFileInfo getJavaFileInfo() {
+ return javaFileInfo;
+ }
+
+ @Override
+ public String getJavaPackage() {
+ return getJavaFileInfo().getPackage();
+ }
+
+ @Override
+ public String getJavaClassNameOrBuiltInType() {
+ return getJavaFileInfo().getJavaName();
+ }
+
+ @Override
+ public String getJavaAttributeName() {
+ return getJavaFileInfo().getJavaAttributeName();
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaInput.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaInput.java
new file mode 100644
index 0000000..c83cec2
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaInput.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.javadatamodel;
+
+import org.onosproject.yang.compiler.datamodel.YangInput;
+
+/**
+ * Represents YANG java input.
+ */
+public class YangJavaInput
+ extends YangInput {
+
+ private static final long serialVersionUID = 208201607L;
+
+ protected JavaFileInfo javaFileInfo;
+
+ /**
+ * Returns java file info.
+ *
+ * @return java file info
+ */
+ public JavaFileInfo getJavaFileInfo() {
+ return javaFileInfo;
+ }
+
+ @Override
+ public String getJavaPackage() {
+ return getJavaFileInfo().getPackage();
+ }
+
+ @Override
+ public String getJavaClassNameOrBuiltInType() {
+ return getJavaFileInfo().getJavaName();
+ }
+
+ @Override
+ public String getJavaAttributeName() {
+ return getJavaFileInfo().getJavaAttributeName();
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaLeaf.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaLeaf.java
new file mode 100644
index 0000000..7549862
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaLeaf.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.javadatamodel;
+
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+
+/**
+ * Represent YANG java leaf.
+ */
+public class YangJavaLeaf
+ extends YangLeaf
+ implements JavaQualifiedTypeInfoContainer {
+
+ private static final long serialVersionUID = 208201617L;
+
+ protected JavaQualifiedTypeInfo javaQualifiedTypeInfo;
+
+ /**
+ * Sets java qualified type info.
+ *
+ * @param javaQualifiedTypeInfo java qualified type info
+ */
+ public void setJavaQualifiedInfo(JavaQualifiedTypeInfo javaQualifiedTypeInfo) {
+ this.javaQualifiedTypeInfo = javaQualifiedTypeInfo;
+ }
+
+ /**
+ * Returns java qualified type info.
+ *
+ * @return java qualified type info
+ */
+ public JavaQualifiedTypeInfo getJavaQualifiedInfo() {
+ return javaQualifiedTypeInfo;
+ }
+
+ @Override
+ public String getJavaPackage() {
+ return getJavaQualifiedInfo().getPkgInfo();
+ }
+
+ @Override
+ public String getJavaClassNameOrBuiltInType() {
+ return getJavaQualifiedInfo().getClassInfo();
+ }
+
+ @Override
+ public String getJavaAttributeName() {
+ return getJavaQualifiedInfo().getJavaAttributeName();
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaLeafList.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaLeafList.java
new file mode 100644
index 0000000..8825fa7
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaLeafList.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.javadatamodel;
+
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+
+/**
+ * Represents YANG java leaf list.
+ */
+public class YangJavaLeafList
+ extends YangLeafList
+ implements JavaQualifiedTypeInfoContainer {
+
+ private static final long serialVersionUID = 208201618L;
+
+ protected JavaQualifiedTypeInfo javaQualifiedTypeInfo;
+
+ /**
+ * Returns java qualified type info.
+ *
+ * @return java qualified type info
+ */
+ public JavaQualifiedTypeInfo getJavaQualifiedInfo() {
+ return javaQualifiedTypeInfo;
+ }
+
+ /**
+ * Sets java qualified type info.
+ *
+ * @param javaQualifiedTypeInfo java qualified type info
+ */
+ public void setJavaQualifiedInfo(JavaQualifiedTypeInfo javaQualifiedTypeInfo) {
+ this.javaQualifiedTypeInfo = javaQualifiedTypeInfo;
+ }
+
+ @Override
+ public String getJavaPackage() {
+ return getJavaQualifiedInfo().getPkgInfo();
+ }
+
+ @Override
+ public String getJavaClassNameOrBuiltInType() {
+ return getJavaQualifiedInfo().getClassInfo();
+ }
+
+ @Override
+ public String getJavaAttributeName() {
+ return getJavaQualifiedInfo().getJavaAttributeName();
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaList.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaList.java
new file mode 100644
index 0000000..72ee3b5
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaList.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.javadatamodel;
+
+import org.onosproject.yang.compiler.datamodel.YangList;
+
+/**
+ * Represent YANG java list.
+ */
+public class YangJavaList
+ extends YangList {
+
+ private static final long serialVersionUID = 208201608L;
+
+ /**
+ * Contains the information of the java file being generated.
+ */
+ protected JavaFileInfo javaFileInfo;
+
+ /**
+ * Returns java file info.
+ *
+ * @return java file info
+ */
+ public JavaFileInfo getJavaFileInfo() {
+ return javaFileInfo;
+ }
+
+ @Override
+ public String getJavaPackage() {
+ return getJavaFileInfo().getPackage();
+ }
+
+ @Override
+ public String getJavaClassNameOrBuiltInType() {
+ return getJavaFileInfo().getJavaName();
+ }
+
+ @Override
+ public String getJavaAttributeName() {
+ return getJavaFileInfo().getJavaAttributeName();
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaModule.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaModule.java
new file mode 100644
index 0000000..fb98261
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaModule.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.javadatamodel;
+
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+
+import java.util.List;
+
+import static java.util.Collections.unmodifiableList;
+
+/**
+ * Represents YANG java module.
+ */
+public class YangJavaModule
+ extends YangModule {
+
+ private static final long serialVersionUID = 208201609L;
+
+ protected JavaFileInfo javaFileInfo;
+ protected List<YangNode> notificationNodes;
+
+ /**
+ * Returns java file info.
+ *
+ * @return java file info
+ */
+ public JavaFileInfo getJavaFileInfo() {
+ return javaFileInfo;
+ }
+
+ @Override
+ public String getJavaPackage() {
+ return getJavaFileInfo().getPackage();
+ }
+
+ @Override
+ public String getJavaClassNameOrBuiltInType() {
+ return getJavaFileInfo().getJavaName();
+ }
+
+ @Override
+ public String getJavaAttributeName() {
+ throw new RuntimeException("Attribute name is not applicable ");
+ }
+
+ @Override
+ public List<YangNode> getNotificationNodes() {
+ return unmodifiableList(notificationNodes);
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaNotification.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaNotification.java
new file mode 100644
index 0000000..a774327
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaNotification.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.javadatamodel;
+
+import org.onosproject.yang.compiler.datamodel.YangNotification;
+
+/**
+ * Represents YANG java notification.
+ */
+public class YangJavaNotification
+ extends YangNotification {
+
+ private static final long serialVersionUID = 208201610L;
+
+ protected JavaFileInfo javaFileInfo;
+
+ /**
+ * Returns java file info.
+ *
+ * @return java file info
+ */
+ public JavaFileInfo getJavaFileInfo() {
+ return javaFileInfo;
+ }
+
+ @Override
+ public String getJavaPackage() {
+ return getJavaFileInfo().getPackage();
+ }
+
+ @Override
+ public String getJavaClassNameOrBuiltInType() {
+ return getJavaFileInfo().getJavaName();
+ }
+
+ @Override
+ public String getJavaAttributeName() {
+ return getJavaFileInfo().getJavaAttributeName();
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaOutput.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaOutput.java
new file mode 100644
index 0000000..2fc9983
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaOutput.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.javadatamodel;
+
+import org.onosproject.yang.compiler.datamodel.YangOutput;
+
+/**
+ * Represents YANG java output.
+ */
+public class YangJavaOutput
+ extends YangOutput {
+
+ private static final long serialVersionUID = 208201611L;
+
+ protected JavaFileInfo javaFileInfo;
+
+ /**
+ * Returns java file info.
+ *
+ * @return java file info
+ */
+ public JavaFileInfo getJavaFileInfo() {
+ return javaFileInfo;
+ }
+
+ @Override
+ public String getJavaPackage() {
+ return getJavaFileInfo().getPackage();
+ }
+
+ @Override
+ public String getJavaClassNameOrBuiltInType() {
+ return getJavaFileInfo().getJavaName();
+ }
+
+ @Override
+ public String getJavaAttributeName() {
+ return getJavaFileInfo().getJavaAttributeName();
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaRpc.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaRpc.java
new file mode 100644
index 0000000..e88c624
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaRpc.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.javadatamodel;
+
+import org.onosproject.yang.compiler.datamodel.YangRpc;
+
+/**
+ * Represents YANG java rpc.
+ */
+public class YangJavaRpc
+ extends YangRpc {
+
+ private static final long serialVersionUID = 208201612L;
+
+ protected JavaFileInfo javaFileInfo;
+
+ /**
+ * Returns java file info.
+ *
+ * @return java file info
+ */
+ public JavaFileInfo getJavaFileInfo() {
+ return javaFileInfo;
+ }
+
+ @Override
+ public String getJavaPackage() {
+ return getJavaFileInfo().getPackage();
+ }
+
+ @Override
+ public String getJavaClassNameOrBuiltInType() {
+ return getJavaFileInfo().getJavaName();
+ }
+
+ @Override
+ public String getJavaAttributeName() {
+ return getJavaFileInfo().getJavaAttributeName();
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaSubModule.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaSubModule.java
new file mode 100644
index 0000000..00ee10c
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaSubModule.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.javadatamodel;
+
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangSubModule;
+
+import java.util.List;
+
+import static java.util.Collections.unmodifiableList;
+
+/**
+ * Represents YANG java submodule.
+ */
+public class YangJavaSubModule
+ extends YangSubModule {
+
+ private static final long serialVersionUID = 208201612L;
+
+ protected JavaFileInfo javaFileInfo;
+ protected List<YangNode> notificationNodes;
+
+ /**
+ * Returns java file info.
+ *
+ * @return java file info
+ */
+ public JavaFileInfo getJavaFileInfo() {
+ return javaFileInfo;
+ }
+
+ @Override
+ public String getJavaPackage() {
+ return getJavaFileInfo().getPackage();
+ }
+
+ @Override
+ public String getJavaClassNameOrBuiltInType() {
+ return getJavaFileInfo().getJavaName();
+ }
+
+ @Override
+ public String getJavaAttributeName() {
+ throw new RuntimeException("Attribute name is not applicable ");
+ }
+
+ @Override
+ public List<YangNode> getNotificationNodes() {
+ return unmodifiableList(notificationNodes);
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaType.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaType.java
new file mode 100644
index 0000000..9eaf4b0
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaType.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.javadatamodel;
+
+import org.onosproject.yang.compiler.datamodel.YangType;
+
+/**
+ * Represents YANG java type.
+ */
+public class YangJavaType extends YangType implements JavaQualifiedTypeInfoContainer {
+
+ private static final long serialVersionUID = 19082016001L;
+ protected JavaQualifiedTypeInfo javaQualifiedTypeInfo;
+
+ /**
+ * Returns java qualified type info.
+ *
+ * @return java qualified type info
+ */
+
+ @Override
+ public JavaQualifiedTypeInfo getJavaQualifiedInfo() {
+ return javaQualifiedTypeInfo;
+ }
+
+ @Override
+ public void setJavaQualifiedInfo(JavaQualifiedTypeInfo typeInfo) {
+ this.javaQualifiedTypeInfo = typeInfo;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaTypeDef.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaTypeDef.java
new file mode 100644
index 0000000..c97719a
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaTypeDef.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.javadatamodel;
+
+import org.onosproject.yang.compiler.datamodel.YangTypeDef;
+
+/**
+ * Represents YANG java typedef.
+ */
+public class YangJavaTypeDef
+ extends YangTypeDef {
+
+ private static final long serialVersionUID = 208201613L;
+
+ protected JavaFileInfo javaFileInfo;
+
+ /**
+ * Returns java file info.
+ *
+ * @return java file info
+ */
+ public JavaFileInfo getJavaFileInfo() {
+ return javaFileInfo;
+ }
+
+ @Override
+ public String getJavaPackage() {
+ return getJavaFileInfo().getPackage();
+ }
+
+ @Override
+ public String getJavaClassNameOrBuiltInType() {
+ return getJavaFileInfo().getJavaName();
+ }
+
+ @Override
+ public String getJavaAttributeName() {
+ throw new RuntimeException("Attribute name is not applicable ");
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaUnion.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaUnion.java
new file mode 100644
index 0000000..858bd58
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaUnion.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.javadatamodel;
+
+import org.onosproject.yang.compiler.datamodel.YangUnion;
+
+/**
+ * Represent YANG java union.
+ */
+public class YangJavaUnion
+ extends YangUnion {
+
+ private static final long serialVersionUID = 208201614L;
+ protected JavaFileInfo javaFileInfo;
+
+ /**
+ * Returns java file info.
+ *
+ * @return java file info
+ */
+ public JavaFileInfo getJavaFileInfo() {
+ return javaFileInfo;
+ }
+
+ @Override
+ public String getJavaPackage() {
+ return getJavaFileInfo().getPackage();
+ }
+
+ @Override
+ public String getJavaClassNameOrBuiltInType() {
+ return getJavaFileInfo().getJavaName();
+ }
+
+ @Override
+ public String getJavaAttributeName() {
+ throw new RuntimeException("Attribute name is not applicable ");
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaUses.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaUses.java
new file mode 100644
index 0000000..466fd3c
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/YangJavaUses.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.javadatamodel;
+
+import org.onosproject.yang.compiler.datamodel.YangUses;
+
+/**
+ * Represent YANG java uses.
+ */
+public class YangJavaUses
+ extends YangUses {
+
+ private static final long serialVersionUID = 208201615L;
+
+ protected JavaFileInfo javaFileInfo;
+
+ /**
+ * Returns java file info.
+ *
+ * @return java file info
+ */
+ public JavaFileInfo getJavaFileInfo() {
+ return javaFileInfo;
+ }
+
+ @Override
+ public String getJavaPackage() {
+ return getJavaFileInfo().getPackage();
+ }
+
+ @Override
+ public String getJavaClassNameOrBuiltInType() {
+ return getJavaFileInfo().getJavaName();
+ }
+
+ @Override
+ public String getJavaAttributeName() {
+ throw new RuntimeException("Attribute name is not applicable ");
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/package-info.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/package-info.java
new file mode 100644
index 0000000..45da407
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/javadatamodel/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+/**
+ * Representation of YANG java data model.
+ */
+package org.onosproject.yang.compiler.datamodel.javadatamodel;
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/package-info.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/package-info.java
new file mode 100644
index 0000000..f02b899
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+/**
+ * Maintains application's schema information.
+ */
+package org.onosproject.yang.compiler.datamodel;
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/DataModelUtils.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/DataModelUtils.java
new file mode 100644
index 0000000..bfb5b8d
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/DataModelUtils.java
@@ -0,0 +1,847 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.utils;
+
+import org.onosproject.yang.compiler.datamodel.CollisionDetector;
+import org.onosproject.yang.compiler.datamodel.ResolvableType;
+import org.onosproject.yang.compiler.datamodel.YangAtomicPath;
+import org.onosproject.yang.compiler.datamodel.YangAugment;
+import org.onosproject.yang.compiler.datamodel.YangBase;
+import org.onosproject.yang.compiler.datamodel.YangCompilerAnnotation;
+import org.onosproject.yang.compiler.datamodel.YangDerivedInfo;
+import org.onosproject.yang.compiler.datamodel.YangEntityToResolveInfoImpl;
+import org.onosproject.yang.compiler.datamodel.YangEnumeration;
+import org.onosproject.yang.compiler.datamodel.YangIdentityRef;
+import org.onosproject.yang.compiler.datamodel.YangIfFeature;
+import org.onosproject.yang.compiler.datamodel.YangImport;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangLeafRef;
+import org.onosproject.yang.compiler.datamodel.YangLeavesHolder;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangReferenceResolver;
+import org.onosproject.yang.compiler.datamodel.YangResolutionInfo;
+import org.onosproject.yang.compiler.datamodel.YangRpc;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.YangUnion;
+import org.onosproject.yang.compiler.datamodel.YangUses;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.EMPTY;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.ENUMERATION;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.UNION;
+
+
+/**
+ * Represents utilities for data model tree.
+ */
+public final class DataModelUtils {
+ public static final String TRUE = "true";
+ public static final String FALSE = "false";
+ private static final String SLASH = File.separator;
+
+ /**
+ * Creates a new data model tree utility.
+ */
+ private DataModelUtils() {
+ }
+
+ /**
+ * Detects the colliding identifier name in a given YANG node and its child.
+ *
+ * @param identifierName name for which collision detection is to be checked
+ * @param dataType type of YANG node asking for detecting collision
+ * @param node instance of calling node
+ * @throws DataModelException a violation of data model rules
+ */
+ public static void detectCollidingChildUtil(String identifierName, YangConstructType dataType, YangNode node)
+ throws DataModelException {
+ if (dataType == YangConstructType.USES_DATA || dataType == YangConstructType.GROUPING_DATA) {
+ detectCollidingForUsesGrouping(identifierName, dataType, node);
+ } else {
+ if (node instanceof YangLeavesHolder) {
+ YangLeavesHolder leavesHolder = (YangLeavesHolder) node;
+ detectCollidingLeaf(leavesHolder.getListOfLeaf(), identifierName);
+ detectCollidingLeafList(leavesHolder.getListOfLeafList(), identifierName);
+ }
+ node = node.getChild();
+ while (node != null) {
+ Parsable parsable = (Parsable) node;
+ if (node instanceof CollisionDetector
+ && parsable.getYangConstructType() != YangConstructType.USES_DATA
+ && parsable.getYangConstructType() != YangConstructType.GROUPING_DATA) {
+ ((CollisionDetector) node).detectSelfCollision(identifierName, dataType);
+ }
+ node = node.getNextSibling();
+ }
+ }
+ }
+
+ /**
+ * Detects colliding of uses and grouping only with uses and grouping respectively.
+ *
+ * @param identifierName name for which collision detection is to be checked
+ * @param dataType type of YANG node asking for detecting collision
+ * @param node node instance of calling node
+ * @throws DataModelException a violation of data model rules
+ */
+ private static void detectCollidingForUsesGrouping(String identifierName, YangConstructType dataType, YangNode node)
+ throws DataModelException {
+
+ node = node.getChild();
+ while (node != null) {
+ Parsable parsable = (Parsable) node;
+ if (node instanceof CollisionDetector
+ && parsable.getYangConstructType() == dataType) {
+ ((CollisionDetector) node).detectSelfCollision(identifierName, dataType);
+ }
+ node = node.getNextSibling();
+ }
+ }
+
+ /**
+ * Detects the colliding identifier name in a given leaf node.
+ *
+ * @param listOfLeaf List of leaves to detect collision
+ * @param identifierName name for which collision detection is to be checked
+ * @throws DataModelException a violation of data model rules
+ */
+ private static void detectCollidingLeaf(List<YangLeaf> listOfLeaf, String identifierName)
+ throws DataModelException {
+
+ if (listOfLeaf == null) {
+ return;
+ }
+ for (YangLeaf leaf : listOfLeaf) {
+ if (leaf.getName().equals(identifierName)) {
+ throw new DataModelException("YANG file error: Duplicate input identifier detected, same as leaf \"" +
+ leaf.getName() + " in " +
+ leaf.getLineNumber() + " at " +
+ leaf.getCharPosition() +
+ " in " + leaf.getFileName() + "\"");
+ }
+ }
+ }
+
+ /**
+ * Detects the colliding identifier name in a given leaf-list node.
+ *
+ * @param listOfLeafList list of leaf-lists to detect collision
+ * @param identifierName name for which collision detection is to be checked
+ * @throws DataModelException a violation of data model rules
+ */
+ private static void detectCollidingLeafList(List<YangLeafList> listOfLeafList, String identifierName)
+ throws DataModelException {
+
+ if (listOfLeafList == null) {
+ return;
+ }
+ for (YangLeafList leafList : listOfLeafList) {
+ if (leafList.getName().equals(identifierName)) {
+ throw new DataModelException("YANG file error: Duplicate input identifier detected, same as leaf " +
+ "list \"" + leafList.getName() + " in " +
+ leafList.getLineNumber() + " at " +
+ leafList.getCharPosition() +
+ " in " + leafList.getFileName() + "\"");
+ }
+ }
+ }
+
+ /**
+ * Add a resolution information.
+ *
+ * @param resolutionInfo information about the YANG construct which has to be resolved
+ * @throws DataModelException a violation of data model rules
+ */
+ public static void addResolutionInfo(YangResolutionInfo resolutionInfo)
+ throws DataModelException {
+
+ /* get the module node to add maintain the list of nested reference */
+ YangNode curNode = resolutionInfo.getEntityToResolveInfo()
+ .getHolderOfEntityToResolve();
+ while (!(curNode instanceof YangReferenceResolver)) {
+ curNode = curNode.getParent();
+ if (curNode == null) {
+ throw new DataModelException("Internal datamodel error: Datamodel tree is not correct");
+ }
+ }
+ YangReferenceResolver resolutionNode = (YangReferenceResolver) curNode;
+
+ if (resolutionInfo.getEntityToResolveInfo()
+ .getEntityToResolve() instanceof YangType) {
+ resolutionNode.addToResolutionList(resolutionInfo,
+ ResolvableType.YANG_DERIVED_DATA_TYPE);
+ } else if (resolutionInfo.getEntityToResolveInfo()
+ .getEntityToResolve() instanceof YangUses) {
+ resolutionNode.addToResolutionList(resolutionInfo,
+ ResolvableType.YANG_USES);
+ } else if (resolutionInfo.getEntityToResolveInfo()
+ .getEntityToResolve() instanceof YangAugment) {
+ resolutionNode.addToResolutionList(resolutionInfo,
+ ResolvableType.YANG_AUGMENT);
+ } else if (resolutionInfo.getEntityToResolveInfo()
+ .getEntityToResolve() instanceof YangIfFeature) {
+ resolutionNode.addToResolutionList(resolutionInfo,
+ ResolvableType.YANG_IF_FEATURE);
+ } else if (resolutionInfo.getEntityToResolveInfo()
+ .getEntityToResolve() instanceof YangLeafRef) {
+ resolutionNode.addToResolutionList(resolutionInfo,
+ ResolvableType.YANG_LEAFREF);
+ } else if (resolutionInfo.getEntityToResolveInfo().getEntityToResolve() instanceof YangBase) {
+ resolutionNode.addToResolutionList(resolutionInfo, ResolvableType.YANG_BASE);
+ } else if (resolutionInfo.getEntityToResolveInfo().getEntityToResolve() instanceof YangIdentityRef) {
+ resolutionNode.addToResolutionList(resolutionInfo, ResolvableType.YANG_IDENTITYREF);
+ } else if (resolutionInfo.getEntityToResolveInfo()
+ .getEntityToResolve() instanceof YangCompilerAnnotation) {
+ resolutionNode.addToResolutionList(resolutionInfo,
+ ResolvableType.YANG_COMPILER_ANNOTATION);
+ }
+ }
+
+ /**
+ * Resolve linking for a resolution list.
+ *
+ * @param resolutionList resolution list for which linking to be done
+ * @param dataModelRootNode module/sub-module node
+ * @throws DataModelException a violation of data model rules
+ */
+ public static void resolveLinkingForResolutionList(List<YangResolutionInfo> resolutionList,
+ YangReferenceResolver dataModelRootNode)
+ throws DataModelException {
+
+ for (YangResolutionInfo resolutionInfo : resolutionList) {
+ resolutionInfo.resolveLinkingForResolutionInfo(dataModelRootNode);
+ }
+ }
+
+ /**
+ * Links type/uses referring to typedef/uses of inter YANG file.
+ *
+ * @param resolutionList resolution list for which linking to be done
+ * @param dataModelRootNode module/sub-module node
+ * @throws DataModelException a violation of data model rules
+ */
+ public static void linkInterFileReferences(List<YangResolutionInfo> resolutionList,
+ YangReferenceResolver dataModelRootNode)
+ throws DataModelException {
+ /*
+ * Run through the resolution list, find type/uses referring to inter
+ * file typedef/grouping, ask for linking.
+ */
+ if (resolutionList != null) {
+ for (YangResolutionInfo resolutionInfo : resolutionList) {
+ resolutionInfo.linkInterFile(dataModelRootNode);
+ }
+ }
+ }
+
+ /**
+ * Checks if there is any rpc defined in the module or sub-module.
+ *
+ * @param rootNode root node of the data model
+ * @return status of rpc's existence
+ */
+ public static boolean isRpcChildNodePresent(YangNode rootNode) {
+ YangNode childNode = rootNode.getChild();
+ while (childNode != null) {
+ if (childNode instanceof YangRpc) {
+ return true;
+ }
+ childNode = childNode.getNextSibling();
+ }
+ return false;
+ }
+
+ /**
+ * Returns referred node in a given set.
+ *
+ * @param yangNodeSet YANG node set
+ * @param refNodeName name of the node which is referred
+ * @return referred node's reference
+ */
+ public static YangNode findReferredNode(Set<YangNode> yangNodeSet, String refNodeName) {
+ /*
+ * Run through the YANG files to see which YANG file matches the
+ * referred node name.
+ */
+ for (YangNode yangNode : yangNodeSet) {
+ if (yangNode.getName().equals(refNodeName)) {
+ return yangNode;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns the contained data model parent node.
+ *
+ * @param currentNode current node which parent contained node is required
+ * @return parent node in which the current node is an attribute
+ */
+ public static YangNode getParentNodeInGenCode(YangNode currentNode) {
+
+ /*
+ * TODO: recursive parent lookup to support choice/augment/uses. TODO:
+ * need to check if this needs to be updated for
+ * choice/case/augment/grouping
+ */
+ return currentNode.getParent();
+ }
+
+ /**
+ * Returns de-serializes YANG data-model nodes.
+ *
+ * @param serializedFileInfo serialized File Info
+ * @return de-serializes YANG data-model nodes
+ * @throws IOException when fails do IO operations
+ */
+ public static Set<YangNode> deSerializeDataModel(String serializedFileInfo)
+ throws IOException {
+
+ Set<YangNode> nodes;
+ try {
+ FileInputStream fileInputStream = new FileInputStream(serializedFileInfo);
+ ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
+ nodes = (Set<YangNode>) objectInputStream.readObject();
+ objectInputStream.close();
+ fileInputStream.close();
+ } catch (IOException | ClassNotFoundException e) {
+ throw new IOException(serializedFileInfo + " not found.");
+ }
+ return nodes;
+ }
+
+ /**
+ * Adds the list of leaf present under a node to resolution list, after
+ * cloning. Under the cloned node, with cloned leaf, attributes are set
+ * and added to resolution list.
+ *
+ * @param clonedNode holder node
+ * @param yangUses YANG uses
+ * @throws CloneNotSupportedException clone not supported error
+ * @throws DataModelException data model error
+ */
+ public static void cloneListOfLeaf(
+ YangLeavesHolder clonedNode, YangUses yangUses)
+ throws CloneNotSupportedException, DataModelException {
+
+ List<YangLeaf> leaves = clonedNode.getListOfLeaf();
+ if (nonEmpty(leaves)) {
+ List<YangLeaf> clonedLeaves = new LinkedList<>();
+ for (YangLeaf leaf : leaves) {
+ YangLeaf clonedLeaf = leaf.clone();
+ clonedLeaf.setReferredLeaf(leaf);
+ addUnresolvedType(yangUses, clonedLeaf, (YangNode) clonedNode);
+ clonedLeaf.setContainedIn(clonedNode);
+ clonedLeaves.add(clonedLeaf);
+ }
+ clonedNode.setListOfLeaf(clonedLeaves);
+ }
+ }
+
+ /**
+ * Adds all the unresolved type under leaf/leaf-list to the resolution
+ * list, after cloning. This makes the resolution to happen after cloning
+ * of the grouping. Adds resolution with cloned node holder under which
+ * cloned type is present.
+ *
+ * @param yangUses YANG uses
+ * @param clonedObj cloned type object
+ * @param clonedNode holder node
+ * @throws DataModelException data model error
+ */
+ public static void addUnresolvedType(
+ YangUses yangUses, Object clonedObj,
+ YangNode clonedNode) throws DataModelException {
+
+ List<YangEntityToResolveInfoImpl> infoList;
+ if (yangUses != null && yangUses.getCurrentGroupingDepth() == 0) {
+ infoList = getTypesToBeResolved(clonedObj, clonedNode, yangUses);
+ if (nonEmpty(infoList)) {
+ yangUses.addEntityToResolve(infoList);
+ }
+ }
+ }
+
+ /**
+ * Returns true if collection object is non-null and non-empty; false
+ * otherwise.
+ *
+ * @param c collection object
+ * @return true if object is non-null and non-empty; false otherwise
+ */
+ public static boolean nonEmpty(Collection<?> c) {
+ return c != null && !c.isEmpty();
+ }
+
+ /**
+ * Adds the list of leaf-list present under a node to resolution list,
+ * after cloning. Under the cloned node, with cloned leaf-list,
+ * attributes are set and added to resolution list.
+ *
+ * @param clonedNode cloned holder
+ * @param yangUses YANG uses
+ * @throws CloneNotSupportedException clone not supported error
+ * @throws DataModelException data model error
+ */
+ public static void cloneListOfLeafList(
+ YangLeavesHolder clonedNode, YangUses yangUses)
+ throws CloneNotSupportedException, DataModelException {
+
+ List<YangLeafList> listOfLeafList = clonedNode.getListOfLeafList();
+ if (nonEmpty(listOfLeafList)) {
+ List<YangLeafList> clonedList = new LinkedList<>();
+ for (YangLeafList leafList : listOfLeafList) {
+ YangLeafList clonedLeafList = leafList.clone();
+ clonedLeafList.setReferredSchemaLeafList(leafList);
+ addUnresolvedType(yangUses, clonedLeafList,
+ (YangNode) clonedNode);
+ clonedLeafList.setContainedIn(clonedNode);
+ clonedList.add(clonedLeafList);
+ }
+ clonedNode.setListOfLeafList(clonedList);
+ }
+ }
+
+ /**
+ * Returns types that has to be resolved for a single leaf/leaf-list.
+ * Identifies the object to be leaf/leaf-list and assigns respective
+ * parameters to resolve the types under leaf/leaf-list.
+ *
+ * @param clonedObj leaf/leaf-list object
+ * @param holderNode holder node
+ * @param yangUses YANG uses
+ * @return list of resolvable entities in a leaf/leaf-list
+ * @throws DataModelException data model error
+ */
+ private static List<YangEntityToResolveInfoImpl> getTypesToBeResolved(
+ Object clonedObj, YangNode holderNode,
+ YangUses yangUses) throws DataModelException {
+
+ YangType type;
+ if (clonedObj instanceof YangLeaf) {
+ YangLeaf clonedLeaf = (YangLeaf) clonedObj;
+ type = clonedLeaf.getDataType();
+ return getUnresolvedTypeList(type.getDataType(), type, holderNode,
+ yangUses, true);
+ }
+ YangLeafList clonedLeafList = (YangLeafList) clonedObj;
+ type = clonedLeafList.getDataType();
+ return getUnresolvedTypeList(type.getDataType(), type, holderNode,
+ yangUses, false);
+ }
+
+ /**
+ * Returns list of resolvable entities from the type of leaf/leaf-list.
+ * If the type is leaf-ref, derived or union with type resolution
+ * required, it has to be resolved from the place where it is cloned. So,
+ * the resolution list added with these entities. When a type require no
+ * resolution then null is returned, so it will never be added to
+ * resolution list.
+ *
+ * @param dataTypes data type of type
+ * @param type type of leaf/leaf-list
+ * @param holder holder node of type
+ * @param yangUses YANG uses
+ * @param isLeaf leaf or leaf-list
+ * @return list of resolvable entities for a leaf/leaf-list.
+ * @throws DataModelException data model error
+ */
+ private static List<YangEntityToResolveInfoImpl> getUnresolvedTypeList(
+ YangDataTypes dataTypes, YangType type, YangNode holder,
+ YangUses yangUses, boolean isLeaf) throws DataModelException {
+
+ List<YangEntityToResolveInfoImpl> infoList = new ArrayList<>();
+ YangEntityToResolveInfoImpl entity = null;
+ List<YangEntityToResolveInfoImpl> entityList = null;
+
+ switch (dataTypes) {
+ case LEAFREF:
+ entity = getLeafRefResolvableEntity(type, yangUses, holder);
+ break;
+
+ case DERIVED:
+ entity = getDerivedResolvableEntity(type, holder, isLeaf);
+ break;
+
+ case UNION:
+ entityList = getUnionResolvableEntity(type, isLeaf);
+ break;
+
+ default:
+ return null;
+ }
+ infoList.add(entity);
+ if (nonEmpty(entityList)) {
+ infoList.addAll(entityList);
+ }
+ return infoList;
+ }
+
+ /**
+ * Returns resolvable entity when the type is leaf-ref. It changes the
+ * prefixes from grouping to uses, then changes the parent node to the
+ * cloned node, sets needed information to entity such as line number,
+ * position number and holder.
+ *
+ * @param type YANG type of leaf-ref
+ * @param yangUses YANG uses
+ * @param holder cloned holder
+ * @return entity to resolve for leaf-ref
+ * @throws DataModelException data model error
+ */
+ private static YangEntityToResolveInfoImpl getLeafRefResolvableEntity(
+ YangType type, YangUses yangUses, YangNode holder)
+ throws DataModelException {
+
+ YangEntityToResolveInfoImpl<YangLeafRef> leafRefInfo =
+ new YangEntityToResolveInfoImpl<>();
+ YangLeafRef leafRef = (YangLeafRef) type.getDataTypeExtendedInfo();
+
+ // Conversion of prefixes in absolute path while cloning them.
+ convertThePrefixesDuringChange(leafRef, yangUses);
+ leafRef.setParentNode(holder);
+ leafRefInfo.setEntityToResolve(leafRef);
+
+ return setInformationInEntity(
+ leafRefInfo, holder, leafRef.getCharPosition(),
+ leafRef.getLineNumber());
+ }
+
+ /**
+ * Returns resolvable entity when the type is derived. It sets needed
+ * information to entity such as line number,position number and holder.
+ * Returns null when identity is for inter grouping.
+ *
+ * @param type derived YANG type
+ * @param holder holder node
+ * @param isLeaf leaf or leaf-list
+ * @return entity to resolve for derived type
+ */
+ private static YangEntityToResolveInfoImpl getDerivedResolvableEntity(
+ YangType<?> type, YangNode holder, boolean isLeaf) {
+
+ YangEntityToResolveInfoImpl<YangType<?>> derivedInfo =
+ new YangEntityToResolveInfoImpl<>();
+ if (type.isTypeForInterFileGroupingResolution()) {
+ return null;
+ }
+ if (!isLeaf && type.isTypeNotResolvedTillRootNode()) {
+ return null;
+ }
+
+ derivedInfo.setEntityToResolve(type);
+ return setInformationInEntity(
+ derivedInfo, holder, type.getCharPosition(),
+ type.getLineNumber());
+ }
+
+ /**
+ * Sets the information needed for adding the entity into resolution
+ * list, such as line number, position number and cloned holder node.
+ *
+ * @param entity resolvable entity
+ * @param holder cloned holder node
+ * @param charPos character position
+ * @param lineNum line number
+ * @return resolvable entity after setting info
+ */
+ private static YangEntityToResolveInfoImpl<?> setInformationInEntity(
+ YangEntityToResolveInfoImpl<?> entity, YangNode holder,
+ int charPos, int lineNum) {
+
+ entity.setHolderOfEntityToResolve(holder);
+ entity.setCharPosition(charPos);
+ entity.setLineNumber(lineNum);
+ return entity;
+ }
+
+ /**
+ * Returns resolvable entity under union. When types under union have
+ * identity-ref, derived and union, the function call is done recursively
+ * to get resolvable entity and adds it to list.
+ *
+ * @param type union YANG type
+ * @param isLeaf leaf or leaf-list
+ * @return resolvable entity list after setting info
+ * @throws DataModelException data model error
+ */
+ private static List<YangEntityToResolveInfoImpl> getUnionResolvableEntity(
+ YangType type, boolean isLeaf) throws DataModelException {
+
+ YangUnion union = (YangUnion) type.getDataTypeExtendedInfo();
+ List<YangType<?>> typeList = union.getTypeList();
+ List<YangEntityToResolveInfoImpl> unionList = new ArrayList<>();
+ List<YangEntityToResolveInfoImpl> entity;
+
+ for (YangType unionType : typeList) {
+ entity = getUnresolvedTypeList(unionType.getDataType(),
+ unionType, union, null, isLeaf);
+ if (nonEmpty(entity)) {
+ unionList.addAll(entity);
+ }
+ }
+ return unionList;
+ }
+
+ /**
+ * Converts the prefixes in all the nodes of the leafref with respect to the uses node.
+ *
+ * @param leafrefForCloning leafref that is to be cloned
+ * @param yangUses instance of YANG uses where cloning is done
+ * @throws DataModelException data model error
+ */
+ private static void convertThePrefixesDuringChange(YangLeafRef leafrefForCloning, YangUses yangUses)
+ throws DataModelException {
+ List<YangAtomicPath> atomicPathList = leafrefForCloning.getAtomicPath();
+ if (atomicPathList != null && !atomicPathList.isEmpty()) {
+ Iterator<YangAtomicPath> atomicPathIterator = atomicPathList.listIterator();
+ while (atomicPathIterator.hasNext()) {
+ YangAtomicPath atomicPath = atomicPathIterator.next();
+ Map<String, String> prefixesAndItsImportNameNode = leafrefForCloning.getPrefixAndNode();
+ String prefixInPath = atomicPath.getNodeIdentifier().getPrefix();
+ String importedNodeName = prefixesAndItsImportNameNode.get(prefixInPath);
+ assignCurrentLeafedWithNewPrefixes(importedNodeName, atomicPath, yangUses);
+ }
+ }
+ }
+
+ /**
+ * Assigns leafref with new prefixes while cloning.
+ *
+ * @param importedNodeName imported node name from grouping
+ * @param atomicPath atomic path in leafref
+ * @param node instance of YANG uses where cloning is done
+ * @throws DataModelException data model error
+ */
+ private static void assignCurrentLeafedWithNewPrefixes(String importedNodeName, YangAtomicPath atomicPath,
+ YangNode node)
+ throws DataModelException {
+ while (!(node instanceof YangReferenceResolver)) {
+ node = node.getParent();
+ if (node == null) {
+ throw new DataModelException("Internal datamodel error: Datamodel tree is not correct");
+ }
+ }
+ if (node instanceof YangModule) {
+ List<YangImport> importInUsesList = ((YangModule) node).getImportList();
+ if (importInUsesList != null && !importInUsesList.isEmpty()) {
+ Iterator<YangImport> importInUsesListIterator = importInUsesList.listIterator();
+ while (importInUsesListIterator.hasNext()) {
+ YangImport importInUsesNode = importInUsesListIterator.next();
+ if (importInUsesNode.getModuleName().equals(importedNodeName)) {
+ atomicPath.getNodeIdentifier().setPrefix(importInUsesNode.getPrefixId());
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Clones the union or enum leaves. If there is any cloned leaves whose type is union/enum then the corresponding
+ * type info needs to be updated to the cloned new type node.
+ *
+ * @param leavesHolder cloned leaves holder, for whom the leaves reference needs to be updated
+ * @throws DataModelException when fails to do data model operations
+ */
+ public static void updateClonedLeavesUnionEnumRef(YangLeavesHolder leavesHolder)
+ throws DataModelException {
+ List<YangLeaf> currentListOfLeaves = leavesHolder.getListOfLeaf();
+ if (currentListOfLeaves != null) {
+ for (YangLeaf leaf : currentListOfLeaves) {
+ if (leaf.getDataType().getDataType() == ENUMERATION
+ || leaf.getDataType().getDataType() == UNION) {
+ try {
+ YangType<?> clonedType = leaf.getDataType().clone();
+ updateClonedTypeRef(clonedType, leavesHolder);
+ leaf.setDataType(clonedType);
+ } catch (DataModelException e) {
+ throw e;
+ } catch (CloneNotSupportedException e) {
+ e.printStackTrace();
+ throw new DataModelException("Could not clone Type node " +
+ leaf.getDataType().getDataTypeName() + " in " +
+ leaf.getDataType().getLineNumber() + " at " +
+ leaf.getDataType().getCharPosition() +
+ " in " + leaf.getDataType().getFileName() + "\"");
+ }
+ }
+ }
+ }
+
+ List<YangLeafList> currentListOfLeafList = leavesHolder.getListOfLeafList();
+ if (currentListOfLeafList != null) {
+ for (YangLeafList leafList : currentListOfLeafList) {
+ if (leafList.getDataType().getDataType() == ENUMERATION
+ || leafList.getDataType().getDataType() == UNION) {
+ try {
+ YangType<?> clonedType = leafList.getDataType().clone();
+ updateClonedTypeRef(clonedType, leavesHolder);
+ leafList.setDataType(clonedType);
+ } catch (DataModelException e) {
+ throw e;
+ } catch (CloneNotSupportedException e) {
+ e.printStackTrace();
+ throw new DataModelException("Could not clone Type node " +
+ leafList.getDataType().getDataTypeName() + " in " +
+ leafList.getDataType().getLineNumber() + " at " +
+ leafList.getDataType().getCharPosition() +
+ " in " + leafList.getDataType().getFileName() + "\"");
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Updates the types extended info pointer to point to the cloned type node.
+ *
+ * @param dataType data type, whose extended info needs to be pointed to the cloned type
+ * @param leavesHolder the leaves holder having the cloned type
+ */
+ private static void updateClonedTypeRef(YangType dataType, YangLeavesHolder leavesHolder)
+ throws DataModelException {
+ if (!(leavesHolder instanceof YangNode)) {
+ throw new DataModelException("Data model error: cloned leaves holder is not a node " +
+ " in " +
+ leavesHolder.getLineNumber() + " at " +
+ leavesHolder.getCharPosition() +
+ " in " + leavesHolder.getFileName() + "\"");
+ }
+ YangNode potentialTypeNode = ((YangNode) leavesHolder).getChild();
+ while (potentialTypeNode != null) {
+ String dataTypeName = null;
+ if (dataType.getDataType() == ENUMERATION) {
+ YangEnumeration enumNode = (YangEnumeration) dataType.getDataTypeExtendedInfo();
+ dataTypeName = enumNode.getName();
+ } else if (dataType.getDataType() == UNION) {
+ YangUnion unionNode = (YangUnion) dataType.getDataTypeExtendedInfo();
+ dataTypeName = unionNode.getName();
+ }
+ if (potentialTypeNode.getName().contentEquals(dataTypeName)) {
+ dataType.setDataTypeExtendedInfo(potentialTypeNode);
+ return;
+ }
+ potentialTypeNode = potentialTypeNode.getNextSibling();
+ }
+
+ throw new DataModelException("Data model error: cloned leaves type is not found " +
+ dataType.getDataTypeName() + " in " +
+ dataType.getLineNumber() + " at " +
+ dataType.getCharPosition() +
+ " in " + dataType.getFileName() + "\"");
+ }
+
+ /**
+ * Parses jar file and returns list of serialized file names.
+ *
+ * @param jarFile jar file to be parsed
+ * @param directory directory where to search
+ * @return list of serialized files
+ * @throws IOException when fails to do IO operations
+ */
+ public static List<YangNode> parseJarFile(String jarFile, String directory)
+ throws IOException {
+
+ List<YangNode> nodes = new ArrayList<>();
+ JarFile jar = new JarFile(jarFile);
+ Enumeration<?> enumEntries = jar.entries();
+
+ while (enumEntries.hasMoreElements()) {
+ JarEntry file = (JarEntry) enumEntries.nextElement();
+ if (file.getName().endsWith(".ser")) {
+
+ if (file.getName().contains(SLASH)) {
+ String[] strArray = file.getName().split(SLASH);
+ String tempPath = "";
+ for (int i = 0; i < strArray.length - 1; i++) {
+ tempPath = SLASH + tempPath + SLASH + strArray[i];
+ }
+ File dir = new File(directory + tempPath);
+ dir.mkdirs();
+ }
+ File serializedFile = new File(directory + SLASH + file.getName());
+ if (file.isDirectory()) {
+ serializedFile.mkdirs();
+ continue;
+ }
+ InputStream inputStream = jar.getInputStream(file);
+
+ FileOutputStream fileOutputStream = new FileOutputStream(serializedFile);
+ while (inputStream.available() > 0) {
+ fileOutputStream.write(inputStream.read());
+ }
+ fileOutputStream.close();
+ inputStream.close();
+ nodes.addAll(deSerializeDataModel(serializedFile.toString()));
+ }
+ }
+ jar.close();
+ return nodes;
+ }
+
+ /**
+ * Validates the requested data-type resolve type in empty or not.
+ *
+ * @param dataType the data type
+ * @return true, for empty resolved data-type; false otherwise
+ */
+ public static boolean validateEmptyDataType(YangType dataType) {
+ switch (dataType.getDataType()) {
+ case DERIVED:
+ return ((YangDerivedInfo) dataType.getDataTypeExtendedInfo())
+ .getEffectiveBuiltInType().equals(EMPTY);
+
+ case LEAFREF:
+ YangType type = ((YangLeafRef) dataType
+ .getDataTypeExtendedInfo())
+ .getEffectiveDataType();
+ if (type.getDataType() == DERIVED) {
+ return ((YangDerivedInfo) type.getDataTypeExtendedInfo())
+ .getEffectiveBuiltInType().equals(EMPTY);
+ }
+ return ((YangLeafRef) dataType.getDataTypeExtendedInfo())
+ .getEffectiveDataType().getDataType().equals(EMPTY);
+
+ case UNION:
+ return ((YangUnion) dataType.getDataTypeExtendedInfo())
+ .getTypeList().contains(EMPTY);
+ default:
+ return dataType.getDataType().equals(EMPTY);
+ }
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/FractionDigits.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/FractionDigits.java
new file mode 100644
index 0000000..b64c548
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/FractionDigits.java
@@ -0,0 +1,169 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.utils;
+
+import org.onosproject.yang.compiler.datamodel.DefaultLocationInfo;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+
+/**
+ * The "fraction-digits" statement, which is a substatement to the
+ * "type" statement, MUST be present if the type is "decimal64". It
+ * takes as an argument an integer between 1 and 18, inclusively. It
+ * controls the size of the minimum difference between values of a
+ * decimal64 type, by restricting the value space to numbers that are
+ * expressible as "i x 10^-n" where n is the fraction-digits argument.
+ *
+ * +----------------+-----------------------+----------------------+
+ * | fraction-digit | min | max |
+ * +----------------+-----------------------+----------------------+
+ * | 1 | -922337203685477580.8 | 922337203685477580.7 |
+ * | 2 | -92233720368547758.08 | 92233720368547758.07 |
+ * | 3 | -9223372036854775.808 | 9223372036854775.807 |
+ * | 4 | -922337203685477.5808 | 922337203685477.5807 |
+ * | 5 | -92233720368547.75808 | 92233720368547.75807 |
+ * | 6 | -9223372036854.775808 | 9223372036854.775807 |
+ * | 7 | -922337203685.4775808 | 922337203685.4775807 |
+ * | 8 | -92233720368.54775808 | 92233720368.54775807 |
+ * | 9 | -9223372036.854775808 | 9223372036.854775807 |
+ * | 10 | -922337203.6854775808 | 922337203.6854775807 |
+ * | 11 | -92233720.36854775808 | 92233720.36854775807 |
+ * | 12 | -9223372.036854775808 | 9223372.036854775807 |
+ * | 13 | -922337.2036854775808 | 922337.2036854775807 |
+ * | 14 | -92233.72036854775808 | 92233.72036854775807 |
+ * | 15 | -9223.372036854775808 | 9223.372036854775807 |
+ * | 16 | -922.3372036854775808 | 922.3372036854775807 |
+ * | 17 | -92.23372036854775808 | 92.23372036854775807 |
+ * | 18 | -9.223372036854775808 | 9.223372036854775807 |
+ * +----------------+-----------------------+----------------------+
+ */
+
+/**
+ * Represents the decimal64 value range based on fraction-digits.
+ */
+public final class FractionDigits extends DefaultLocationInfo {
+
+ public static class Range {
+ private double min;
+ private double max;
+
+ /**
+ * Creates an instance of range.
+ *
+ * @param min minimum value of decimal64
+ * @param max maximum value of decimal64
+ */
+ protected Range(double min, double max) {
+ this.min = min;
+ this.max = max;
+ }
+
+ /**
+ * Retrieve minimum value range.
+ *
+ * @return minimum value range
+ */
+ public double getMin() {
+ return min;
+ }
+
+ /**
+ * Retrieve maximum value range.
+ *
+ * @return maximum value range
+ */
+ public double getMax() {
+ return max;
+ }
+ }
+
+ private static ArrayList<Range> decimal64ValueRange = null;
+
+ /**
+ * Creates a fraction-digits instance.
+ */
+ private FractionDigits() {
+ }
+
+ /**
+ * Generates decimal64 value range based on fraction-digits.
+ *
+ * @return decimal64 value range by fraction-digits as index
+ */
+ public static ArrayList<Range> getDecimal64ValueRange() {
+ if (decimal64ValueRange == null) {
+ decimal64ValueRange = new ArrayList<>();
+ decimal64ValueRange.add(new Range(-922337203685477580.8, 922337203685477580.7)); // fraction-digit: 1
+ decimal64ValueRange.add(new Range(-92233720368547758.08, 92233720368547758.07)); // fraction-digit: 2
+ decimal64ValueRange.add(new Range(-9223372036854775.808, 9223372036854775.807)); // fraction-digit: 3
+ decimal64ValueRange.add(new Range(-922337203685477.5808, 922337203685477.5807)); // fraction-digit: 4
+ decimal64ValueRange.add(new Range(-92233720368547.75808, 92233720368547.75807)); // fraction-digit: 5
+ decimal64ValueRange.add(new Range(-9223372036854.775808, 9223372036854.775807)); // fraction-digit: 6
+ decimal64ValueRange.add(new Range(-922337203685.4775808, 922337203685.4775807)); // fraction-digit: 7
+ decimal64ValueRange.add(new Range(-92233720368.54775808, 92233720368.54775807)); // fraction-digit: 8
+ decimal64ValueRange.add(new Range(-9223372036.854775808, 9223372036.854775807)); // fraction-digit: 9
+ decimal64ValueRange.add(new Range(-922337203.6854775808, 922337203.6854775807)); // fraction-digit: 10
+ decimal64ValueRange.add(new Range(-92233720.36854775808, 92233720.36854775807)); // fraction-digit: 11
+ decimal64ValueRange.add(new Range(-9223372.036854775808, 9223372.036854775807)); // fraction-digit: 12
+ decimal64ValueRange.add(new Range(-922337.2036854775808, 922337.2036854775807)); // fraction-digit: 13
+ decimal64ValueRange.add(new Range(-92233.72036854775808, 92233.72036854775807)); // fraction-digit: 14
+ decimal64ValueRange.add(new Range(-9223.372036854775808, 9223.372036854775807)); // fraction-digit: 15
+ decimal64ValueRange.add(new Range(-922.3372036854775808, 922.3372036854775807)); // fraction-digit: 16
+ decimal64ValueRange.add(new Range(-92.23372036854775808, 92.23372036854775807)); // fraction-digit: 17
+ decimal64ValueRange.add(new Range(-9.223372036854775808, 9.223372036854775807)); // fraction-digit: 18
+ }
+ return decimal64ValueRange;
+ }
+
+ /**
+ * Retrieve range based on fraction-digits.
+ *
+ * @param fractionDigit fraction-digits
+ * @return range
+ * @throws DataModelException a violation of data model rules
+ */
+ public static Range getRange(int fractionDigit) throws DataModelException {
+ if (!((fractionDigit >= 1) && (fractionDigit <= 18))) {
+ throw new DataModelException("YANG file error : given fraction-digit is not in its range (1..18).");
+ }
+
+ return getDecimal64ValueRange().get(fractionDigit - 1);
+ }
+
+ /**
+ * Checks whether specific decimal64 value is in correct range based fraction-digit.
+ *
+ * @param value decimal64 value
+ * @param fractionDigit fraction-digits
+ * @return true when it is in correct range otherwise false
+ */
+ public static boolean isValueInDecimal64Range(BigDecimal value, int fractionDigit) {
+ // Fraction-digits should be in correct its own range.
+ if (!((fractionDigit >= 1) && (fractionDigit <= 18))) {
+ return false;
+ }
+
+ // ArrayList index starts from 0.
+ FractionDigits.Range range = FractionDigits.getDecimal64ValueRange().get(fractionDigit - 1);
+ if ((value.doubleValue() >= range.getMin()) && (value.doubleValue() <= range.getMax())) {
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/GeneratedLanguage.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/GeneratedLanguage.java
new file mode 100644
index 0000000..ff1253b
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/GeneratedLanguage.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel.utils;
+
+/**
+ * Represents the target language in which the YANG information is modeled.
+ */
+public enum GeneratedLanguage {
+ /**
+ * Target language is java.
+ */
+ JAVA_GENERATION
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/Parsable.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/Parsable.java
new file mode 100644
index 0000000..3ca59ce
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/Parsable.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.utils;
+
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+
+/**
+ * Abstraction of an entity which process the data of lexer's parse tree.
+ */
+public interface Parsable {
+
+ /**
+ * Returns the type of YANG construct data.
+ *
+ * @return the type of YANG construct data.
+ */
+ YangConstructType getYangConstructType();
+
+ /**
+ * Checks if the node is valid as per YANG grammar's syntax and semantics.
+ * This validation will be performed on entering the node in traversal
+ *
+ * @throws DataModelException if there is any violation of the YANG rules
+ * in parsed data, corresponding exception should be thrown
+ */
+ void validateDataOnEntry() throws DataModelException;
+
+ /**
+ * Checks if the node is valid as per YANG grammar's syntax and semantics.
+ * This validation will be performed on exiting the node in traversal
+ *
+ * @throws DataModelException if there is any violation of the YANG rules
+ * in parsed data, corresponding exception should be thrown
+ */
+ void validateDataOnExit() throws DataModelException;
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/ResolvableStatus.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/ResolvableStatus.java
new file mode 100644
index 0000000..f822d0b
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/ResolvableStatus.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.utils;
+
+/**
+ * Represents the status of resolvable entity.
+ */
+public enum ResolvableStatus {
+
+ /**
+ * Identifies that resolvable entity is unresolved.
+ */
+ UNRESOLVED,
+
+ /**
+ * Identifies that resolvable entity's reference is linked.
+ */
+ LINKED,
+
+ /**
+ * Identifies that resolvable entity is IntraFile resolved (i.e. complete
+ * linking with in the intra file).
+ */
+ INTRA_FILE_RESOLVED,
+
+ /**
+ * Identifies that resolvable entity is resolved.
+ */
+ RESOLVED,
+
+ /**
+ * Identifies that resolvable entity is inter file linked (i.e. complete
+ * linking with external files).
+ */
+ INTER_FILE_LINKED,
+
+ /**
+ * Identifies that resolvable entity is referred node is not defined.
+ */
+ UNDEFINED
+
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/RestrictionResolver.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/RestrictionResolver.java
new file mode 100644
index 0000000..bed39cd
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/RestrictionResolver.java
@@ -0,0 +1,203 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.utils;
+
+import org.onosproject.yang.compiler.datamodel.YangRangeInterval;
+import org.onosproject.yang.compiler.datamodel.YangRangeRestriction;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangBuiltInDataTypeInfo;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+
+import static java.util.regex.Pattern.quote;
+import static org.onosproject.yang.compiler.datamodel.BuiltInTypeObjectFactory.getDataObjectFromString;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.LENGTH_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.RANGE_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.getYangConstructType;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.UINT64;
+
+/**
+ * Represents restriction resolver which provide common utility used by parser
+ * and during linking for restriction resolution.
+ */
+public final class RestrictionResolver {
+
+ private static final String PIPE = "|";
+ private static final String ADD = "+";
+ private static final String EMPTY_STRING = "";
+ private static final String INTERVAL = "..";
+ private static final int MAX_RANGE_BOUNDARY = 2;
+ private static final int MIN_RANGE_BOUNDARY = 1;
+ private static final String MIN_KEYWORD = "min";
+ private static final String MAX_KEYWORD = "max";
+ private static final String SPACE = " ";
+ private static final String QUOTE = "\"";
+
+ /**
+ * Creates a restriction resolver.
+ */
+ private RestrictionResolver() {
+ }
+
+ /**
+ * Processes the range restriction for parser and linker.
+ *
+ * @param refRr range restriction of referred typedef
+ * @param line error line number
+ * @param position error character position in line
+ * @param hasRefR whether has referred restriction
+ * @param curRange caller type's range string
+ * @param type effective type, when called from linker
+ * @param fileName file name
+ * @return YANG range restriction
+ * @throws DataModelException a violation in data model rule
+ */
+ public static YangRangeRestriction processRangeRestriction(
+ YangRangeRestriction refRr, int line, int position,
+ boolean hasRefR, String curRange, YangDataTypes type, String fileName)
+ throws DataModelException {
+ return getRestriction(refRr, line, position, hasRefR, curRange, fileName,
+ type, RANGE_DATA);
+ }
+
+ /**
+ * Processes the length restriction for parser and linker.
+ *
+ * @param refLr length restriction of referred typedef
+ * @param line error line number
+ * @param position error character position in line
+ * @param hasRefR whether has referred restriction
+ * @param curLenStr caller type's length string
+ * @param fileName file name
+ * @return YANG range restriction
+ * @throws DataModelException a violation in data model rule
+ */
+ public static YangRangeRestriction processLengthRestriction(
+ YangRangeRestriction refLr, int line, int position, boolean hasRefR,
+ String curLenStr, String fileName) throws DataModelException {
+ return getRestriction(refLr, line, position, hasRefR, curLenStr, fileName,
+ UINT64, LENGTH_DATA);
+ }
+
+ /**
+ * Processes the range/length restriction for parser and linker.
+ *
+ * @param refR range/length restriction of referred typedef
+ * @param line error line number
+ * @param position error character position in line
+ * @param hasRefR whether has referred restriction
+ * @param curRange caller type's range string
+ * @param type effective type, when called from linker
+ * @param fileName file name
+ * @param conType construct type
+ * @return YANG range restriction
+ * @throws DataModelException a violation in data model rule
+ */
+ private static YangRangeRestriction getRestriction(
+ YangRangeRestriction refR, int line, int position, boolean hasRefR,
+ String curRange, String fileName, YangDataTypes type,
+ YangConstructType conType) throws
+ DataModelException {
+ YangBuiltInDataTypeInfo<?> startValue;
+ YangBuiltInDataTypeInfo<?> endValue;
+ YangRangeRestriction rr = new YangRangeRestriction();
+
+ String rangeArg = removeQuotesAndHandleConcat(curRange);
+ String[] rangeArguments = rangeArg.trim().split(quote(PIPE));
+
+ for (String rangePart : rangeArguments) {
+ String startInterval;
+ String endInterval;
+ YangRangeInterval rangeInterval = new YangRangeInterval();
+ rangeInterval.setCharPosition(position);
+ rangeInterval.setLineNumber(line);
+ rangeInterval.setFileName(fileName);
+ String[] rangeBoundary = rangePart.trim().split(quote(INTERVAL));
+
+ if (rangeBoundary.length > MAX_RANGE_BOUNDARY) {
+ DataModelException ex = new DataModelException(
+ "YANG file error : " + getYangConstructType(conType) +
+ SPACE + rangeArg + " is not valid.");
+ ex.setLine(line);
+ ex.setCharPosition(position);
+ ex.setFileName(fileName);
+ throw ex;
+ }
+
+ if (rangeBoundary.length == MIN_RANGE_BOUNDARY) {
+ startInterval = rangeBoundary[0].trim();
+ endInterval = rangeBoundary[0].trim();
+ } else {
+ startInterval = rangeBoundary[0].trim();
+ endInterval = rangeBoundary[1].trim();
+ }
+
+ try {
+ if (hasRefR && startInterval.equals(MIN_KEYWORD) &&
+ refR.getMinRestrictedValue() != null) {
+ startValue = refR.getMinRestrictedValue();
+ } else if (hasRefR && startInterval.equals(MAX_KEYWORD) &&
+ refR.getMaxRestrictedValue() != null) {
+ startValue = refR.getMaxRestrictedValue();
+ } else {
+ startValue = getDataObjectFromString(startInterval, type);
+ }
+ if (hasRefR && endInterval.equals(MIN_KEYWORD) &&
+ refR.getMinRestrictedValue() != null) {
+ endValue = refR.getMinRestrictedValue();
+ } else if (hasRefR && endInterval.equals(MAX_KEYWORD) &&
+ refR.getMaxRestrictedValue() != null) {
+ endValue = refR.getMaxRestrictedValue();
+ } else {
+ endValue = getDataObjectFromString(endInterval, type);
+ }
+ } catch (Exception e) {
+ DataModelException ex = new DataModelException(e.getMessage());
+ ex.setLine(line);
+ ex.setCharPosition(position);
+ ex.setFileName(fileName);
+ throw ex;
+ }
+ rangeInterval.setStartValue(startValue);
+ rangeInterval.setEndValue(endValue);
+ try {
+ rr.addRangeRestrictionInterval(rangeInterval);
+ } catch (DataModelException ex) {
+ ex.setLine(line);
+ ex.setCharPosition(position);
+ ex.setFileName(fileName);
+ throw ex;
+ }
+ }
+ return rr;
+ }
+
+ /**
+ * Removes doubles quotes and concatenates if string has plus symbol.
+ *
+ * @param yangStringData string from yang file
+ * @return concatenated string after removing double quotes
+ */
+ private static String removeQuotesAndHandleConcat(String yangStringData) {
+ yangStringData = yangStringData.replace(QUOTE, EMPTY_STRING);
+ String[] tmpData = yangStringData.split(quote(ADD));
+ StringBuilder builder = new StringBuilder();
+ for (String yangString : tmpData) {
+ builder.append(yangString);
+ }
+ return builder.toString();
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/YangConstructType.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/YangConstructType.java
new file mode 100644
index 0000000..9c9aedf
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/YangConstructType.java
@@ -0,0 +1,574 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel.utils;
+
+/**
+ * Represents ENUM to represent the type of data in parse tree.
+ */
+public enum YangConstructType {
+ /**
+ * Identifies the module parsed data.
+ */
+ MODULE_DATA,
+
+ /**
+ * Identifies the sub module parsed data.
+ */
+ SUB_MODULE_DATA,
+
+ /**
+ * Identifies the typedef parsed data.
+ */
+ TYPEDEF_DATA,
+
+ /**
+ * Identifies the type parsed data.
+ */
+ TYPE_DATA,
+
+ /**
+ * Identifies the choice parsed data.
+ */
+ CHOICE_DATA,
+
+ /**
+ * Identifies the case parsed data.
+ */
+ CASE_DATA,
+
+ /**
+ * Identifies the YANG enumeration parsed data.
+ */
+ ENUMERATION_DATA,
+
+ /**
+ * Identifies the grouping parsed data.
+ */
+ GROUPING_DATA,
+
+ /**
+ * Identifies the uses parsed data.
+ */
+ USES_DATA,
+
+ /**
+ * Identifies the augment parsed data.
+ */
+ AUGMENT_DATA,
+
+ /**
+ * Identifies the container parsed data.
+ */
+ CONTAINER_DATA,
+
+ /**
+ * Identifies the YANG list parsed data.
+ */
+ LIST_DATA,
+
+ /**
+ * Identifies the YANG belongs-to parsed data.
+ */
+ BELONGS_TO_DATA,
+
+ /**
+ * Identifies the YANG bit parsed data.
+ */
+ BIT_DATA,
+
+ /**
+ * Identifies the YANG bits parsed data.
+ */
+ BITS_DATA,
+
+ /**
+ * Identifies the YANG decimal64 parsed data.
+ */
+ DECIMAL64_DATA,
+
+ /**
+ * Identifies the YANG fraction-digits parsed data.
+ */
+ FRACTION_DIGITS_DATA,
+
+ /**
+ * Identifies the YANG enum parsed data.
+ */
+ ENUM_DATA,
+
+ /**
+ * Identifies the YANG import parsed data.
+ */
+ IMPORT_DATA,
+
+ /**
+ * Identifies the YANG include parsed data.
+ */
+ INCLUDE_DATA,
+
+ /**
+ * Identifies the YANG leaf parsed data.
+ */
+ LEAF_DATA,
+
+ /**
+ * Identifies the YANG leaf list parsed data.
+ */
+ LEAF_LIST_DATA,
+
+ /**
+ * Identifies the YANG must parsed data.
+ */
+ MUST_DATA,
+
+ /**
+ * Identifies the YANG revision parsed data.
+ */
+ REVISION_DATA,
+
+ /**
+ * Identifies the YANG revision date parsed data.
+ */
+ REVISION_DATE_DATA,
+
+ /**
+ * Identifies the YANG namespace parsed data.
+ */
+ NAMESPACE_DATA,
+
+ /**
+ * Identifies the YANG contact parsed data.
+ */
+ CONTACT_DATA,
+
+ /**
+ * Identifies the YANG config parsed data.
+ */
+ CONFIG_DATA,
+
+ /**
+ * Identifies the YANG description parsed data.
+ */
+ DESCRIPTION_DATA,
+
+ /**
+ * Identifies the YANG key parsed data.
+ */
+ KEY_DATA,
+
+ /**
+ * Identifies the YANG mandatory parsed data.
+ */
+ MANDATORY_DATA,
+
+ /**
+ * Identifies the YANG max element parsed data.
+ */
+ MAX_ELEMENT_DATA,
+
+ /**
+ * Identifies the YANG min element parsed data.
+ */
+ MIN_ELEMENT_DATA,
+
+ /**
+ * Identifies the YANG presence element parsed data.
+ */
+ PRESENCE_DATA,
+
+ /**
+ * Identifies the YANG reference element parsed data.
+ */
+ REFERENCE_DATA,
+
+ /**
+ * Identifies the YANG status element parsed data.
+ */
+ STATUS_DATA,
+
+ /**
+ * Identifies the YANG units element parsed data.
+ */
+ UNITS_DATA,
+
+ /**
+ * Identifies the YANG version element parsed data.
+ */
+ VERSION_DATA,
+
+ /**
+ * Identifies the YANG base element parsed data.
+ */
+ YANGBASE_DATA,
+
+ /**
+ * Identifies the YANG prefix element parsed data.
+ */
+ PREFIX_DATA,
+
+ /**
+ * Identifies the YANG default element parsed data.
+ */
+ DEFAULT_DATA,
+
+ /**
+ * Identifies the YANG value element parsed data.
+ */
+ VALUE_DATA,
+
+ /**
+ * Identifies the YANG organization parsed data.
+ */
+ ORGANIZATION_DATA,
+
+ /**
+ * Identifies the YANG position element parsed data.
+ */
+ POSITION_DATA,
+
+ /**
+ * Identifies the YANG data definition statements.
+ */
+ DATA_DEF_DATA,
+
+ /**
+ * Identifies the YANG union element parsed data.
+ */
+ UNION_DATA,
+
+ /**
+ * Identifies the YANG notification element parsed data.
+ */
+ NOTIFICATION_DATA,
+
+ /**
+ * Identifies the YANG when element parsed data.
+ */
+ WHEN_DATA,
+
+ /**
+ * Identifies the YANG input element parsed data.
+ */
+ INPUT_DATA,
+
+ /**
+ * Identifies the YANG output element parsed data.
+ */
+ OUTPUT_DATA,
+
+ /**
+ * Identifies the YANG rpc element parsed data.
+ */
+ RPC_DATA,
+
+ /**
+ * Identifies the YANG short case element parsed data.
+ */
+ SHORT_CASE_DATA,
+
+ /**
+ * Identifies the derived data type.
+ */
+ DERIVED,
+
+ /**
+ * Identifies the YANG range element parsed data.
+ */
+ RANGE_DATA,
+
+ /**
+ * Identifies the YANG length element parsed data.
+ */
+ LENGTH_DATA,
+
+ /**
+ * Identifies the YANG pattern element parsed data.
+ */
+ PATTERN_DATA,
+
+ /**
+ * Identifies the YANG extension element parsed data.
+ */
+ EXTENSION_DATA,
+
+ /**
+ * Identifies the YANG identity element parsed data.
+ */
+ IDENTITY_DATA,
+
+ /**
+ * Identifies the YANG base element parsed data.
+ */
+ BASE_DATA,
+
+ /**
+ * Identifies the YANG feature element parsed data.
+ */
+ FEATURE_DATA,
+
+ /**
+ * Identifies the YANG if-feature element parsed data.
+ */
+ IF_FEATURE_DATA,
+
+ /**
+ * Identifies the YANG path element parsed data.
+ */
+ PATH_DATA,
+
+ /**
+ * Identifies the YANG require-instance element parsed data.
+ */
+ REQUIRE_INSTANCE_DATA,
+
+ /**
+ * Identifies the YANG ordered-by element parsed data.
+ */
+ ORDERED_BY_DATA,
+
+ /**
+ * Identifies the YANG error-message element parsed data.
+ */
+ ERROR_MESSAGE_DATA,
+
+ /**
+ * Identifies the YANG error-app-tag element parsed data.
+ */
+ ERROR_APP_TAG_DATA,
+
+ /**
+ * Identifies the YANG unique element parsed data.
+ */
+ UNIQUE_DATA,
+
+ /**
+ * Identifies the YANG refine element parsed data.
+ */
+ REFINE_DATA,
+
+ /**
+ * Identifies the YANG leafref element parsed data.
+ */
+ LEAFREF_DATA,
+
+ /**
+ * Identifies the YANG identityref element parsed data.
+ */
+ IDENTITYREF_DATA,
+
+ /**
+ * Identifies the YANG instance identifier element parsed data.
+ */
+ INSTANCE_IDENTIFIER_DATA,
+
+ /**
+ * Identifies the YANG deviation element parsed data.
+ */
+ DEVIATION_DATA,
+
+ /**
+ * Identifies the YANG anyxml element parsed data.
+ */
+ ANYXML_DATA,
+
+ /**
+ * Identifies the YANG compiler annotation element parsed data.
+ */
+ COMPILER_ANNOTATION_DATA,
+
+ /**
+ * Identifies the YANG app data structure element parsed data.
+ */
+ APP_DATA_STRUCTURE,
+
+ /**
+ * Identifies the YANG app extended element parsed data.
+ */
+ APP_EXTENDED_NAME_DATA,
+
+ /**
+ * Identifies the YANG argument element parsed data.
+ */
+ ARGUMENT_DATA;
+
+ /**
+ * Returns the YANG construct keyword corresponding to enum values.
+ *
+ * @param yangConstructType enum value for parsable data type.
+ * @return YANG construct keyword.
+ */
+ public static String getYangConstructType(YangConstructType yangConstructType) {
+
+ switch (yangConstructType) {
+ case MODULE_DATA:
+ return "module";
+ case SUB_MODULE_DATA:
+ return "submodule";
+ case TYPEDEF_DATA:
+ return "typedef";
+ case TYPE_DATA:
+ return "type";
+ case CHOICE_DATA:
+ return "choice";
+ case CASE_DATA:
+ return "case";
+ case ENUMERATION_DATA:
+ return "enumeration";
+ case GROUPING_DATA:
+ return "grouping";
+ case USES_DATA:
+ return "uses";
+ case AUGMENT_DATA:
+ return "augment";
+ case CONTAINER_DATA:
+ return "container";
+ case LIST_DATA:
+ return "list";
+ case BELONGS_TO_DATA:
+ return "belongs-to";
+ case BIT_DATA:
+ return "bit";
+ case BITS_DATA:
+ return "bits";
+ case DECIMAL64_DATA:
+ return "decimal64";
+ case FRACTION_DIGITS_DATA:
+ return "fraction-digits";
+ case ENUM_DATA:
+ return "enum";
+ case IMPORT_DATA:
+ return "import";
+ case INCLUDE_DATA:
+ return "include";
+ case LEAF_DATA:
+ return "leaf";
+ case LEAF_LIST_DATA:
+ return "leaf-list";
+ case MUST_DATA:
+ return "must";
+ case REVISION_DATA:
+ return "revision";
+ case REVISION_DATE_DATA:
+ return "revision-date";
+ case NAMESPACE_DATA:
+ return "namespace";
+ case CONTACT_DATA:
+ return "contact";
+ case CONFIG_DATA:
+ return "config";
+ case DESCRIPTION_DATA:
+ return "description";
+ case KEY_DATA:
+ return "key";
+ case MANDATORY_DATA:
+ return "mandatory";
+ case MAX_ELEMENT_DATA:
+ return "max-elements";
+ case MIN_ELEMENT_DATA:
+ return "min-elements";
+ case PRESENCE_DATA:
+ return "presence";
+ case REFERENCE_DATA:
+ return "reference";
+ case STATUS_DATA:
+ return "status";
+ case UNITS_DATA:
+ return "units";
+ case VERSION_DATA:
+ return "version";
+ case YANGBASE_DATA:
+ return "yangbase";
+ case PREFIX_DATA:
+ return "prefix";
+ case ORGANIZATION_DATA:
+ return "organization";
+ case VALUE_DATA:
+ return "value";
+ case POSITION_DATA:
+ return "position";
+ case DEFAULT_DATA:
+ return "default";
+ case DATA_DEF_DATA:
+ return "data-def-substatements";
+ case WHEN_DATA:
+ return "when";
+ case INPUT_DATA:
+ return "input";
+ case OUTPUT_DATA:
+ return "ouput";
+ case RPC_DATA:
+ return "rpc";
+ case SHORT_CASE_DATA:
+ return "short-case";
+ case DERIVED:
+ return "derived";
+ case NOTIFICATION_DATA:
+ return "notification";
+ case UNION_DATA:
+ return "union";
+ case RANGE_DATA:
+ return "range";
+ case LENGTH_DATA:
+ return "length";
+ case PATTERN_DATA:
+ return "pattern";
+ case EXTENSION_DATA:
+ return "extension";
+ case IDENTITY_DATA:
+ return "identity";
+ case BASE_DATA:
+ return "base";
+ case FEATURE_DATA:
+ return "feature";
+ case IF_FEATURE_DATA:
+ return "if-feature";
+ case PATH_DATA:
+ return "path";
+ case REQUIRE_INSTANCE_DATA:
+ return "require-instance";
+ case ORDERED_BY_DATA:
+ return "ordered-by";
+ case ERROR_MESSAGE_DATA:
+ return "error-message";
+ case ERROR_APP_TAG_DATA:
+ return "error-app-tag";
+ case UNIQUE_DATA:
+ return "unique";
+ case REFINE_DATA:
+ return "refine";
+ case LEAFREF_DATA:
+ return "leafref";
+ case IDENTITYREF_DATA:
+ return "identityref";
+ case INSTANCE_IDENTIFIER_DATA:
+ return "instance-identifier";
+ case DEVIATION_DATA:
+ return "deviation";
+ case ANYXML_DATA:
+ return "anyxml";
+ case COMPILER_ANNOTATION_DATA:
+ return "compiler-annotation";
+ case APP_DATA_STRUCTURE:
+ return "app-data-structure";
+ case APP_EXTENDED_NAME_DATA:
+ return "app-extended-name";
+ case ARGUMENT_DATA:
+ return "argument";
+ default:
+ return "yang";
+ }
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/YangErrMsgConstants.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/YangErrMsgConstants.java
new file mode 100644
index 0000000..48f0bb8
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/YangErrMsgConstants.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.utils;
+
+/**
+ * Represents default YANG error message types.
+ */
+public final class YangErrMsgConstants {
+
+ /**
+ * Static attribute for operation failed error tag.
+ */
+ public static final String OPERATION_FAILED_ERROR_TAG = "operation-failed";
+
+ /**
+ * Static attribute for data missing error tag.
+ */
+ public static final String DATA_MISSING_ERROR_TAG = "data-missing";
+
+ /**
+ * Static attribute for bad attribute error tag.
+ */
+ public static final String BAD_ATTRIBUTE_ERROR_TAG = "bad-attribute";
+
+ /**
+ * Static attribute for data not unique error app tag.
+ */
+ public static final String DATA_NOT_UNIQUE_ERROR_APP_TAG = "data-not-unique";
+
+ /**
+ * Static attribute for too many elements error app tag.
+ */
+ public static final String TOO_MANY_ELEMENTS_ERROR_APP_TAG = "too-many-elements";
+
+ /**
+ * Static attribute for too few elements error app tag.
+ */
+ public static final String TOO_FEW_ELEMENTS_ERROR_APP_TAG = "too-few-elements";
+
+ /**
+ * Static attribute for must violation error app tag.
+ */
+ public static final String MUST_VIOLATION_ERROR_APP_TAG = "must-violation";
+
+ /**
+ * Static attribute for instance required error app tag.
+ */
+ public static final String INSTANCE_REQUIRED_ERROR_APP_TAG = "instance-required";
+
+ /**
+ * Static attribute for missing choice error app tag.
+ */
+ public static final String MISSING_CHOICE_ERROR_APP_TAG = "missing-choice";
+
+ /**
+ * Static attribute for missing instance error app tag.
+ */
+ public static final String MISSING_INSTANCE_ERROR_APP_TAG = "missing-instance";
+
+ /**
+ * TODO: Static attribute for error path to the instance-identifier leaf.
+ */
+ public static final String ERROR_PATH_INSTANCE_IDENTIFIER_LEAF = "Path to the instance-identifier leaf.";
+
+ /**
+ * Static attribute for error path to the missing choice.
+ */
+ public static final String ERROR_PATH_MISSING_CHOICE = "Path to the element with the missing choice.";
+
+ /**
+ * Static attribute for error path to the leafref leaf.
+ */
+ public static final String ERROR_PATH_LEAFREF_LEAF = "Path to the leafref leaf.";
+
+ /**
+ * Creates an instance of yang error message constants.
+ */
+ private YangErrMsgConstants() {
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/DataTypeException.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/DataTypeException.java
new file mode 100644
index 0000000..115f611
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/DataTypeException.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.utils.builtindatatype;
+
+/**
+ * Base class for exceptions in data type.
+ */
+public class DataTypeException extends RuntimeException {
+
+ private static final long serialVersionUID = 20160211L;
+
+ /**
+ * Create a new data type exception.
+ */
+ public DataTypeException() {
+ super();
+ }
+
+ /**
+ * Creates a new data type exception with given message.
+ *
+ * @param message the detail of exception in string
+ */
+ public DataTypeException(String message) {
+ super(message);
+ }
+
+ /**
+ * Creates a new data type exception from given message and cause.
+ *
+ * @param message the detail of exception in string
+ * @param cause underlying cause of the error
+ */
+ public DataTypeException(final String message, final Throwable cause) {
+ super(message, cause);
+ }
+
+ /**
+ * Creates a new data type exception from cause.
+ *
+ * @param cause underlying cause of the error
+ */
+ public DataTypeException(final Throwable cause) {
+ super(cause);
+ }
+
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/YangBuiltInDataTypeInfo.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/YangBuiltInDataTypeInfo.java
new file mode 100644
index 0000000..56b7a01
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/YangBuiltInDataTypeInfo.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.datamodel.utils.builtindatatype;
+
+/**
+ * Represents the list of utility functions to be supported by YANG built in
+ * data type implementations.
+ *
+ * @param <T> The target data type
+ */
+public interface YangBuiltInDataTypeInfo<T> extends Comparable<T> {
+
+ /**
+ * Returns the YANG built in type.
+ *
+ * @return the YANG built in type
+ */
+ YangDataTypes getYangType();
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/YangDataTypeUtils.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/YangDataTypeUtils.java
new file mode 100644
index 0000000..75fb807
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/YangDataTypeUtils.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.utils.builtindatatype;
+
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.INT16;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.INT32;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.INT64;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.INT8;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.UINT16;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.UINT32;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.UINT64;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.UINT8;
+
+/**
+ * Represents YANG data type utilities.
+ */
+public final class YangDataTypeUtils {
+
+ /**
+ * Restricts creation of YANG data type utils instance.
+ */
+ private YangDataTypeUtils() {
+ }
+
+ /**
+ * Returns whether the data type is of range restricted type.
+ *
+ * @param dataType data type to be checked
+ * @return true, if data type can have range restrictions, false otherwise
+ */
+ public static boolean isOfRangeRestrictedType(YangDataTypes dataType) {
+ return dataType == INT8
+ || dataType == INT16
+ || dataType == INT32
+ || dataType == INT64
+ || dataType == UINT8
+ || dataType == UINT16
+ || dataType == UINT32
+ || dataType == UINT64;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/YangDataTypes.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/YangDataTypes.java
new file mode 100644
index 0000000..8221627
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/YangDataTypes.java
@@ -0,0 +1,285 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.utils.builtindatatype;
+
+/**
+ * Represents ENUM to identify the YANG data type.
+ */
+public enum YangDataTypes {
+ /**
+ * Reference:RFC 6020.
+ * <p>
+ * int8 represents integer values between -128 and 127, inclusively.
+ */
+ INT8("int8"),
+
+ /**
+ * Reference:RFC 6020.
+ * <p>
+ * int16 represents integer values between -32768 and 32767, inclusively.
+ */
+ INT16("int16"),
+
+ /**
+ * Reference:RFC 6020.
+ * <p>
+ * int32 represents integer values between -2147483648 and 2147483647,
+ * inclusively.
+ */
+ INT32("int32"),
+
+ /**
+ * Reference:RFC 6020.
+ * <p>
+ * int64 represents integer values between -9223372036854775808 and
+ * 9223372036854775807, inclusively.
+ */
+ INT64("int64"),
+
+ /**
+ * Reference:RFC 6020.
+ * <p>
+ * uint8 represents integer values between 0 and 255, inclusively.
+ */
+ UINT8("uint8"),
+
+ /**
+ * Reference:RFC 6020.
+ * <p>
+ * uint16 represents integer values between 0 and 65535, inclusively.
+ */
+ UINT16("uint16"),
+
+ /**
+ * Reference:RFC 6020.
+ * <p>
+ * uint32 represents integer values between 0 and 4294967295, inclusively.
+ */
+ UINT32("uint32"),
+
+ /**
+ * Reference:RFC 6020.
+ * <p>
+ * uint64 represents integer values between 0 and 18446744073709551615,
+ * inclusively.
+ */
+ UINT64("uint64"),
+
+ /**
+ * Reference:RFC 6020.
+ * <p>
+ * The decimal64 type represents a subset of the real numbers, which can be
+ * represented by decimal numerals. The value space of decimal64 is the set
+ * of numbers that can be obtained by multiplying a 64-bit signed integer by
+ * a negative power of ten, i.e., expressible as "i x 10^-n" where i is an
+ * integer64 and n is an integer between 1 and 18, inclusively.
+ */
+ DECIMAL64("decimal64"), // TODO: need to implement in type.
+
+ /**
+ * Reference:RFC 6020.
+ * <p>
+ * The string built-in type represents human-readable strings in YANG. Legal
+ * characters are tab, carriage return, line feed, and the legal characters
+ * of Unicode and ISO/IEC 10646
+ */
+ STRING("string"),
+
+ /**
+ * Reference:RFC 6020.
+ * <p>
+ * The boolean built-in type represents a boolean value.
+ */
+ BOOLEAN("boolean"),
+
+ /**
+ * Reference:RFC 6020.
+ * <p>
+ * The enumeration built-in type represents values from a set of assigned
+ * names.
+ */
+ ENUMERATION("enumeration"),
+
+ /**
+ * Reference:RFC 6020.
+ * <p>
+ * The bits built-in type represents a bit set. That is, a bits value is a
+ * set of flags identified by small integer position numbers starting at 0.
+ * Each bit number has an assigned name.
+ */
+ BITS("bits"),
+
+ /**
+ * Reference:RFC 6020.
+ * <p>
+ * The binary built-in type represents any binary data, i.e., a sequence of
+ * octets.
+ */
+ BINARY("binary"),
+
+ /**
+ * Reference:RFC 6020.
+ * <p>
+ * The leafref type is used to reference a particular leaf instance in the
+ * data tree. The "path" sub-statement (Section 9.9.2) selects a set of leaf
+ * instances, and the leafref value space is the set of values of these leaf
+ * instances.
+ * <p>
+ * If the leaf with the leafref type represents configuration data, the leaf
+ * it refers to MUST also represent configuration. Such a leaf puts a
+ * constraint on valid data. All leafref nodes MUST reference existing leaf
+ * instances or leafs with default values in use for the data to be valid.
+ * <p>
+ * There MUST NOT be any circular chains of leafrefs.
+ * <p>
+ * If the leaf that the leafref refers to is conditional based on one or
+ * more features, then the leaf with the leafref type MUST also be
+ * conditional based on at least the same set of features.
+ */
+ LEAFREF("leafref"),
+
+ /**
+ * Reference:RFC 6020.
+ * <p>
+ * The identityref type is used to reference an existing identity.
+ */
+ IDENTITYREF("identityref"),
+
+ /**
+ * Reference:RFC 6020.
+ * <p>
+ * The empty built-in type represents a leaf that does not have any value,
+ * it conveys information by its presence or absence.
+ * <p>
+ * An empty type cannot have a default value.
+ */
+ EMPTY("empty"),
+
+ /**
+ * Reference:RFC 6020.
+ * <p>
+ * The union built-in type represents a value that corresponds to one of its
+ * member types.
+ * <p>
+ * When the type is "union", the "type" statement MUST be present. It is
+ * used to repeatedly specify each member type of the union. It takes as an
+ * argument a string that is the name of a member type.
+ * <p>
+ * A member type can be of any built-in or derived type, except it MUST NOT
+ * be one of the built-in types "empty" or "leafref".
+ * <p>
+ * When a string representing a union data type is validated, the string is
+ * validated against each member type, in the order they are specified in
+ * the "type" statement, until a match is found.
+ * <p>
+ * Any default value or "units" property defined in the member types is not
+ * inherited by the union type.
+ */
+ UNION("union"),
+
+ /**
+ * Reference:RFC 6020.
+ * <p>
+ * The instance-identifier built-in type is used to uniquely identify a
+ * particular instance node in the data tree.
+ * <p>
+ * The syntax for an instance-identifier is a subset of the XPath
+ * abbreviated syntax, formally defined by the rule "instance-identifier".
+ * It is used to uniquely identify a node in the data tree. Predicates are
+ * used only for specifying the values for the key nodes for list entries, a
+ * value of a leaf-list entry, or a positional index for a list without
+ * keys. For identifying list entries with keys, each predicate consists of
+ * one equality test per key, and each key MUST have a corresponding
+ * predicate.
+ * <p>
+ * If the leaf with the instance-identifier type represents configuration
+ * data, and the "require-instance" property is "true", the node it refers
+ * to MUST also represent configuration. Such a leaf puts a constraint on
+ * valid data. All such leaf nodes MUST reference existing nodes or leaf
+ * nodes with their default value in use for the data to be valid.
+ */
+ INSTANCE_IDENTIFIER("instance-identifier"),
+
+ /**
+ * Derived data type.
+ */
+ DERIVED("derived");
+
+ /**
+ * Defined type from the enum value.
+ */
+ private final String definedType;
+
+ /**
+ * Constructs type value from enum.
+ *
+ * @param definedType value of enum
+ */
+ YangDataTypes(String definedType) {
+ this.definedType = definedType;
+ }
+
+ /**
+ * Returns YANG data type for corresponding type name.
+ *
+ * @param name type name from YANG file.
+ * @return YANG data type for corresponding type name.
+ */
+ public static YangDataTypes getType(String name) {
+ name = name.replace("\"", "");
+ for (YangDataTypes yangDataType : values()) {
+ if (yangDataType.definedType.toLowerCase().equals(name)) {
+ return yangDataType;
+ }
+ }
+ return YangDataTypes.DERIVED;
+ }
+
+ /**
+ * Returns whether the data type is of primitive data type.
+ *
+ * @return true, if data type can have primitive data type, false otherwise
+ */
+ public boolean isPrimitiveDataType() {
+ return this == INT8 ||
+ this == INT16 ||
+ this == INT32 ||
+ this == INT64 ||
+ this == UINT8 ||
+ this == UINT16 ||
+ this == UINT32 ||
+ this == UINT64 ||
+ this == DECIMAL64 ||
+ this == BOOLEAN ||
+ this == EMPTY;
+ }
+
+ /**
+ * Returns whether the data type is of non restricted type.
+ *
+ * @return true, if data type can't be restricted, false otherwise
+ */
+ public boolean isNonRestrictedType() {
+ return this == BOOLEAN ||
+ this == ENUMERATION ||
+ this == BITS ||
+ this == EMPTY ||
+ this == UNION ||
+ this == IDENTITYREF ||
+ this == LEAFREF;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/YangInt16.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/YangInt16.java
new file mode 100644
index 0000000..679196f
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/YangInt16.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.utils.builtindatatype;
+
+import org.onosproject.yang.compiler.datamodel.DefaultLocationInfo;
+
+import java.io.Serializable;
+
+import static java.lang.Short.compare;
+import static java.lang.Short.parseShort;
+
+/**
+ * Handles the YANG's int16 data type processing.
+ *
+ * int16 represents integer values between -32768 and 32767, inclusively.
+ */
+public class YangInt16 extends DefaultLocationInfo
+ implements YangBuiltInDataTypeInfo<YangInt16>, Serializable {
+
+ private static final long serialVersionUID = 8006201667L;
+
+ /**
+ * YANG's min keyword.
+ */
+ private static final String MIN_KEYWORD = "min";
+
+ /**
+ * YANG's max keyword.
+ */
+ private static final String MAX_KEYWORD = "max";
+
+ /**
+ * Valid minimum value of YANG's int16.
+ */
+ public static final short MIN_VALUE = -32768;
+
+ /**
+ * Valid maximum value of YANG's int16.
+ */
+ public static final short MAX_VALUE = 32767;
+
+ /**
+ * The value of YANG's int16.
+ */
+ private final short value;
+
+ /**
+ * Creates an object with the value initialized with value represented in
+ * string.
+ *
+ * @param valueInString value of the object in string
+ */
+ public YangInt16(String valueInString) {
+
+ if (valueInString.matches(MIN_KEYWORD)) {
+ value = MIN_VALUE;
+ } else if (valueInString.matches(MAX_KEYWORD)) {
+ value = MAX_VALUE;
+ } else {
+ try {
+ value = parseShort(valueInString);
+ } catch (Exception e) {
+ throw new DataTypeException("YANG file error : Input value \"" + valueInString + "\" is not a valid " +
+ "int16.");
+ }
+ }
+ }
+
+ /**
+ * Returns YANG's int16 value.
+ *
+ * @return value of YANG's int16
+ */
+ public short getValue() {
+ return value;
+ }
+
+ @Override
+ public int compareTo(YangInt16 anotherYangInt16) {
+ return compare(value, anotherYangInt16.value);
+ }
+
+ @Override
+ public YangDataTypes getYangType() {
+ return YangDataTypes.INT16;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/YangInt32.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/YangInt32.java
new file mode 100644
index 0000000..6beac4c
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/YangInt32.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.utils.builtindatatype;
+
+import org.onosproject.yang.compiler.datamodel.DefaultLocationInfo;
+
+import java.io.Serializable;
+
+import static java.lang.Integer.compare;
+import static java.lang.Integer.parseInt;
+
+/**
+ * Handles the YANG's int32 data type processing.
+ *
+ * int32 represents integer values between -2147483648 and 2147483647, inclusively.
+ */
+public class YangInt32 extends DefaultLocationInfo
+ implements YangBuiltInDataTypeInfo<YangInt32>, Serializable {
+
+ private static final long serialVersionUID = 8006201666L;
+
+ /**
+ * YANG's min keyword.
+ */
+ private static final String MIN_KEYWORD = "min";
+
+ /**
+ * YANG's max keyword.
+ */
+ private static final String MAX_KEYWORD = "max";
+
+ /**
+ * Valid minimum value of YANG's int32.
+ */
+ public static final int MIN_VALUE = -2147483648;
+
+ /**
+ * Valid maximum value of YANG's int32.
+ */
+ public static final int MAX_VALUE = 2147483647;
+
+ /**
+ * The value of YANG's int32.
+ */
+ private final int value;
+
+ /**
+ * Creates an object with the value initialized with value represented in
+ * string.
+ *
+ * @param valueInString value of the object in string
+ */
+ public YangInt32(String valueInString) {
+
+ if (valueInString.matches(MIN_KEYWORD)) {
+ value = MIN_VALUE;
+ } else if (valueInString.matches(MAX_KEYWORD)) {
+ value = MAX_VALUE;
+ } else {
+ try {
+ value = parseInt(valueInString);
+ } catch (Exception e) {
+ throw new DataTypeException("YANG file error : Input value \"" + valueInString + "\" is not a valid " +
+ "int32.");
+ }
+ }
+ }
+
+ /**
+ * Returns YANG's int32 value.
+ *
+ * @return value of YANG's int32
+ */
+ public int getValue() {
+ return value;
+ }
+
+ @Override
+ public int compareTo(YangInt32 anotherYangInt32) {
+ return compare(value, anotherYangInt32.value);
+ }
+
+ @Override
+ public YangDataTypes getYangType() {
+ return YangDataTypes.INT32;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/YangInt64.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/YangInt64.java
new file mode 100644
index 0000000..4bfe8b0
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/YangInt64.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.utils.builtindatatype;
+
+import org.onosproject.yang.compiler.datamodel.DefaultLocationInfo;
+
+import java.io.Serializable;
+
+import static java.lang.Long.compare;
+import static java.lang.Long.parseLong;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.INT64;
+
+/**
+ * Handles the YANG's int8 data type processing.
+ *
+ * int8 represents integer values between -9223372036854775808 and 9223372036854775807, inclusively.
+ */
+public class YangInt64 extends DefaultLocationInfo
+ implements YangBuiltInDataTypeInfo<YangInt64>, Serializable {
+
+ private static final long serialVersionUID = 8006201665L;
+
+ /**
+ * YANG's min keyword.
+ */
+ private static final String MIN_KEYWORD = "min";
+
+ /**
+ * YANG's max keyword.
+ */
+ private static final String MAX_KEYWORD = "max";
+
+ /**
+ * Valid minimum value of YANG's int64.
+ */
+ public static final Long MIN_VALUE = 0x8000000000000000L;
+
+ /**
+ * Valid maximum value of YANG's int64.
+ */
+ public static final long MAX_VALUE = 0x7fffffffffffffffL;
+
+ /**
+ * The value of YANG's int64.
+ */
+ private final long value;
+
+ /**
+ * Creates an object with the value initialized with value represented in
+ * string.
+ *
+ * @param valueInString value of the object in string
+ */
+ public YangInt64(String valueInString) {
+
+ if (valueInString.matches(MIN_KEYWORD)) {
+ value = MIN_VALUE;
+ } else if (valueInString.matches(MAX_KEYWORD)) {
+ value = MAX_VALUE;
+ } else {
+ try {
+ value = parseLong(valueInString);
+ } catch (Exception e) {
+ throw new DataTypeException("YANG file error : Input value \"" + valueInString + "\" is not a valid " +
+ "int64.");
+ }
+ }
+ }
+
+ /**
+ * Returns YANG's int64 value.
+ *
+ * @return value of YANG's int64
+ */
+ public long getValue() {
+ return value;
+ }
+
+ @Override
+ public int compareTo(YangInt64 anotherYangInt64) {
+ return compare(value, anotherYangInt64.value);
+ }
+
+ @Override
+ public YangDataTypes getYangType() {
+ return INT64;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/YangInt8.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/YangInt8.java
new file mode 100644
index 0000000..e1474a9
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/YangInt8.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.utils.builtindatatype;
+
+import org.onosproject.yang.compiler.datamodel.DefaultLocationInfo;
+
+import java.io.Serializable;
+
+/**
+ * Handles the YANG's int8 data type processing.
+ *
+ * int8 represents integer values between -128 and 127, inclusively.
+ */
+public class YangInt8 extends DefaultLocationInfo
+ implements YangBuiltInDataTypeInfo<YangInt8>, Serializable {
+
+ private static final long serialVersionUID = 8006201664L;
+
+ /**
+ * YANG's min keyword.
+ */
+ private static final String MIN_KEYWORD = "min";
+
+ /**
+ * YANG's max keyword.
+ */
+ private static final String MAX_KEYWORD = "max";
+
+ /**
+ * Valid minimum value of YANG's int8.
+ */
+ public static final byte MIN_VALUE = -128;
+
+ /**
+ * Valid maximum value of YANG's int8.
+ */
+ public static final byte MAX_VALUE = 127;
+
+ /**
+ * The value of YANG's int8.
+ */
+ private final byte value;
+
+ /**
+ * Creates an object with the value initialized with value represented in
+ * string.
+ *
+ * @param valueInString value of the object in string
+ */
+ public YangInt8(String valueInString) {
+
+ if (valueInString.matches(MIN_KEYWORD)) {
+ value = MIN_VALUE;
+ } else if (valueInString.matches(MAX_KEYWORD)) {
+ value = MAX_VALUE;
+ } else {
+ try {
+ value = Byte.parseByte(valueInString);
+ } catch (Exception e) {
+ throw new DataTypeException("YANG file error : Input value \"" + valueInString + "\" is not a valid " +
+ "int8.");
+ }
+ }
+ }
+
+ /**
+ * Returns YANG's int8 value.
+ *
+ * @return value of YANG's int8
+ */
+ public byte getValue() {
+ return value;
+ }
+
+ @Override
+ public int compareTo(YangInt8 anotherYangInt8) {
+ return Byte.compare(value, anotherYangInt8.value);
+ }
+
+ @Override
+ public YangDataTypes getYangType() {
+ return YangDataTypes.INT8;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/YangUint16.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/YangUint16.java
new file mode 100644
index 0000000..defa218
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/YangUint16.java
@@ -0,0 +1,106 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.utils.builtindatatype;
+
+import org.onosproject.yang.compiler.datamodel.DefaultLocationInfo;
+
+import java.io.Serializable;
+
+/**
+ * Handles the YANG's Uint16 data type processing.
+ *
+ * Uint16 represents integer values between 0 and 65535, inclusively.
+ */
+public class YangUint16 extends DefaultLocationInfo
+ implements YangBuiltInDataTypeInfo<YangUint16>, Serializable {
+
+ private static final long serialVersionUID = 8006201663L;
+
+ /**
+ * YANG's min keyword.
+ */
+ private static final String MIN_KEYWORD = "min";
+
+ /**
+ * YANG's max keyword.
+ */
+ private static final String MAX_KEYWORD = "max";
+
+ /**
+ * Valid minimum value of YANG's Uint16.
+ */
+ public static final int MIN_VALUE = 0;
+
+ /**
+ * Valid maximum value of YANG's Uint16.
+ */
+ public static final int MAX_VALUE = 65535;
+
+ /**
+ * Value of the object.
+ */
+ private int value;
+
+ /**
+ * Creates an object with the value initialized with value represented in
+ * string.
+ *
+ * @param valueInString value of the object in string
+ */
+ public YangUint16(String valueInString) {
+
+ if (valueInString.matches(MIN_KEYWORD)) {
+ value = MIN_VALUE;
+ } else if (valueInString.matches(MAX_KEYWORD)) {
+ value = MAX_VALUE;
+ } else {
+ try {
+ value = Integer.parseInt(valueInString);
+ } catch (Exception e) {
+ throw new DataTypeException("YANG file error : Input value \"" + valueInString + "\" is not a valid " +
+ "uint16.");
+ }
+ }
+
+ if (value < MIN_VALUE) {
+ throw new DataTypeException("YANG file error : " + valueInString + " is lesser than minimum value "
+ + MIN_VALUE + ".");
+ } else if (value > MAX_VALUE) {
+ throw new DataTypeException("YANG file error : " + valueInString + " is greater than maximum value "
+ + MAX_VALUE + ".");
+ }
+ }
+
+ /**
+ * Returns YANG's uint16 value.
+ *
+ * @return value of YANG's uint16
+ */
+ public int getValue() {
+ return value;
+ }
+
+ @Override
+ public int compareTo(YangUint16 another) {
+ return Integer.compare(value, another.value);
+ }
+
+ @Override
+ public YangDataTypes getYangType() {
+ return YangDataTypes.UINT16;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/YangUint32.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/YangUint32.java
new file mode 100644
index 0000000..dd5176f
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/YangUint32.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.utils.builtindatatype;
+
+import org.onosproject.yang.compiler.datamodel.DefaultLocationInfo;
+
+import java.io.Serializable;
+
+/**
+ * Handles the YANG's Uint32 data type processing.
+ *
+ * Uint32 represents integer values between 0 and 4294967295, inclusively.
+ */
+public class YangUint32 extends DefaultLocationInfo
+ implements YangBuiltInDataTypeInfo<YangUint32>, Serializable {
+
+ private static final long serialVersionUID = 8006201662L;
+
+ private static final String MIN_KEYWORD = "min";
+ private static final String MAX_KEYWORD = "max";
+
+ /**
+ * Valid minimum value of YANG's Uint32.
+ */
+ public static final long MIN_VALUE = 0;
+
+ /**
+ * Valid maximum value of YANG's Uint32.
+ */
+ public static final long MAX_VALUE = 4294967295L;
+
+ /**
+ * Value of the object.
+ */
+ private long value;
+
+ /**
+ * Creates an object with the value initialized with value represented in
+ * string.
+ *
+ * @param valueInString value of the object in string
+ */
+ public YangUint32(String valueInString) {
+
+ if (valueInString.matches(MIN_KEYWORD)) {
+ value = MIN_VALUE;
+ } else if (valueInString.matches(MAX_KEYWORD)) {
+ value = MAX_VALUE;
+ } else {
+ try {
+ value = Long.parseLong(valueInString);
+ } catch (Exception e) {
+ throw new DataTypeException("YANG file error : Input value \"" + valueInString + "\" is not a valid " +
+ "uint32.");
+ }
+ }
+
+ if (value < MIN_VALUE) {
+ throw new DataTypeException("YANG file error : " + valueInString + " is lesser than minimum value "
+ + MIN_VALUE + ".");
+ } else if (value > MAX_VALUE) {
+ throw new DataTypeException("YANG file error : " + valueInString + " is greater than maximum value "
+ + MAX_VALUE + ".");
+ }
+ }
+
+ /**
+ * Returns YANG's uint32 value.
+ *
+ * @return value of YANG's uint32
+ */
+ public long getValue() {
+ return value;
+ }
+
+ @Override
+ public int compareTo(YangUint32 another) {
+ return Long.compare(value, another.value);
+ }
+
+ @Override
+ public YangDataTypes getYangType() {
+ return YangDataTypes.UINT32;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/YangUint64.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/YangUint64.java
new file mode 100644
index 0000000..5568f85
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/YangUint64.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.utils.builtindatatype;
+
+import org.onosproject.yang.compiler.datamodel.DefaultLocationInfo;
+
+import java.io.Serializable;
+import java.math.BigInteger;
+
+/**
+ * Handles the YANG's Uint16 data type processing.
+ *
+ * Uint64 represents integer values between 0 and 18446744073709551615, inclusively.
+ */
+public class YangUint64 extends DefaultLocationInfo
+ implements YangBuiltInDataTypeInfo<YangUint64>, Serializable {
+
+ private static final long serialVersionUID = 8006201661L;
+
+ /**
+ * YANG's min keyword.
+ */
+ private static final String MIN_KEYWORD = "min";
+
+ /**
+ * YANG's max keyword.
+ */
+ private static final String MAX_KEYWORD = "max";
+
+ /**
+ * Valid minimum value of YANG's Uint64.
+ */
+ public static final BigInteger MIN_VALUE = BigInteger.valueOf(0);
+
+ /**
+ * Valid maximum value of YANG's Uint64.
+ */
+ public static final BigInteger MAX_VALUE = new BigInteger("18446744073709551615");
+
+ /**
+ * Value of the object.
+ */
+ private BigInteger value;
+
+ /**
+ * Creates an object with the value initialized with value represented in
+ * string.
+ *
+ * @param valueInString value of the object in string
+ */
+ public YangUint64(String valueInString) {
+
+ if (valueInString.matches(MIN_KEYWORD)) {
+ value = MIN_VALUE;
+ } else if (valueInString.matches(MAX_KEYWORD)) {
+ value = MAX_VALUE;
+ } else {
+ try {
+ value = new BigInteger(valueInString);
+ } catch (Exception e) {
+ throw new DataTypeException("YANG file error : Input value \"" + valueInString + "\" is not a valid " +
+ "uint64.");
+ }
+ }
+
+ if (value.compareTo(MIN_VALUE) < 0) {
+ throw new DataTypeException("YANG file error : " + valueInString + " is lesser than minimum value "
+ + MIN_VALUE + ".");
+ } else if (value.compareTo(MAX_VALUE) > 0) {
+ throw new DataTypeException("YANG file error : " + valueInString + " is greater than maximum value "
+ + MAX_VALUE + ".");
+ }
+ }
+
+ /**
+ * Returns YANG's uint64 value.
+ *
+ * @return value of YANG's uint64
+ */
+ public BigInteger getValue() {
+ return value;
+ }
+
+ @Override
+ public int compareTo(YangUint64 another) {
+ return value.compareTo(another.value);
+ }
+
+ @Override
+ public YangDataTypes getYangType() {
+ return YangDataTypes.UINT64;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/YangUint8.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/YangUint8.java
new file mode 100644
index 0000000..93df40f
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/YangUint8.java
@@ -0,0 +1,106 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.datamodel.utils.builtindatatype;
+
+import org.onosproject.yang.compiler.datamodel.DefaultLocationInfo;
+
+import java.io.Serializable;
+
+/**
+ * Handles the YANG's Uint8 data type processing.
+ *
+ * Uint8 represents integer values between 0 and 255, inclusively.
+ */
+public class YangUint8 extends DefaultLocationInfo
+ implements YangBuiltInDataTypeInfo<YangUint8>, Serializable {
+
+ private static final long serialVersionUID = 8006201660L;
+
+ /**
+ * YANG's min keyword.
+ */
+ private static final String MIN_KEYWORD = "min";
+
+ /**
+ * YANG's max keyword.
+ */
+ private static final String MAX_KEYWORD = "max";
+
+ /**
+ * Valid minimum value of YANG's Uint8.
+ */
+ public static final short MIN_VALUE = 0;
+
+ /**
+ * Valid maximum value of YANG's Uint8.
+ */
+ public static final short MAX_VALUE = 255;
+
+ /**
+ * Value of the object.
+ */
+ private short value;
+
+ /**
+ * Creates an object with the value initialized with value represented in
+ * string.
+ *
+ * @param valueInString value of the object in string
+ */
+ public YangUint8(String valueInString) {
+
+ if (valueInString.matches(MIN_KEYWORD)) {
+ value = MIN_VALUE;
+ } else if (valueInString.matches(MAX_KEYWORD)) {
+ value = MAX_VALUE;
+ } else {
+ try {
+ value = Short.parseShort(valueInString);
+ } catch (Exception e) {
+ throw new DataTypeException("YANG file error : Input value \"" + valueInString + "\" is not a valid " +
+ "uint8.");
+ }
+ }
+
+ if (value < MIN_VALUE) {
+ throw new DataTypeException("YANG file error : " + valueInString + " is lesser than minimum value "
+ + MIN_VALUE + ".");
+ } else if (value > MAX_VALUE) {
+ throw new DataTypeException("YANG file error : " + valueInString + " is greater than maximum value "
+ + MAX_VALUE + ".");
+ }
+ }
+
+ /**
+ * Returns YANG's uint8 value.
+ *
+ * @return value of YANG's uint8
+ */
+ public short getValue() {
+ return value;
+ }
+
+ @Override
+ public int compareTo(YangUint8 another) {
+ return Short.compare(value, another.value);
+ }
+
+ @Override
+ public YangDataTypes getYangType() {
+ return YangDataTypes.UINT8;
+ }
+}
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/package-info.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/package-info.java
new file mode 100644
index 0000000..e2a8a94
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/builtindatatype/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+/**
+ * Utilities for YANG built in data types.
+ */
+package org.onosproject.yang.compiler.datamodel.utils.builtindatatype;
diff --git a/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/package-info.java b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/package-info.java
new file mode 100644
index 0000000..563ea68
--- /dev/null
+++ b/compiler/base/datamodel/src/main/java/org/onosproject/yang/compiler/datamodel/utils/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+/**
+ * Utilities for checking data model tree collisions.
+ */
+package org.onosproject.yang.compiler.datamodel.utils;
\ No newline at end of file
diff --git a/compiler/base/linker/pom.xml b/compiler/base/linker/pom.xml
new file mode 100644
index 0000000..7cd5222
--- /dev/null
+++ b/compiler/base/linker/pom.xml
@@ -0,0 +1,74 @@
+<!--
+ ~ Copyright 2016-present Open Networking Laboratory
+ ~
+ ~ Licensed 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
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License 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.
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-compiler-base</artifactId>
+ <version>1.12-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>onos-yang-compiler-linker</artifactId>
+ <packaging>jar</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-compiler-datamodel</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-compiler-utils</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-compiler-translator</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.8.2</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>3.0.2</version>
+ <configuration>
+ <skipIfEmpty>true</skipIfEmpty>
+ </configuration>
+ <executions>
+ <execution>
+ <id>default</id>
+ <goals>
+ <goal>test-jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/YangLinker.java b/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/YangLinker.java
new file mode 100644
index 0000000..b82e21e
--- /dev/null
+++ b/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/YangLinker.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.linker;
+
+import org.onosproject.yang.compiler.datamodel.YangNode;
+
+import java.util.Set;
+
+/**
+ * Abstraction of entity which provides linking service of YANG files.
+ */
+public interface YangLinker {
+
+ /**
+ * Resolve the import and include dependencies for a given resolution
+ * information.
+ *
+ * @param yangNodeSet set of all dependent YANG nodes
+ */
+ void resolveDependencies(Set<YangNode> yangNodeSet);
+}
diff --git a/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/YangLinkingPhase.java b/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/YangLinkingPhase.java
new file mode 100644
index 0000000..bd7ecea
--- /dev/null
+++ b/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/YangLinkingPhase.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.linker;
+
+/**
+ * Represents the phase of YANG file reference linking.
+ */
+public enum YangLinkingPhase {
+
+ /**
+ * Linking the reference within the files.
+ */
+ INTRA_FILE,
+
+ /**
+ * Linking the reference across the files.
+ */
+ INTER_FILE
+
+}
diff --git a/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/exceptions/LinkerException.java b/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/exceptions/LinkerException.java
new file mode 100644
index 0000000..9bc3e5b
--- /dev/null
+++ b/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/exceptions/LinkerException.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.linker.exceptions;
+
+/**
+ * Represents base class for exceptions in linker operations.
+ */
+public class LinkerException extends RuntimeException {
+
+ private static final long serialVersionUID = 20160211L;
+ private transient int lineNumber;
+ private transient int charPositionInLine;
+ private transient String fileName;
+
+ /**
+ * Creates a new linker exception.
+ */
+ public LinkerException() {
+ super();
+ }
+
+ /**
+ * Creates a new linker exception with given message.
+ *
+ * @param message the detail of exception in string
+ */
+ public LinkerException(String message) {
+ super(message);
+ }
+
+ /**
+ * Creates a new linker exception from given message and cause.
+ *
+ * @param message the detail of exception in string
+ * @param cause underlying cause of the error
+ */
+ public LinkerException(final String message, final Throwable cause) {
+ super(message, cause);
+ }
+
+ /**
+ * Creates a new linker exception from cause.
+ *
+ * @param cause underlying cause of the error
+ */
+ public LinkerException(final Throwable cause) {
+ super(cause);
+ }
+
+ /**
+ * Returns line number of the exception.
+ *
+ * @return line number of the exception
+ */
+ public int getLineNumber() {
+ return this.lineNumber;
+ }
+
+ /**
+ * Returns YANG file name of the exception.
+ *
+ * @return YANG file name of the exception
+ */
+ public String getFileName() {
+ return this.fileName;
+ }
+
+ /**
+ * Returns position of the exception.
+ *
+ * @return position of the exception
+ */
+ public int getCharPositionInLine() {
+ return this.charPositionInLine;
+ }
+
+ /**
+ * Sets line number of YANG file.
+ *
+ * @param line line number of YANG file
+ */
+ public void setLine(int line) {
+ this.lineNumber = line;
+ }
+
+ /**
+ * Sets position of exception.
+ *
+ * @param charPosition position of exception
+ */
+ public void setCharPosition(int charPosition) {
+ this.charPositionInLine = charPosition;
+ }
+
+ /**
+ * Sets file name in parser exception.
+ *
+ * @param fileName YANG file name
+ */
+ public void setFileName(String fileName) {
+ this.fileName = fileName;
+ }
+}
diff --git a/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/exceptions/package-info.java b/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/exceptions/package-info.java
new file mode 100644
index 0000000..a3de887
--- /dev/null
+++ b/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/exceptions/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+/**
+ * Custom linker exceptions.
+ */
+package org.onosproject.yang.compiler.linker.exceptions;
diff --git a/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/impl/PrefixResolverType.java b/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/impl/PrefixResolverType.java
new file mode 100644
index 0000000..a7896b7
--- /dev/null
+++ b/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/impl/PrefixResolverType.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.linker.impl;
+
+/**
+ * Enum for prefix resolver type when augment has come in path.
+ */
+enum PrefixResolverType {
+
+ /**
+ * When prefix changes from inter file to intra file.
+ */
+ INTER_TO_INTRA,
+
+ /**
+ * When prefix changes from intra file to inter file.
+ */
+ INTRA_TO_INTER,
+
+ /**
+ * When prefix changes from one inter file to other inter file.
+ */
+ INTER_TO_INTER,
+
+ /**
+ * When no prefix change occurs.
+ */
+ NO_PREFIX_CHANGE_FOR_INTRA,
+
+ /**
+ * When no prefix change occurs.
+ */
+ NO_PREFIX_CHANGE_FOR_INTER
+}
diff --git a/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/impl/XpathLinkingTypes.java b/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/impl/XpathLinkingTypes.java
new file mode 100644
index 0000000..a4345cf
--- /dev/null
+++ b/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/impl/XpathLinkingTypes.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.linker.impl;
+
+/**
+ * Represents x path linking types.
+ */
+public enum XpathLinkingTypes {
+
+ // Augment path linking.
+ AUGMENT_LINKING,
+
+ // Leaf ref path linking.
+ LEAF_REF_LINKING,
+
+ // Compiler annotation linking.
+ COMPILER_ANNOTATION_LINKING
+}
diff --git a/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/impl/YangLinkerManager.java b/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/impl/YangLinkerManager.java
new file mode 100644
index 0000000..61528be
--- /dev/null
+++ b/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/impl/YangLinkerManager.java
@@ -0,0 +1,215 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.linker.impl;
+
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangReferenceResolver;
+import org.onosproject.yang.compiler.datamodel.YangSubModule;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.linker.YangLinker;
+import org.onosproject.yang.compiler.linker.exceptions.LinkerException;
+
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
+import static java.util.Collections.sort;
+import static org.onosproject.yang.compiler.datamodel.ResolvableType.YANG_AUGMENT;
+import static org.onosproject.yang.compiler.datamodel.ResolvableType.YANG_BASE;
+import static org.onosproject.yang.compiler.datamodel.ResolvableType.YANG_COMPILER_ANNOTATION;
+import static org.onosproject.yang.compiler.datamodel.ResolvableType.YANG_DERIVED_DATA_TYPE;
+import static org.onosproject.yang.compiler.datamodel.ResolvableType.YANG_IDENTITYREF;
+import static org.onosproject.yang.compiler.datamodel.ResolvableType.YANG_IF_FEATURE;
+import static org.onosproject.yang.compiler.datamodel.ResolvableType.YANG_LEAFREF;
+import static org.onosproject.yang.compiler.datamodel.ResolvableType.YANG_USES;
+import static org.onosproject.yang.compiler.linker.impl.YangLinkerUtils.updateFilePriority;
+import static org.onosproject.yang.compiler.utils.UtilConstants.NEW_LINE;
+
+/**
+ * Representation of entity which provides linking service of YANG files.
+ */
+public class YangLinkerManager
+ implements YangLinker {
+
+ /*
+ * Set of all the YANG nodes, corresponding to the YANG files parsed by
+ * parser.
+ */
+ private Set<YangNode> yangNodeSet = new HashSet<>();
+
+ /**
+ * Returns set of YANG node.
+ *
+ * @return set of YANG node
+ */
+ public Set<YangNode> getYangNodeSet() {
+ return yangNodeSet;
+ }
+
+ /**
+ * Creates YANG nodes set.
+ *
+ * @param yangNodeSet YANG node information set
+ */
+ public void createYangNodeSet(Set<YangNode> yangNodeSet) {
+ getYangNodeSet().addAll(yangNodeSet);
+ }
+
+ @Override
+ public void resolveDependencies(Set<YangNode> yangNodeSet) {
+
+ // Create YANG node set.
+ createYangNodeSet(yangNodeSet);
+
+ // Carry out linking of sub module with module.
+ linkSubModulesToParentModule(yangNodeSet);
+
+ // Add references to import list.
+ addRefToYangFilesImportList(yangNodeSet);
+
+ // Add reference to include list.
+ addRefToYangFilesIncludeList(yangNodeSet);
+
+ // Update the priority for all the files.
+ updateFilePriority(yangNodeSet);
+
+ // TODO check for circular import/include.
+
+ // Carry out inter-file linking.
+ processInterFileLinking(yangNodeSet);
+ }
+
+ /**
+ * Resolves sub-module linking by linking sub module with parent module.
+ *
+ * @param yangNodeSet set of YANG files info
+ * @throws LinkerException fails to link sub-module to parent module
+ */
+ public void linkSubModulesToParentModule(Set<YangNode> yangNodeSet)
+ throws LinkerException {
+ for (YangNode yangNode : yangNodeSet) {
+ if (yangNode instanceof YangSubModule) {
+ try {
+ ((YangSubModule) yangNode).linkWithModule(getYangNodeSet());
+ } catch (DataModelException e) {
+ String errorInfo = "Error in file: " + yangNode.getName() + " in " +
+ yangNode.getFileName() + " at " +
+ "line: " + e.getLineNumber() + " at position: " + e.getCharPositionInLine() + NEW_LINE
+ + e.getLocalizedMessage();
+ throw new LinkerException(errorInfo);
+ // TODO add file path in exception message in util manager.
+ }
+ }
+ }
+ }
+
+ /**
+ * Adds imported node information to the import list.
+ *
+ * @param yangNodeSet set of YANG files info
+ * @throws LinkerException fails to find imported module
+ */
+ public void addRefToYangFilesImportList(Set<YangNode> yangNodeSet)
+ throws LinkerException {
+ for (YangNode yangNode : yangNodeSet) {
+ if (yangNode instanceof YangReferenceResolver) {
+ try {
+ ((YangReferenceResolver) yangNode).addReferencesToImportList(getYangNodeSet());
+ } catch (DataModelException e) {
+ String errorInfo = "Error in file: " + yangNode.getName() + " in " +
+ yangNode.getFileName() + " at " +
+ "line: " + e.getLineNumber() + " at position: " + e.getCharPositionInLine() + NEW_LINE
+ + e.getLocalizedMessage();
+ throw new LinkerException(errorInfo);
+ // TODO add file path in exception message in util manager.
+ }
+ }
+ }
+ }
+
+ /**
+ * Adds included node information to the include list.
+ *
+ * @param yangNodeSet set of YANG files info
+ * @throws LinkerException fails to find included sub-module
+ */
+ public void addRefToYangFilesIncludeList(Set<YangNode> yangNodeSet)
+ throws LinkerException {
+ for (YangNode yangNode : yangNodeSet) {
+ if (yangNode instanceof YangReferenceResolver) {
+ try {
+ ((YangReferenceResolver) yangNode).addReferencesToIncludeList(getYangNodeSet());
+ } catch (DataModelException e) {
+ String errorInfo = "Error in file: " + yangNode.getName() + " in " +
+ yangNode.getFileName() + " at " +
+ "line: " + e.getLineNumber() + " at position: " + e.getCharPositionInLine() + NEW_LINE
+ + e.getLocalizedMessage();
+ throw new LinkerException(errorInfo);
+ // TODO add file path in exception message in util manager.
+ }
+ }
+ }
+ }
+
+ /**
+ * Processes inter file linking for type and uses.
+ *
+ * @param yangNodeSet set of YANG files info
+ * @throws LinkerException a violation in linker execution
+ */
+ public void processInterFileLinking(Set<YangNode> yangNodeSet)
+ throws LinkerException {
+ List<YangNode> yangNodeSortedList = new LinkedList<>();
+ yangNodeSortedList.addAll(yangNodeSet);
+ sort(yangNodeSortedList);
+ for (YangNode yangNode : yangNodeSortedList) {
+ try {
+ ((YangReferenceResolver) yangNode)
+ .resolveInterFileLinking(YANG_IF_FEATURE);
+ ((YangReferenceResolver) yangNode)
+ .resolveInterFileLinking(YANG_USES);
+ ((YangReferenceResolver) yangNode)
+ .resolveInterFileLinking(YANG_AUGMENT);
+ ((YangReferenceResolver) yangNode)
+ .resolveInterFileLinking(YANG_DERIVED_DATA_TYPE);
+ ((YangReferenceResolver) yangNode)
+ .resolveInterFileLinking(YANG_BASE);
+ ((YangReferenceResolver) yangNode)
+ .resolveInterFileLinking(YANG_IDENTITYREF);
+ ((YangReferenceResolver) yangNode)
+ .resolveInterFileLinking(YANG_LEAFREF);
+ ((YangReferenceResolver) yangNode)
+ .resolveInterFileLinking(YANG_COMPILER_ANNOTATION);
+ } catch (DataModelException e) {
+ String errorInfo = "Error in file: " + yangNode.getName() + " in " +
+ yangNode.getFileName() + " at " +
+ "line: " + e.getLineNumber() + " at position: " + e.getCharPositionInLine() + NEW_LINE
+ + e.getLocalizedMessage();
+ throw new LinkerException(errorInfo);
+ // TODO add file path in exception message in util manager.
+ } catch (LinkerException e) {
+ String errorInfo = "Error in file: " + yangNode.getName() + " in " +
+ yangNode.getFileName() + " at " +
+ "line: " + e.getLineNumber() + " at position: " + e.getCharPositionInLine() + NEW_LINE
+ + e.getLocalizedMessage();
+ throw new LinkerException(errorInfo);
+ // TODO add file path in exception message in util manager.
+ }
+ }
+ }
+}
diff --git a/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/impl/YangLinkerUtils.java b/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/impl/YangLinkerUtils.java
new file mode 100644
index 0000000..7783328
--- /dev/null
+++ b/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/impl/YangLinkerUtils.java
@@ -0,0 +1,934 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.linker.impl;
+
+import org.onosproject.yang.compiler.datamodel.TraversalType;
+import org.onosproject.yang.compiler.datamodel.YangAtomicPath;
+import org.onosproject.yang.compiler.datamodel.YangAugment;
+import org.onosproject.yang.compiler.datamodel.YangAugmentableNode;
+import org.onosproject.yang.compiler.datamodel.YangBase;
+import org.onosproject.yang.compiler.datamodel.YangCase;
+import org.onosproject.yang.compiler.datamodel.YangChoice;
+import org.onosproject.yang.compiler.datamodel.YangGrouping;
+import org.onosproject.yang.compiler.datamodel.YangIdentityRef;
+import org.onosproject.yang.compiler.datamodel.YangIfFeature;
+import org.onosproject.yang.compiler.datamodel.YangImport;
+import org.onosproject.yang.compiler.datamodel.YangInclude;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangLeafRef;
+import org.onosproject.yang.compiler.datamodel.YangLeavesHolder;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeIdentifier;
+import org.onosproject.yang.compiler.datamodel.YangPathPredicate;
+import org.onosproject.yang.compiler.datamodel.YangReferenceResolver;
+import org.onosproject.yang.compiler.datamodel.YangRelativePath;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.YangTypeDef;
+import org.onosproject.yang.compiler.datamodel.YangUses;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+import org.onosproject.yang.compiler.linker.exceptions.LinkerException;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.regex.Pattern;
+
+import static org.onosproject.yang.compiler.datamodel.TraversalType.CHILD;
+import static org.onosproject.yang.compiler.datamodel.TraversalType.PARENT;
+import static org.onosproject.yang.compiler.datamodel.TraversalType.ROOT;
+import static org.onosproject.yang.compiler.datamodel.TraversalType.SIBILING;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.COLLISION_DETECTION;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.FAILED_TO_ADD_CASE;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.TARGET_NODE;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.TARGET_NODE_LEAF_INFO;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.getErrorMsg;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.getErrorMsgCollision;
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.addResolutionInfo;
+import static org.onosproject.yang.compiler.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
+import static org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus.RESOLVED;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.getYangConstructType;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.IDENTITYREF;
+import static org.onosproject.yang.compiler.translator.tojava.YangDataModelFactory.getYangCaseNode;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BASE_LINKER_ERROR;
+import static org.onosproject.yang.compiler.utils.UtilConstants.COLON;
+import static org.onosproject.yang.compiler.utils.UtilConstants.COMMA;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EMPTY_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.FEATURE_LINKER_ERROR;
+import static org.onosproject.yang.compiler.utils.UtilConstants.GROUPING_LINKER_ERROR;
+import static org.onosproject.yang.compiler.utils.UtilConstants.IDENTITYREF_LINKER_ERROR;
+import static org.onosproject.yang.compiler.utils.UtilConstants.INVALID_TREE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.IS_INVALID;
+import static org.onosproject.yang.compiler.utils.UtilConstants.LEAFREF_ERROR;
+import static org.onosproject.yang.compiler.utils.UtilConstants.LEAFREF_LINKER_ERROR;
+import static org.onosproject.yang.compiler.utils.UtilConstants.TYPEDEF_LINKER_ERROR;
+
+/**
+ * Represent utilities for YANG linker.
+ */
+public final class YangLinkerUtils {
+
+ private static final int IDENTIFIER_LENGTH = 64;
+ private static final Pattern IDENTIFIER_PATTERN =
+ Pattern.compile("[a-zA-Z_][a-zA-Z0-9_.-]*");
+ private static final String XML = "xml";
+ private static final String INVALID_PATH_PRE =
+ "YANG file error: The path predicate of the leafref has an " +
+ "invalid path in ";
+ private static final String EMPTY_PATH_LIST_ERR =
+ "YANG file error : The atomic path list cannot be empty of the " +
+ "leafref in the path ";
+ private static final String TGT_LEAF_ERR =
+ "YANG file error: There is no leaf/leaf-list in YANG node as " +
+ "mentioned in the path predicate of the leafref path ";
+ private static final String LEAF_REF_LIST_ERR =
+ "YANG file error: Path predicates are only applicable for YANG " +
+ "list. The leafref path has path predicate for non-list " +
+ "node in the path ";
+
+ // No instantiation.
+ private YangLinkerUtils() {
+ }
+
+ /**
+ * Detects collision between target nodes leaf/leaf-list or child node with augmented leaf/leaf-list or child node.
+ *
+ * @param targetNode target node
+ * @param augment augment node
+ */
+ private static void detectCollision(YangNode targetNode, YangAugment augment) {
+ YangNode targetNodesChild = targetNode.getChild();
+ YangNode augmentsChild = augment.getChild();
+ if (targetNode instanceof YangChoice) {
+ addCaseNodeToChoiceTarget(augment);
+ } else {
+ detectCollisionInLeaveHolders(targetNode, augment);
+ while (augmentsChild != null) {
+ detectCollisionInChildNodes(targetNodesChild, augmentsChild);
+ augmentsChild = augmentsChild.getNextSibling();
+ }
+ }
+ }
+
+ /*Detects collision between leaves/leaf-lists*/
+ private static void detectCollisionInLeaveHolders(YangNode targetNode, YangAugment augment) {
+ YangLeavesHolder targetNodesLeavesHolder = (YangLeavesHolder) targetNode;
+ if (augment.getListOfLeaf() != null && augment.getListOfLeaf().isEmpty() &&
+ targetNodesLeavesHolder.getListOfLeaf() != null) {
+ for (YangLeaf leaf : augment.getListOfLeaf()) {
+ for (YangLeaf targetLeaf : targetNodesLeavesHolder.getListOfLeaf()) {
+ detectCollision(targetLeaf.getName(), leaf.getName(),
+ leaf.getLineNumber(),
+ leaf.getCharPosition(),
+ leaf.getFileName(), TARGET_NODE_LEAF_INFO);
+ }
+ }
+ }
+ if (augment.getListOfLeafList() != null &&
+ augment.getListOfLeafList().isEmpty() &&
+ targetNodesLeavesHolder.getListOfLeafList() != null) {
+ for (YangLeafList leafList : augment.getListOfLeafList()) {
+ for (YangLeafList targetLeafList : targetNodesLeavesHolder.getListOfLeafList()) {
+ detectCollision(targetLeafList.getName(), leafList.getName(),
+ leafList.getLineNumber(),
+ leafList.getCharPosition(),
+ leafList.getFileName(), TARGET_NODE_LEAF_INFO);
+ }
+ }
+ }
+ }
+
+
+ private static void detectCollision(String first, String second,
+ int line, int position, String
+ fileName, String type) {
+ if (first.equals(second)) {
+ throw new LinkerException(getErrorMsgCollision(
+ COLLISION_DETECTION, second, line, position, type,
+ fileName));
+ }
+ }
+
+ /*Detects collision for child nodes.*/
+ private static void detectCollisionInChildNodes(YangNode targetNodesChild,
+ YangNode augmentsChild) {
+ while (augmentsChild != null) {
+ while (targetNodesChild != null) {
+ if (targetNodesChild.getName().equals(augmentsChild.getName())) {
+ detectCollision(targetNodesChild.getName(), augmentsChild.getName(),
+ augmentsChild.getLineNumber(),
+ augmentsChild.getCharPosition(),
+ augmentsChild.getFileName(), TARGET_NODE);
+ }
+ targetNodesChild = targetNodesChild.getNextSibling();
+ }
+ augmentsChild = augmentsChild.getNextSibling();
+ }
+ }
+
+ /**
+ * Adds a case node in augment when augmenting a choice node.
+ *
+ * @param augment augment node
+ */
+ private static void addCaseNodeToChoiceTarget(YangAugment augment) {
+ try {
+ YangNode child = augment.getChild();
+ List<YangNode> childNodes = new ArrayList<>();
+ List<YangNode> caseNodes = new ArrayList<>();
+ while (child != null) {
+ if (!(child instanceof YangCase)) {
+ childNodes.add(child);
+ } else {
+ caseNodes.add(child);
+ }
+ child = child.getNextSibling();
+ }
+ augment.setChild(null);
+
+ for (YangNode node : childNodes) {
+ Map<YangNode, List<YangNode>> map = new LinkedHashMap<>();
+ node.setNextSibling(null);
+ node.setPreviousSibling(null);
+ node.setParent(null);
+ YangCase javaCase = getYangCaseNode(JAVA_GENERATION);
+ javaCase.setName(node.getName());
+ //Break the tree to from a new tree.
+ traverseAndBreak(node, map);
+ augment.addChild(javaCase);
+ node.setParent(javaCase);
+ javaCase.addChild(node);
+ //Connect each node to its correct parent again.
+ connectTree(map);
+ }
+
+ for (YangNode node : caseNodes) {
+ Map<YangNode, List<YangNode>> map = new LinkedHashMap<>();
+ node.setNextSibling(null);
+ node.setPreviousSibling(null);
+ node.setParent(null);
+ //Break the tree to from a new tree.
+ traverseAndBreak(node, map);
+ augment.addChild(node);
+ node.setParent(augment);
+ //Connect each node to its correct parent again.
+ connectTree(map);
+ }
+ if (augment.getListOfLeaf() != null) {
+ for (YangLeaf leaf : augment.getListOfLeaf()) {
+ YangCase javaCase = getYangCaseNode(JAVA_GENERATION);
+ javaCase.setName(leaf.getName());
+ javaCase.addLeaf(leaf);
+ augment.addChild(javaCase);
+ }
+ augment.getListOfLeaf().clear();
+ }
+ if (augment.getListOfLeafList() != null) {
+ for (YangLeafList leafList : augment.getListOfLeafList()) {
+ YangCase javaCase = getYangCaseNode(JAVA_GENERATION);
+ javaCase.setName(leafList.getName());
+ javaCase.addLeafList(leafList);
+ augment.addChild(javaCase);
+ }
+ augment.getListOfLeafList().clear();
+ }
+ } catch (DataModelException e) {
+ throw new TranslatorException(
+ getErrorMsg(FAILED_TO_ADD_CASE, augment.getName(),
+ augment.getLineNumber(), augment.getCharPosition(),
+ augment.getFileName()));
+ }
+ }
+
+ private static void connectTree(Map<YangNode, List<YangNode>> map)
+ throws DataModelException {
+ ArrayList<YangNode> keys = new ArrayList<>(map.keySet());
+ int size = keys.size();
+ for (int i = size - 1; i >= 0; i--) {
+ YangNode curNode = keys.get(i);
+ List<YangNode> nodes = map.get(curNode);
+ if (nodes != null) {
+ for (YangNode node : nodes) {
+ curNode.addChild(node);
+ }
+ }
+ }
+ map.clear();
+ }
+
+ private static void processHierarchyChild(YangNode node,
+ Map<YangNode, List<YangNode>> map) {
+ YangNode child = node.getChild();
+ if (child != null) {
+ List<YangNode> nodes = new ArrayList<>();
+ while (child != null) {
+ nodes.add(child);
+ child.setParent(null);
+ child = child.getNextSibling();
+ if (child != null) {
+ child.getPreviousSibling().setNextSibling(null);
+ child.setPreviousSibling(null);
+ }
+ }
+ map.put(node, nodes);
+ }
+ node.setChild(null);
+ }
+
+ private static void traverseAndBreak(YangNode rootNode,
+ Map<YangNode, List<YangNode>> map) {
+
+ YangNode curNode = rootNode;
+ TraversalType curTraversal = ROOT;
+ while (curNode != null) {
+ if (curTraversal != PARENT && curNode.getChild() != null) {
+ curTraversal = CHILD;
+ curNode = curNode.getChild();
+ } else if (curNode.getNextSibling() != null) {
+ curTraversal = SIBILING;
+ curNode = curNode.getNextSibling();
+ } else {
+ curTraversal = PARENT;
+ curNode = curNode.getParent();
+ if (curNode != null) {
+ processHierarchyChild(curNode, map);
+ }
+ }
+ }
+ }
+
+ /**
+ * Returns error messages.
+ *
+ * @param resolvable resolvable entity
+ * @return error message
+ */
+ static String getErrorInfoForLinker(Object resolvable) {
+ if (resolvable instanceof YangType) {
+ return TYPEDEF_LINKER_ERROR;
+ }
+ if (resolvable instanceof YangUses) {
+ return GROUPING_LINKER_ERROR;
+ }
+ if (resolvable instanceof YangIfFeature) {
+ return FEATURE_LINKER_ERROR;
+ }
+ if (resolvable instanceof YangBase) {
+ return BASE_LINKER_ERROR;
+ }
+ if (resolvable instanceof YangIdentityRef) {
+ return IDENTITYREF_LINKER_ERROR;
+ }
+ return LEAFREF_LINKER_ERROR;
+ }
+
+ /**
+ * Returns leafref's error message.
+ *
+ * @param leafref leaf ref
+ * @return error message
+ */
+ static String getLeafRefErrorInfo(YangLeafRef leafref) {
+ return getErrorMsg(
+ LEAFREF_ERROR + leafref.getPath() + COMMA + IS_INVALID, EMPTY_STRING,
+ leafref.getLineNumber(), leafref.getCharPosition(), leafref
+ .getFileName());
+ }
+
+ /**
+ * Detects collision between target nodes and its all leaf/leaf-list or child node with augmented leaf/leaf-list or
+ * child node.
+ *
+ * @param targetNode target node
+ * @param augment augment node
+ */
+ static void detectCollisionForAugmentedNode(YangNode targetNode, YangAugment augment) {
+ // Detect collision for target node and augment node.
+ detectCollision(targetNode, augment);
+ List<YangAugment> yangAugmentedInfo = ((YangAugmentableNode) targetNode).getAugmentedInfoList();
+ // Detect collision for target augment node and current augment node.
+ for (YangAugment info : yangAugmentedInfo) {
+ detectCollision(info, augment);
+ }
+ }
+
+ /**
+ * Returns list of path names that are needed from augment.
+ *
+ * @param augment instance of YANG augment
+ * @param remainingAncestors ancestor count to move in augment path
+ * @return list of path names needed in leafref
+ */
+ static List<String> getPathWithAugment(YangAugment augment, int remainingAncestors) {
+ List<String> listOfPathName = new ArrayList<>();
+ for (YangAtomicPath atomicPath : augment.getTargetNode()) {
+ if (atomicPath.getNodeIdentifier().getPrefix() != null &&
+ !atomicPath.getNodeIdentifier().getPrefix().equals(EMPTY_STRING)) {
+ listOfPathName.add(atomicPath.getNodeIdentifier().getPrefix()
+ + COLON + atomicPath.getNodeIdentifier().getName());
+ } else {
+ listOfPathName.add(atomicPath.getNodeIdentifier().getName());
+ }
+ }
+ for (int countOfAncestor = 0; countOfAncestor < remainingAncestors; countOfAncestor++) {
+ listOfPathName.remove(listOfPathName.size() - 1);
+ }
+ return listOfPathName;
+ }
+
+ /**
+ * Skips the invalid nodes which cannot have data from YANG.
+ *
+ * @param curParent current parent
+ * @param leafRef YANG leaf-ref
+ * @return parent node which can hold data
+ * @throws LinkerException if linker rules are violated
+ */
+ public static YangNode skipInvalidDataNodes(YangNode curParent,
+ YangLeafRef leafRef)
+ throws LinkerException {
+
+ YangNode node = curParent;
+ while (node instanceof YangChoice ||
+ node instanceof YangCase) {
+
+ if (node.getParent() == null) {
+ throw new LinkerException(getLeafRefErrorInfo(leafRef));
+ }
+ node = node.getParent();
+ }
+ return node;
+ }
+
+ /**
+ * Checks and return valid node identifier.
+ *
+ * @param nodeIdentifierString string from yang file
+ * @param yangConstruct yang construct for creating error message
+ * @return valid node identifier
+ */
+ static YangNodeIdentifier getValidNodeIdentifier(String nodeIdentifierString,
+ YangConstructType yangConstruct) {
+ String[] tmpData = nodeIdentifierString.split(Pattern.quote(COLON));
+ if (tmpData.length == 1) {
+ YangNodeIdentifier nodeIdentifier = new YangNodeIdentifier();
+ nodeIdentifier.setName(getValidIdentifier(tmpData[0], yangConstruct));
+ return nodeIdentifier;
+ } else if (tmpData.length == 2) {
+ YangNodeIdentifier nodeIdentifier = new YangNodeIdentifier();
+ nodeIdentifier.setPrefix(getValidIdentifier(tmpData[0], yangConstruct));
+ nodeIdentifier.setName(getValidIdentifier(tmpData[1], yangConstruct));
+ return nodeIdentifier;
+ } else {
+ throw new LinkerException("YANG file error : " +
+ getYangConstructType(yangConstruct) + " name " + nodeIdentifierString +
+ " is not valid.");
+ }
+ }
+
+ /**
+ * Validates identifier and returns concatenated string if string contains plus symbol.
+ *
+ * @param identifier string from yang file
+ * @param yangConstruct yang construct for creating error message=
+ * @return concatenated string after removing double quotes
+ */
+ public static String getValidIdentifier(String identifier, YangConstructType yangConstruct) {
+
+ if (identifier.length() > IDENTIFIER_LENGTH) {
+ throw new LinkerException("YANG file error : " +
+ getYangConstructType(yangConstruct) + " name " + identifier + " is " +
+ "greater than 64 characters.");
+ } else if (!IDENTIFIER_PATTERN.matcher(identifier).matches()) {
+ throw new LinkerException("YANG file error : " +
+ getYangConstructType(yangConstruct) + " name " + identifier + " is not " +
+ "valid.");
+ } else if (identifier.toLowerCase().startsWith(XML)) {
+ throw new LinkerException("YANG file error : " +
+ getYangConstructType(yangConstruct) + " identifier " + identifier +
+ " must not start with (('X'|'x') ('M'|'m') ('L'|'l')).");
+ } else {
+ return identifier;
+ }
+ }
+
+ /**
+ * Updates the priority for all the input files.
+ *
+ * @param yangNodeSet set of YANG files info
+ */
+ public static void updateFilePriority(Set<YangNode> yangNodeSet) {
+ for (YangNode yangNode : yangNodeSet) {
+ updateFilePriorityOfNode(yangNode);
+ }
+ }
+
+ /**
+ * Updates priority of the node.
+ *
+ * @param yangNode YANG node information
+ */
+ private static void updateFilePriorityOfNode(YangNode yangNode) {
+ int curNodePriority = yangNode.getPriority();
+ if (yangNode instanceof YangReferenceResolver) {
+ List<YangImport> yangImportList = ((YangReferenceResolver) yangNode).getImportList();
+ Iterator<YangImport> importInfoIterator = yangImportList.iterator();
+ // Run through the imported list to update priority.
+ while (importInfoIterator.hasNext()) {
+ YangImport yangImport = importInfoIterator.next();
+ YangNode importedNode = yangImport.getImportedNode();
+ if (curNodePriority >= importedNode.getPriority()) {
+ importedNode.setPriority(curNodePriority + 1);
+ updateFilePriorityOfNode(importedNode);
+ }
+ }
+
+ List<YangInclude> yangIncludeList = ((YangReferenceResolver) yangNode).getIncludeList();
+ Iterator<YangInclude> includeInfoIterator = yangIncludeList.iterator();
+ // Run through the imported list to update priority.
+ while (includeInfoIterator.hasNext()) {
+ YangInclude yangInclude = includeInfoIterator.next();
+ YangNode includedNode = yangInclude.getIncludedNode();
+ if (curNodePriority >= includedNode.getPriority()) {
+ includedNode.setPriority(curNodePriority + 1);
+ updateFilePriorityOfNode(includedNode);
+ }
+ }
+ }
+ }
+
+ /**
+ * Add the unresolved data under the root leve grouping to be resolved, since it will be used in interfile uses.
+ *
+ * @param referenceResolver module / sub-module
+ */
+ public static void resolveGroupingInDefinationScope(YangReferenceResolver referenceResolver) {
+ YangNode potentialInterFileGrouping = ((YangNode) referenceResolver).getChild();
+
+ while (potentialInterFileGrouping != null) {
+ if (potentialInterFileGrouping instanceof YangGrouping) {
+ addGroupingResolvableEntitiesToResolutionList((YangGrouping) potentialInterFileGrouping);
+ }
+
+ potentialInterFileGrouping = potentialInterFileGrouping.getNextSibling();
+ }
+ }
+
+ /**
+ * Add the interfile grouping resolvable entities to reesolution list.
+ *
+ * @param interFileGrouping interfile grouping
+ */
+ private static void addGroupingResolvableEntitiesToResolutionList(YangGrouping interFileGrouping) {
+ YangNode curNode = interFileGrouping;
+ TraversalType curTraversal = ROOT;
+ addResolvableLeavesToResolutionList((YangLeavesHolder) curNode);
+ curTraversal = CHILD;
+ curNode = interFileGrouping.getChild();
+ if (curNode == null) {
+ return;
+ }
+ while (curNode != interFileGrouping) {
+ if (curTraversal != PARENT) {
+ if (curNode instanceof YangGrouping || curNode instanceof YangUses) {
+ if (curNode.getNextSibling() != null) {
+ curTraversal = SIBILING;
+ curNode = curNode.getNextSibling();
+ } else {
+ curTraversal = PARENT;
+ curNode = curNode.getParent();
+ }
+ continue;
+ }
+
+ if (curNode instanceof YangLeavesHolder) {
+ addResolvableLeavesToResolutionList((YangLeavesHolder) curNode);
+ } else if (curNode instanceof YangTypeDef) {
+ List<YangType<?>> typeList = ((YangTypeDef) curNode).getTypeList();
+ if (!typeList.isEmpty()) {
+ YangType<?> type = typeList.get(0);
+ if (type.getDataType() == DERIVED) {
+ if (type.getResolvableStatus() != RESOLVED) {
+
+ type.setTypeForInterFileGroupingResolution(true);
+
+ // Add resolution information to the list
+ YangResolutionInfoImpl resolutionInfo =
+ new YangResolutionInfoImpl<YangType>(type, curNode, type.getLineNumber(),
+ type.getCharPosition());
+ try {
+ addResolutionInfo(resolutionInfo);
+ } catch (DataModelException e) {
+ String errorInfo = "Error in file: " + curNode.getName() + " in " +
+ curNode.getFileName() + " at " +
+ "line: " + e.getLineNumber() +
+ " at position: " + e.getCharPositionInLine()
+ + e.getLocalizedMessage();
+ throw new LinkerException("Failed to add type info in grouping to resolution "
+ + errorInfo);
+ }
+ }
+ }
+ }
+ }
+ }
+ if (curTraversal != PARENT && curNode.getChild() != null) {
+ curTraversal = CHILD;
+ curNode = curNode.getChild();
+ } else if (curNode.getNextSibling() != null) {
+
+ curTraversal = SIBILING;
+ curNode = curNode.getNextSibling();
+ } else {
+ curTraversal = PARENT;
+ curNode = curNode.getParent();
+ }
+ }
+ }
+
+ /**
+ * Add resolvable leaves type info to resolution list.
+ *
+ * @param leavesHolder leaves holder node
+ */
+ private static void addResolvableLeavesToResolutionList(YangLeavesHolder leavesHolder) {
+ if (leavesHolder.getListOfLeaf() != null && !leavesHolder.getListOfLeaf().isEmpty()) {
+ for (YangLeaf leaf : leavesHolder.getListOfLeaf()) {
+ YangType type = leaf.getDataType();
+ if (type.getDataType() == DERIVED) {
+
+ type.setTypeForInterFileGroupingResolution(true);
+
+ // Add resolution information to the list
+ YangResolutionInfoImpl resolutionInfo =
+ new YangResolutionInfoImpl<>(type, (YangNode) leavesHolder,
+ type.getLineNumber(), type.getCharPosition());
+ try {
+ addResolutionInfo(resolutionInfo);
+ } catch (DataModelException e) {
+ throw new LinkerException("Failed to add leaf type info in grouping, to resolution ");
+ }
+ } else if (type.getDataType() == IDENTITYREF) {
+ YangIdentityRef identityRef = (YangIdentityRef) type.getDataTypeExtendedInfo();
+
+ identityRef.setIdentityForInterFileGroupingResolution(true);
+
+ // Add resolution information to the list
+ YangResolutionInfoImpl resolutionInfo =
+ new YangResolutionInfoImpl<YangIdentityRef>(identityRef, (YangNode) leavesHolder,
+ identityRef.getLineNumber(), identityRef.getCharPosition());
+ try {
+ addResolutionInfo(resolutionInfo);
+ } catch (DataModelException e) {
+ throw new LinkerException("Failed to add leaf identity ref info in grouping, to resolution ");
+ }
+ }
+ }
+ }
+
+ if (leavesHolder.getListOfLeafList() != null && !leavesHolder.getListOfLeafList().isEmpty()) {
+ for (YangLeafList leafList : leavesHolder.getListOfLeafList()) {
+ YangType type = leafList.getDataType();
+ if (type.getDataType() == DERIVED) {
+
+ type.setTypeForInterFileGroupingResolution(true);
+
+ // Add resolution information to the list
+ YangResolutionInfoImpl resolutionInfo =
+ new YangResolutionInfoImpl<YangType>(type, (YangNode) leavesHolder,
+ type.getLineNumber(), type.getCharPosition());
+ try {
+ addResolutionInfo(resolutionInfo);
+ } catch (DataModelException e) {
+ throw new LinkerException("Failed to add leaf type info in grouping, to resolution ");
+ }
+ } else if (type.getDataType() == IDENTITYREF) {
+ YangIdentityRef identityRef = (YangIdentityRef) type.getDataTypeExtendedInfo();
+
+ identityRef.setIdentityForInterFileGroupingResolution(true);
+ // Add resolution information to the list
+ YangResolutionInfoImpl resolutionInfo =
+ new YangResolutionInfoImpl<YangIdentityRef>(identityRef, (YangNode) leavesHolder,
+ identityRef.getLineNumber(), identityRef.getCharPosition());
+ try {
+ addResolutionInfo(resolutionInfo);
+ } catch (DataModelException e) {
+ throw new LinkerException("Failed to add leaf identity ref info in grouping, to resolution ");
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Fills the path predicates of the leaf-ref with right axis node and
+ * left axis node, after linking the nodes.
+ *
+ * @param leafRef YANG leaf-ref
+ * @throws DataModelException if there is a data model error
+ */
+ public static void fillPathPredicates(YangLeafRef<?> leafRef)
+ throws DataModelException {
+
+ List<YangAtomicPath> atomics = leafRef.getAtomicPath();
+ if (atomics != null) {
+ for (YangAtomicPath atom : atomics) {
+ List<YangPathPredicate> predicates =
+ atom.getPathPredicatesList();
+
+ if (predicates != null) {
+ for (YangPathPredicate predicate : predicates) {
+ setLeftAxisNode(leafRef, atom, predicate);
+ setRightAxisNode(leafRef, predicate);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Sets the left axis node in the YANG path predicate after finding it
+ * under the YANG list node.
+ *
+ * @param leafRef YANG leaf-ref
+ * @param atom atomic path content
+ * @param predicate predicate in the atomic path
+ * @throws DataModelException if there is a data model error
+ */
+ private static void setLeftAxisNode(YangLeafRef<?> leafRef,
+ YangAtomicPath atom,
+ YangPathPredicate predicate)
+ throws DataModelException {
+ YangNode resolvedNode = atom.getResolvedNode();
+ if (!(resolvedNode instanceof YangList)) {
+ throw getDataModelExc(LEAF_REF_LIST_ERR, leafRef);
+ }
+
+ YangNodeIdentifier leftAxisName = predicate.getNodeId();
+ Object target = getTarget(leftAxisName, resolvedNode, leafRef);
+ predicate.setLeftAxisNode(target);
+ }
+
+ /**
+ * Returns the target leaf/leaf-list from the provided YANG node.
+ *
+ * @param leftAxisName name of node
+ * @param node node having target
+ * @param leafRef YANG leaf-ref
+ * @return target leaf/leaf-list
+ * @throws DataModelException if there is a data model error
+ */
+ private static Object getTarget(YangNodeIdentifier leftAxisName,
+ YangNode node, YangLeafRef leafRef)
+ throws DataModelException {
+
+ YangLeaf leaf = getLeaf(leftAxisName, (YangLeavesHolder) node);
+ if (leaf != null) {
+ return leaf;
+ }
+ YangLeafList leafList = getLeafList(leftAxisName,
+ (YangLeavesHolder) node);
+ if (leafList == null) {
+ throw getDataModelExc(TGT_LEAF_ERR, leafRef);
+ }
+ return leafList;
+ }
+
+ /**
+ * Returns the leaf by searching it in the node by the leaf name. Returns
+ * null when the name doesn't match.
+ *
+ * @param name leaf name
+ * @param holder holder of leaf
+ * @return YANG leaf
+ */
+ private static YangLeaf getLeaf(YangNodeIdentifier name,
+ YangLeavesHolder holder) {
+
+ List<YangLeaf> listOfLeaf = holder.getListOfLeaf();
+ if (listOfLeaf != null) {
+ for (YangLeaf yangLeaf : listOfLeaf) {
+ if (yangLeaf.getName().equals(name.getName())) {
+ return yangLeaf;
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns the leaf-list by searching it in the node by the leaf-list name.
+ * Returns null when the name doesn't match.
+ *
+ * @param name leaf-list name
+ * @param holder holder of leaf-list
+ * @return YANG leaf-list
+ */
+ private static YangLeafList getLeafList(YangNodeIdentifier name,
+ YangLeavesHolder holder) {
+
+ List<YangLeafList> listOfLeafList = holder.getListOfLeafList();
+ if (listOfLeafList != null) {
+ for (YangLeafList yangLeafList : listOfLeafList) {
+ if (yangLeafList.getName().equals(name.getName())) {
+ return yangLeafList;
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns the root node from which the path with the atomic node names
+ * has to be traversed through. With the ancestor count the nodes are
+ * moved upward.
+ *
+ * @param count ancestor count
+ * @param node current leaf-ref parent
+ * @param leafRef YANG leaf-ref
+ * @return root node from ancestor count
+ * @throws DataModelException if there is a data model error
+ */
+ private static YangNode getRootNode(int count, YangNode node,
+ YangLeafRef leafRef)
+ throws DataModelException {
+
+ YangNode curParent = node;
+ int curCount = 0;
+ while (curCount < count) {
+ curCount = curCount + 1;
+ if (curCount != 1) {
+ if (curParent.getParent() == null) {
+ throw getDataModelExc(INVALID_TREE, leafRef);
+ }
+ curParent = curParent.getParent();
+ }
+ curParent = skipInvalidDataNodes(curParent, leafRef);
+ if (curParent instanceof YangAugment) {
+ YangAugment augment = (YangAugment) curParent;
+ curParent = augment.getAugmentedNode();
+ curCount = curCount + 1;
+ }
+ }
+ return curParent;
+ }
+
+ /**
+ * Returns the last node by traversing through the atomic node id by
+ * leaving the last target leaf/leaf-list.
+ *
+ * @param curNode current node
+ * @param relPath relative path
+ * @param leafRef YANG leaf-ref
+ * @return last YANG node
+ * @throws DataModelException if there is a data model error
+ */
+ private static Object getLastNode(YangNode curNode,
+ YangRelativePath relPath,
+ YangLeafRef leafRef)
+ throws DataModelException {
+
+ YangNode node = curNode;
+ List<YangAtomicPath> atomics = new ArrayList<>();
+ atomics.addAll(relPath.getAtomicPathList());
+
+ if (atomics.isEmpty()) {
+ throw getDataModelExc(EMPTY_PATH_LIST_ERR, leafRef);
+ }
+
+ YangAtomicPath pathTgt = atomics.get(atomics.size() - 1);
+ if (atomics.size() == 1) {
+ return getTarget(pathTgt.getNodeIdentifier(), node, leafRef);
+ }
+
+ atomics.remove(atomics.size() - 1);
+ for (YangAtomicPath atomicPath : atomics) {
+ node = getNode(node.getChild(), atomicPath.getNodeIdentifier());
+ if (node == null) {
+ throw getDataModelExc(INVALID_PATH_PRE, leafRef);
+ }
+ }
+ return getTarget(pathTgt.getNodeIdentifier(), node, leafRef);
+ }
+
+ /**
+ * Returns the node from the parent node by matching it with the atomic
+ * name. If no child node matches the name then it returns null.
+ *
+ * @param curNode current node
+ * @param identifier atomic name
+ * @return node to be traversed
+ */
+ private static YangNode getNode(YangNode curNode,
+ YangNodeIdentifier identifier) {
+ YangNode node = curNode;
+ while (node != null) {
+ if (node.getName().equals(identifier.getName())) {
+ return node;
+ }
+ node = node.getNextSibling();
+ }
+ return null;
+ }
+
+ /**
+ * Sets the right axis node in the YANG path predicate after finding it
+ * from the relative path.
+ *
+ * @param leafRef YANG leaf-ref
+ * @param predicate YANG path predicate
+ * @throws DataModelException if there is a data model error
+ */
+ private static void setRightAxisNode(YangLeafRef leafRef,
+ YangPathPredicate predicate)
+ throws DataModelException {
+
+ YangNode parentNode = leafRef.getParentNode();
+ YangRelativePath relPath = predicate.getRelPath();
+ int ancestor = relPath.getAncestorNodeCount();
+
+ YangNode rootNode = getRootNode(ancestor, parentNode, leafRef);
+ Object target = getLastNode(rootNode, relPath, leafRef);
+ if (target == null) {
+ throw getDataModelExc(INVALID_PATH_PRE, leafRef);
+ }
+ predicate.setRightAxisNode(target);
+ }
+
+ /**
+ * Returns data model error messages for leaf-ref with the path.
+ *
+ * @param msg error message
+ * @param leafRef YANG leaf-ref
+ * @return data model exception
+ */
+ private static DataModelException getDataModelExc(String msg,
+ YangLeafRef leafRef) {
+ DataModelException exc = new DataModelException(
+ msg + leafRef.getPath());
+ exc.setCharPosition(leafRef.getCharPosition());
+ exc.setLine(leafRef.getLineNumber());
+ return exc;
+ }
+}
diff --git a/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/impl/YangResolutionInfoImpl.java b/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/impl/YangResolutionInfoImpl.java
new file mode 100644
index 0000000..3c1542c
--- /dev/null
+++ b/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/impl/YangResolutionInfoImpl.java
@@ -0,0 +1,1623 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.linker.impl;
+
+import org.onosproject.yang.compiler.datamodel.DefaultLocationInfo;
+import org.onosproject.yang.compiler.datamodel.Resolvable;
+import org.onosproject.yang.compiler.datamodel.RpcNotificationContainer;
+import org.onosproject.yang.compiler.datamodel.TraversalType;
+import org.onosproject.yang.compiler.datamodel.YangAtomicPath;
+import org.onosproject.yang.compiler.datamodel.YangAugment;
+import org.onosproject.yang.compiler.datamodel.YangAugmentableNode;
+import org.onosproject.yang.compiler.datamodel.YangBase;
+import org.onosproject.yang.compiler.datamodel.YangCompilerAnnotation;
+import org.onosproject.yang.compiler.datamodel.YangDerivedInfo;
+import org.onosproject.yang.compiler.datamodel.YangEntityToResolveInfoImpl;
+import org.onosproject.yang.compiler.datamodel.YangFeature;
+import org.onosproject.yang.compiler.datamodel.YangFeatureHolder;
+import org.onosproject.yang.compiler.datamodel.YangGrouping;
+import org.onosproject.yang.compiler.datamodel.YangIdentity;
+import org.onosproject.yang.compiler.datamodel.YangIdentityRef;
+import org.onosproject.yang.compiler.datamodel.YangIfFeature;
+import org.onosproject.yang.compiler.datamodel.YangImport;
+import org.onosproject.yang.compiler.datamodel.YangInclude;
+import org.onosproject.yang.compiler.datamodel.YangInput;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangLeafRef;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeIdentifier;
+import org.onosproject.yang.compiler.datamodel.YangReferenceResolver;
+import org.onosproject.yang.compiler.datamodel.YangRelativePath;
+import org.onosproject.yang.compiler.datamodel.YangResolutionInfo;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.YangTypeDef;
+import org.onosproject.yang.compiler.datamodel.YangUses;
+import org.onosproject.yang.compiler.datamodel.YangXPathResolver;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.linker.exceptions.LinkerException;
+
+import java.io.Serializable;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Stack;
+
+import static org.onosproject.yang.compiler.datamodel.ResolvableType.YANG_LEAFREF;
+import static org.onosproject.yang.compiler.datamodel.TraversalType.CHILD;
+import static org.onosproject.yang.compiler.datamodel.TraversalType.PARENT;
+import static org.onosproject.yang.compiler.datamodel.TraversalType.ROOT;
+import static org.onosproject.yang.compiler.datamodel.TraversalType.SIBILING;
+import static org.onosproject.yang.compiler.datamodel.YangPathArgType.ABSOLUTE_PATH;
+import static org.onosproject.yang.compiler.datamodel.YangPathArgType.RELATIVE_PATH;
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.getErrorMsg;
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.addResolutionInfo;
+import static org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus.INTER_FILE_LINKED;
+import static org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus.INTRA_FILE_RESOLVED;
+import static org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus.LINKED;
+import static org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus.RESOLVED;
+import static org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus.UNDEFINED;
+import static org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus.UNRESOLVED;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.PATH_DATA;
+import static org.onosproject.yang.compiler.linker.impl.XpathLinkingTypes.AUGMENT_LINKING;
+import static org.onosproject.yang.compiler.linker.impl.XpathLinkingTypes.LEAF_REF_LINKING;
+import static org.onosproject.yang.compiler.linker.impl.YangLinkerUtils.detectCollisionForAugmentedNode;
+import static org.onosproject.yang.compiler.linker.impl.YangLinkerUtils.fillPathPredicates;
+import static org.onosproject.yang.compiler.linker.impl.YangLinkerUtils.getErrorInfoForLinker;
+import static org.onosproject.yang.compiler.linker.impl.YangLinkerUtils.getLeafRefErrorInfo;
+import static org.onosproject.yang.compiler.linker.impl.YangLinkerUtils.getPathWithAugment;
+import static org.onosproject.yang.compiler.linker.impl.YangLinkerUtils.getValidNodeIdentifier;
+import static org.onosproject.yang.compiler.linker.impl.YangLinkerUtils.skipInvalidDataNodes;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EMPTY_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.FAILED_TO_FIND_ANNOTATION;
+import static org.onosproject.yang.compiler.utils.UtilConstants.FAILED_TO_FIND_LEAD_INFO_HOLDER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.FAILED_TO_LINK;
+import static org.onosproject.yang.compiler.utils.UtilConstants.INVALID_ENTITY;
+import static org.onosproject.yang.compiler.utils.UtilConstants.INVALID_LINKER_STATE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.INVALID_RESOLVED_ENTITY;
+import static org.onosproject.yang.compiler.utils.UtilConstants.INVALID_TARGET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.INVALID_TREE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.LEAFREF;
+import static org.onosproject.yang.compiler.utils.UtilConstants.LINKER_ERROR;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SLASH_FOR_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.UNRESOLVABLE;
+
+/**
+ * Represents implementation of resolution object which will be resolved by
+ * linker.
+ *
+ * @param <T> type of resolution entity uses / type
+ */
+public class YangResolutionInfoImpl<T> extends DefaultLocationInfo
+ implements YangResolutionInfo<T>, Serializable {
+
+ private static final long serialVersionUID = 806201658L;
+
+ /**
+ * Information about the entity that needs to be resolved.
+ */
+ private YangEntityToResolveInfoImpl<T> entityToResolveInfo;
+
+ /**
+ * Current module/sub-module reference, will be used in inter-file/
+ * inter-jar scenario to get the import/include list.
+ */
+ private YangReferenceResolver curRefResolver;
+
+ /**
+ * Stack for type/uses is maintained for hierarchical references, this is
+ * used during resolution.
+ */
+ private Stack<YangEntityToResolveInfoImpl<T>> partialResolvedStack;
+
+ /**
+ * It is private to ensure the overloaded method be invoked to create an
+ * object.
+ */
+ @SuppressWarnings("unused")
+ private YangResolutionInfoImpl() {
+ }
+
+ /**
+ * Creates a resolution information object with all the inputs.
+ *
+ * @param dataNode current parsable data node
+ * @param holderNode parent YANG node
+ * @param lineNumber error line number
+ * @param charPositionInLine error character position in line
+ */
+ public YangResolutionInfoImpl(T dataNode, YangNode holderNode, int lineNumber,
+ int charPositionInLine) {
+ entityToResolveInfo = new YangEntityToResolveInfoImpl<>();
+ entityToResolveInfo.setEntityToResolve(dataNode);
+ entityToResolveInfo.setHolderOfEntityToResolve(holderNode);
+ setLineNumber(lineNumber);
+ setCharPosition(charPositionInLine);
+ partialResolvedStack = new Stack<>();
+ }
+
+ @Override
+ public void resolveLinkingForResolutionInfo(YangReferenceResolver dataModelRootNode)
+ throws DataModelException {
+
+ curRefResolver = dataModelRootNode;
+ /*
+ * Current node to resolve, it can be a YANG type, YANG uses or YANG if-feature or
+ * YANG leafref or YANG base or YANG identityref.
+ */
+ T entityToResolve = entityToResolveInfo.getEntityToResolve();
+
+ // Check if linking is already done
+ if (entityToResolve instanceof Resolvable) {
+ Resolvable resolvable = (Resolvable) entityToResolve;
+ if (resolvable.getResolvableStatus() == RESOLVED) {
+ /*
+ * entity is already resolved, so nothing to do
+ */
+ return;
+ }
+ } else {
+ throw new DataModelException(LINKER_ERROR);
+ }
+ // Push the initial entity to resolve in stack.
+ addInPartialResolvedStack(entityToResolveInfo);
+ linkAndResolvePartialResolvedStack();
+ addDerivedRefTypeToRefTypeResolutionList();
+ }
+
+ /**
+ * Resolves linking with ancestors.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ private void linkAndResolvePartialResolvedStack()
+ throws DataModelException {
+
+ while (!partialResolvedStack.isEmpty()) {
+ /*
+ * Current node to resolve, it can be a YANG type or YANG uses or
+ * YANG if-feature or YANG leafref or YANG base or YANG identityref.
+ */
+ T entityToResolve = getCurEntityToResolveFromStack();
+ if (!(entityToResolve instanceof Resolvable)) {
+ throw new DataModelException(LINKER_ERROR);
+ }
+ // Check if linking is already done
+ Resolvable resolvable = (Resolvable) entityToResolve;
+ switch (resolvable.getResolvableStatus()) {
+ case RESOLVED:
+ /*
+ * If the entity is already resolved in the stack, then pop
+ * it and continue with the remaining stack elements to
+ * resolve
+ */
+ partialResolvedStack.pop();
+ break;
+
+ case LINKED:
+ /*
+ * If the top of the stack is already linked then resolve
+ * the references and pop the entity and continue with
+ * remaining stack elements to resolve.
+ */
+ resolveTopOfStack();
+ partialResolvedStack.pop();
+ break;
+
+ case INTRA_FILE_RESOLVED:
+ /*
+ * Pop the top of the stack.
+ */
+ partialResolvedStack.pop();
+ break;
+
+ case UNRESOLVED:
+ linkTopOfStackReferenceUpdateStack();
+
+ if (resolvable.getResolvableStatus() == UNRESOLVED) {
+ // If current entity is still not resolved, then
+ // linking/resolution has failed.
+ DataModelException ex =
+ new DataModelException
+ (getErrorInfoForLinker(resolvable));
+ ex.setLine(getLineNumber());
+ ex.setCharPosition(getCharPosition());
+ throw ex;
+ }
+ break;
+
+ default:
+ throw new DataModelException(INVALID_LINKER_STATE);
+ }
+ }
+ }
+
+ /**
+ * Adds leaf-ref to the resolution list, with different context if
+ * leaf-ref is defined under derived type. Leaf-ref must be resolved from
+ * where the typedef is referenced.
+ */
+ private void addDerivedRefTypeToRefTypeResolutionList()
+ throws DataModelException {
+
+ YangNode refNode = entityToResolveInfo.getHolderOfEntityToResolve();
+ YangDerivedInfo info = getValidResolvableType();
+
+ if (info == null) {
+ return;
+ }
+
+ YangType<T> type =
+ (YangType<T>) entityToResolveInfo.getEntityToResolve();
+
+ T extType = (T) info.getReferredTypeDef().getTypeDefBaseType()
+ .getDataTypeExtendedInfo();
+
+ while (extType instanceof YangDerivedInfo) {
+ info = (YangDerivedInfo) extType;
+ extType = (T) info.getReferredTypeDef().getTypeDefBaseType()
+ .getDataTypeExtendedInfo();
+ }
+ /*
+ * Backup the leaf-ref info from derived type and deletes the derived
+ * type info. Copies the backed up leaf-ref data to the actual type in
+ * replacement of derived type. Adds to the resolution list in this
+ * context.
+ */
+ addRefTypeInfo(extType, type, refNode);
+ }
+
+ /**
+ * Returns the derived info if the holder is typedef, the entity is type
+ * and the effective type is leaf-ref; null otherwise.
+ *
+ * @return derived info
+ */
+ private YangDerivedInfo<?> getValidResolvableType() {
+
+ YangNode refNode = entityToResolveInfo.getHolderOfEntityToResolve();
+ T entity = entityToResolveInfo.getEntityToResolve();
+
+ if (!(refNode instanceof YangTypeDef) && entity instanceof YangType) {
+ YangType<?> type = (YangType) entity;
+ YangDerivedInfo<?> info =
+ (YangDerivedInfo) type.getDataTypeExtendedInfo();
+ YangDataTypes dataType = info.getEffectiveBuiltInType();
+ if ((type.getResolvableStatus() == RESOLVED) &&
+ (dataType == YangDataTypes.LEAFREF)) {
+ return info;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Adds resolvable type (leaf-ref) info to resolution list.
+ *
+ * @param extType resolvable type
+ * @param type YANG type
+ * @param holder holder node
+ * @throws DataModelException if there is a data model error
+ */
+ private void addRefTypeInfo(T extType, YangType<T> type, YangNode holder)
+ throws DataModelException {
+
+ type.resetYangType();
+ type.setResolvableStatus(RESOLVED);
+ type.setDataType(YangDataTypes.LEAFREF);
+ type.setDataTypeName(LEAFREF);
+ type.setDataTypeExtendedInfo(extType);
+
+ YangLeafRef leafRef = (YangLeafRef) extType;
+ (leafRef).setResolvableStatus(UNRESOLVED);
+ leafRef.setParentNode(holder);
+
+ YangResolutionInfoImpl info = new YangResolutionInfoImpl<>(
+ leafRef, holder, getLineNumber(), getCharPosition());
+ curRefResolver.addToResolutionList(info, YANG_LEAFREF);
+ curRefResolver.resolveSelfFileLinking(YANG_LEAFREF);
+ }
+
+ /**
+ * Resolves the current entity in the stack.
+ */
+ private void resolveTopOfStack()
+ throws DataModelException {
+ T entity = getCurEntityToResolveFromStack();
+ List<T> entityToResolve = (List<T>) ((Resolvable) entity).resolve();
+ if (entityToResolve != null && !entityToResolve.isEmpty()) {
+ for (T anEntityToResolve : entityToResolve) {
+ addUnresolvedEntitiesToResolutionList(anEntityToResolve);
+ }
+ }
+ if (((Resolvable) entity).getResolvableStatus() != INTRA_FILE_RESOLVED &&
+ ((Resolvable) entity).getResolvableStatus() != UNDEFINED) {
+ // Sets the resolution status in inside the type/uses/if-feature/leafref.
+ ((Resolvable) entity).setResolvableStatus(RESOLVED);
+ }
+ }
+
+ /**
+ * Adds the unresolved entities to the resolution list.
+ *
+ * @param entityToResolve entity to resolve
+ * @throws DataModelException a violation of data model rules
+ */
+ private void addUnresolvedEntitiesToResolutionList(T entityToResolve)
+ throws DataModelException {
+ if (entityToResolve instanceof YangEntityToResolveInfoImpl) {
+ YangEntityToResolveInfoImpl entityToResolveInfo
+ = (YangEntityToResolveInfoImpl) entityToResolve;
+ if (entityToResolveInfo.getEntityToResolve() instanceof YangLeafRef) {
+ YangLeafRef leafref = (YangLeafRef) entityToResolveInfo
+ .getEntityToResolve();
+ YangNode parentNodeOfLeafref = entityToResolveInfo
+ .getHolderOfEntityToResolve();
+ leafref.setParentNode(parentNodeOfLeafref);
+ if (leafref.getResolvableStatus() == UNRESOLVED) {
+ leafref.setResolvableStatus(INTRA_FILE_RESOLVED);
+ }
+ }
+
+ // Add resolution information to the list.
+ YangResolutionInfoImpl resolutionInfoImpl = new YangResolutionInfoImpl<>(
+ entityToResolveInfo.getEntityToResolve(),
+ entityToResolveInfo.getHolderOfEntityToResolve(),
+ entityToResolveInfo.getLineNumber(),
+ entityToResolveInfo.getCharPosition());
+ addResolutionInfo(resolutionInfoImpl);
+ }
+ }
+
+ /**
+ * Resolves linking for a node child and siblings.
+ *
+ * @throws DataModelException data model error
+ */
+ private void linkTopOfStackReferenceUpdateStack()
+ throws DataModelException {
+ T entity = getCurEntityToResolveFromStack();
+ if (entity instanceof YangLeafRef) {
+ ((Resolvable) entity).setResolvableStatus(INTRA_FILE_RESOLVED);
+ return;
+ }
+ /*
+ * Check if self file reference is there, this will not check for the
+ * scenario when prefix is not present and type/uses is present in
+ * sub-module from include list.
+ */
+ if (!isCandidateForSelfFileReference()) {
+ ((Resolvable) entity).setResolvableStatus(INTRA_FILE_RESOLVED);
+ return;
+ }
+
+ /*
+ * Try to resolve the top of the stack and update partial resolved stack
+ * if there is recursive references
+ */
+ YangNode ancestorRefNode = partialResolvedStack.peek()
+ .getHolderOfEntityToResolve();
+
+ if (entity instanceof YangIfFeature) {
+ resolveSelfFileLinkingForIfFeature(ancestorRefNode);
+ return;
+ }
+ if (entity instanceof YangIdentityRef || entity instanceof YangBase) {
+ resolveSelfFileLinkingForBaseAndIdentityref();
+ return;
+ }
+ YangType type = null;
+ if (entity instanceof YangType) {
+ type = (YangType) entity;
+ }
+ /*
+ * Traverse up in the ancestor tree to check if the referred node is
+ * defined
+ */
+ while (ancestorRefNode != null) {
+ /*
+ * Check for the referred node defined in a ancestor scope
+ */
+ YangNode curRefNode = ancestorRefNode.getChild();
+ if (isReferredNodeInSiblingListProcessed(curRefNode)) {
+ return;
+ }
+ ancestorRefNode = ancestorRefNode.getParent();
+ if (type != null && ancestorRefNode != null) {
+ if (ancestorRefNode.getParent() == null) {
+ type.setTypeNotResolvedTillRootNode(true);
+ }
+ }
+ }
+
+ /*
+ * In case prefix is not present or it's self prefix it's a candidate for inter-file
+ * resolution via include list.
+ */
+ if (getRefPrefix() == null ||
+ getRefPrefix().contentEquals(curRefResolver.getPrefix())) {
+ ((Resolvable) entity).setResolvableStatus(INTRA_FILE_RESOLVED);
+ }
+ }
+
+ /**
+ * Resolves self file linking for base/identityref.
+ *
+ * @throws DataModelException a violation of data model rules
+ */
+ private void resolveSelfFileLinkingForBaseAndIdentityref()
+ throws DataModelException {
+
+ boolean refIdentity = false;
+ String nodeName = null;
+ T entity = getCurEntityToResolveFromStack();
+ if (entity instanceof YangIdentityRef) {
+ nodeName = ((YangIdentityRef) entity).getName();
+ } else if (entity instanceof YangBase) {
+ nodeName = ((YangBase) entity).getBaseIdentifier().getName();
+ }
+ if (curRefResolver instanceof RpcNotificationContainer) {
+ // Sends list of nodes for finding the target identity.
+ refIdentity = isIdentityReferenceFound(nodeName, (YangNode) curRefResolver);
+ }
+ if (refIdentity) {
+ return;
+ }
+
+ /*
+ * In case prefix is not present or it's self prefix it's a candidate for inter-file
+ * resolution via include list.
+ */
+ if (getRefPrefix() == null || getRefPrefix()
+ .contentEquals(curRefResolver.getPrefix())) {
+ ((Resolvable) entity).setResolvableStatus(INTRA_FILE_RESOLVED);
+ }
+ }
+
+ /**
+ * Resolves self file linking for if-feature.
+ *
+ * @param ancestorRefNode if-feature holder node
+ * @throws DataModelException DataModelException a violation of data model
+ * rules
+ */
+ private void resolveSelfFileLinkingForIfFeature(YangNode ancestorRefNode)
+ throws DataModelException {
+
+ YangFeatureHolder featureHolder = getFeatureHolder(ancestorRefNode);
+ YangNode curRefNode = (YangNode) featureHolder;
+ if (isReferredNode(curRefNode)) {
+
+ // Adds reference link of entity to the node under resolution.
+ addReferredEntityLink(curRefNode, LINKED);
+
+ /*
+ * resolve the reference and update the partial resolution stack
+ * with any further recursive references
+ */
+ addUnresolvedRecursiveReferenceToStack(curRefNode);
+ return;
+ }
+
+ /*
+ * In case prefix is not present or it's self prefix it's a candidate for inter-file
+ * resolution via include list.
+ */
+ if (getRefPrefix() == null || getRefPrefix()
+ .contentEquals(curRefResolver.getPrefix())) {
+ ((Resolvable) getCurEntityToResolveFromStack())
+ .setResolvableStatus(INTRA_FILE_RESOLVED);
+ }
+ }
+
+ /**
+ * Returns the status of the referred identity found for base/identityref.
+ *
+ * @param nodeName the name of the base node
+ * identifier/identityref node identifier
+ * @param ancestorRefNode the parent node of base/identityref
+ * @return status of referred base/identityref
+ * @throws DataModelException a violation of data model rules
+ */
+ private boolean isIdentityReferenceFound(String nodeName, YangNode ancestorRefNode)
+ throws DataModelException {
+
+ // When child is not present return.
+ if (ancestorRefNode.getChild() == null) {
+ return false;
+ }
+
+ ancestorRefNode = ancestorRefNode.getChild();
+
+ // Checks all the siblings under the node and returns the matched node.
+ YangNode nodeFound = isReferredNodeInSiblingProcessedForIdentity(ancestorRefNode,
+ nodeName);
+
+ if (nodeFound != null) {
+ // Adds reference link of entity to the node under resolution.
+ addReferredEntityLink(nodeFound, LINKED);
+
+ /*
+ * resolve the reference and update the partial resolution stack with any further recursive references
+ */
+ addUnresolvedRecursiveReferenceToStack(nodeFound);
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Adds the unresolved constructs to stack which has to be resolved for leafref.
+ *
+ * @param leavesInfo YANG leaf or leaf list which holds the type
+ * @param ancestorRefNode holder of the YANG leaf or leaf list
+ */
+ private void addUnResolvedLeafRefTypeToStack(T leavesInfo, YangNode ancestorRefNode) {
+
+ YangType refType;
+ T extendedInfo;
+ if (leavesInfo instanceof YangLeaf) {
+ YangLeaf leaf = (YangLeaf) leavesInfo;
+ refType = leaf.getDataType();
+ } else {
+ YangLeafList leafList = (YangLeafList) leavesInfo;
+ refType = leafList.getDataType();
+ }
+ extendedInfo = (T) refType.getDataTypeExtendedInfo();
+ addUnResolvedTypeDataToStack(refType, ancestorRefNode, extendedInfo);
+ }
+
+ //Adds unresolved type info to stack.
+ private void addUnResolvedTypeDataToStack(YangType refType, YangNode
+ ancestorRefNode, T extendedInfo) {
+ YangEntityToResolveInfoImpl<YangLeafRef<?>> unResolvedLeafRef =
+ new YangEntityToResolveInfoImpl<>();
+ YangEntityToResolveInfoImpl<YangType<?>> unResolvedTypeDef =
+ new YangEntityToResolveInfoImpl<>();
+ if (refType.getDataType() == YangDataTypes.LEAFREF) {
+ unResolvedLeafRef.setEntityToResolve((YangLeafRef<?>) extendedInfo);
+ unResolvedLeafRef.setHolderOfEntityToResolve(ancestorRefNode);
+ addInPartialResolvedStack((YangEntityToResolveInfoImpl<T>) unResolvedLeafRef);
+ } else if (refType.getDataType() == YangDataTypes.DERIVED) {
+ unResolvedTypeDef.setEntityToResolve(refType);
+ unResolvedTypeDef.setHolderOfEntityToResolve(ancestorRefNode);
+ addInPartialResolvedStack((YangEntityToResolveInfoImpl<T>) unResolvedTypeDef);
+ }
+ }
+
+ /**
+ * Returns feature holder(module/sub-module node) .
+ *
+ * @param ancestorRefNode if-feature holder node
+ */
+ private YangFeatureHolder getFeatureHolder(YangNode ancestorRefNode) {
+ while (ancestorRefNode != null) {
+ if (ancestorRefNode instanceof YangFeatureHolder) {
+ return (YangFeatureHolder) ancestorRefNode;
+ }
+ ancestorRefNode = ancestorRefNode.getParent();
+ }
+ return null;
+ }
+
+ /**
+ * Checks if the reference in self file or in external file.
+ *
+ * @return true if self file reference, false otherwise
+ * @throws DataModelException a violation of data model rules
+ */
+ private boolean isCandidateForSelfFileReference()
+ throws DataModelException {
+ String prefix = getRefPrefix();
+ return prefix == null || prefix.contentEquals(curRefResolver.getPrefix());
+ }
+
+ /**
+ * Checks for the referred parent node for the base/identity.
+ *
+ * @param refNode potential referred node
+ * @return the referred parent node of base/identity.
+ * @throws DataModelException data model errors
+ */
+ private YangNode isReferredNodeInSiblingProcessedForIdentity(YangNode refNode,
+ String refName)
+ throws DataModelException {
+
+ while (refNode != null) {
+ if (refNode instanceof YangIdentity) {
+ // Check if the potential referred node is the actual referred node
+ if (isReferredNodeForIdentity(refNode, refName)) {
+ return refNode;
+ }
+ }
+ refNode = refNode.getNextSibling();
+ }
+ return null;
+ }
+
+ /**
+ * Checks if the current reference node name and the name in the base/identityref base are equal.
+ *
+ * @param curRefNode the node where the reference is pointed
+ * @param name name of the base in the base/identityref base
+ * @return status of the match between the name
+ * @throws DataModelException a violation of data model rules
+ */
+ private boolean isReferredNodeForIdentity(YangNode curRefNode, String name)
+ throws DataModelException {
+ T entity = getCurEntityToResolveFromStack();
+ if (entity instanceof YangIdentityRef || entity instanceof YangBase) {
+
+ //Check if name of node name matches with the current reference node.
+ return curRefNode.getName().contentEquals(name);
+ } else {
+ throw new DataModelException(getErrorMsg(
+ INVALID_ENTITY, curRefNode.getName(), curRefNode.getLineNumber(),
+ curRefNode.getCharPosition(), curRefNode.getFileName()));
+ }
+ }
+
+ /**
+ * Checks for the referred node defined in a ancestor scope.
+ *
+ * @param refNode potential referred node
+ * @return status of resolution and updating the partial resolved stack with
+ * the any recursive references
+ * @throws DataModelException a violation of data model rules
+ */
+ private boolean isReferredNodeInSiblingListProcessed(YangNode refNode)
+ throws DataModelException {
+ while (refNode != null) {
+
+ // Check if the potential referred node is the actual referred node
+ if (isReferredNode(refNode)) {
+
+ // Adds reference link of entity to the node under resolution.
+ addReferredEntityLink(refNode, LINKED);
+
+ /*
+ * resolve the reference and update the partial resolution stack
+ * with any further recursive references
+ */
+ addUnresolvedRecursiveReferenceToStack(refNode);
+
+ /*
+ * return true, since the reference is linked and any recursive
+ * unresolved references is added to the stack
+ */
+ return true;
+ }
+
+ refNode = refNode.getNextSibling();
+ }
+ return false;
+ }
+
+ /**
+ * Checks if the potential referred node is the actual referred node.
+ *
+ * @param refNode typedef/grouping node
+ * @return true if node is of resolve type otherwise false
+ * @throws DataModelException a violation of data model rules
+ */
+ private boolean isReferredNode(YangNode refNode)
+ throws DataModelException {
+ T entity = getCurEntityToResolveFromStack();
+ if (entity instanceof YangType) {
+ if (refNode instanceof YangTypeDef) {
+ return isNodeNameSameAsResolutionInfoName(refNode);
+ }
+ } else if (entity instanceof YangUses) {
+ if (refNode instanceof YangGrouping) {
+ return isNodeNameSameAsResolutionInfoName(refNode);
+ }
+ } else if (entity instanceof YangIfFeature) {
+ if (refNode instanceof YangFeatureHolder) {
+ return isNodeNameSameAsResolutionInfoName(refNode);
+ }
+ } else if (entity instanceof YangBase || entity instanceof YangIdentityRef) {
+ if (refNode instanceof YangIdentity) {
+ return isNodeNameSameAsResolutionInfoName(refNode);
+ }
+ } else {
+ throw new DataModelException(getErrorMsg(
+ LINKER_ERROR, refNode.getName(), refNode.getLineNumber(),
+ refNode.getCharPosition(), refNode.getFileName()));
+ }
+ return false;
+ }
+
+ /**
+ * Checks if node name is same as name in resolution info, i.e. name of
+ * typedef/grouping is same as name of type/uses.
+ *
+ * @param node typedef/grouping node
+ * @return true if node name is same as name in resolution info, otherwise
+ * false
+ * @throws DataModelException a violation of data model rules
+ */
+
+ private boolean isNodeNameSameAsResolutionInfoName(YangNode node)
+ throws DataModelException {
+ T entity = getCurEntityToResolveFromStack();
+ if (entity instanceof YangType) {
+ return node.getName().contentEquals(((YangType<?>) entity)
+ .getDataTypeName());
+ }
+ if (entity instanceof YangUses) {
+ return node.getName().contentEquals(((YangUses) entity).getName());
+ }
+ if (entity instanceof YangIfFeature) {
+ return isFeatureDefinedInNode(node);
+ }
+ if (entity instanceof YangBase) {
+ return node.getName().contentEquals(((
+ YangBase) entity).getBaseIdentifier().getName());
+ }
+ if (entity instanceof YangIdentityRef) {
+ return node.getName().contentEquals(((YangIdentityRef) entity).getName());
+ }
+ throw new DataModelException(getErrorMsg(
+ INVALID_RESOLVED_ENTITY, node.getName(), node.getLineNumber(),
+ node.getCharPosition(), node.getFileName()));
+ }
+
+ private boolean isFeatureDefinedInNode(YangNode node) {
+ T entity = getCurEntityToResolveFromStack();
+ YangNodeIdentifier ifFeature = ((YangIfFeature) entity).getName();
+ List<YangFeature> featureList = ((YangFeatureHolder) node).getFeatureList();
+ if (featureList != null && !featureList.isEmpty()) {
+ Iterator<YangFeature> iterator = featureList.iterator();
+ while (iterator.hasNext()) {
+ YangFeature feature = iterator.next();
+ if (ifFeature.getName().equals(feature.getName())) {
+ ((YangIfFeature) entity).setReferredFeature(feature);
+ ((YangIfFeature) entity).setReferredFeatureHolder(node);
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Adds reference of grouping/typedef in uses/type.
+ *
+ * @param refNode grouping/typedef node being referred
+ * @param linkedStatus linked status if success.
+ * @throws DataModelException a violation of data model rules
+ */
+ private void addReferredEntityLink(YangNode refNode, ResolvableStatus linkedStatus)
+ throws DataModelException {
+ T entity = getCurEntityToResolveFromStack();
+ if (entity instanceof YangType) {
+ YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) ((
+ YangType<?>) entity).getDataTypeExtendedInfo();
+ derivedInfo.setReferredTypeDef((YangTypeDef) refNode);
+ } else if (entity instanceof YangUses) {
+ ((YangUses) entity).setRefGroup((YangGrouping) refNode);
+ } else if (entity instanceof YangBase) {
+ ((YangBase) entity).setReferredIdentity((YangIdentity) refNode);
+ } else if (entity instanceof YangIdentityRef) {
+ ((YangIdentityRef) entity).setReferredIdentity((YangIdentity) refNode);
+ } else if (!(entity instanceof YangIfFeature) &&
+ !(entity instanceof YangLeafRef)) {
+ throw new DataModelException(getErrorMsg(
+ LINKER_ERROR, refNode.getName(), refNode.getLineNumber(),
+ refNode.getCharPosition(), refNode.getFileName()));
+ }
+ // Sets the resolution status in inside the type/uses.
+ ((Resolvable) entity).setResolvableStatus(linkedStatus);
+ }
+
+ /**
+ * Checks if type/grouping has further reference to typedef/ unresolved
+ * uses. Add it to the partial resolve stack and return the status of
+ * addition to stack.
+ *
+ * @param refNode grouping/typedef node
+ * @throws DataModelException a violation of data model rules
+ */
+ private void addUnresolvedRecursiveReferenceToStack(YangNode refNode)
+ throws DataModelException {
+ T entity = getCurEntityToResolveFromStack();
+ if (entity instanceof YangType) {
+
+ //Checks if typedef type is derived
+ if (((YangTypeDef) refNode).getTypeDefBaseType()
+ .getDataType() == YangDataTypes.DERIVED) {
+ addEntityToStack((T) ((YangTypeDef) refNode).getTypeDefBaseType(),
+ refNode);
+ }
+ } else if (entity instanceof YangUses) {
+ /*
+ * Search if the grouping has any un resolved uses child, if so
+ * return true, else return false.
+ */
+ addUnResolvedUsesToStack(refNode);
+ } else if (entity instanceof YangIfFeature) {
+ addUnResolvedIfFeatureToStack(refNode);
+ } else if (entity instanceof YangLeafRef) {
+ // do nothing , referred node is already set
+ throw new DataModelException(getErrorMsg(
+ INVALID_RESOLVED_ENTITY, refNode.getName(), refNode.getLineNumber(),
+ refNode.getCharPosition(), refNode.getFileName()));
+ } else if (entity instanceof YangBase || entity instanceof YangIdentityRef) {
+
+ //Search if the identity has any un resolved base, if so return true, else return false.
+ addUnResolvedBaseToStack(refNode);
+ } else {
+ throw new DataModelException(getErrorMsg(
+ LINKER_ERROR, refNode.getName(), refNode.getLineNumber(),
+ refNode.getCharPosition(), refNode.getFileName()));
+ }
+ }
+
+ /**
+ * Returns if there is any unresolved uses in grouping.
+ *
+ * @param node grouping/typedef node
+ */
+ private void addUnResolvedUsesToStack(YangNode node) {
+
+ //Search the grouping node's children for presence of uses node.
+ TraversalType curTraversal = ROOT;
+ YangNode curNode = node.getChild();
+ while (curNode != null) {
+ if (curNode.getName().equals(node.getName())) {
+ // if we have traversed all the child nodes, then exit from loop
+ return;
+ }
+
+ // if child nodes has uses, then add it to resolution stack
+ if (curNode instanceof YangUses) {
+ addEntityToStack((T) curNode, node);
+ }
+
+ // Traversing all the child nodes of grouping
+ if (curTraversal != PARENT && curNode.getChild() != null) {
+ curTraversal = CHILD;
+ curNode = curNode.getChild();
+ } else if (curNode.getNextSibling() != null) {
+ curTraversal = SIBILING;
+ curNode = curNode.getNextSibling();
+ } else {
+ curTraversal = PARENT;
+ curNode = curNode.getParent();
+ }
+ }
+ }
+
+ /**
+ * Returns if there is any unresolved if-feature in feature.
+ *
+ * @param node module/submodule node
+ */
+ private void addUnResolvedIfFeatureToStack(YangNode node) {
+ YangFeature refFeature = ((YangIfFeature) getCurEntityToResolveFromStack())
+ .getReferredFeature();
+ List<YangIfFeature> ifFeatureList = refFeature.getIfFeatureList();
+ if (ifFeatureList != null && !ifFeatureList.isEmpty()) {
+ Iterator<YangIfFeature> ifFeatureIterator = ifFeatureList.iterator();
+ while (ifFeatureIterator.hasNext()) {
+ addEntityToStack((T) ifFeatureIterator.next(), node);
+ }
+ }
+ }
+
+ /**
+ * Returns if there is any unresolved base in identity.
+ *
+ * @param node module/submodule node
+ */
+ private void addUnResolvedBaseToStack(YangNode node) {
+
+ YangIdentity curNode = (YangIdentity) node;
+ if (curNode.getBaseNode() != null) {
+ if (curNode.getBaseNode().getResolvableStatus() != RESOLVED) {
+ addEntityToStack((T) curNode.getBaseNode(), node);
+ }
+ }
+ }
+
+ private void addEntityToStack(T entity, YangNode holder) {
+ YangEntityToResolveInfoImpl<T> unResolvedEntityInfo =
+ new YangEntityToResolveInfoImpl<>();
+ unResolvedEntityInfo.setEntityToResolve(entity);
+ unResolvedEntityInfo.setHolderOfEntityToResolve(holder);
+ addInPartialResolvedStack(unResolvedEntityInfo);
+ }
+
+ /**
+ * Sets stack of YANG type with partially resolved YANG construct hierarchy.
+ *
+ * @param partialResolvedInfo partial resolved YANG construct stack
+ */
+ private void addInPartialResolvedStack(YangEntityToResolveInfoImpl<T> partialResolvedInfo) {
+ partialResolvedStack.push(partialResolvedInfo);
+ }
+
+ /**
+ * Retrieves the next entity in the stack that needs to be resolved. It is
+ * assumed that the caller ensures that the stack is not empty.
+ *
+ * @return next entity in the stack that needs to be resolved
+ */
+ private T getCurEntityToResolveFromStack() {
+ return partialResolvedStack.peek().getEntityToResolve();
+ }
+
+ @Override
+ public YangEntityToResolveInfoImpl<T> getEntityToResolveInfo() {
+ return entityToResolveInfo;
+ }
+
+ @Override
+ public void linkInterFile(YangReferenceResolver dataModelRootNode)
+ throws DataModelException {
+
+ curRefResolver = dataModelRootNode;
+
+ // Current node to resolve, it can be a YANG type or YANG uses.
+ T entityToResolve = entityToResolveInfo.getEntityToResolve();
+
+ // Check if linking is already done
+ if (entityToResolve instanceof Resolvable) {
+ Resolvable resolvable = (Resolvable) entityToResolve;
+ if (resolvable.getResolvableStatus() == RESOLVED) {
+ return;
+ }
+ } else {
+ throw new DataModelException(UNRESOLVABLE);
+ }
+
+ if (entityToResolve instanceof YangXPathResolver &&
+ !(entityToResolve instanceof YangLeafRef)) {
+ //Process x-path linking.
+ processXPathLinking(entityToResolve, dataModelRootNode);
+ } else {
+ // Push the initial entity to resolve in stack.
+ addInPartialResolvedStack(entityToResolveInfo);
+ // Inter file linking and resolution.
+ linkInterFileAndResolve();
+ addDerivedRefTypeToRefTypeResolutionList();
+ }
+ }
+
+ /**
+ * Process x-path linking for augment and leaf-ref.
+ *
+ * @param entityToResolve entity to resolve
+ * @param root root node
+ * @throws DataModelException if there is a data model error
+ */
+ private void processXPathLinking(T entityToResolve,
+ YangReferenceResolver root)
+ throws DataModelException {
+
+ YangXpathLinker<T> xPathLinker = new YangXpathLinker<T>();
+
+ if (entityToResolve instanceof YangAugment) {
+ YangNode targetNode;
+ YangAugment augment = (YangAugment) entityToResolve;
+ targetNode = xPathLinker
+ .processXpathLinking(augment.getTargetNode(), (YangNode)
+ root, AUGMENT_LINKING);
+ if (targetNode != null) {
+ if (targetNode instanceof YangAugmentableNode) {
+ detectCollisionForAugmentedNode(targetNode, augment);
+ ((YangAugmentableNode) targetNode).addAugmentation(augment);
+ augment.setAugmentedNode(targetNode);
+ setAugmentedFlagInAncestors(targetNode);
+ Resolvable resolvable = (Resolvable) entityToResolve;
+ resolvable.setResolvableStatus(RESOLVED);
+ if (targetNode instanceof YangInput) {
+ xPathLinker.addInModuleIfInput(augment, (YangNode) root);
+ }
+ } else {
+ throw new LinkerException(getErrorMsg(
+ INVALID_TARGET + targetNode.getNodeType(),
+ augment.getName(), augment.getLineNumber(),
+ augment.getCharPosition(), augment.getFileName()));
+ }
+ } else {
+ throw new LinkerException(getErrorMsg(
+ FAILED_TO_LINK, augment.getName(), augment
+ .getLineNumber(), augment.getCharPosition(),
+ augment.getFileName()));
+ }
+ } else if (entityToResolve instanceof YangCompilerAnnotation) {
+ YangNode targetNode;
+ YangCompilerAnnotation ca = (YangCompilerAnnotation) entityToResolve;
+ targetNode = xPathLinker.processXpathLinking(ca.getAtomicPathList(),
+ (YangNode) root,
+ AUGMENT_LINKING);
+ if (targetNode != null) {
+ if (targetNode instanceof YangList) {
+ ((YangList) targetNode).setCompilerAnnotation(
+ (YangCompilerAnnotation) entityToResolve);
+ Resolvable resolvable = (Resolvable) entityToResolve;
+ resolvable.setResolvableStatus(RESOLVED);
+ } else {
+ throw new LinkerException(getErrorMsg(
+ INVALID_TARGET + targetNode.getNodeType(), ca.getPath(),
+ ca.getLineNumber(), ca.getCharPosition(), ca.getFileName()));
+ }
+ } else {
+ throw new LinkerException(getErrorMsg(
+ FAILED_TO_FIND_ANNOTATION, ca.getPath(), ca.getLineNumber(),
+ ca.getCharPosition(), ca.getFileName()));
+ }
+ } else if (entityToResolve instanceof YangLeafRef) {
+ YangLeafRef leafRef = (YangLeafRef) entityToResolve;
+ Object target = xPathLinker.processLeafRefXpathLinking(
+ leafRef.getAtomicPath(), (YangNode) root, leafRef, LEAF_REF_LINKING);
+ if (target != null) {
+ YangLeaf leaf;
+ YangLeafList leafList;
+ leafRef.setReferredLeafOrLeafList(target);
+ if (target instanceof YangLeaf) {
+ leaf = (YangLeaf) target;
+ leafRef.setResolvableStatus(INTER_FILE_LINKED);
+ addUnResolvedLeafRefTypeToStack((T) leaf, entityToResolveInfo
+ .getHolderOfEntityToResolve());
+ } else {
+ leafList = (YangLeafList) target;
+ leafRef.setResolvableStatus(INTER_FILE_LINKED);
+ addUnResolvedLeafRefTypeToStack(
+ (T) leafList, entityToResolveInfo.getHolderOfEntityToResolve());
+ }
+ fillPathPredicates(leafRef);
+ } else {
+ LinkerException ex = new LinkerException(
+ FAILED_TO_FIND_LEAD_INFO_HOLDER + leafRef.getPath());
+ ex.setCharPosition(leafRef.getCharPosition());
+ ex.setLine(leafRef.getLineNumber());
+ ex.setFileName(leafRef.getFileName());
+ throw ex;
+ }
+ }
+ }
+
+ /**
+ * Returns the referenced prefix of entity under resolution.
+ *
+ * @return referenced prefix of entity under resolution
+ * @throws DataModelException a violation in data model rule
+ */
+ private String getRefPrefix()
+ throws DataModelException {
+ T entity = getCurEntityToResolveFromStack();
+ if (entity instanceof YangType) {
+ return ((YangType<?>) entity).getPrefix();
+ }
+ if (entity instanceof YangUses) {
+ return ((YangUses) entity).getPrefix();
+ }
+ if (entity instanceof YangIfFeature) {
+ return ((YangIfFeature) entity).getPrefix();
+ }
+ if (entity instanceof YangBase) {
+ return ((YangBase) entity).getBaseIdentifier()
+ .getPrefix();
+ }
+ if (entity instanceof YangIdentityRef) {
+ return ((YangIdentityRef) entity).getPrefix();
+ }
+ throw new DataModelException(LINKER_ERROR);
+ }
+
+ /**
+ * Performs inter file linking and resolution.
+ *
+ * @throws DataModelException a violation in data model rule
+ */
+ private void linkInterFileAndResolve()
+ throws DataModelException {
+
+ while (!partialResolvedStack.isEmpty()) {
+
+ // Current node to resolve, it can be a YANG type or YANG uses.
+ T entityToResolve = getCurEntityToResolveFromStack();
+ // Check if linking is already done
+ if (entityToResolve instanceof Resolvable) {
+
+ Resolvable resolvable = (Resolvable) entityToResolve;
+ switch (resolvable.getResolvableStatus()) {
+ case RESOLVED:
+ /*
+ * If the entity is already resolved in the stack, then pop
+ * it and continue with the remaining stack elements to
+ * resolve
+ */
+ partialResolvedStack.pop();
+ break;
+
+ case INTER_FILE_LINKED:
+ /*
+ * If the top of the stack is already linked then resolve
+ * the references and pop the entity and continue with
+ * remaining stack elements to resolve
+ */
+ resolveTopOfStack();
+ partialResolvedStack.pop();
+ break;
+
+ case INTRA_FILE_RESOLVED:
+ /*
+ * If the top of the stack is intra file resolved then check
+ * if top of stack is linked, if not link it using
+ * import/include list and push the linked referred entity
+ * to the stack, otherwise only push it to the stack.
+ */
+ linkInterFileTopOfStackRefUpdateStack();
+ break;
+
+ case UNDEFINED:
+ /*
+ * In case of if-feature resolution, if referred "feature" is not
+ * defined then the resolvable status will be undefined.
+ */
+ partialResolvedStack.pop();
+ break;
+
+ default:
+ throw new DataModelException(INVALID_LINKER_STATE);
+ }
+ } else {
+ throw new DataModelException(INVALID_RESOLVED_ENTITY);
+ }
+ }
+ }
+
+ /**
+ * Links the top of the stack if it's inter-file and update stack.
+ *
+ * @throws DataModelException data model error
+ */
+ private void linkInterFileTopOfStackRefUpdateStack()
+ throws DataModelException {
+ T entity = getCurEntityToResolveFromStack();
+ if (entity instanceof YangLeafRef) {
+ // When leafref path comes with relative path, it will be converted to absolute path.
+ setAbsolutePathFromRelativePathInLeafref(entity);
+ processXPathLinking(entity, curRefResolver);
+ return;
+ }
+ /*
+ * Obtain the referred node of top of stack entity under resolution
+ */
+ T refNode = getRefNode();
+
+ /*
+ * Check for null for scenario when it's not linked and inter-file
+ * linking is required.
+ */
+ if (refNode == null) {
+
+ /*
+ * Check if prefix is null or not, to identify whether to search in
+ * import list or include list.
+ */
+ if (getRefPrefix() != null && !getRefPrefix()
+ .contentEquals(curRefResolver.getPrefix())) {
+ if (resolveWithImport()) {
+ return;
+ }
+ } else {
+ if (resolveWithInclude()) {
+ return;
+ }
+ }
+
+ if (entity instanceof YangIfFeature) {
+ ((YangIfFeature) entity).setResolvableStatus(UNDEFINED);
+ return;
+ }
+ // If current entity is still not resolved, then
+ // linking/resolution has failed.
+
+ DataModelException ex = new DataModelException(
+ getErrorInfoForLinker(entity));
+ ex.setLine(getLineNumber());
+ ex.setCharPosition(getCharPosition());
+ throw ex;
+ } else {
+ ((Resolvable) entity).setResolvableStatus(INTER_FILE_LINKED);
+ addUnresolvedRecursiveReferenceToStack((YangNode) refNode);
+ }
+ }
+
+ /**
+ * Sets the leafref with absolute path from the relative path.
+ *
+ * @param resolutionInfo information about the YANG construct which has to be resolved
+ * @throws DataModelException a violation of data model rules
+ */
+ private void setAbsolutePathFromRelativePathInLeafref(T resolutionInfo)
+ throws DataModelException {
+ if (resolutionInfo instanceof YangLeafRef) {
+
+ YangNode leafParent = ((YangLeafRef) resolutionInfo)
+ .getParentNode();
+ YangLeafRef leafref = (YangLeafRef) resolutionInfo;
+
+ // Checks if the leafref has relative path in it.
+ if (leafref.getPathType() == RELATIVE_PATH) {
+ YangRelativePath relativePath = leafref.getRelativePath();
+ List<YangAtomicPath> absoluteInRelative = relativePath.getAtomicPathList();
+ int ancestorCount = relativePath.getAncestorNodeCount();
+
+ // Gets the root node from the ancestor count.
+ T nodeOrAugmentList =
+ getRootNodeWithAncestorCountForLeafref(ancestorCount, leafParent,
+ leafref);
+ if (nodeOrAugmentList instanceof YangNode) {
+ StringBuilder name = new StringBuilder();
+ StringBuilder prefix = new StringBuilder();
+ YangNode rootNode = (YangNode) nodeOrAugmentList;
+ // Forms a new absolute path from the relative path
+ while (!(rootNode instanceof YangReferenceResolver)) {
+ name.append(rootNode.getName());
+ prefix.append(SLASH_FOR_STRING).append(name.reverse());
+ name.delete(0, name.length());
+ rootNode = rootNode.getParent();
+ if (rootNode == null) {
+ throw new DataModelException(INVALID_TREE);
+ }
+ }
+ prefix.reverse();
+ fillAbsolutePathValuesInLeafref(leafref, prefix.toString(),
+ absoluteInRelative);
+ } else {
+ List<String> listOfAugment = (List<String>) nodeOrAugmentList;
+ Iterator<String> listOfAugmentIterator = listOfAugment.listIterator();
+ StringBuilder augment = new StringBuilder(EMPTY_STRING);
+ while (listOfAugmentIterator.hasNext()) {
+ augment.append(SLASH_FOR_STRING)
+ .append(listOfAugmentIterator.next());
+ }
+ fillAbsolutePathValuesInLeafref(leafref, augment.toString(),
+ absoluteInRelative);
+ }
+ }
+ }
+ }
+
+ /**
+ * Fills the absolute path values in the leafref from relative path.
+ *
+ * @param leafref instance of YANG leafref
+ * @param path path name which has to be prefixed to relative path
+ * @param relative atomic paths in relative
+ * @throws DataModelException a violation of data model rules
+ */
+ private void fillAbsolutePathValuesInLeafref(YangLeafRef leafref, String path,
+ List<YangAtomicPath> relative)
+ throws DataModelException {
+ leafref.setPathType(ABSOLUTE_PATH);
+ String[] pathName = new String[0];
+ if (path != null && !path.equals(EMPTY_STRING)) {
+ pathName = path.split(SLASH_FOR_STRING);
+ }
+ List<YangAtomicPath> finalListForAbsolute = new LinkedList<>();
+ for (String value : pathName) {
+ if (value != null && !value.isEmpty() && !value.equals(EMPTY_STRING)) {
+ YangNodeIdentifier nodeId = getValidNodeIdentifier(value, PATH_DATA);
+ YangAtomicPath atomicPath = new YangAtomicPath();
+ atomicPath.setNodeIdentifier(nodeId);
+ finalListForAbsolute.add(atomicPath);
+ }
+ }
+ if (relative != null && !relative.isEmpty()) {
+ Iterator<YangAtomicPath> pathIt = relative.listIterator();
+ while (pathIt.hasNext()) {
+ YangAtomicPath yangAtomicPath = pathIt.next();
+ finalListForAbsolute.add(yangAtomicPath);
+ }
+ leafref.setAtomicPath(finalListForAbsolute);
+ } else {
+ DataModelException ex = new DataModelException(getLeafRefErrorInfo(leafref));
+ ex.setCharPosition(leafref.getCharPosition());
+ ex.setLine(leafref.getLineNumber());
+ ex.setFileName(leafref.getFileName());
+ throw ex;
+ }
+ }
+
+ /**
+ * Returns the root parent with respect to the ancestor count from leafref.
+ *
+ * @param ancestorCount count of node where parent node can be reached
+ * @param curParent current parent node
+ * @param leafref instance of YANG leafref
+ * @return node where the ancestor count stops or augment path name list
+ * @throws DataModelException a violation of data model rules
+ */
+ private T getRootNodeWithAncestorCountForLeafref(
+ int ancestorCount, YangNode curParent, YangLeafRef leafref)
+ throws DataModelException {
+
+ int curParentCount = 1;
+ curParent = skipInvalidDataNodes(curParent, leafref);
+ if (curParent instanceof YangAugment) {
+ YangAugment augment = (YangAugment) curParent;
+ List<String> valueInAugment = getPathWithAugment(augment,
+ ancestorCount - curParentCount);
+ return (T) valueInAugment;
+ } else {
+ while (curParentCount < ancestorCount) {
+ YangNode currentSkippedParent = skipInvalidDataNodes(curParent, leafref);
+ if (currentSkippedParent == curParent) {
+ if (curParent.getParent() == null) {
+ throw new DataModelException(getLeafRefErrorInfo(leafref));
+ }
+ curParent = curParent.getParent();
+ } else {
+ curParent = currentSkippedParent;
+ continue;
+ }
+ curParentCount = curParentCount + 1;
+ if (curParent instanceof YangAugment) {
+ YangAugment augment = (YangAugment) curParent;
+ List<String> valueInAugment = getPathWithAugment(
+ augment, ancestorCount - curParentCount);
+ return (T) valueInAugment;
+ }
+ }
+ }
+ return (T) curParent;
+ }
+
+ /**
+ * Finds and resolves with include list.
+ *
+ * @return true if resolved, false otherwise
+ * @throws DataModelException a violation in data model rule
+ */
+ private boolean resolveWithInclude() throws DataModelException {
+ /*
+ * Run through all the nodes in include list and search for referred
+ * typedef/grouping at the root level.
+ */
+ for (YangInclude yangInclude : curRefResolver.getIncludeList()) {
+ YangNode linkedNode = getLinkedNode(yangInclude.getIncludedNode());
+ if (linkedNode != null) {
+ return addUnResolvedRefToStack(linkedNode);
+ }
+ }
+ // If referred node can't be found return false.
+ return false;
+ }
+
+ /**
+ * Finds and resolves with import list.
+ *
+ * @return true if resolved, false otherwise
+ * @throws DataModelException a violation in data model rule
+ */
+ private boolean resolveWithImport() throws DataModelException {
+
+ // Run through import list to find the referred typedef/grouping.
+ for (YangImport yangImport : curRefResolver.getImportList()) {
+ /*
+ * Match the prefix attached to entity under resolution with the
+ * imported/included module/sub-module's prefix. If found, search
+ * for the referred typedef/grouping at the root level.
+ */
+ if (yangImport.getPrefixId().contentEquals(getRefPrefix())) {
+ YangNode linkedNode = getLinkedNode(yangImport.getImportedNode());
+ if (linkedNode != null) {
+ return addUnResolvedRefToStack(linkedNode);
+ }
+ /*
+ * If referred node can't be found at root level break for loop,
+ * and return false.
+ */
+ break;
+ }
+ }
+ // If referred node can't be found return false.
+ return false;
+ }
+
+ //Add unresolved constructs to stack.
+ private boolean addUnResolvedRefToStack(YangNode linkedNode)
+ throws DataModelException {
+ // Add the link to external entity.
+ addReferredEntityLink(linkedNode, INTER_FILE_LINKED);
+
+ // Add the type/uses of referred typedef/grouping to the stack.
+ addUnresolvedRecursiveReferenceToStack(linkedNode);
+ return true;
+ }
+
+ //Returns linked node from entity of stack.
+ private YangNode getLinkedNode(YangNode node) {
+ T entity = getCurEntityToResolveFromStack();
+ if (entity instanceof YangType) {
+ return findRefTypedef(node);
+ }
+ if (entity instanceof YangUses) {
+ return findRefGrouping(node);
+ }
+ if (entity instanceof YangIfFeature) {
+ return findRefFeature(node);
+ }
+ if (entity instanceof YangBase) {
+ return findRefIdentity(node);
+ }
+ if (entity instanceof YangIdentityRef) {
+ return findRefIdentityRef(node);
+ }
+ return null;
+ }
+
+ /**
+ * Returns referred typedef/grouping node.
+ *
+ * @return referred typedef/grouping node
+ * @throws DataModelException a violation in data model rule
+ */
+ private T getRefNode() throws DataModelException {
+ T entity = getCurEntityToResolveFromStack();
+ if (entity instanceof YangType) {
+ YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>)
+ ((YangType<?>) entity).getDataTypeExtendedInfo();
+ return (T) derivedInfo.getReferredTypeDef();
+ }
+ if (entity instanceof YangUses) {
+ return (T) ((YangUses) entity).getRefGroup();
+ }
+ if (entity instanceof YangIfFeature) {
+ return (T) ((YangIfFeature) entity).getReferredFeatureHolder();
+ }
+ if (entity instanceof YangLeafRef) {
+ return (T) ((YangLeafRef) entity).getReferredLeafOrLeafList();
+ }
+ if (entity instanceof YangBase) {
+ return (T) ((YangBase) entity).getReferredIdentity();
+ }
+ if (entity instanceof YangIdentityRef) {
+ return (T) ((YangIdentityRef) entity).getReferredIdentity();
+ }
+ throw new DataModelException(LINKER_ERROR);
+ }
+
+ /**
+ * Finds the referred grouping node at the root level of imported/included node.
+ *
+ * @param refNode module/sub-module node
+ * @return referred grouping
+ */
+ private YangNode findRefGrouping(YangNode refNode) {
+ YangNode tmpNode = refNode.getChild();
+ while (tmpNode != null) {
+ if (tmpNode instanceof YangGrouping) {
+ if (tmpNode.getName()
+ .equals(((YangUses) getCurEntityToResolveFromStack())
+ .getName())) {
+ return tmpNode;
+ }
+ }
+ tmpNode = tmpNode.getNextSibling();
+ }
+ return null;
+ }
+
+ /**
+ * Finds the referred feature node at the root level of imported/included node.
+ *
+ * @param refNode module/sub-module node
+ * @return referred feature
+ */
+ private YangNode findRefFeature(YangNode refNode) {
+ T entity = getCurEntityToResolveFromStack();
+ YangNodeIdentifier ifFeature = ((YangIfFeature) entity).getName();
+ List<YangFeature> featureList = ((YangFeatureHolder) refNode)
+ .getFeatureList();
+ if (featureList != null && !featureList.isEmpty()) {
+ for (YangFeature feature : featureList) {
+ if (ifFeature.getName().equals(feature.getName())) {
+ ((YangIfFeature) entity).setReferredFeature(feature);
+ return refNode;
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Finds the referred typedef node at the root level of imported/included node.
+ *
+ * @param refNode module/sub-module node
+ * @return referred typedef
+ */
+ private YangNode findRefTypedef(YangNode refNode) {
+ YangNode tmpNode = refNode.getChild();
+ while (tmpNode != null) {
+ if (tmpNode instanceof YangTypeDef) {
+ if (tmpNode.getName()
+ .equals(((YangType) getCurEntityToResolveFromStack())
+ .getDataTypeName())) {
+ return tmpNode;
+ }
+ }
+ tmpNode = tmpNode.getNextSibling();
+ }
+ return null;
+ }
+
+ /**
+ * Finds the referred identity node at the root level of imported/included node.
+ *
+ * @param refNode module/sub-module node
+ * @return referred identity
+ */
+ private YangNode findRefIdentity(YangNode refNode) {
+ YangNode tmpNode = refNode.getChild();
+ while (tmpNode != null) {
+ if (tmpNode instanceof YangIdentity) {
+ if (tmpNode.getName()
+ .equals(((YangBase) getCurEntityToResolveFromStack())
+ .getBaseIdentifier().getName())) {
+ return tmpNode;
+ }
+ }
+ tmpNode = tmpNode.getNextSibling();
+ }
+ return null;
+ }
+
+ /**
+ * Finds the referred identity node at the root level of imported/included node.
+ *
+ * @param refNode module/sub-module node
+ * @return referred identity
+ */
+ private YangNode findRefIdentityRef(YangNode refNode) {
+ YangNode tmpNode = refNode.getChild();
+ while (tmpNode != null) {
+ if (tmpNode instanceof YangIdentity) {
+ if (tmpNode.getName()
+ .equals(((YangIdentityRef) getCurEntityToResolveFromStack())
+ .getBaseIdentity().getName())) {
+ return tmpNode;
+ }
+ }
+ tmpNode = tmpNode.getNextSibling();
+ }
+ return null;
+ }
+
+ /**
+ * Sets descendant node augmented flag in ancestors.
+ *
+ * @param targetNode augmented YANG node
+ */
+ private void setAugmentedFlagInAncestors(YangNode targetNode) {
+ targetNode = targetNode.getParent();
+ while (targetNode != null) {
+ targetNode.setDescendantNodeAugmented(true);
+ targetNode = targetNode.getParent();
+ }
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/impl/YangXpathLinker.java b/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/impl/YangXpathLinker.java
new file mode 100644
index 0000000..02d1beb
--- /dev/null
+++ b/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/impl/YangXpathLinker.java
@@ -0,0 +1,774 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.linker.impl;
+
+import org.onosproject.yang.compiler.datamodel.LeafRefInvalidHolder;
+import org.onosproject.yang.compiler.datamodel.RpcNotificationContainer;
+import org.onosproject.yang.compiler.datamodel.YangAtomicPath;
+import org.onosproject.yang.compiler.datamodel.YangAugment;
+import org.onosproject.yang.compiler.datamodel.YangGrouping;
+import org.onosproject.yang.compiler.datamodel.YangImport;
+import org.onosproject.yang.compiler.datamodel.YangInclude;
+import org.onosproject.yang.compiler.datamodel.YangInput;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangLeafRef;
+import org.onosproject.yang.compiler.datamodel.YangLeavesHolder;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeIdentifier;
+import org.onosproject.yang.compiler.datamodel.YangOutput;
+import org.onosproject.yang.compiler.datamodel.YangSubModule;
+import org.onosproject.yang.compiler.datamodel.YangUses;
+import org.onosproject.yang.compiler.linker.exceptions.LinkerException;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Stack;
+
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.getErrorMsg;
+import static org.onosproject.yang.compiler.linker.impl.PrefixResolverType.INTER_TO_INTER;
+import static org.onosproject.yang.compiler.linker.impl.PrefixResolverType.INTER_TO_INTRA;
+import static org.onosproject.yang.compiler.linker.impl.PrefixResolverType.INTRA_TO_INTER;
+import static org.onosproject.yang.compiler.linker.impl.PrefixResolverType.NO_PREFIX_CHANGE_FOR_INTER;
+import static org.onosproject.yang.compiler.linker.impl.PrefixResolverType.NO_PREFIX_CHANGE_FOR_INTRA;
+import static org.onosproject.yang.compiler.linker.impl.XpathLinkingTypes.AUGMENT_LINKING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.COLON;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ERROR_MSG_FOR_AUGMENT_LINKING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.FAILED_TO_FIND_LEAD_INFO_HOLDER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.INPUT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.IS_INVALID;
+import static org.onosproject.yang.compiler.utils.UtilConstants.LEAFREF_ERROR;
+import static org.onosproject.yang.compiler.utils.UtilConstants.LEAF_HOLDER_ERROR;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OUTPUT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SLASH_FOR_STRING;
+
+/**
+ * Represents x-path linking.
+ *
+ * @param <T> x-path linking can be done for target node or for target leaf/leaf-list
+ */
+public class YangXpathLinker<T> {
+
+ private List<YangAtomicPath> absPaths;
+ private YangNode rootNode;
+ private Map<YangAtomicPath, PrefixResolverType> prefixResolverTypes;
+ private String curPrefix;
+ private String constructsParentsPrefix;
+ private XpathLinkingTypes linkingType;
+
+ /**
+ * Creates an instance of x-path linker.
+ */
+ public YangXpathLinker() {
+ absPaths = new ArrayList<>();
+ }
+
+ /**
+ * Returns list of augment nodes.
+ *
+ * @param node root node
+ * @return list of augment nodes
+ */
+ public List<YangAugment> getListOfYangAugment(YangNode node) {
+ node = node.getChild();
+ List<YangAugment> augments = new ArrayList<>();
+ while (node != null) {
+ if (node instanceof YangAugment) {
+ augments.add((YangAugment) node);
+ }
+ node = node.getNextSibling();
+ }
+ return augments;
+ }
+
+ /**
+ * Process absolute node path for target leaf.
+ *
+ * @param atomicPaths atomic path node list
+ * @param root root node
+ * @param leafref instance of YANG leafref
+ * @param curLinking x path linking type
+ * @return linked target node
+ */
+ T processLeafRefXpathLinking(List<YangAtomicPath> atomicPaths, YangNode root,
+ YangLeafRef leafref, XpathLinkingTypes curLinking) {
+
+ YangNode targetNode;
+ rootNode = root;
+ prefixResolverTypes = new HashMap<>();
+ linkingType = curLinking;
+ parsePrefixResolverList(atomicPaths);
+ YangAtomicPath leafRefPath = atomicPaths.get(atomicPaths.size() - 1);
+
+ // When leaf-ref path contains only one absolute path.
+ if (atomicPaths.size() == 1) {
+ targetNode = getTargetNodeWhenPathSizeIsOne(atomicPaths);
+ } else {
+ for (YangAtomicPath atomicPath : atomicPaths) {
+ if (atomicPath != leafRefPath) {
+ absPaths.add(atomicPath);
+ }
+ }
+ targetNode = parseData(root);
+ }
+ if (targetNode == null) {
+ targetNode = searchInSubModule(root);
+ }
+
+ // Invalid path presence in the node list is checked.
+ validateInvalidNodesInThePath(leafref);
+
+ if (targetNode != null) {
+ YangLeaf targetLeaf = searchReferredLeaf(targetNode, leafRefPath
+ .getNodeIdentifier().getName());
+ if (targetLeaf == null) {
+ YangLeafList targetLeafList = searchReferredLeafList(
+ targetNode, leafRefPath.getNodeIdentifier().getName());
+ if (targetLeafList != null) {
+ return (T) targetLeafList;
+ } else {
+ LinkerException ex = new LinkerException(
+ FAILED_TO_FIND_LEAD_INFO_HOLDER + leafref.getPath());
+ ex.setCharPosition(leafref.getCharPosition());
+ ex.setLine(leafref.getLineNumber());
+ ex.setFileName(leafref.getFileName());
+ throw ex;
+ }
+ }
+ return (T) targetLeaf;
+ }
+ return null;
+ }
+
+ /**
+ * Validates the nodes in the path for any invalid node.
+ *
+ * @param leafref instance of YANG leafref
+ */
+ private void validateInvalidNodesInThePath(YangLeafRef leafref) {
+ for (YangAtomicPath absolutePath : (Iterable<YangAtomicPath>) leafref
+ .getAtomicPath()) {
+ YangNode nodeInPath = absolutePath.getResolvedNode();
+
+ if (nodeInPath instanceof LeafRefInvalidHolder) {
+ LinkerException ex = new LinkerException(
+ LEAFREF_ERROR + leafref.getPath() + IS_INVALID);
+ ex.setCharPosition(leafref.getCharPosition());
+ ex.setLine(leafref.getLineNumber());
+ ex.setFileName(leafref.getFileName());
+ throw ex;
+ }
+ }
+ }
+
+ /**
+ * Returns target node when leaf-ref has only one absolute path in list.
+ *
+ * @param paths absolute paths
+ * @return target node
+ */
+ private YangNode getTargetNodeWhenPathSizeIsOne(List<YangAtomicPath> paths) {
+ if (paths.get(0).getNodeIdentifier().getPrefix() != null
+ && !paths.get(0).getNodeIdentifier().getPrefix().equals
+ (getRootsPrefix(rootNode))) {
+ return getImportedNode(rootNode, paths.get(0).getNodeIdentifier());
+ }
+ return rootNode;
+ }
+
+ /**
+ * Process absolute node path linking for augment.
+ *
+ * @param paths absolute path node list
+ * @param root root node
+ * @param curLinking x path linker type
+ * @return linked target node
+ */
+ public YangNode processXpathLinking(List<YangAtomicPath> paths,
+ YangNode root, XpathLinkingTypes curLinking) {
+ absPaths = paths;
+ rootNode = root;
+ prefixResolverTypes = new HashMap<>();
+ linkingType = curLinking;
+ parsePrefixResolverList(paths);
+ YangNode targetNode = parseData(root);
+ if (targetNode == null) {
+ targetNode = searchInSubModule(root);
+ }
+ return targetNode;
+ }
+
+ /**
+ * Searches for the referred leaf in target node.
+ *
+ * @param targetNode target node
+ * @param leafName leaf name
+ * @return target leaf
+ */
+ private YangLeaf searchReferredLeaf(YangNode targetNode, String leafName) {
+ if (!(targetNode instanceof YangLeavesHolder)) {
+ throw new LinkerException(getErrorMsg(
+ LEAF_HOLDER_ERROR, targetNode.getName(), targetNode
+ .getLineNumber(), targetNode.getCharPosition(),
+ targetNode.getFileName()));
+ }
+ YangLeavesHolder holder = (YangLeavesHolder) targetNode;
+ List<YangLeaf> leaves = holder.getListOfLeaf();
+ if (leaves != null && !leaves.isEmpty()) {
+ for (YangLeaf leaf : leaves) {
+ if (leaf.getName().equals(leafName)) {
+ return leaf;
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Searches for the referred leaf-list in target node.
+ *
+ * @param targetNode target node
+ * @param name leaf-list name
+ * @return target leaf-list
+ */
+ private YangLeafList searchReferredLeafList(YangNode targetNode, String name) {
+ if (!(targetNode instanceof YangLeavesHolder)) {
+ throw new LinkerException(getErrorMsg(
+ LEAF_HOLDER_ERROR, targetNode.getName(), targetNode
+ .getLineNumber(), targetNode.getCharPosition(),
+ targetNode.getFileName()));
+ }
+ YangLeavesHolder holder = (YangLeavesHolder) targetNode;
+ List<YangLeafList> leavesList = holder.getListOfLeafList();
+ if (leavesList != null && !leavesList.isEmpty()) {
+ for (YangLeafList leafList : leavesList) {
+ if (leafList.getName().equals(name)) {
+ return leafList;
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Process linking using for node identifier for inter/intra file.
+ *
+ * @param root root node
+ * @return linked target node
+ */
+ private YangNode parseData(YangNode root) {
+ String rootPrefix = getRootsPrefix(root);
+ constructsParentsPrefix = rootPrefix;
+ Iterator<YangAtomicPath> pathIterator = absPaths.iterator();
+ YangAtomicPath path = pathIterator.next();
+ if (path.getNodeIdentifier().getPrefix() != null
+ && !path.getNodeIdentifier().getPrefix().equals(rootPrefix)) {
+ return parsePath(getImportedNode(root, path.getNodeIdentifier()));
+ } else {
+ return parsePath(root);
+ }
+ }
+
+ /**
+ * Process linking of target node in root node.
+ *
+ * @param root root node
+ * @return linked target node
+ */
+ private YangNode parsePath(YangNode root) {
+
+ YangNode tempNode = root;
+ Stack<YangNode> linkerStack = new Stack<>();
+ Iterator<YangAtomicPath> pathIterator = absPaths.iterator();
+ YangAtomicPath tempPath = pathIterator.next();
+ YangNodeIdentifier nodeId;
+ curPrefix = tempPath.getNodeIdentifier().getPrefix();
+ int index = 0;
+ YangNode tempAugment;
+ do {
+ nodeId = tempPath.getNodeIdentifier();
+ if (tempPath.getNodeIdentifier().getPrefix() == null) {
+ tempAugment = resolveIntraFileAugment(tempPath, root);
+ } else {
+ tempAugment = resolveInterFileAugment(tempPath, root);
+ }
+ if (tempAugment != null) {
+ linkerStack.push(tempNode);
+ tempNode = tempAugment;
+ }
+
+ tempNode = searchTargetNode(tempNode, nodeId);
+
+ if (tempNode == null && !linkerStack.isEmpty()) {
+ tempNode = linkerStack.peek();
+ linkerStack.pop();
+ tempNode = searchTargetNode(tempNode, nodeId);
+ }
+
+ if (tempNode != null) {
+ tempPath.setResolvedNode(tempNode);
+ validateTempPathNode(tempNode);
+ }
+
+ if (index == absPaths.size() - 1) {
+ break;
+ }
+ tempPath = pathIterator.next();
+ index++;
+ } while (validate(tempNode, index));
+ return tempNode;
+ }
+
+ /**
+ * Validates temp path nodes for augment linking.
+ *
+ * @param node temp path node
+ */
+ private void validateTempPathNode(YangNode node) {
+
+ if (linkingType != AUGMENT_LINKING) {
+ return;
+ }
+ if (node instanceof YangGrouping) {
+ LinkerException ex = new LinkerException(
+ ERROR_MSG_FOR_AUGMENT_LINKING +
+ getAugmentNodeIdentifier(
+ absPaths.get(absPaths.size() - 1).getNodeIdentifier(),
+ absPaths,
+ rootNode));
+ ex.setFileName(rootNode.getFileName());
+ throw ex;
+ }
+ }
+
+ /**
+ * Resolves intra file augment linking.
+ *
+ * @param tempPath temporary absolute path
+ * @param root root node
+ * @return linked target node
+ */
+ private YangNode resolveIntraFileAugment(YangAtomicPath tempPath, YangNode root) {
+ YangNode tempAugment;
+ if (curPrefix != tempPath.getNodeIdentifier().getPrefix()) {
+ root = getIncludedNode(rootNode, tempPath.getNodeIdentifier().getName());
+ if (root == null) {
+ root = getIncludedNode(rootNode, getAugmentNodeIdentifier(
+ tempPath.getNodeIdentifier(), absPaths, rootNode));
+ if (root == null) {
+ root = rootNode;
+ }
+ }
+ } else {
+ if (curPrefix != null) {
+ root = getImportedNode(root, tempPath.getNodeIdentifier());
+ }
+ }
+
+ curPrefix = tempPath.getNodeIdentifier().getPrefix();
+ tempAugment = getAugment(tempPath.getNodeIdentifier(), root, absPaths);
+ if (tempAugment == null) {
+ tempAugment = getAugment(tempPath.getNodeIdentifier(), rootNode,
+ absPaths);
+ }
+ return tempAugment;
+ }
+
+ /**
+ * Resolves inter file augment linking.
+ *
+ * @param tempPath temporary absolute path
+ * @param root root node
+ * @return linked target node
+ */
+ private YangNode resolveInterFileAugment(YangAtomicPath tempPath, YangNode root) {
+
+ YangNode tempAugment;
+ if (!tempPath.getNodeIdentifier().getPrefix().equals(curPrefix)) {
+ curPrefix = tempPath.getNodeIdentifier().getPrefix();
+ root = getImportedNode(rootNode, tempPath.getNodeIdentifier());
+ }
+ tempAugment = getAugment(tempPath.getNodeIdentifier(), root, absPaths);
+ if (tempAugment == null) {
+ return resolveInterToInterFileAugment(root);
+ }
+ return tempAugment;
+ }
+
+ /**
+ * Resolves augment when prefix changed from inter file to inter file.
+ * it may be possible that the prefix used in imported module is different the
+ * given list of node identifiers.
+ *
+ * @param root root node
+ * @return target node
+ */
+ private YangNode resolveInterToInterFileAugment(YangNode root) {
+ List<YangAugment> augments = getListOfYangAugment(root);
+ int index;
+ List<YangAtomicPath> paths = new ArrayList<>();
+ for (YangAugment augment : augments) {
+ index = 0;
+
+ for (YangAtomicPath path : augment.getTargetNode()) {
+
+ if (!searchForAugmentInImportedNode(path.getNodeIdentifier(), index)) {
+ paths.clear();
+ break;
+ }
+ paths.add(path);
+ index++;
+ }
+ if (!paths.isEmpty() && paths.size() == absPaths.size() - 1) {
+ return augment;
+ } else {
+ paths.clear();
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Searches for the augment node in imported module when prefix has changed from
+ * inter file to inter file.
+ *
+ * @param nodeId node id
+ * @param index index
+ * @return true if found
+ */
+ private boolean searchForAugmentInImportedNode(YangNodeIdentifier nodeId,
+ int index) {
+ if (index == absPaths.size()) {
+ return false;
+ }
+ YangNodeIdentifier tempNodeId = absPaths.get(index).getNodeIdentifier();
+ return nodeId.getName().equals(tempNodeId.getName());
+ }
+
+ /**
+ * Returns augment node.
+ *
+ * @param tempNodeId temporary absolute path id
+ * @param root root node
+ * @return linked target node
+ */
+ private YangNode getAugment(YangNodeIdentifier tempNodeId, YangNode root,
+ List<YangAtomicPath> absPaths) {
+ String augmentName = getAugmentNodeIdentifier(tempNodeId, absPaths, root);
+ if (augmentName != null) {
+ return searchAugmentNode(root, augmentName);
+ }
+ return null;
+ }
+
+ /**
+ * Process linking using import list.
+ *
+ * @param root root node
+ * @param nodeId node identifier
+ * @return linked target node
+ */
+ private YangNode getImportedNode(YangNode root, YangNodeIdentifier nodeId) {
+
+ List<YangImport> importList;
+
+ if (root instanceof YangModule) {
+ importList = ((YangModule) root).getImportList();
+ } else {
+ importList = ((YangSubModule) root).getImportList();
+ }
+
+ for (YangImport imported : importList) {
+ if (imported.getPrefixId().equals(nodeId.getPrefix())) {
+ return imported.getImportedNode();
+ }
+ }
+
+ if (nodeId.getName() != null && nodeId.getPrefix()
+ .equals(constructsParentsPrefix)) {
+ return rootNode;
+ }
+ return root;
+ }
+
+ /**
+ * Searches in sub-module node.
+ *
+ * @param root root node
+ * @return target linked node
+ */
+ private YangNode searchInSubModule(YangNode root) {
+ List<YangInclude> includeList;
+ YangNode tempNode;
+ if (root instanceof YangModule) {
+ includeList = ((YangModule) root).getIncludeList();
+ } else {
+ includeList = ((YangSubModule) root).getIncludeList();
+ }
+
+ for (YangInclude included : includeList) {
+ tempNode = parseData(included.getIncludedNode());
+ if (tempNode != null) {
+ return tempNode;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Process linking using include list.
+ *
+ * @param root root node
+ * @param tempPathName temporary path node name
+ * @return linked target node
+ */
+ private YangNode getIncludedNode(YangNode root, String tempPathName) {
+
+ List<YangInclude> includeList;
+
+ if (root instanceof YangModule) {
+ includeList = ((YangModule) root).getIncludeList();
+ } else {
+ includeList = ((YangSubModule) root).getIncludeList();
+ }
+
+ for (YangInclude included : includeList) {
+ if (verifyChildNode(included.getIncludedNode(), tempPathName)) {
+ return included.getIncludedNode();
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Verifies for child nodes in sub module.
+ *
+ * @param node submodule node
+ * @param name name of child node
+ * @return true if child node found
+ */
+ private boolean verifyChildNode(YangNode node, String name) {
+ node = node.getChild();
+ while (node != null) {
+ if (node.getName().equals(name)) {
+ return true;
+ }
+ node = node.getNextSibling();
+ }
+ return false;
+ }
+
+
+ /**
+ * Returns augment's node id.
+ *
+ * @param nodeId node identifier
+ * @param absPaths absolute paths
+ * @param root root node
+ * @return augment's node id
+ */
+ private String getAugmentNodeIdentifier(
+ YangNodeIdentifier nodeId, List<YangAtomicPath> absPaths, YangNode root) {
+ Iterator<YangAtomicPath> nodeIdIterator = absPaths.iterator();
+ YangAtomicPath tempNodeId;
+ StringBuilder builder = new StringBuilder();
+ String name;
+ String prefix;
+ String id;
+ PrefixResolverType type;
+ while (nodeIdIterator.hasNext()) {
+ tempNodeId = nodeIdIterator.next();
+ name = tempNodeId.getNodeIdentifier().getName();
+ prefix = tempNodeId.getNodeIdentifier().getPrefix();
+ if (!tempNodeId.getNodeIdentifier().equals(nodeId)) {
+ type = prefixResolverTypes.get(tempNodeId);
+ switch (type) {
+ case INTER_TO_INTRA:
+ id = SLASH_FOR_STRING + name;
+ break;
+ case INTRA_TO_INTER:
+ if (!getRootsPrefix(root).equals(prefix)) {
+ id = SLASH_FOR_STRING + prefix + COLON + name;
+ } else {
+ id = SLASH_FOR_STRING + name;
+ }
+ break;
+ case INTER_TO_INTER:
+ id = SLASH_FOR_STRING + prefix + COLON + name;
+ break;
+ case NO_PREFIX_CHANGE_FOR_INTRA:
+ id = SLASH_FOR_STRING + name;
+ break;
+ case NO_PREFIX_CHANGE_FOR_INTER:
+ if (!getRootsPrefix(root).equals(prefix)) {
+ id = SLASH_FOR_STRING + prefix + COLON + name;
+ } else {
+ id = SLASH_FOR_STRING + name;
+ }
+ break;
+ default:
+ id = SLASH_FOR_STRING + name;
+ break;
+ }
+ builder.append(id);
+ } else {
+ return builder.toString();
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Searches augment node in root node by name of the augment. For intra
+ * file augment, target augment name without prefix is taken and checked.
+ *
+ * @param root root node
+ * @param augName current augment name
+ * @return target augment node
+ */
+ private YangNode searchAugmentNode(YangNode root, String augName) {
+ YangNode node = root;
+ node = node.getChild();
+ while (node != null) {
+ if (node instanceof YangAugment) {
+ String name = ((YangAugment) node).getPrefixRemovedName();
+ if (node.getName().equals(augName) || name.equals(augName)) {
+ return node;
+ }
+ }
+ node = node.getNextSibling();
+ }
+ return null;
+ }
+
+ /**
+ * Validates for target node if target node found or not.
+ *
+ * @param tempNode temporary node
+ * @param index current index of list
+ * @return false if target node found
+ */
+ private boolean validate(YangNode tempNode, int index) {
+
+ int size = absPaths.size();
+ if (tempNode != null && index != size) {
+ return true;
+ } else if (tempNode != null) {
+ return false;
+ // this is your target node.
+ } else if (index != size) {
+ return true;
+ // this could be in submodule as well.
+ }
+ return false;
+ }
+
+ /**
+ * Searches target node in root node.
+ *
+ * @param node root node
+ * @param curNodeId YANG node identifier
+ * @return linked target node
+ */
+ private YangNode searchTargetNode(YangNode node, YangNodeIdentifier curNodeId) {
+
+ if (node != null) {
+ node = node.getChild();
+ }
+ while (node != null) {
+ if (node instanceof YangInput) {
+ if (curNodeId.getName().equalsIgnoreCase(INPUT)) {
+ return node;
+ }
+ } else if (node instanceof YangOutput) {
+ if (curNodeId.getName().equalsIgnoreCase(OUTPUT)) {
+ return node;
+ }
+ }
+ if (node.getName().equals(curNodeId.getName()) &&
+ !(node instanceof YangUses)) {
+ return node;
+ }
+ node = node.getNextSibling();
+ }
+ return null;
+ }
+
+ /**
+ * Returns root prefix.
+ *
+ * @param root root node
+ * @return root prefix
+ */
+ private String getRootsPrefix(YangNode root) {
+ if (root instanceof YangModule) {
+ return ((YangModule) root).getPrefix();
+ } else {
+ return ((YangSubModule) root).getPrefix();
+ }
+ }
+
+ /**
+ * Resolves prefix and provides prefix resolver list.
+ *
+ * @param absolutePaths absolute paths
+ */
+ private void parsePrefixResolverList(List<YangAtomicPath> absolutePaths) {
+ Iterator<YangAtomicPath> pathIterator = absolutePaths.iterator();
+ YangAtomicPath absPath;
+ String prePrefix;
+ String curPrefix = null;
+ while (pathIterator.hasNext()) {
+ prePrefix = curPrefix;
+ absPath = pathIterator.next();
+ curPrefix = absPath.getNodeIdentifier().getPrefix();
+ if (curPrefix != null) {
+ if (!curPrefix.equals(prePrefix)) {
+ if (prePrefix != null) {
+ prefixResolverTypes.put(absPath, INTER_TO_INTER);
+ } else {
+ prefixResolverTypes.put(absPath, INTRA_TO_INTER);
+ }
+ } else {
+ prefixResolverTypes.put(absPath, NO_PREFIX_CHANGE_FOR_INTER);
+ }
+ } else {
+ if (prePrefix != null) {
+ prefixResolverTypes.put(absPath, INTER_TO_INTRA);
+ } else {
+ prefixResolverTypes.put(absPath, NO_PREFIX_CHANGE_FOR_INTRA);
+ }
+ }
+ }
+ }
+
+ /**
+ * Adds augment to rpc augmented list of input.
+ *
+ * @param augment augment
+ * @param rootNode root node
+ */
+ void addInModuleIfInput(YangAugment augment,
+ YangNode rootNode) {
+ ((RpcNotificationContainer) rootNode).addToAugmentList(augment);
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/impl/package-info.java b/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/impl/package-info.java
new file mode 100644
index 0000000..7ddaed2
--- /dev/null
+++ b/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/impl/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+/**
+ * Provide intra/inter file and inter jar linking implementation.
+ */
+package org.onosproject.yang.compiler.linker.impl;
diff --git a/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/package-info.java b/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/package-info.java
new file mode 100644
index 0000000..5cef2e8
--- /dev/null
+++ b/compiler/base/linker/src/main/java/org/onosproject/yang/compiler/linker/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+/**
+ * Provide inter jar and inter file linking abstract interface.
+ */
+package org.onosproject.yang.compiler.linker;
\ No newline at end of file
diff --git a/compiler/base/parser/pom.xml b/compiler/base/parser/pom.xml
new file mode 100644
index 0000000..671bd15
--- /dev/null
+++ b/compiler/base/parser/pom.xml
@@ -0,0 +1,147 @@
+<!--
+ ~ Copyright 2016-present Open Networking Laboratory
+ ~
+ ~ Licensed 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
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License 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.
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-compiler-base</artifactId>
+ <version>1.12-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>onos-yang-compiler-parser</artifactId>
+ <version>1.12-SNAPSHOT</version>
+ <packaging>jar</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-compiler-datamodel</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-compiler-translator</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-compiler-linker</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.antlr</groupId>
+ <artifactId>antlr4-runtime</artifactId>
+ <version>4.5.3</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.12</version>
+ <scope>test</scope>
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.antlr</groupId>
+ <artifactId>antlr4-maven-plugin</artifactId>
+ <version>4.5</version>
+ <executions>
+ <execution>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>antlr4</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <sourceDirectory>src/main/resources</sourceDirectory>
+ <outputDirectory>
+ target/generated-sources/org/onosproject/yang/compiler/parser/antlrgencode
+ </outputDirectory>
+ <visitor>false</visitor>
+ <listener>true</listener>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-clean-plugin</artifactId>
+ <version>3.0.0</version>
+ <executions>
+ <execution>
+ <id>Deleting auto-generated listener interfaces</id>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>clean</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <excludeDefaultDirectories>true</excludeDefaultDirectories>
+ <filesets>
+ <fileset>
+ <directory>target</directory>
+ <followSymlinks>false</followSymlinks>
+ <useDefaultExcludes>true</useDefaultExcludes>
+ <excludes>
+ <exclude>
+ **/generated-sources/org/onosproject/yang/compiler/parser/antlrgencode/GeneratedYangLexer.java
+ </exclude>
+ <exclude>
+ **/generated-sources/org/onosproject/yang/compiler/parser/antlrgencode/GeneratedYang.tokens
+ </exclude>
+ <exclude>
+ **/generated-sources/org/onosproject/yang/compiler/parser/antlrgencode/GeneratedYangParser.java
+ </exclude>
+ <exclude>
+ **/generated-sources/org/onosproject/yang/compiler/parser/antlrgencode/GeneratedYangLexer.tokens
+ </exclude>
+ <exclude>
+ **/generated-sources/org/onosproject/yang/compiler/parser/antlrgencode/YangLexer.java
+ </exclude>
+ <exclude>
+ **/generated-sources/org/onosproject/yang/compiler/parser/antlrgencode/YangLexer.tokens
+ </exclude>
+ </excludes>
+ </fileset>
+ </filesets>
+ <verbose>false</verbose>
+ </configuration>
+ </plugin>
+
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>3.0.2</version>
+ <configuration>
+ <skipIfEmpty>true</skipIfEmpty>
+ </configuration>
+ <executions>
+ <execution>
+ <id>default</id>
+ <goals>
+ <goal>test-jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/YangUtilsParser.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/YangUtilsParser.java
new file mode 100644
index 0000000..67c611f
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/YangUtilsParser.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser;
+
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+
+import java.io.IOException;
+
+/**
+ * Abstraction of entity which provides parser service of YANG files for yangutils-maven-plugin.
+ */
+public interface YangUtilsParser {
+
+ /**
+ * Returns the data model node. It is an entry function to initiate the YANG file parsing.
+ *
+ * @param file input YANG file
+ * @return YangNode root node of the data model tree
+ * @throws ParserException when fails to get the data model
+ * @throws IOException when there is an exception in IO operation
+ */
+ YangNode getDataModel(String file) throws IOException, ParserException;
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/antlrgencode/GeneratedYangListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/antlrgencode/GeneratedYangListener.java
new file mode 100644
index 0000000..ff319df
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/antlrgencode/GeneratedYangListener.java
@@ -0,0 +1,2077 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+// Generated from GeneratedYang.g4 by ANTLR 4.5
+
+package org.onosproject.yang.compiler.parser.antlrgencode;
+
+import org.antlr.v4.runtime.tree.ParseTreeListener;
+
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.AnyxmlStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.AppDataStructureContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.AppDataStructureStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.AppExtendedStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ArgumentBodyContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ArgumentStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.AugmentContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.AugmentStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.BaseStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.BelongstoStatementBodyContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.BelongstoStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.BitBodyStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.BitStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.BitsSpecificationContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.BodyStatementsContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.CaseStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ChoiceStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.CommonStatementsContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.CompilerAnnotationBodyStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.CompilerAnnotationStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ConfigContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ConfigStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ContactStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ContainerStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.DataDefStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.DataStructureKeyStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.DateArgumentStringContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.Decimal64SpecificationContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.DefaultStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.DescriptionStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.DeviateAddStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.DeviateDeleteStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.DeviateNotSupportedStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.DeviateReplaceStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.DeviationContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.DeviationStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.EnumSpecificationContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.EnumStatementBodyContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.EnumStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ErrorAppTagStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ErrorMessageStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ExtendedNameContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ExtensionBodyContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ExtensionStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.FeatureBodyContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.FeatureStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.FractionContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.FractionDigitStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.GroupingStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.IdentifierContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.IdentityBodyContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.IdentityStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.IdentityrefSpecificationContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.IfFeatureStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ImportStatementBodyContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ImportStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.IncludeStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.InputStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.InstanceIdentifierSpecificationContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.KeyContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.KeyStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.LeafListStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.LeafStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.LeafrefSpecificationContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.LengthContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.LengthStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.LinkageStatementsContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ListStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.MandatoryContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.MandatoryStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.MaxElementsStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.MaxValueContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.MetaStatementsContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.MinElementsStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.MinValueContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ModuleBodyContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ModuleHeaderStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ModuleStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.MustStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.NamespaceStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.NotificationStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.NumericalRestrictionsContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.OrderedByContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.OrderedByStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.OrganizationStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.OutputStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.PathContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.PathStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.PatternStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.PositionContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.PositionStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.PrefixStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.PresenceStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RangeContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RangeStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ReferenceStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RefineAnyxmlStatementsContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RefineCaseStatementsContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RefineChoiceStatementsContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RefineContainerStatementsContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RefineContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RefineLeafListStatementsContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RefineLeafStatementsContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RefineListStatementsContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RefineStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RequireInstanceContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RequireInstanceStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RevisionDateStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RevisionStatementBodyContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RevisionStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RevisionStatementsContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RpcStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ShortCaseStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.StatusContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.StatusStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.StringContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.StringRestrictionsContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.SubModuleStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.SubmoduleBodyContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.SubmoduleHeaderStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.TypeBodyStatementsContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.TypeStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.TypedefStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.UnionSpecificationContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.UniqueContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.UniqueStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.UnitsStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.UsesStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ValueContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ValueStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.VersionContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.WhenStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.YangConstructContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.YangVersionStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.YangfileContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.YinElementStatementContext;
+
+/**
+ * Represents ANTLR interfaces to be implemented by listener to traverse the parse tree.
+ */
+public interface GeneratedYangListener extends ParseTreeListener {
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule yangfile.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterYangfile(YangfileContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule yangfile.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitYangfile(YangfileContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule moduleStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterModuleStatement(ModuleStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule moduleStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitModuleStatement(ModuleStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule moduleBody.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterModuleBody(ModuleBodyContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule moduleBody.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitModuleBody(ModuleBodyContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule moduleHeaderStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterModuleHeaderStatement(ModuleHeaderStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule moduleHeaderStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitModuleHeaderStatement(ModuleHeaderStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule linkageStatements.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterLinkageStatements(LinkageStatementsContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule linkageStatements.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitLinkageStatements(LinkageStatementsContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule metaStatements.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterMetaStatements(MetaStatementsContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule metaStatements.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitMetaStatements(MetaStatementsContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule revisionStatements.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterRevisionStatements(RevisionStatementsContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule revisionStatements.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitRevisionStatements(RevisionStatementsContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule bodyStatements.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterBodyStatements(BodyStatementsContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule bodyStatements.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitBodyStatements(BodyStatementsContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule yangVersionStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterYangVersionStatement(YangVersionStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule yangVersionStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitYangVersionStatement(YangVersionStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule namespaceStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterNamespaceStatement(NamespaceStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule namespaceStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitNamespaceStatement(NamespaceStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule prefixStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterPrefixStatement(PrefixStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule prefixStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitPrefixStatement(PrefixStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule importStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterImportStatement(ImportStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule importStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitImportStatement(ImportStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule importStatementBody.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterImportStatementBody(ImportStatementBodyContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule importStatementBody.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitImportStatementBody(ImportStatementBodyContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule revisionDateStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterRevisionDateStatement(RevisionDateStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule revisionDateStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitRevisionDateStatement(RevisionDateStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule includeStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterIncludeStatement(IncludeStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule includeStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitIncludeStatement(IncludeStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule organizationStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterOrganizationStatement(OrganizationStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule organizationStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitOrganizationStatement(OrganizationStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule contactStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterContactStatement(ContactStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule contactStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitContactStatement(ContactStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule descriptionStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterDescriptionStatement(DescriptionStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule descriptionStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitDescriptionStatement(DescriptionStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule referenceStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterReferenceStatement(ReferenceStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule referenceStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitReferenceStatement(ReferenceStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule revisionStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterRevisionStatement(RevisionStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule revisionStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitRevisionStatement(RevisionStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule revisionStatementBody.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterRevisionStatementBody(RevisionStatementBodyContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule revisionStatementBody.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitRevisionStatementBody(RevisionStatementBodyContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule subModuleStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterSubModuleStatement(SubModuleStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule subModuleStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitSubModuleStatement(SubModuleStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule submoduleBody.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterSubmoduleBody(SubmoduleBodyContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule submoduleBody.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitSubmoduleBody(SubmoduleBodyContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule submoduleHeaderStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterSubmoduleHeaderStatement(SubmoduleHeaderStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule submoduleHeaderStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitSubmoduleHeaderStatement(SubmoduleHeaderStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule belongstoStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterBelongstoStatement(BelongstoStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule belongstoStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitBelongstoStatement(BelongstoStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule belongstoStatementBody.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterBelongstoStatementBody(BelongstoStatementBodyContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule belongstoStatementBody.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitBelongstoStatementBody(BelongstoStatementBodyContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule extensionStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterExtensionStatement(ExtensionStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule extensionStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitExtensionStatement(ExtensionStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule extensionBody.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterExtensionBody(ExtensionBodyContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule extensionBody.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitExtensionBody(ExtensionBodyContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule argumentStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterArgumentStatement(ArgumentStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule argumentStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitArgumentStatement(ArgumentStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule argumentBody.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterArgumentBody(ArgumentBodyContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule argumentBody.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitArgumentBody(ArgumentBodyContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule yinElementStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterYinElementStatement(YinElementStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule yinElementStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitYinElementStatement(YinElementStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule identityStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterIdentityStatement(IdentityStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule identityStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitIdentityStatement(IdentityStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule identityBody.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterIdentityBody(IdentityBodyContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule identityBody.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitIdentityBody(IdentityBodyContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule baseStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterBaseStatement(BaseStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule baseStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitBaseStatement(BaseStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule featureStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterFeatureStatement(FeatureStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule featureStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitFeatureStatement(FeatureStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule featureBody.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterFeatureBody(FeatureBodyContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule featureBody.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitFeatureBody(FeatureBodyContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule dataDefStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterDataDefStatement(DataDefStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule dataDefStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitDataDefStatement(DataDefStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule ifFeatureStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterIfFeatureStatement(IfFeatureStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule ifFeatureStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitIfFeatureStatement(IfFeatureStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule unitsStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterUnitsStatement(UnitsStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule unitsStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitUnitsStatement(UnitsStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule typedefStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterTypedefStatement(TypedefStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule typedefStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitTypedefStatement(TypedefStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule typeStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterTypeStatement(TypeStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule typeStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitTypeStatement(TypeStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule typeBodyStatements.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterTypeBodyStatements(TypeBodyStatementsContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule typeBodyStatements.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitTypeBodyStatements(TypeBodyStatementsContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule numericalRestrictions.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterDecimal64Specification(Decimal64SpecificationContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule numericalRestrictions.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitDecimal64Specification(Decimal64SpecificationContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule numericalRestrictions.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterFractionDigitStatement(FractionDigitStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule
+ * numericalRestrictions.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitFractionDigitStatement(FractionDigitStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule
+ * numericalRestrictions.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterNumericalRestrictions(NumericalRestrictionsContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule numericalRestrictions.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitNumericalRestrictions(NumericalRestrictionsContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule rangeStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterRangeStatement(RangeStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule rangeStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitRangeStatement(RangeStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule commonStatements.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterCommonStatements(CommonStatementsContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule commonStatements.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitCommonStatements(CommonStatementsContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule stringRestrictions.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterStringRestrictions(StringRestrictionsContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule stringRestrictions.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitStringRestrictions(StringRestrictionsContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule lengthStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterLengthStatement(LengthStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule lengthStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitLengthStatement(LengthStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule patternStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterPatternStatement(PatternStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule patternStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitPatternStatement(PatternStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule defaultStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterDefaultStatement(DefaultStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule defaultStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitDefaultStatement(DefaultStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule enumSpecification.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterEnumSpecification(EnumSpecificationContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule enumSpecification.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitEnumSpecification(EnumSpecificationContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule enumStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterEnumStatement(EnumStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule enumStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitEnumStatement(EnumStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule enumStatementBody.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterEnumStatementBody(EnumStatementBodyContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule enumStatementBody.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitEnumStatementBody(EnumStatementBodyContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule leafrefSpecification.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterLeafrefSpecification(LeafrefSpecificationContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule leafrefSpecification.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitLeafrefSpecification(LeafrefSpecificationContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule pathStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterPathStatement(PathStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule pathStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitPathStatement(PathStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule requireInstanceStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterRequireInstanceStatement(RequireInstanceStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule requireInstanceStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitRequireInstanceStatement(RequireInstanceStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule instanceIdentifierSpecification.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterInstanceIdentifierSpecification(
+ InstanceIdentifierSpecificationContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule instanceIdentifierSpecification.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitInstanceIdentifierSpecification(InstanceIdentifierSpecificationContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule identityrefSpecification.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterIdentityrefSpecification(IdentityrefSpecificationContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule identityrefSpecification.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitIdentityrefSpecification(IdentityrefSpecificationContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule unionSpecification.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterUnionSpecification(UnionSpecificationContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule unionSpecification.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitUnionSpecification(UnionSpecificationContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule bitsSpecification.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterBitsSpecification(BitsSpecificationContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule bitsSpecification.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitBitsSpecification(BitsSpecificationContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule bitStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterBitStatement(BitStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule bitStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitBitStatement(BitStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule bitBodyStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterBitBodyStatement(BitBodyStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule bitBodyStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitBitBodyStatement(BitBodyStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule positionStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterPositionStatement(PositionStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule positionStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitPositionStatement(PositionStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule statusStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterStatusStatement(StatusStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule statusStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitStatusStatement(StatusStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule configStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterConfigStatement(ConfigStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule configStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitConfigStatement(ConfigStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule mandatoryStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterMandatoryStatement(MandatoryStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule mandatoryStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitMandatoryStatement(MandatoryStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule presenceStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterPresenceStatement(PresenceStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule presenceStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitPresenceStatement(PresenceStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule orderedByStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterOrderedByStatement(OrderedByStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule orderedByStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitOrderedByStatement(OrderedByStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule mustStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterMustStatement(MustStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule mustStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitMustStatement(MustStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule errorMessageStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterErrorMessageStatement(ErrorMessageStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule errorMessageStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitErrorMessageStatement(ErrorMessageStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule errorAppTagStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterErrorAppTagStatement(ErrorAppTagStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule errorAppTagStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitErrorAppTagStatement(ErrorAppTagStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule minElementsStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterMinElementsStatement(MinElementsStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule minElementsStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitMinElementsStatement(MinElementsStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule maxElementsStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterMaxElementsStatement(MaxElementsStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule maxElementsStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitMaxElementsStatement(MaxElementsStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule valueStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterValueStatement(ValueStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule valueStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitValueStatement(ValueStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule groupingStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterGroupingStatement(GroupingStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule groupingStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitGroupingStatement(GroupingStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule containerStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterContainerStatement(ContainerStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule containerStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitContainerStatement(ContainerStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule leafStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterLeafStatement(LeafStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule leafStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitLeafStatement(LeafStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule leafListStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterLeafListStatement(LeafListStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule leafListStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitLeafListStatement(LeafListStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule listStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterListStatement(ListStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule listStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitListStatement(ListStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule keyStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterKeyStatement(KeyStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule keyStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitKeyStatement(KeyStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule uniqueStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterUniqueStatement(UniqueStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule uniqueStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitUniqueStatement(UniqueStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule choiceStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterChoiceStatement(ChoiceStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule choiceStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitChoiceStatement(ChoiceStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule shortCaseStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterShortCaseStatement(ShortCaseStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule shortCaseStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitShortCaseStatement(ShortCaseStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule caseStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterCaseStatement(CaseStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule caseStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitCaseStatement(CaseStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule anyxmlStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterAnyxmlStatement(AnyxmlStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule anyxmlStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitAnyxmlStatement(AnyxmlStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule usesStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterUsesStatement(UsesStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule usesStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitUsesStatement(UsesStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule refineStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterRefineStatement(RefineStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule refineStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitRefineStatement(RefineStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule refineContainerStatements.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterRefineContainerStatements(RefineContainerStatementsContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule refineContainerStatements.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitRefineContainerStatements(RefineContainerStatementsContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule refineLeafStatements.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterRefineLeafStatements(RefineLeafStatementsContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule refineLeafStatements.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitRefineLeafStatements(RefineLeafStatementsContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule refineLeafListStatements.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterRefineLeafListStatements(RefineLeafListStatementsContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule refineLeafListStatements.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitRefineLeafListStatements(RefineLeafListStatementsContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule refineListStatements.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterRefineListStatements(RefineListStatementsContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule refineListStatements.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitRefineListStatements(RefineListStatementsContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule refineChoiceStatements.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterRefineChoiceStatements(RefineChoiceStatementsContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule refineChoiceStatements.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitRefineChoiceStatements(RefineChoiceStatementsContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule refineCaseStatements.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterRefineCaseStatements(RefineCaseStatementsContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule refineCaseStatements.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitRefineCaseStatements(RefineCaseStatementsContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule refineAnyxmlStatements.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterRefineAnyxmlStatements(RefineAnyxmlStatementsContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule refineAnyxmlStatements.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitRefineAnyxmlStatements(RefineAnyxmlStatementsContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule augmentStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterAugmentStatement(AugmentStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule augmentStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitAugmentStatement(AugmentStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule whenStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterWhenStatement(WhenStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule whenStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitWhenStatement(WhenStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule rpcStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterRpcStatement(RpcStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule rpcStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitRpcStatement(RpcStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule inputStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterInputStatement(InputStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule inputStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitInputStatement(InputStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule outputStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterOutputStatement(OutputStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule outputStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitOutputStatement(OutputStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule notificationStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterNotificationStatement(NotificationStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule notificationStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitNotificationStatement(NotificationStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule deviationStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterDeviationStatement(DeviationStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule deviationStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitDeviationStatement(DeviationStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule deviateNotSupportedStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterDeviateNotSupportedStatement(DeviateNotSupportedStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule deviateNotSupportedStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitDeviateNotSupportedStatement(DeviateNotSupportedStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule deviateAddStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterDeviateAddStatement(DeviateAddStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule deviateAddStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitDeviateAddStatement(DeviateAddStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule deviateDeleteStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterDeviateDeleteStatement(DeviateDeleteStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule deviateDeleteStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitDeviateDeleteStatement(DeviateDeleteStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule deviateReplaceStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterDeviateReplaceStatement(DeviateReplaceStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule deviateReplaceStatement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitDeviateReplaceStatement(DeviateReplaceStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule string.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterString(StringContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule string.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitString(StringContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule identifier.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterIdentifier(IdentifierContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule identifier.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitIdentifier(IdentifierContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule version.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterVersion(VersionContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule version.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitVersion(VersionContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule range.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterRange(RangeContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule range.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitRange(RangeContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule dateArgumentString.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterDateArgumentString(DateArgumentStringContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule dateArgumentString.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitDateArgumentString(DateArgumentStringContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule length.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterLength(LengthContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule length.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitLength(LengthContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule path.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterPath(PathContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule path.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitPath(PathContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule position.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterPosition(PositionContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule position.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitPosition(PositionContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule status.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterStatus(StatusContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule status.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitStatus(StatusContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule config.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterConfig(ConfigContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule config.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitConfig(ConfigContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule mandatory.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterMandatory(MandatoryContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule mandatory.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitMandatory(MandatoryContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule ordered-by.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterOrderedBy(OrderedByContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule ordered-by.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitOrderedBy(OrderedByContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule min elements value.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterMinValue(MinValueContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule min elements value.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitMinValue(MinValueContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule max elements value.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterMaxValue(MaxValueContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule max elements value.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitMaxValue(MaxValueContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule key.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterKey(KeyContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule key.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitKey(KeyContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule unique.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterUnique(UniqueContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule unique.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitUnique(UniqueContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule refine.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterRefine(RefineContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule refine.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitRefine(RefineContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule augment.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterAugment(AugmentContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule augment.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitAugment(AugmentContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule augment.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterFraction(FractionContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule augment.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitFraction(FractionContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule deviation.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterDeviation(DeviationContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule deviation.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitDeviation(DeviationContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule deviation.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterValue(ValueContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule deviation.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitValue(ValueContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule yang construct.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterYangConstruct(YangConstructContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule yang construct.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitYangConstruct(YangConstructContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule compiler annotation statement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterCompilerAnnotationStatement(CompilerAnnotationStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule compiler annotation statement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitCompilerAnnotationStatement(CompilerAnnotationStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule compiler annotation body statement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterCompilerAnnotationBodyStatement(CompilerAnnotationBodyStatementContext
+ currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule compiler annotation body statement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitCompilerAnnotationBodyStatement(CompilerAnnotationBodyStatementContext
+ currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule app data structure statement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterAppDataStructureStatement(AppDataStructureStatementContext
+ currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule app data structure statement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitAppDataStructureStatement(AppDataStructureStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule app data structure.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterAppDataStructure(AppDataStructureContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule app data strcuture.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitAppDataStructure(AppDataStructureContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule app extended statement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterAppExtendedStatement(AppExtendedStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule app extended statement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitAppExtendedStatement(AppExtendedStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule extended name.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterExtendedName(ExtendedNameContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule extended name.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitExtendedName(ExtendedNameContext currentContext);
+
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule
+ * data structure key statement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterDataStructureKeyStatement(DataStructureKeyStatementContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar rule
+ * data structure key statement.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitDataStructureKeyStatement(DataStructureKeyStatementContext currentContext);
+
+ /**
+ * Enters a parse tree produced by GeneratedYangParser for grammar rule require instance.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void enterRequireInstance(RequireInstanceContext currentContext);
+
+ /**
+ * Exits a parse tree produced by GeneratedYangParser for grammar require instance.
+ *
+ * @param currentContext current context in the parsed tree
+ */
+ void exitRequireInstance(RequireInstanceContext currentContext);
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/antlrgencode/package-info.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/antlrgencode/package-info.java
new file mode 100644
index 0000000..a8abeab
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/antlrgencode/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+/**
+ * ANTLR interfaces to be implemented by listener.
+ */
+package org.onosproject.yang.compiler.parser.antlrgencode;
\ No newline at end of file
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/exceptions/ParserException.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/exceptions/ParserException.java
new file mode 100644
index 0000000..dd019c8
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/exceptions/ParserException.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.exceptions;
+
+/**
+ * Represents base class for exceptions in parser operations.
+ */
+public class ParserException extends RuntimeException {
+
+ private static final long serialVersionUID = 20160211L;
+ private transient int lineNumber;
+ private transient int charPositionInLine;
+ private transient String fileName;
+
+ /**
+ * Creates a new parser exception.
+ */
+ public ParserException() {
+ super();
+ }
+
+ /**
+ * Creates a new parser exception with given message.
+ *
+ * @param message the detail of exception in string
+ */
+ public ParserException(String message) {
+ super(message);
+ }
+
+ /**
+ * Creates a new parser exception from given message and cause.
+ *
+ * @param message the detail of exception in string
+ * @param cause underlying cause of the error
+ */
+ public ParserException(final String message, final Throwable cause) {
+ super(message, cause);
+ }
+
+ /**
+ * Creates a new parser exception from cause.
+ *
+ * @param cause underlying cause of the error
+ */
+ public ParserException(final Throwable cause) {
+ super(cause);
+ }
+
+ /**
+ * Returns line number of the exception.
+ *
+ * @return line number of the exception
+ */
+ public int getLineNumber() {
+ return this.lineNumber;
+ }
+
+ /**
+ * Returns YANG file name of the exception.
+ *
+ * @return YANG file name of the exception
+ */
+ public String getFileName() {
+ return this.fileName;
+ }
+
+ /**
+ * Returns position of the exception.
+ *
+ * @return position of the exception
+ */
+ public int getCharPositionInLine() {
+ return this.charPositionInLine;
+ }
+
+ /**
+ * Sets line number of YANG file.
+ *
+ * @param line line number of YANG file
+ */
+ public void setLine(int line) {
+ this.lineNumber = line;
+ }
+
+ /**
+ * Sets position of exception.
+ *
+ * @param charPosition position of exception
+ */
+ public void setCharPosition(int charPosition) {
+ this.charPositionInLine = charPosition;
+ }
+
+ /**
+ * Sets file name in parser exception.
+ *
+ * @param fileName YANG file name
+ */
+ public void setFileName(String fileName) {
+ this.fileName = fileName;
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/exceptions/package-info.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/exceptions/package-info.java
new file mode 100644
index 0000000..f9cb0e4
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/exceptions/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+/**
+ * Custom parser exceptions.
+ */
+package org.onosproject.yang.compiler.parser.exceptions;
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/TreeWalkListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/TreeWalkListener.java
new file mode 100644
index 0000000..42fe6ca
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/TreeWalkListener.java
@@ -0,0 +1,1845 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl;
+
+import org.antlr.v4.runtime.ParserRuleContext;
+import org.antlr.v4.runtime.tree.ErrorNode;
+import org.antlr.v4.runtime.tree.TerminalNode;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+import org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.AppDataStructureListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.AppExtendedNameListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.ArgumentListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.AugmentListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.BaseFileListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.BaseListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.BelongsToListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.BitListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.BitsListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.CaseListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.ChoiceListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.CompilerAnnotationListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.ConfigListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.ContactListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.ContainerListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.DataStructureKeyListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.Decimal64Listener;
+import org.onosproject.yang.compiler.parser.impl.listeners.DefaultListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.DescriptionListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.EnumListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.EnumerationListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.ErrorAppTagListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.ErrorMessageListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.ExtensionListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.FeatureListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.FractionDigitsListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.GroupingListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.IdentityListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.IdentityRefListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.IfFeatureListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.ImportListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.IncludeListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.InputListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.KeyListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.LeafListListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.LeafListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.LeafrefListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.LengthRestrictionListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.ListListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.MandatoryListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.MaxElementsListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.MinElementsListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.ModuleListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.MustListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.NamespaceListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.NotificationListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.OrganizationListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.OutputListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.PathListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.PatternRestrictionListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.PositionListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.PrefixListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.PresenceListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.RangeRestrictionListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.ReferenceListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.RequireInstanceListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.RevisionDateListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.RevisionListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.RpcListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.ShortCaseListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.StatusListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.SubModuleListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.TypeDefListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.TypeListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.UnionListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.UniqueListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.UnitsListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.UsesListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.ValueListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.VersionListener;
+import org.onosproject.yang.compiler.parser.impl.listeners.WhenListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil;
+import org.onosproject.yang.compiler.utils.UtilConstants;
+
+import java.util.Stack;
+
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.AnyxmlStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.AppDataStructureContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.AppDataStructureStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.AppExtendedStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ArgumentBodyContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ArgumentStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.AugmentContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.AugmentStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.BaseStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.BelongstoStatementBodyContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.BelongstoStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.BitBodyStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.BitStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.BitsSpecificationContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.BodyStatementsContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.CaseStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ChoiceStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.CommonStatementsContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.CompilerAnnotationBodyStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.CompilerAnnotationStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ConfigContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ConfigStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ContactStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ContainerStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.DataDefStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.DataStructureKeyStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.DateArgumentStringContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.Decimal64SpecificationContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.DefaultStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.DescriptionStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.DeviateAddStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.DeviateDeleteStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.DeviateNotSupportedStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.DeviateReplaceStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.DeviationContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.DeviationStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.EnumSpecificationContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.EnumStatementBodyContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.EnumStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ErrorAppTagStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ErrorMessageStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ExtendedNameContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ExtensionBodyContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ExtensionStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.FeatureBodyContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.FeatureStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.FractionContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.FractionDigitStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.GroupingStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.IdentifierContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.IdentityBodyContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.IdentityStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.IdentityrefSpecificationContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.IfFeatureStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ImportStatementBodyContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ImportStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.IncludeStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.InputStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.InstanceIdentifierSpecificationContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.KeyContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.KeyStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.LeafListStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.LeafStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.LeafrefSpecificationContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.LengthContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.LengthStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.LinkageStatementsContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ListStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.MandatoryContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.MandatoryStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.MaxElementsStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.MaxValueContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.MetaStatementsContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.MinElementsStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.MinValueContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ModuleBodyContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ModuleHeaderStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ModuleStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.MustStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.NamespaceStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.NotificationStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.NumericalRestrictionsContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.OrderedByContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.OrderedByStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.OrganizationStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.OutputStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.PathContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.PathStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.PatternStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.PositionContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.PositionStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.PrefixStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.PresenceStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RangeContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RangeStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ReferenceStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RefineAnyxmlStatementsContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RefineCaseStatementsContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RefineChoiceStatementsContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RefineContainerStatementsContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RefineContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RefineLeafListStatementsContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RefineLeafStatementsContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RefineListStatementsContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RefineStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RequireInstanceContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RequireInstanceStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RevisionDateStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RevisionStatementBodyContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RevisionStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RevisionStatementsContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RpcStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ShortCaseStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.StatusContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.StatusStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.StringContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.StringRestrictionsContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.SubModuleStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.SubmoduleBodyContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.SubmoduleHeaderStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.TypeBodyStatementsContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.TypeStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.TypedefStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.UnionSpecificationContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.UniqueContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.UniqueStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.UnitsStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.UsesStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ValueContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ValueStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.VersionContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.WhenStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.YangConstructContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.YangVersionStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.YangfileContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.YinElementStatementContext;
+
+/**
+ * Represents ANTLR generates parse-tree. ANTLR generates a parse-tree listener interface that responds to events
+ * triggered by the built-in tree walker. The methods in listener are just
+ * callbacks. This class implements listener interface and generates the
+ * corresponding data model tree.
+ */
+public class TreeWalkListener implements GeneratedYangListener {
+
+ // List of parsable node entries maintained in stack
+ private Stack<Parsable> parsedDataStack = new Stack<>();
+
+ // Parse tree root node
+ private YangNode rootNode;
+
+ // YANG file name.
+ private String fileName;
+
+ /**
+ * Parent depth of grouping count for any node.
+ */
+ private int groupingDepth;
+
+ /**
+ * Parent depth of unsupported yang construct count for any node.
+ */
+ private int unsupportedYangConstructDepth;
+
+ /**
+ * Returns number of unsupported yang constructs parents, by a node, at any level.
+ *
+ * @return depth of unsupported yang constructs
+ */
+ public int getUnsupportedYangConstructDepth() {
+ return unsupportedYangConstructDepth;
+ }
+
+ /**
+ * Sets number of unsupported yang constructs by a node at any level.
+ */
+ private void increaseUnsupportedYangConstructDepth() {
+ unsupportedYangConstructDepth++;
+ }
+
+ /**
+ * Sets number of unsupported yang constructs by a node at any level.
+ */
+ private void decreaseUnsupportedYangConstructDepth() {
+ unsupportedYangConstructDepth--;
+ }
+
+ /**
+ * Returns number of grouping parents, by a node, at any level.
+ *
+ * @return depth of grouping
+ */
+ public int getGroupingDepth() {
+ return groupingDepth;
+ }
+
+ /**
+ * Sets number of grouping parents by a node at any level.
+ */
+ public void increaseGroupingDepth() {
+ groupingDepth++;
+ }
+
+ /**
+ * Sets number of grouping parents by a node at any level.
+ */
+ public void decreaseGroupingDepth() {
+ groupingDepth--;
+ }
+
+ /**
+ * Returns stack of parsable data.
+ *
+ * @return stack of parsable data
+ */
+ public Stack<Parsable> getParsedDataStack() {
+ return parsedDataStack;
+ }
+
+ /**
+ * Set parsed data stack.
+ *
+ * @param parsedDataStack stack of parsable data objects
+ */
+ public void setParsedDataStack(Stack<Parsable> parsedDataStack) {
+ this.parsedDataStack = parsedDataStack;
+ }
+
+ /**
+ * Returns root node.
+ *
+ * @return rootNode of data model tree
+ */
+ public YangNode getRootNode() {
+ return rootNode;
+ }
+
+ /**
+ * Set root node.
+ *
+ * @param rootNode root node of data model tree
+ */
+ public void setRootNode(YangNode rootNode) {
+ this.rootNode = rootNode;
+ }
+
+ /**
+ * Returns YANG file name.
+ *
+ * @return YANG file name
+ */
+ public String getFileName() {
+ return fileName;
+ }
+
+ /**
+ * Sets YANG file name.
+ *
+ * @param fileName YANG file name
+ */
+ public void setFileName(String fileName) {
+ this.fileName = fileName;
+ }
+
+ @Override
+ public void enterYangfile(YangfileContext ctx) {
+ BaseFileListener.processYangFileEntry(this, ctx);
+ }
+
+ @Override
+ public void exitYangfile(YangfileContext ctx) {
+ BaseFileListener.processYangFileExit(this, ctx);
+ }
+
+ @Override
+ public void enterModuleStatement(ModuleStatementContext ctx) {
+ ModuleListener.processModuleEntry(this, ctx);
+ }
+
+ @Override
+ public void exitModuleStatement(ModuleStatementContext ctx) {
+ ModuleListener.processModuleExit(this, ctx);
+ }
+
+ @Override
+ public void enterModuleBody(ModuleBodyContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitModuleBody(ModuleBodyContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterModuleHeaderStatement(ModuleHeaderStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitModuleHeaderStatement(ModuleHeaderStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterLinkageStatements(LinkageStatementsContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitLinkageStatements(LinkageStatementsContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterMetaStatements(MetaStatementsContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitMetaStatements(MetaStatementsContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterRevisionStatements(RevisionStatementsContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitRevisionStatements(RevisionStatementsContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterBodyStatements(BodyStatementsContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitBodyStatements(BodyStatementsContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterYangVersionStatement(YangVersionStatementContext ctx) {
+ VersionListener.processVersionEntry(this, ctx);
+ }
+
+ @Override
+ public void exitYangVersionStatement(YangVersionStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterNamespaceStatement(NamespaceStatementContext ctx) {
+ NamespaceListener.processNamespaceEntry(this, ctx);
+ }
+
+ @Override
+ public void exitNamespaceStatement(NamespaceStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterPrefixStatement(PrefixStatementContext ctx) {
+ PrefixListener.processPrefixEntry(this, ctx);
+ }
+
+ @Override
+ public void exitPrefixStatement(PrefixStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterImportStatement(ImportStatementContext ctx) {
+ ImportListener.processImportEntry(this, ctx);
+ }
+
+ @Override
+ public void exitImportStatement(ImportStatementContext ctx) {
+ ImportListener.processImportExit(this, ctx);
+ }
+
+ @Override
+ public void enterImportStatementBody(ImportStatementBodyContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitImportStatementBody(ImportStatementBodyContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterRevisionDateStatement(RevisionDateStatementContext ctx) {
+ RevisionDateListener.processRevisionDateEntry(this, ctx);
+ }
+
+ @Override
+ public void exitRevisionDateStatement(RevisionDateStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterIncludeStatement(IncludeStatementContext ctx) {
+ IncludeListener.processIncludeEntry(this, ctx);
+ }
+
+ @Override
+ public void exitIncludeStatement(IncludeStatementContext ctx) {
+ IncludeListener.processIncludeExit(this, ctx);
+ }
+
+ @Override
+ public void enterOrganizationStatement(OrganizationStatementContext ctx) {
+ OrganizationListener.processOrganizationEntry(this, ctx);
+ }
+
+ @Override
+ public void exitOrganizationStatement(OrganizationStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterContactStatement(ContactStatementContext ctx) {
+ ContactListener.processContactEntry(this, ctx);
+ }
+
+ @Override
+ public void exitContactStatement(ContactStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterDescriptionStatement(DescriptionStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ DescriptionListener.processDescriptionEntry(this, ctx);
+ }
+ }
+
+ @Override
+ public void exitDescriptionStatement(DescriptionStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterReferenceStatement(ReferenceStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ ReferenceListener.processReferenceEntry(this, ctx);
+ }
+ }
+
+ @Override
+ public void exitReferenceStatement(ReferenceStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterRevisionStatement(RevisionStatementContext ctx) {
+ RevisionListener.processRevisionEntry(this, ctx);
+ }
+
+ @Override
+ public void exitRevisionStatement(RevisionStatementContext ctx) {
+ RevisionListener.processRevisionExit(this, ctx);
+ }
+
+ @Override
+ public void enterRevisionStatementBody(RevisionStatementBodyContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitRevisionStatementBody(RevisionStatementBodyContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterSubModuleStatement(SubModuleStatementContext ctx) {
+ SubModuleListener.processSubModuleEntry(this, ctx);
+ }
+
+ @Override
+ public void exitSubModuleStatement(SubModuleStatementContext ctx) {
+ SubModuleListener.processSubModuleExit(this, ctx);
+ }
+
+ @Override
+ public void enterSubmoduleBody(SubmoduleBodyContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitSubmoduleBody(SubmoduleBodyContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterSubmoduleHeaderStatement(SubmoduleHeaderStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitSubmoduleHeaderStatement(SubmoduleHeaderStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterBelongstoStatement(BelongstoStatementContext ctx) {
+ BelongsToListener.processBelongsToEntry(this, ctx);
+ }
+
+ @Override
+ public void exitBelongstoStatement(BelongstoStatementContext ctx) {
+ BelongsToListener.processBelongsToExit(this, ctx);
+ }
+
+ @Override
+ public void enterBelongstoStatementBody(BelongstoStatementBodyContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitBelongstoStatementBody(BelongstoStatementBodyContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterExtensionStatement(ExtensionStatementContext ctx) {
+ ExtensionListener.processExtensionEntry(this, ctx);
+ }
+
+ @Override
+ public void exitExtensionStatement(ExtensionStatementContext ctx) {
+ ExtensionListener.processExtensionExit(this, ctx);
+ }
+
+ @Override
+ public void enterExtensionBody(ExtensionBodyContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitExtensionBody(ExtensionBodyContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterArgumentStatement(ArgumentStatementContext ctx) {
+ ArgumentListener.processArgumentEntry(this, ctx);
+ }
+
+ @Override
+ public void exitArgumentStatement(ArgumentStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterArgumentBody(ArgumentBodyContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitArgumentBody(ArgumentBodyContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterYinElementStatement(YinElementStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitYinElementStatement(YinElementStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterIdentityStatement(IdentityStatementContext ctx) {
+ IdentityListener.processIdentityEntry(this, ctx);
+ }
+
+ @Override
+ public void exitIdentityStatement(IdentityStatementContext ctx) {
+ IdentityListener.processIdentityExit(this, ctx);
+ }
+
+ @Override
+ public void enterIdentityBody(IdentityBodyContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitIdentityBody(IdentityBodyContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterBaseStatement(BaseStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ BaseListener.processBaseEntry(this, ctx);
+ }
+ }
+
+ @Override
+ public void exitBaseStatement(BaseStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterFeatureStatement(FeatureStatementContext ctx) {
+ FeatureListener.processFeatureEntry(this, ctx);
+ }
+
+ @Override
+ public void exitFeatureStatement(FeatureStatementContext ctx) {
+ FeatureListener.processFeatureExit(this, ctx);
+ }
+
+ @Override
+ public void enterFeatureBody(FeatureBodyContext ctx) {
+ // do nothing
+ }
+
+ @Override
+ public void exitFeatureBody(FeatureBodyContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterDataDefStatement(DataDefStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitDataDefStatement(DataDefStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterIfFeatureStatement(IfFeatureStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ IfFeatureListener.processIfFeatureEntry(this, ctx);
+ }
+ }
+
+ @Override
+ public void exitIfFeatureStatement(IfFeatureStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterUnitsStatement(UnitsStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ UnitsListener.processUnitsEntry(this, ctx);
+ }
+ }
+
+ @Override
+ public void exitUnitsStatement(UnitsStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterTypedefStatement(TypedefStatementContext ctx) {
+ TypeDefListener.processTypeDefEntry(this, ctx);
+ }
+
+ @Override
+ public void exitTypedefStatement(TypedefStatementContext ctx) {
+ TypeDefListener.processTypeDefExit(this, ctx);
+ }
+
+ @Override
+ public void enterTypeStatement(TypeStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ TypeListener.processTypeEntry(this, ctx);
+ }
+ }
+
+ @Override
+ public void exitTypeStatement(TypeStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ TypeListener.processTypeExit(this, ctx);
+ }
+ }
+
+ @Override
+ public void enterTypeBodyStatements(TypeBodyStatementsContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitTypeBodyStatements(TypeBodyStatementsContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterDecimal64Specification(Decimal64SpecificationContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ Decimal64Listener.processDecimal64Entry(this, ctx);
+ }
+ }
+
+ @Override
+ public void exitDecimal64Specification(Decimal64SpecificationContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ Decimal64Listener.processDecimal64Exit(this, ctx);
+ }
+ }
+
+ @Override
+ public void enterFractionDigitStatement(FractionDigitStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ FractionDigitsListener.processFractionDigitsEntry(this, ctx);
+ }
+ }
+
+ @Override
+ public void exitFractionDigitStatement(FractionDigitStatementContext currentContext) {
+ // do nothing
+ }
+
+ @Override
+ public void enterNumericalRestrictions(NumericalRestrictionsContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitNumericalRestrictions(NumericalRestrictionsContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterRangeStatement(RangeStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ RangeRestrictionListener.processRangeRestrictionEntry(this, ctx);
+ }
+ }
+
+ @Override
+ public void exitRangeStatement(RangeStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ RangeRestrictionListener.processRangeRestrictionExit(this, ctx);
+ }
+ }
+
+ @Override
+ public void enterCommonStatements(CommonStatementsContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitCommonStatements(CommonStatementsContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterStringRestrictions(StringRestrictionsContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitStringRestrictions(StringRestrictionsContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterLengthStatement(LengthStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ LengthRestrictionListener.processLengthRestrictionEntry(this, ctx);
+ }
+ }
+
+ @Override
+ public void exitLengthStatement(LengthStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ LengthRestrictionListener.processLengthRestrictionExit(this, ctx);
+ }
+ }
+
+ @Override
+ public void enterPatternStatement(PatternStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ PatternRestrictionListener.processPatternRestrictionEntry(this, ctx);
+ }
+ }
+
+ @Override
+ public void exitPatternStatement(PatternStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ PatternRestrictionListener.processPatternRestrictionExit(this, ctx);
+ }
+ }
+
+ @Override
+ public void enterDefaultStatement(DefaultStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ DefaultListener.processDefaultEntry(this, ctx);
+ }
+ }
+
+ @Override
+ public void exitDefaultStatement(DefaultStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterEnumSpecification(EnumSpecificationContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ EnumerationListener.processEnumerationEntry(this, ctx);
+ }
+ }
+
+ @Override
+ public void exitEnumSpecification(EnumSpecificationContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ EnumerationListener.processEnumerationExit(this, ctx);
+ }
+ }
+
+ @Override
+ public void enterEnumStatement(EnumStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ EnumListener.processEnumEntry(this, ctx);
+ }
+ }
+
+ @Override
+ public void exitEnumStatement(EnumStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ EnumListener.processEnumExit(this, ctx);
+ }
+ }
+
+ @Override
+ public void enterEnumStatementBody(EnumStatementBodyContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitEnumStatementBody(EnumStatementBodyContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterLeafrefSpecification(LeafrefSpecificationContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ LeafrefListener.processLeafrefEntry(this, ctx);
+ }
+ }
+
+ @Override
+ public void exitLeafrefSpecification(LeafrefSpecificationContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ LeafrefListener.processLeafrefExit(this, ctx);
+ }
+ }
+
+ @Override
+ public void enterPathStatement(PathStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ PathListener.processPathEntry(this, ctx);
+ }
+ }
+
+ @Override
+ public void exitPathStatement(PathStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterRequireInstanceStatement(RequireInstanceStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ RequireInstanceListener.processRequireInstanceEntry(this, ctx);
+ }
+ }
+
+ @Override
+ public void exitRequireInstanceStatement(RequireInstanceStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterInstanceIdentifierSpecification(InstanceIdentifierSpecificationContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitInstanceIdentifierSpecification(InstanceIdentifierSpecificationContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterIdentityrefSpecification(IdentityrefSpecificationContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ IdentityRefListener.processIdentityRefEntry(this, ctx);
+ }
+ }
+
+ @Override
+ public void exitIdentityrefSpecification(IdentityrefSpecificationContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ IdentityRefListener.processIdentityRefExit(this, ctx);
+ }
+ }
+
+ @Override
+ public void enterUnionSpecification(UnionSpecificationContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ UnionListener.processUnionEntry(this, ctx);
+ }
+ }
+
+ @Override
+ public void exitUnionSpecification(UnionSpecificationContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ UnionListener.processUnionExit(this, ctx);
+ }
+ }
+
+ @Override
+ public void enterBitsSpecification(BitsSpecificationContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ BitsListener.processBitsEntry(this, ctx);
+ }
+ }
+
+ @Override
+ public void exitBitsSpecification(BitsSpecificationContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ BitsListener.processBitsExit(this, ctx);
+ }
+ }
+
+ @Override
+ public void enterBitStatement(BitStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ BitListener.processBitEntry(this, ctx);
+ }
+ }
+
+ @Override
+ public void exitBitStatement(BitStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ BitListener.processBitExit(this, ctx);
+ }
+ }
+
+ @Override
+ public void enterBitBodyStatement(BitBodyStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitBitBodyStatement(BitBodyStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterPositionStatement(PositionStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ PositionListener.processPositionEntry(this, ctx);
+ }
+ }
+
+ @Override
+ public void exitPositionStatement(PositionStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterStatusStatement(StatusStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ StatusListener.processStatusEntry(this, ctx);
+ }
+ }
+
+ @Override
+ public void exitStatusStatement(StatusStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterConfigStatement(ConfigStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ ConfigListener.processConfigEntry(this, ctx);
+ }
+ }
+
+ @Override
+ public void exitConfigStatement(ConfigStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterMandatoryStatement(MandatoryStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ MandatoryListener.processMandatoryEntry(this, ctx);
+ }
+ }
+
+ @Override
+ public void exitMandatoryStatement(MandatoryStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterPresenceStatement(PresenceStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ PresenceListener.processPresenceEntry(this, ctx);
+ }
+ }
+
+ @Override
+ public void exitPresenceStatement(PresenceStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterOrderedByStatement(OrderedByStatementContext ctx) {
+ ListenerUtil.handleUnsupportedYangConstruct(YangConstructType.ORDERED_BY_DATA, ctx, UtilConstants.CURRENTLY_UNSUPPORTED, getFileName());
+ }
+
+ @Override
+ public void exitOrderedByStatement(OrderedByStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterMustStatement(MustStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ MustListener.processMustEntry(this, ctx);
+ }
+ }
+
+ @Override
+ public void exitMustStatement(MustStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ MustListener.processMustExit(this, ctx);
+ }
+ }
+
+ @Override
+ public void enterErrorMessageStatement(ErrorMessageStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ ErrorMessageListener.processErrorMessageEntry(this, ctx);
+ }
+ }
+
+ @Override
+ public void exitErrorMessageStatement(ErrorMessageStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterErrorAppTagStatement(ErrorAppTagStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ ErrorAppTagListener.processErrorAppTagMessageEntry(this, ctx);
+ }
+ }
+
+ @Override
+ public void exitErrorAppTagStatement(ErrorAppTagStatementContext ctx) {
+ //do nothing
+ }
+
+ @Override
+ public void enterMinElementsStatement(MinElementsStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ MinElementsListener.processMinElementsEntry(this, ctx);
+ }
+ }
+
+ @Override
+ public void exitMinElementsStatement(MinElementsStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterMaxElementsStatement(MaxElementsStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ MaxElementsListener.processMaxElementsEntry(this, ctx);
+ }
+ }
+
+ @Override
+ public void exitMaxElementsStatement(MaxElementsStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterValueStatement(ValueStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ ValueListener.processValueEntry(this, ctx);
+ }
+ }
+
+ @Override
+ public void exitValueStatement(ValueStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterGroupingStatement(GroupingStatementContext ctx) {
+ GroupingListener.processGroupingEntry(this, ctx);
+ }
+
+ @Override
+ public void exitGroupingStatement(GroupingStatementContext ctx) {
+ GroupingListener.processGroupingExit(this, ctx);
+ }
+
+ @Override
+ public void enterContainerStatement(ContainerStatementContext ctx) {
+ ContainerListener.processContainerEntry(this, ctx);
+ }
+
+ @Override
+ public void exitContainerStatement(ContainerStatementContext ctx) {
+ ContainerListener.processContainerExit(this, ctx);
+ }
+
+ @Override
+ public void enterLeafStatement(LeafStatementContext ctx) {
+ LeafListener.processLeafEntry(this, ctx);
+ }
+
+ @Override
+ public void exitLeafStatement(LeafStatementContext ctx) {
+ LeafListener.processLeafExit(this, ctx);
+ }
+
+ @Override
+ public void enterLeafListStatement(LeafListStatementContext ctx) {
+ LeafListListener.processLeafListEntry(this, ctx);
+ }
+
+ @Override
+ public void exitLeafListStatement(LeafListStatementContext ctx) {
+ LeafListListener.processLeafListExit(this, ctx);
+ }
+
+ @Override
+ public void enterListStatement(ListStatementContext ctx) {
+ ListListener.processListEntry(this, ctx);
+ }
+
+ @Override
+ public void exitListStatement(ListStatementContext ctx) {
+ ListListener.processListExit(this, ctx);
+ }
+
+ @Override
+ public void enterKeyStatement(KeyStatementContext ctx) {
+ KeyListener.processKeyEntry(this, ctx);
+ }
+
+ @Override
+ public void exitKeyStatement(KeyStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterUniqueStatement(UniqueStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ UniqueListener.processUniqueEntry(this, ctx);
+ }
+ }
+
+ @Override
+ public void exitUniqueStatement(UniqueStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterChoiceStatement(ChoiceStatementContext ctx) {
+ ChoiceListener.processChoiceEntry(this, ctx);
+ }
+
+ @Override
+ public void exitChoiceStatement(ChoiceStatementContext ctx) {
+ ChoiceListener.processChoiceExit(this, ctx);
+ }
+
+ @Override
+ public void enterShortCaseStatement(ShortCaseStatementContext ctx) {
+ ShortCaseListener.processShortCaseEntry(this, ctx);
+ }
+
+ @Override
+ public void exitShortCaseStatement(ShortCaseStatementContext ctx) {
+ ShortCaseListener.processShortCaseExit(this, ctx);
+ }
+
+ @Override
+ public void enterCaseStatement(CaseStatementContext ctx) {
+ CaseListener.processCaseEntry(this, ctx);
+ }
+
+ @Override
+ public void exitCaseStatement(CaseStatementContext ctx) {
+ CaseListener.processCaseExit(this, ctx);
+ }
+
+ @Override
+ public void enterAnyxmlStatement(AnyxmlStatementContext ctx) {
+ increaseUnsupportedYangConstructDepth();
+ ListenerUtil.handleUnsupportedYangConstruct(YangConstructType.ANYXML_DATA, ctx, UtilConstants.UNSUPPORTED_YANG_CONSTRUCT, getFileName());
+ }
+
+ @Override
+ public void exitAnyxmlStatement(AnyxmlStatementContext ctx) {
+ decreaseUnsupportedYangConstructDepth();
+ }
+
+ @Override
+ public void enterUsesStatement(UsesStatementContext ctx) {
+ UsesListener.processUsesEntry(this, ctx);
+ }
+
+ @Override
+ public void exitUsesStatement(UsesStatementContext ctx) {
+ UsesListener.processUsesExit(this, ctx);
+ }
+
+ @Override
+ public void enterRefineStatement(RefineStatementContext ctx) {
+ increaseUnsupportedYangConstructDepth();
+ ListenerUtil.handleUnsupportedYangConstruct(YangConstructType.REFINE_DATA, ctx, UtilConstants.UNSUPPORTED_YANG_CONSTRUCT, getFileName());
+ }
+
+ @Override
+ public void exitRefineStatement(RefineStatementContext ctx) {
+ decreaseUnsupportedYangConstructDepth();
+ }
+
+ @Override
+ public void enterRefineContainerStatements(RefineContainerStatementsContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitRefineContainerStatements(RefineContainerStatementsContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterRefineLeafStatements(RefineLeafStatementsContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitRefineLeafStatements(RefineLeafStatementsContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterRefineLeafListStatements(RefineLeafListStatementsContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitRefineLeafListStatements(RefineLeafListStatementsContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterRefineListStatements(RefineListStatementsContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitRefineListStatements(RefineListStatementsContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterRefineChoiceStatements(RefineChoiceStatementsContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitRefineChoiceStatements(RefineChoiceStatementsContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterRefineCaseStatements(RefineCaseStatementsContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitRefineCaseStatements(RefineCaseStatementsContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterRefineAnyxmlStatements(RefineAnyxmlStatementsContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitRefineAnyxmlStatements(RefineAnyxmlStatementsContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterAugmentStatement(AugmentStatementContext ctx) {
+ AugmentListener.processAugmentEntry(this, ctx);
+ }
+
+ @Override
+ public void exitAugmentStatement(AugmentStatementContext ctx) {
+ AugmentListener.processAugmentExit(this, ctx);
+ }
+
+ @Override
+ public void enterWhenStatement(WhenStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ WhenListener.processWhenEntry(this, ctx);
+ }
+ }
+
+ @Override
+ public void exitWhenStatement(WhenStatementContext ctx) {
+ if (getUnsupportedYangConstructDepth() == 0) {
+ WhenListener.processWhenExit(this, ctx);
+ }
+ }
+
+ @Override
+ public void enterRpcStatement(RpcStatementContext ctx) {
+ RpcListener.processRpcEntry(this, ctx);
+ }
+
+ @Override
+ public void exitRpcStatement(RpcStatementContext ctx) {
+ RpcListener.processRpcExit(this, ctx);
+ }
+
+ @Override
+ public void enterInputStatement(InputStatementContext ctx) {
+ InputListener.processInputEntry(this, ctx);
+ }
+
+ @Override
+ public void exitInputStatement(InputStatementContext ctx) {
+ InputListener.processInputExit(this, ctx);
+ }
+
+ @Override
+ public void enterOutputStatement(OutputStatementContext ctx) {
+ OutputListener.processOutputEntry(this, ctx);
+ }
+
+ @Override
+ public void exitOutputStatement(OutputStatementContext ctx) {
+ OutputListener.processOutputExit(this, ctx);
+ }
+
+ @Override
+ public void enterNotificationStatement(NotificationStatementContext ctx) {
+ NotificationListener.processNotificationEntry(this, ctx);
+ }
+
+ @Override
+ public void exitNotificationStatement(NotificationStatementContext ctx) {
+ NotificationListener.processNotificationExit(this, ctx);
+ }
+
+ @Override
+ public void enterDeviationStatement(DeviationStatementContext ctx) {
+ increaseUnsupportedYangConstructDepth();
+ ListenerUtil.handleUnsupportedYangConstruct(YangConstructType.DEVIATION_DATA, ctx, UtilConstants.UNSUPPORTED_YANG_CONSTRUCT,
+ getFileName());
+ }
+
+ @Override
+ public void exitDeviationStatement(DeviationStatementContext ctx) {
+ decreaseUnsupportedYangConstructDepth();
+ }
+
+ @Override
+ public void enterDeviateNotSupportedStatement(DeviateNotSupportedStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitDeviateNotSupportedStatement(DeviateNotSupportedStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterDeviateAddStatement(DeviateAddStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitDeviateAddStatement(DeviateAddStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterDeviateDeleteStatement(DeviateDeleteStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitDeviateDeleteStatement(DeviateDeleteStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterDeviateReplaceStatement(DeviateReplaceStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitDeviateReplaceStatement(DeviateReplaceStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterString(StringContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitString(StringContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterIdentifier(IdentifierContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitIdentifier(IdentifierContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterDateArgumentString(DateArgumentStringContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitDateArgumentString(DateArgumentStringContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterRange(RangeContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitRange(RangeContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterLength(LengthContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitLength(LengthContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterPath(PathContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitPath(PathContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterPosition(PositionContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitPosition(PositionContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterStatus(StatusContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitStatus(StatusContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterConfig(ConfigContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitConfig(ConfigContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterMandatory(MandatoryContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitMandatory(MandatoryContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterOrderedBy(OrderedByContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitOrderedBy(OrderedByContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterMinValue(MinValueContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitMinValue(MinValueContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterMaxValue(MaxValueContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitMaxValue(MaxValueContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterKey(KeyContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitKey(KeyContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterUnique(UniqueContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitUnique(UniqueContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterRefine(RefineContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitRefine(RefineContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterAugment(AugmentContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitAugment(AugmentContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterDeviation(DeviationContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitDeviation(DeviationContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterYangConstruct(YangConstructContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitYangConstruct(YangConstructContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterCompilerAnnotationStatement(CompilerAnnotationStatementContext ctx) {
+ CompilerAnnotationListener.processCompilerAnnotationEntry(this, ctx);
+ }
+
+ @Override
+ public void exitCompilerAnnotationStatement(CompilerAnnotationStatementContext ctx) {
+ CompilerAnnotationListener.processCompilerAnnotationExit(this, ctx);
+ }
+
+ @Override
+ public void enterCompilerAnnotationBodyStatement(CompilerAnnotationBodyStatementContext ctx) {
+ // do nothing
+ }
+
+ @Override
+ public void exitCompilerAnnotationBodyStatement(CompilerAnnotationBodyStatementContext ctx) {
+ // do nothing
+ }
+
+ @Override
+ public void enterAppDataStructureStatement(AppDataStructureStatementContext ctx) {
+ AppDataStructureListener.processAppDataStructureEntry(this, ctx);
+ }
+
+ @Override
+ public void exitAppDataStructureStatement(AppDataStructureStatementContext ctx) {
+ AppDataStructureListener.processAppDataStructureExit(this, ctx);
+ }
+
+ @Override
+ public void enterAppDataStructure(AppDataStructureContext currentContext) {
+ // do nothing
+ }
+
+ @Override
+ public void exitAppDataStructure(AppDataStructureContext currentContext) {
+ // do nothing
+ }
+
+ @Override
+ public void enterAppExtendedStatement(AppExtendedStatementContext currentContext) {
+ AppExtendedNameListener.processAppExtendedNameEntry(this, currentContext);
+ }
+
+ @Override
+ public void exitAppExtendedStatement(AppExtendedStatementContext currentContext) {
+ // TODO : to be implemented
+ }
+
+ @Override
+ public void enterExtendedName(ExtendedNameContext currentContext) {
+ // do nothing
+ }
+
+ @Override
+ public void exitExtendedName(ExtendedNameContext currentContext) {
+ // do nothing
+ }
+
+ @Override
+ public void enterDataStructureKeyStatement(DataStructureKeyStatementContext ctx) {
+ DataStructureKeyListener.processDataStructureKeyEntry(this, ctx);
+ }
+
+ @Override
+ public void exitDataStructureKeyStatement(DataStructureKeyStatementContext ctx) {
+ // do nothing
+ }
+
+ @Override
+ public void enterVersion(VersionContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitVersion(VersionContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterValue(ValueContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitValue(ValueContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterRequireInstance(RequireInstanceContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitRequireInstance(RequireInstanceContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterFraction(FractionContext ctx) {
+ // TODO: implement the method.
+ }
+
+ @Override
+ public void exitFraction(FractionContext ctx) {
+ // TODO: implement the method.
+ }
+
+ @Override
+ public void visitTerminal(TerminalNode terminalNode) {
+ // do nothing.
+ }
+
+ @Override
+ public void visitErrorNode(ErrorNode errorNode) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterEveryRule(ParserRuleContext parserRuleContext) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitEveryRule(ParserRuleContext parserRuleContext) {
+ // do nothing.
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/YangUtilsParserManager.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/YangUtilsParserManager.java
new file mode 100644
index 0000000..e9f1bdc
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/YangUtilsParserManager.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl;
+
+import org.antlr.v4.runtime.ANTLRFileStream;
+import org.antlr.v4.runtime.ANTLRInputStream;
+import org.antlr.v4.runtime.CommonTokenStream;
+import org.antlr.v4.runtime.tree.ParseTree;
+import org.antlr.v4.runtime.tree.ParseTreeWalker;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.parser.YangUtilsParser;
+import org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangLexer;
+import org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ParseTreeErrorListener;
+
+import java.io.IOException;
+
+/**
+ * Represents file parsing, parse tree creation and data model tree creation
+ * corresponding to an input YANG file.
+ */
+public class YangUtilsParserManager implements YangUtilsParser {
+
+ @Override
+ public YangNode getDataModel(String yangFile) throws IOException, ParserException {
+
+ /**
+ * Create a char stream that reads from YANG file. Throws an exception
+ * in case input YANG file is either null or non existent.
+ */
+ ANTLRInputStream input;
+ try {
+ input = new ANTLRFileStream(yangFile);
+ } catch (IOException e) {
+ throw new ParserException("YANG file error : YANG file does not exist. " + yangFile);
+ }
+
+ // Create a lexer that feeds off of input char stream.
+ GeneratedYangLexer lexer = new GeneratedYangLexer(input);
+
+ // Create a buffer of tokens pulled from the lexer.
+ CommonTokenStream tokens = new CommonTokenStream(lexer);
+
+ // Create a parser that feeds off the tokens buffer.
+ GeneratedYangParser parser = new GeneratedYangParser(tokens);
+
+ // Remove console error listener.
+ parser.removeErrorListeners();
+
+ // Create instance of customized error listener.
+ ParseTreeErrorListener parseTreeErrorListener = new ParseTreeErrorListener();
+
+ // Add customized error listener to catch errors during parsing.
+ parser.addErrorListener(parseTreeErrorListener);
+
+ ParseTree tree;
+
+ try {
+ // Begin parsing YANG file and generate parse tree.
+ tree = parser.yangfile();
+ } catch (ParserException parserException) {
+ parserException.setFileName(yangFile);
+ throw parserException;
+ }
+
+ // Create a walker to walk the parse tree.
+ ParseTreeWalker walker = new ParseTreeWalker();
+
+ // Create a listener implementation class object.
+ TreeWalkListener treeWalker = new TreeWalkListener();
+ treeWalker.setFileName(yangFile);
+ /**
+ * Walk parse tree, provide call backs to methods in listener and build
+ * data model tree.
+ */
+ try {
+ walker.walk(treeWalker, tree);
+ } catch (ParserException listenerException) {
+ // TODO free incomplete data model tree.
+ listenerException.setFileName(yangFile);
+ throw listenerException;
+ } finally {
+ // TODO free parsable stack
+ }
+
+ // Returns the Root Node of the constructed data model tree.
+ return treeWalker.getRootNode();
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/AppDataStructureListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/AppDataStructureListener.java
new file mode 100644
index 0000000..931122f
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/AppDataStructureListener.java
@@ -0,0 +1,119 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangAppDataStructure;
+import org.onosproject.yang.compiler.datamodel.YangCompilerAnnotation;
+import org.onosproject.yang.compiler.datamodel.YangDataStructure;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation;
+
+import static org.onosproject.yang.compiler.datamodel.YangDataStructure.getDataStructureType;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.APP_DATA_STRUCTURE;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.AppDataStructureStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidPrefix;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * app-data-structure-stmt = prefix:app-data-structure-keyword string
+ * (";" /
+ * "{"
+ * [data-structure-key-stmt stmtsep]
+ * "}")
+ *
+ * ANTLR grammar rule
+ * appDataStructureStatement : APP_DATA_STRUCTURE appDataStructure (STMTEND | (LEFT_CURLY_BRACE
+ * dataStructureKeyStatement? RIGHT_CURLY_BRACE));
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "app-data-structure"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class AppDataStructureListener {
+
+ /**
+ * Creates a new app-data-structure listener.
+ */
+ private AppDataStructureListener() {
+ }
+
+ /**
+ * Performs validation and updates the data model tree. It is called when parser receives an
+ * input matching the grammar rule(app-data-structure).
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processAppDataStructureEntry(TreeWalkListener listener,
+ AppDataStructureStatementContext ctx) {
+
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, APP_DATA_STRUCTURE, "", ENTRY);
+
+ String prefix = getValidPrefix(ctx.APP_DATA_STRUCTURE().getText(), APP_DATA_STRUCTURE, ctx);
+ YangDataStructure dataStructure = getDataStructureType(ctx.appDataStructure().getText());
+
+ YangAppDataStructure appDataStructure = new YangAppDataStructure();
+ appDataStructure.setPrefix(prefix);
+ appDataStructure.setDataStructure(dataStructure);
+ appDataStructure.setLineNumber(ctx.getStart().getLine());
+ appDataStructure.setCharPosition(ctx.getStart().getCharPositionInLine());
+ appDataStructure.setFileName(listener.getFileName());
+
+ Parsable curData = listener.getParsedDataStack().peek();
+ if (curData instanceof YangCompilerAnnotation) {
+ YangCompilerAnnotation compilerAnnotation = ((YangCompilerAnnotation) curData);
+ compilerAnnotation.setYangAppDataStructure(appDataStructure);
+ listener.getParsedDataStack().push(appDataStructure);
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, APP_DATA_STRUCTURE,
+ "", ENTRY));
+ }
+ }
+
+ /**
+ * Performs validation and updates the data model tree. It is called when parser
+ * exits from grammar rule (app-data-structure).
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processAppDataStructureExit(TreeWalkListener listener,
+ AppDataStructureStatementContext ctx) {
+
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, APP_DATA_STRUCTURE, "", EXIT);
+ if (!(listener.getParsedDataStack().peek() instanceof YangAppDataStructure)) {
+ throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, APP_DATA_STRUCTURE,
+ "", EXIT));
+ }
+ listener.getParsedDataStack().pop();
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/AppExtendedNameListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/AppExtendedNameListener.java
new file mode 100644
index 0000000..24fc9c1
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/AppExtendedNameListener.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangAppExtended;
+import org.onosproject.yang.compiler.datamodel.YangCompilerAnnotation;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.APP_EXTENDED_NAME_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidPrefix;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * app-extended-stmt = prefix:app-extended-name-keyword string ";"
+ *
+ * ANTLR grammar rule
+ * appExtendedStatement : APP_EXTENDED extendedName STMTEND;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "app-extended-name"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class AppExtendedNameListener {
+
+ /**
+ * Creates a new app-extended-name listener.
+ */
+ private AppExtendedNameListener() {
+ }
+
+ /**
+ * Performs validation and updates the data model tree. It is called when parser receives an
+ * input matching the grammar rule(app-extended-name).
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processAppExtendedNameEntry(TreeWalkListener listener,
+ GeneratedYangParser.AppExtendedStatementContext ctx) {
+
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, APP_EXTENDED_NAME_DATA, ctx.extendedName().getText(), ENTRY);
+
+ String prefix = getValidPrefix(ctx.APP_EXTENDED().getText(), APP_EXTENDED_NAME_DATA, ctx);
+ YangAppExtended extendedName = new YangAppExtended();
+ extendedName.setPrefix(prefix);
+ extendedName.setYangAppExtendedName(removeQuotesAndHandleConcat(ctx.extendedName().getText()));
+
+ extendedName.setLineNumber(ctx.getStart().getLine());
+ extendedName.setCharPosition(ctx.getStart().getCharPositionInLine());
+ extendedName.setFileName(listener.getFileName());
+ Parsable curData = listener.getParsedDataStack().peek();
+ if (curData instanceof YangCompilerAnnotation) {
+ YangCompilerAnnotation compilerAnnotation = ((YangCompilerAnnotation) curData);
+ compilerAnnotation.setYangAppExtendedName(extendedName);
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, APP_EXTENDED_NAME_DATA,
+ ctx.extendedName().getText(), ENTRY));
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ArgumentListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ArgumentListener.java
new file mode 100644
index 0000000..7da7699
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ArgumentListener.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangExtension;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.ARGUMENT_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ArgumentStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * argument-stmt = argument-keyword sep identifier-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * [yin-element-stmt stmtsep]
+ * "}")
+ * *
+ * ANTLR grammar rule
+ * argumentStatement : ARGUMENT_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE argumentBody RIGHT_CURLY_BRACE);
+ * argumentBody : yinElementStatement?;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "argument"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class ArgumentListener {
+
+ /**
+ * Creates a new argument listener.
+ */
+ private ArgumentListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar rule
+ * (argument), performs validation and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processArgumentEntry(TreeWalkListener listener,
+ ArgumentStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, ARGUMENT_DATA, ctx.identifier().getText(), ENTRY);
+
+ String identifier = getValidIdentifier(ctx.identifier().getText(), ARGUMENT_DATA, ctx);
+
+ Parsable curData = listener.getParsedDataStack().peek();
+ if (curData instanceof YangExtension) {
+ YangExtension extension = ((YangExtension) curData);
+
+ extension.setLineNumber(ctx.getStart().getLine());
+ extension.setCharPosition(ctx.getStart().getCharPositionInLine());
+ extension.setFileName(listener.getFileName());
+ extension.setArgumentName(identifier);
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, ARGUMENT_DATA,
+ ctx.identifier().getText(), ENTRY));
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/AugmentListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/AugmentListener.java
new file mode 100644
index 0000000..77f5ca3
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/AugmentListener.java
@@ -0,0 +1,223 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangAtomicPath;
+import org.onosproject.yang.compiler.datamodel.YangAugment;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangSubModule;
+import org.onosproject.yang.compiler.datamodel.YangUses;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.linker.impl.YangResolutionInfoImpl;
+import org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.AugmentStatementContext;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.utils.UtilConstants;
+
+import java.util.List;
+
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.addResolutionInfo;
+import static org.onosproject.yang.compiler.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.AUGMENT_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.CASE_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.DATA_DEF_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.DESCRIPTION_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.REFERENCE_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.STATUS_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.WHEN_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getPrefixRemovedName;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidAbsoluteSchemaNodeId;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.validateCardinalityEitherOne;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.validateCardinalityMaxOne;
+import static org.onosproject.yang.compiler.translator.tojava.YangDataModelFactory.getYangAugmentNode;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EMPTY_STRING;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * augment-stmt = augment-keyword sep augment-arg-str optsep
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [when-stmt stmtsep]
+ * *(if-feature-stmt stmtsep)
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * 1*((data-def-stmt stmtsep) /
+ * (case-stmt stmtsep))
+ * "}"
+ *
+ * ANTLR grammar rule
+ * augmentStatement : AUGMENT_KEYWORD augment LEFT_CURLY_BRACE (whenStatement |
+ * ifFeatureStatement | statusStatement | descriptionStatement |
+ * referenceStatement | dataDefStatement | caseStatement)* RIGHT_CURLY_BRACE;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "augment"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class AugmentListener {
+
+ // No instantiation.
+ private AugmentListener() {
+ }
+
+ /**
+ * Performs validation and updates the data model tree when parser
+ * receives an input matching the grammar rule (augment), performs
+ * validation and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object
+ */
+ public static void processAugmentEntry(TreeWalkListener listener,
+ AugmentStatementContext ctx) {
+
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, AUGMENT_DATA,
+ ctx.augment().getText(), ENTRY);
+
+ Parsable curData = listener.getParsedDataStack().peek();
+
+ if (curData instanceof YangUses) {
+ throw new ParserException(constructListenerErrorMessage(
+ UNHANDLED_PARSED_DATA, AUGMENT_DATA,
+ ctx.augment().getText(), ENTRY));
+ }
+
+ if (!(curData instanceof YangModule) &&
+ !(curData instanceof YangSubModule)) {
+ throw new ParserException(constructListenerErrorMessage(
+ INVALID_HOLDER, AUGMENT_DATA,
+ ctx.augment().getText(), ENTRY));
+ }
+
+ // Validates augment argument string
+ List<YangAtomicPath> atomics =
+ getValidAbsoluteSchemaNodeId(ctx.augment().getText(),
+ AUGMENT_DATA, ctx);
+ valSubStatCardinality(ctx);
+
+ int line = ctx.getStart().getLine();
+ int pos = ctx.getStart().getCharPositionInLine();
+
+ detectCollidingChildUtil(listener, line, pos, EMPTY_STRING,
+ AUGMENT_DATA);
+
+ YangNode root = (YangNode) curData;
+ String name = getPrefixRemovedName(atomics, root);
+ YangAugment augment = getYangAugmentNode(JAVA_GENERATION);
+ augment.setLineNumber(line);
+ augment.setCharPosition(pos);
+ augment.setFileName(listener.getFileName());
+ augment.setTargetNode(atomics);
+ augment.setName(removeQuotesAndHandleConcat(ctx.augment().getText()));
+ augment.setPrefixRemovedName(name);
+
+ try {
+ root.addChild(augment);
+ } catch (DataModelException e) {
+ throw new ParserException(constructExtendedListenerErrorMessage(
+ UNHANDLED_PARSED_DATA, AUGMENT_DATA,
+ ctx.augment().getText(), ENTRY, e.getMessage()));
+ }
+ listener.getParsedDataStack().push(augment);
+
+ // Adds resolution info to the list
+ YangResolutionInfoImpl<YangAugment> info =
+ new YangResolutionInfoImpl<>(augment, root, line, pos);
+ addToResolution(info, ctx);
+ }
+
+ /**
+ * Performs validations and update the data model tree when parser exits
+ * from grammar rule (augment).
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processAugmentExit(TreeWalkListener listener,
+ AugmentStatementContext ctx) {
+
+ //Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, AUGMENT_DATA,
+ ctx.augment().getText(), EXIT);
+
+ if (!(listener.getParsedDataStack().peek() instanceof YangAugment)) {
+ throw new ParserException(constructListenerErrorMessage(
+ MISSING_CURRENT_HOLDER, AUGMENT_DATA,
+ ctx.augment().getText(), EXIT));
+ }
+ listener.getParsedDataStack().pop();
+ }
+
+ /**
+ * Validates the cardinality of augment sub-statements as per grammar.
+ *
+ * @param ctx context object
+ */
+ private static void valSubStatCardinality(AugmentStatementContext ctx) {
+
+ validateCardinalityMaxOne(ctx.statusStatement(), STATUS_DATA,
+ AUGMENT_DATA, ctx.augment().getText());
+
+ validateCardinalityMaxOne(ctx.descriptionStatement(), DESCRIPTION_DATA,
+ AUGMENT_DATA, ctx.augment().getText());
+
+ validateCardinalityMaxOne(ctx.referenceStatement(), REFERENCE_DATA,
+ AUGMENT_DATA, ctx.augment().getText());
+
+ validateCardinalityMaxOne(ctx.whenStatement(), WHEN_DATA, AUGMENT_DATA,
+ ctx.augment().getText());
+
+ validateCardinalityEitherOne(ctx.dataDefStatement(), DATA_DEF_DATA,
+ ctx.caseStatement(), CASE_DATA,
+ AUGMENT_DATA, ctx.augment().getText(),
+ ctx);
+ }
+
+ /**
+ * Add to resolution list.
+ *
+ * @param info resolution info
+ * @param ctx context object
+ */
+ private static void addToResolution(YangResolutionInfoImpl<YangAugment> info,
+ AugmentStatementContext ctx) {
+ try {
+ addResolutionInfo(info);
+ } catch (DataModelException e) {
+ throw new ParserException(constructExtendedListenerErrorMessage(
+ UNHANDLED_PARSED_DATA, AUGMENT_DATA,
+ ctx.augment().getText(), EXIT, e.getMessage()));
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/BaseFileListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/BaseFileListener.java
new file mode 100644
index 0000000..b1130ca
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/BaseFileListener.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangSubModule;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.YANGBASE_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.YangfileContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_CHILD;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsEmpty;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ANTLR grammar rule
+ * yangfile : module_stmt
+ * | submodule_stmt;
+ */
+
+/**
+ * Representation of call back function corresponding to the "base rule" defined in
+ * ANTLR grammar file.
+ */
+public final class BaseFileListener {
+
+ /**
+ * Creates a new base listener.
+ */
+ private BaseFileListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar rule
+ * (yangfile), perform validations and update the data model tree.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processYangFileEntry(TreeWalkListener listener, YangfileContext ctx) {
+
+ // Check if stack is empty.
+ checkStackIsEmpty(listener, INVALID_HOLDER, YANGBASE_DATA, "", ENTRY);
+ }
+
+ /**
+ * It is called when parser exits from grammar rule (yangfile), it perform
+ * validations and update the data model tree.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processYangFileExit(TreeWalkListener listener, YangfileContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, YANGBASE_DATA, "", EXIT);
+
+ // Data Model tree root node is set.
+ if (listener.getParsedDataStack().peek() instanceof YangModule
+ || listener.getParsedDataStack().peek() instanceof YangSubModule) {
+ listener.setRootNode((YangNode) listener.getParsedDataStack().pop());
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_CHILD, YANGBASE_DATA, "", EXIT));
+ }
+
+ // Check if stack is empty.
+ checkStackIsEmpty(listener, INVALID_HOLDER, YANGBASE_DATA, "", EXIT);
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/BaseListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/BaseListener.java
new file mode 100644
index 0000000..c05cd38
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/BaseListener.java
@@ -0,0 +1,123 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangBase;
+import org.onosproject.yang.compiler.datamodel.YangIdentity;
+import org.onosproject.yang.compiler.datamodel.YangIdentityRef;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeIdentifier;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.DataModelUtils;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.linker.impl.YangResolutionInfoImpl;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil;
+
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.addResolutionInfo;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.BASE_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.BaseStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidNodeIdentifier;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/**
+ * base-stmt = base-keyword sep identifier-ref-arg-str
+ * optsep stmtend*
+ * identifier-ref-arg = [prefix ":"] identifier
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "base"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class BaseListener {
+
+ //Creates a new base listener.
+ private BaseListener() {
+ }
+
+ /**
+ * Performs validation and updates the data model tree when parser receives an
+ * input matching the grammar rule (base).
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processBaseEntry(TreeWalkListener listener,
+ BaseStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, BASE_DATA, ctx.string().getText(), ENTRY);
+
+ YangNodeIdentifier nodeIdentifier = getValidNodeIdentifier(ctx.string().getText(), BASE_DATA, ctx);
+
+ Parsable tmpData = listener.getParsedDataStack().peek();
+
+ /**
+ * For identityref base node identifier is copied in identity listener itself, so no need to process
+ * base statement for indentityref
+ */
+ if (tmpData instanceof YangIdentityRef) {
+ return;
+ }
+
+ if (!(tmpData instanceof YangIdentity)) {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, BASE_DATA,
+ ctx.string().getText(), ENTRY));
+ }
+
+ YangBase yangBase = new YangBase();
+ yangBase.setBaseIdentifier(nodeIdentifier);
+ ((YangIdentity) tmpData).setBaseNode(yangBase);
+
+ int errorLine = ctx.getStart().getLine();
+ int errorPosition = ctx.getStart().getCharPositionInLine();
+
+ yangBase.setLineNumber(errorLine);
+ yangBase.setCharPosition(errorPosition);
+ yangBase.setFileName(listener.getFileName());
+
+ // Add resolution information to the list
+ YangResolutionInfoImpl resolutionInfo =
+ new YangResolutionInfoImpl<YangBase>(yangBase, (YangNode) tmpData, errorLine, errorPosition);
+ addToResolutionList(resolutionInfo, ctx);
+ }
+
+ /**
+ * Add to resolution list.
+ *
+ * @param resolutionInfo resolution information
+ * @param ctx context object of the grammar rule
+ */
+ private static void addToResolutionList(YangResolutionInfoImpl<YangBase> resolutionInfo,
+ BaseStatementContext ctx) {
+
+ try {
+ addResolutionInfo(resolutionInfo);
+ } catch (DataModelException e) {
+ throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
+ BASE_DATA, ctx.string().getText(), EXIT, e.getMessage()));
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/BelongsToListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/BelongsToListener.java
new file mode 100644
index 0000000..277f2e5
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/BelongsToListener.java
@@ -0,0 +1,145 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangBelongsTo;
+import org.onosproject.yang.compiler.datamodel.YangSubModule;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.BELONGS_TO_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.BelongstoStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * submodule-header-stmts =
+ * ;; these stmts can appear in any order
+ * [yang-version-stmt stmtsep]
+ * belongs-to-stmt stmtsep
+ *
+ * belongs-to-stmt = belongs-to-keyword sep identifier-arg-str
+ * optsep
+ * "{" stmtsep
+ * prefix-stmt stmtsep
+ * "}"
+ *
+ * ANTLR grammar rule
+ * submodule_header_statement : yang_version_stmt? belongs_to_stmt
+ * | belongs_to_stmt yang_version_stmt?
+ * ;
+ * belongs_to_stmt : BELONGS_TO_KEYWORD identifier LEFT_CURLY_BRACE belongs_to_stmt_body RIGHT_CURLY_BRACE;
+ * belongs_to_stmt_body : prefix_stmt;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the
+ * "belongs to" rule defined in ANTLR grammar file for corresponding ABNF rule
+ * in RFC 6020.
+ */
+public final class BelongsToListener {
+
+ /**
+ * Creates a new belongto listener.
+ */
+ private BelongsToListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar rule
+ * (belongsto), perform validations and update the data model tree.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processBelongsToEntry(TreeWalkListener listener,
+ BelongstoStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, BELONGS_TO_DATA, ctx.identifier().getText(),
+ ENTRY);
+
+ String identifier = getValidIdentifier(ctx.identifier().getText(), BELONGS_TO_DATA, ctx);
+
+ YangBelongsTo belongstoNode = new YangBelongsTo();
+ belongstoNode.setBelongsToModuleName(identifier);
+
+ // Set the line number and character position in line for the belongs to.
+ int errorLine = ctx.getStart().getLine();
+ int errorPosition = ctx.getStart().getCharPositionInLine();
+ belongstoNode.setLineNumber(errorLine);
+ belongstoNode.setCharPosition(errorPosition);
+ belongstoNode.setFileName(listener.getFileName());
+
+ // Push belongsto into the stack.
+ listener.getParsedDataStack().push(belongstoNode);
+ }
+
+ /**
+ * It is called when parser exits from grammar rule (belongsto), it perform
+ * validations and update the data model tree.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processBelongsToExit(TreeWalkListener listener,
+ BelongstoStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, BELONGS_TO_DATA, ctx.identifier().getText(),
+ EXIT);
+
+ Parsable tmpBelongstoNode = listener.getParsedDataStack().peek();
+ if (tmpBelongstoNode instanceof YangBelongsTo) {
+ listener.getParsedDataStack().pop();
+
+ // Check for stack to be empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, BELONGS_TO_DATA,
+ ctx.identifier().getText(), EXIT);
+
+ Parsable tmpNode = listener.getParsedDataStack().peek();
+ switch (tmpNode.getYangConstructType()) {
+ case SUB_MODULE_DATA: {
+ YangSubModule subModule = (YangSubModule) tmpNode;
+ subModule.setBelongsTo((YangBelongsTo) tmpBelongstoNode);
+ subModule.setPrefix(subModule.getBelongsTo().getPrefix());
+ break;
+ }
+ default:
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, BELONGS_TO_DATA,
+ ctx.identifier().getText(),
+ EXIT));
+ }
+ } else {
+ throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, BELONGS_TO_DATA,
+ ctx.identifier().getText(), EXIT));
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/BitListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/BitListener.java
new file mode 100644
index 0000000..c1c0046
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/BitListener.java
@@ -0,0 +1,187 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * bit-stmt = bit-keyword sep identifier-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [position-stmt stmtsep]
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * "}"
+ * "}")
+ *
+ * ANTLR grammar rule
+ * bitStatement : BIT_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE bitBodyStatement RIGHT_CURLY_BRACE);
+ *
+ * bitBodyStatement : positionStatement? statusStatement? descriptionStatement? referenceStatement?
+ * | positionStatement? statusStatement? referenceStatement? descriptionStatement?
+ * | positionStatement? descriptionStatement? statusStatement? referenceStatement?
+ * | positionStatement? descriptionStatement? referenceStatement? statusStatement?
+ * | positionStatement? referenceStatement? statusStatement? descriptionStatement?
+ * | positionStatement? referenceStatement? descriptionStatement? statusStatement?
+ * | statusStatement? positionStatement? descriptionStatement? referenceStatement?
+ * | statusStatement? positionStatement? referenceStatement? descriptionStatement?
+ * | statusStatement? descriptionStatement? descriptionStatement? positionStatement?
+ * | statusStatement? descriptionStatement? positionStatement? descriptionStatement?
+ * | statusStatement? referenceStatement? positionStatement? descriptionStatement?
+ * | statusStatement? referenceStatement? descriptionStatement? positionStatement?
+ * | descriptionStatement? positionStatement? statusStatement? referenceStatement?
+ * | descriptionStatement? positionStatement? referenceStatement? statusStatement?
+ * | descriptionStatement? statusStatement? positionStatement? referenceStatement?
+ * | descriptionStatement? statusStatement? referenceStatement? positionStatement?
+ * | descriptionStatement? referenceStatement? positionStatement? statusStatement?
+ * | descriptionStatement? referenceStatement? statusStatement? positionStatement?
+ * | referenceStatement? positionStatement? descriptionStatement? statusStatement?
+ * | referenceStatement? positionStatement? statusStatement? descriptionStatement?
+ * | referenceStatement? statusStatement? descriptionStatement? positionStatement?
+ * | referenceStatement? statusStatement? positionStatement? descriptionStatement?
+ * | referenceStatement? descriptionStatement? positionStatement? statusStatement?
+ * | referenceStatement? descriptionStatement? statusStatement? positionStatement?
+ * ;
+ */
+
+import org.onosproject.yang.compiler.datamodel.YangBit;
+import org.onosproject.yang.compiler.datamodel.YangBits;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation;
+
+import java.util.Map;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.BIT_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_CONTENT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/**
+ * Represents listener based call back function corresponding to the "bit"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class BitListener {
+
+ /**
+ * Creates a new bit listener.
+ */
+ private BitListener() {
+ }
+
+ /**
+ * It is called when parser enters grammar rule (bit), it perform
+ * validations and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processBitEntry(TreeWalkListener listener,
+ GeneratedYangParser.BitStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, BIT_DATA, ctx.identifier().getText(), ENTRY);
+
+ String identifier = getValidIdentifier(ctx.identifier().getText(), BIT_DATA, ctx);
+
+ YangBit bitNode = new YangBit();
+ bitNode.setBitName(identifier);
+
+ bitNode.setLineNumber(ctx.getStart().getLine());
+ bitNode.setCharPosition(ctx.getStart().getCharPositionInLine());
+ bitNode.setFileName(listener.getFileName());
+ listener.getParsedDataStack().push(bitNode);
+ }
+
+ /**
+ * It is called when parser exits from grammar rule (bit), it perform
+ * validations and update the data model tree.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processBitExit(TreeWalkListener listener,
+ GeneratedYangParser.BitStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, BIT_DATA, ctx.identifier().getText(), EXIT);
+
+ Parsable tmpBitNode = listener.getParsedDataStack().peek();
+ if (tmpBitNode instanceof YangBit) {
+ listener.getParsedDataStack().pop();
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, BIT_DATA, ctx.identifier().getText(), EXIT);
+
+ Parsable tmpNode = listener.getParsedDataStack().peek();
+ switch (tmpNode.getYangConstructType()) {
+ case BITS_DATA: {
+ YangBits yangBits = (YangBits) tmpNode;
+ if (ctx.bitBodyStatement() == null || ctx.bitBodyStatement().positionStatement() == null) {
+ int maxPosition = 0;
+ boolean isPositionPresent = false;
+
+ for (Map.Entry<Integer, YangBit> element : yangBits.getBitPositionMap().entrySet()) {
+ if (maxPosition <= element.getKey()) {
+ maxPosition = element.getKey();
+ isPositionPresent = true;
+ }
+ }
+
+ if (isPositionPresent) {
+ maxPosition++;
+ }
+ ((YangBit) tmpBitNode).setPosition(maxPosition);
+ }
+ try {
+ yangBits.addBitInfo((YangBit) tmpBitNode);
+ } catch (DataModelException e) {
+ ParserException parserException = new ParserException(constructExtendedListenerErrorMessage(
+ INVALID_CONTENT, BIT_DATA, ctx.identifier().getText(), EXIT, e.getMessage()));
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+ break;
+ }
+ default:
+ throw new ParserException(
+ constructListenerErrorMessage(INVALID_HOLDER, BIT_DATA, ctx.identifier().getText(), EXIT));
+ }
+ } else {
+ throw new ParserException(
+ constructListenerErrorMessage(MISSING_CURRENT_HOLDER, BIT_DATA, ctx.identifier().getText(), EXIT));
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/BitsListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/BitsListener.java
new file mode 100644
index 0000000..c037aae
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/BitsListener.java
@@ -0,0 +1,165 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * type-body-stmts = numerical-restrictions /
+ * decimal64-specification /
+ * string-restrictions /
+ * enum-specification /
+ * leafref-specification /
+ * identityref-specification /
+ * instance-identifier-specification /
+ * bits-specification /
+ * union-specification
+ *
+ * bits-specification = 1*(bit-stmt stmtsep)
+ *
+ * ANTLR grammar rule
+ *
+ * typeBodyStatements : numericalRestrictions | stringRestrictions | enumSpecification
+ * | leafrefSpecification | identityrefSpecification | instanceIdentifierSpecification
+ * | bitsSpecification | unionSpecification;
+ *
+ * bitsSpecification : bitStatement+;
+ */
+
+import org.onosproject.yang.compiler.datamodel.YangBits;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.YangTypeDef;
+import org.onosproject.yang.compiler.datamodel.YangUnion;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.BITS_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.TYPE_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.BitsSpecificationContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/**
+ * Represents listener based call back function corresponding to the "bits" rule
+ * defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class BitsListener {
+
+ /**
+ * Creates a new bits listener.
+ */
+ private BitsListener() {
+ }
+
+ /**
+ * It is called when parser enters grammar rule (bits), it perform
+ * validations and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processBitsEntry(TreeWalkListener listener,
+ BitsSpecificationContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, BITS_DATA, "", ENTRY);
+
+ if (listener.getParsedDataStack().peek() instanceof YangType) {
+ YangBits bitsNode = new YangBits();
+
+ bitsNode.setLineNumber(ctx.getStart().getLine());
+ bitsNode.setCharPosition(ctx.getStart().getCharPositionInLine());
+ bitsNode.setFileName(listener.getFileName());
+ Parsable typeData = listener.getParsedDataStack().pop();
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, BITS_DATA, "", ENTRY);
+
+ Parsable tmpData = listener.getParsedDataStack().peek();
+
+ switch (tmpData.getYangConstructType()) {
+ case LEAF_DATA:
+ bitsNode.setBitsName(((YangLeaf) tmpData).getName());
+ break;
+ case LEAF_LIST_DATA:
+ bitsNode.setBitsName(((YangLeafList) tmpData).getName());
+ break;
+ case TYPEDEF_DATA:
+ bitsNode.setBitsName(((YangTypeDef) tmpData).getName());
+ break;
+ case UNION_DATA:
+ bitsNode.setBitsName(((YangUnion) tmpData).getName());
+ break;
+ // TODO typedef, union, deviate.
+ default:
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, TYPE_DATA,
+ ((YangType<?>) typeData).getDataTypeName(), ENTRY));
+ }
+ listener.getParsedDataStack().push(typeData);
+ listener.getParsedDataStack().push(bitsNode);
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, BITS_DATA, "", ENTRY));
+ }
+ }
+
+ /**
+ * It is called when parser exits from grammar rule (bits), it perform
+ * validations and update the data model tree.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processBitsExit(TreeWalkListener listener,
+ BitsSpecificationContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, BITS_DATA, "", EXIT);
+
+ Parsable tmpBitsNode = listener.getParsedDataStack().peek();
+ if (tmpBitsNode instanceof YangBits) {
+ YangBits bitsNode = (YangBits) tmpBitsNode;
+ listener.getParsedDataStack().pop();
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, BITS_DATA, "", EXIT);
+
+ Parsable tmpNode = listener.getParsedDataStack().peek();
+ switch (tmpNode.getYangConstructType()) {
+ case TYPE_DATA: {
+ YangType<YangBits> typeNode = (YangType<YangBits>) tmpNode;
+ typeNode.setDataTypeExtendedInfo(bitsNode);
+ break;
+ }
+ default:
+ throw new ParserException(
+ constructListenerErrorMessage(INVALID_HOLDER, BITS_DATA, "", EXIT));
+ }
+ } else {
+ throw new ParserException(
+ constructListenerErrorMessage(MISSING_CURRENT_HOLDER, BITS_DATA, "", EXIT));
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/CaseListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/CaseListener.java
new file mode 100644
index 0000000..1ae7cbb
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/CaseListener.java
@@ -0,0 +1,166 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangAugment;
+import org.onosproject.yang.compiler.datamodel.YangCase;
+import org.onosproject.yang.compiler.datamodel.YangChoice;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerCollisionDetector;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation;
+
+import static org.onosproject.yang.compiler.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.CASE_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.DESCRIPTION_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.REFERENCE_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.STATUS_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.WHEN_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.validateCardinalityMaxOne;
+import static org.onosproject.yang.compiler.translator.tojava.YangDataModelFactory.getYangCaseNode;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * case-stmt = case-keyword sep identifier-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [when-stmt stmtsep]
+ * *(if-feature-stmt stmtsep)
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * *(data-def-stmt stmtsep)
+ * "}")
+ *
+ * ANTLR grammar rule
+ * caseStatement : CASE_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement
+ * | statusStatement | descriptionStatement | referenceStatement | dataDefStatement)* RIGHT_CURLY_BRACE);
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "case" rule
+ * defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class CaseListener {
+
+ /**
+ * Create a new case listener.
+ */
+ private CaseListener() {
+ }
+
+ /**
+ * It is called when parser enters grammar rule (case), it perform
+ * validations and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processCaseEntry(TreeWalkListener listener,
+ GeneratedYangParser.CaseStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, CASE_DATA, ctx.identifier().getText(), ENTRY);
+
+ // Check validity of identifier and remove double quotes.
+ String identifier = getValidIdentifier(ctx.identifier().getText(), CASE_DATA, ctx);
+
+ // Validate sub statement cardinality.
+ validateSubStatementsCardinality(ctx);
+
+ Parsable curData = listener.getParsedDataStack().peek();
+
+ // Check for identifier collision
+ int line = ctx.getStart().getLine();
+ int charPositionInLine = ctx.getStart().getCharPositionInLine();
+ detectCollidingChildUtil(listener, line, charPositionInLine, identifier, CASE_DATA);
+
+ if (curData instanceof YangChoice || curData instanceof YangAugment) {
+ YangCase caseNode = getYangCaseNode(JAVA_GENERATION);
+ caseNode.setName(identifier);
+ caseNode.setLineNumber(line);
+ caseNode.setCharPosition(charPositionInLine);
+ caseNode.setFileName(listener.getFileName());
+ YangNode curNode = (YangNode) curData;
+ try {
+ curNode.addChild(caseNode);
+ } catch (DataModelException e) {
+ throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
+ CASE_DATA, ctx.identifier().getText(), ENTRY, e.getMessage()));
+ }
+ listener.getParsedDataStack().push(caseNode);
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, CASE_DATA,
+ ctx.identifier().getText(), ENTRY));
+ }
+ }
+
+ /**
+ * It is called when parser exits from grammar rule (case), it perform
+ * validations and update the data model tree.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processCaseExit(TreeWalkListener listener,
+ GeneratedYangParser.CaseStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, CASE_DATA, ctx.identifier().getText(), EXIT);
+
+ if (listener.getParsedDataStack().peek() instanceof YangCase) {
+ listener.getParsedDataStack().pop();
+ } else {
+ throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, CASE_DATA,
+ ctx.identifier().getText(), EXIT));
+ }
+ }
+
+ /**
+ * Validates the cardinality of case sub-statements as per grammar.
+ *
+ * @param ctx context object of the grammar rule
+ */
+ private static void validateSubStatementsCardinality(GeneratedYangParser.CaseStatementContext ctx) {
+
+ validateCardinalityMaxOne(ctx.whenStatement(), WHEN_DATA, CASE_DATA, ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.statusStatement(), STATUS_DATA, CASE_DATA, ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.descriptionStatement(), DESCRIPTION_DATA, CASE_DATA, ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.referenceStatement(), REFERENCE_DATA, CASE_DATA, ctx.identifier().getText());
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ChoiceListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ChoiceListener.java
new file mode 100644
index 0000000..cc078bf
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ChoiceListener.java
@@ -0,0 +1,206 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangAugment;
+import org.onosproject.yang.compiler.datamodel.YangCase;
+import org.onosproject.yang.compiler.datamodel.YangChoice;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangGrouping;
+import org.onosproject.yang.compiler.datamodel.YangInput;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNotification;
+import org.onosproject.yang.compiler.datamodel.YangOutput;
+import org.onosproject.yang.compiler.datamodel.YangSubModule;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerCollisionDetector;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil;
+
+import static org.onosproject.yang.compiler.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.CHOICE_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.CONFIG_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.DEFAULT_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.DESCRIPTION_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.MANDATORY_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.REFERENCE_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.STATUS_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.WHEN_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ChoiceStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_CONTENT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.getParentNodeConfig;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.validateCardinalityMaxOne;
+import static org.onosproject.yang.compiler.translator.tojava.YangDataModelFactory.getYangChoiceNode;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * choice-stmt = choice-keyword sep identifier-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [when-stmt stmtsep]
+ * *(if-feature-stmt stmtsep)
+ * [default-stmt stmtsep]
+ * [config-stmt stmtsep]
+ * [mandatory-stmt stmtsep]
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * *((short-case-stmt / case-stmt) stmtsep)
+ * "}")
+ *
+ * ANTLR grammar rule
+ * choiceStatement : CHOICE_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement
+ * | defaultStatement | configStatement | mandatoryStatement | statusStatement | descriptionStatement
+ * | referenceStatement | shortCaseStatement | caseStatement)* RIGHT_CURLY_BRACE);
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "choice"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class ChoiceListener {
+
+ /**
+ * Create a new choice listener.
+ */
+ private ChoiceListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar rule
+ * (choice), perform validations and update the data model tree.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processChoiceEntry(TreeWalkListener listener,
+ ChoiceStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, CHOICE_DATA, ctx.identifier().getText(), ENTRY);
+
+ // Check validity of identifier and remove double quotes.
+ String identifier = getValidIdentifier(ctx.identifier().getText(), CHOICE_DATA, ctx);
+
+ // Validate sub statement cardinality.
+ validateSubStatementsCardinality(ctx);
+
+ Parsable curData = listener.getParsedDataStack().peek();
+
+ // Check for identifier collision
+ int line = ctx.getStart().getLine();
+ int charPositionInLine = ctx.getStart().getCharPositionInLine();
+ detectCollidingChildUtil(listener, line, charPositionInLine, identifier, CHOICE_DATA);
+
+ if (curData instanceof YangModule || curData instanceof YangSubModule || curData instanceof YangContainer
+ || curData instanceof YangList || curData instanceof YangCase || curData instanceof YangGrouping
+ || curData instanceof YangAugment || curData instanceof YangInput || curData instanceof YangOutput
+ || curData instanceof YangNotification) {
+
+ YangChoice choiceNode = getYangChoiceNode(JAVA_GENERATION);
+ choiceNode.setName(identifier);
+ choiceNode.setLineNumber(line);
+ choiceNode.setCharPosition(charPositionInLine);
+ choiceNode.setFileName(listener.getFileName());
+ /*
+ * If "config" is not specified, the default is the same as the parent
+ * schema node's "config" value.
+ */
+ if (ctx.configStatement().isEmpty()) {
+ boolean parentConfig = getParentNodeConfig(listener);
+ choiceNode.setConfig(parentConfig);
+ }
+
+ YangNode curNode = (YangNode) curData;
+ try {
+ curNode.addChild(choiceNode);
+ } catch (DataModelException e) {
+ throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
+ CHOICE_DATA, ctx.identifier().getText(), ENTRY, e.getMessage()));
+ }
+ listener.getParsedDataStack().push(choiceNode);
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER,
+ CHOICE_DATA, ctx.identifier().getText(), ENTRY));
+ }
+ }
+
+ /**
+ * It is called when parser exits from grammar rule (choice), it perform
+ * validations and update the data model tree.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processChoiceExit(TreeWalkListener listener,
+ ChoiceStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, CHOICE_DATA, ctx.identifier().getText(), EXIT);
+
+ if (listener.getParsedDataStack().peek() instanceof YangChoice) {
+ YangChoice choiceNode = (YangChoice) listener.getParsedDataStack().peek();
+ try {
+ choiceNode.validateDataOnExit();
+ } catch (DataModelException e) {
+ throw new ParserException(constructListenerErrorMessage(INVALID_CONTENT, CHOICE_DATA,
+ ctx.identifier().getText(), EXIT));
+ }
+ listener.getParsedDataStack().pop();
+ } else {
+ throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, CHOICE_DATA,
+ ctx.identifier().getText(), EXIT));
+ }
+ }
+
+ /**
+ * Validates the cardinality of choice sub-statements as per grammar.
+ *
+ * @param ctx context object of the grammar rule.
+ */
+ private static void validateSubStatementsCardinality(ChoiceStatementContext ctx) {
+
+ validateCardinalityMaxOne(ctx.whenStatement(), WHEN_DATA, CHOICE_DATA, ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.defaultStatement(), DEFAULT_DATA, CHOICE_DATA, ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.configStatement(), CONFIG_DATA, CHOICE_DATA, ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.mandatoryStatement(), MANDATORY_DATA, CHOICE_DATA, ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.statusStatement(), STATUS_DATA, CHOICE_DATA, ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.descriptionStatement(), DESCRIPTION_DATA, CHOICE_DATA,
+ ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.referenceStatement(), REFERENCE_DATA, CHOICE_DATA, ctx.identifier().getText());
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/CompilerAnnotationListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/CompilerAnnotationListener.java
new file mode 100644
index 0000000..22a68f7
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/CompilerAnnotationListener.java
@@ -0,0 +1,157 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangAtomicPath;
+import org.onosproject.yang.compiler.datamodel.YangCompilerAnnotation;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangSubModule;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.DataModelUtils;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.linker.impl.YangResolutionInfoImpl;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil;
+
+import java.util.List;
+
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.addResolutionInfo;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.COMPILER_ANNOTATION_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.CompilerAnnotationStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidAbsoluteSchemaNodeId;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidPrefix;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * compiler-annotation-stmt = prefix:compiler-annotation-keyword string
+ * "{"
+ * [app-data-structure-stmt stmtsep]
+ * [app-extended-stmt stmtsep]
+ * "}"
+ *
+ * ANTLR grammar rule
+ * compilerAnnotationStatement : COMPILER_ANNOTATION string LEFT_CURLY_BRACE
+ * compilerAnnotationBodyStatement RIGHT_CURLY_BRACE;
+ *
+ * compilerAnnotationBodyStatement : appDataStructureStatement? appExtendedStatement? ;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "compiler-annotation"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class CompilerAnnotationListener {
+
+ /**
+ * Creates a new compiler-annotation listener.
+ */
+ private CompilerAnnotationListener() {
+ }
+
+ /**
+ * Performs validation and updates the data model tree. It is called when parser receives an
+ * input matching the grammar rule(compiler-annotation).
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processCompilerAnnotationEntry(TreeWalkListener listener,
+ CompilerAnnotationStatementContext ctx) {
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, COMPILER_ANNOTATION_DATA, ctx.string().getText(), ENTRY);
+ String prefix = getValidPrefix(ctx.COMPILER_ANNOTATION().getText(), COMPILER_ANNOTATION_DATA, ctx);
+
+ YangCompilerAnnotation compilerAnnotation = new YangCompilerAnnotation();
+ compilerAnnotation.setPrefix(prefix);
+ compilerAnnotation.setPath(removeQuotesAndHandleConcat(ctx.string().getText()));
+
+ compilerAnnotation.setLineNumber(ctx.getStart().getLine());
+ compilerAnnotation.setCharPosition(ctx.getStart().getCharPositionInLine());
+ compilerAnnotation.setFileName(listener.getFileName());
+ // Validate augment argument string
+ List<YangAtomicPath> targetNodes = getValidAbsoluteSchemaNodeId(ctx.string().getText(),
+ COMPILER_ANNOTATION_DATA, ctx);
+
+ compilerAnnotation.setAtomicPathList(targetNodes);
+
+ int line = ctx.getStart().getLine();
+ int charPositionInLine = ctx.getStart().getCharPositionInLine();
+
+ Parsable curData = listener.getParsedDataStack().peek();
+ if (!(curData instanceof YangModule || curData instanceof YangSubModule)) {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, COMPILER_ANNOTATION_DATA,
+ ctx.string().getText(), ENTRY));
+ }
+
+ // Add resolution information to the list
+ YangResolutionInfoImpl resolutionInfo = new YangResolutionInfoImpl<>(
+ compilerAnnotation, (YangNode) curData, line, charPositionInLine);
+ addToResolutionList(resolutionInfo, ctx);
+
+ listener.getParsedDataStack().push(compilerAnnotation);
+ }
+
+ /**
+ * Performs validation and updates the data model tree. It is called when parser
+ * exits from grammar rule (compiler-annotation).
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processCompilerAnnotationExit(TreeWalkListener listener,
+ CompilerAnnotationStatementContext ctx) {
+
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, COMPILER_ANNOTATION_DATA, ctx.string().getText(), EXIT);
+ if (!(listener.getParsedDataStack().peek() instanceof YangCompilerAnnotation)) {
+ throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, COMPILER_ANNOTATION_DATA,
+ ctx.string().getText(), EXIT));
+ }
+ listener.getParsedDataStack().pop();
+ }
+
+ /**
+ * Adds to resolution list.
+ *
+ * @param resolutionInfo resolution information.
+ * @param ctx context object of the grammar rule
+ */
+ private static void addToResolutionList(YangResolutionInfoImpl<YangCompilerAnnotation> resolutionInfo,
+ CompilerAnnotationStatementContext ctx) {
+
+ try {
+ addResolutionInfo(resolutionInfo);
+ } catch (DataModelException e) {
+ throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
+ COMPILER_ANNOTATION_DATA, ctx.COMPILER_ANNOTATION().getText(), ENTRY, e.getMessage()));
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ConfigListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ConfigListener.java
new file mode 100644
index 0000000..186e1c8
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ConfigListener.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.CONFIG_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidBooleanValue;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * config-stmt = config-keyword sep
+ * config-arg-str stmtend
+ * config-arg-str = < a string that matches the rule
+ * config-arg >
+ * config-arg = true-keyword / false-keyword
+ *
+ * ANTLR grammar rule
+ * configStatement : CONFIG_KEYWORD config STMTEND;
+ * config : string;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "config"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class ConfigListener {
+
+ /**
+ * Creates a new config listener.
+ */
+ private ConfigListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar rule
+ * (config), performs validation and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processConfigEntry(TreeWalkListener listener,
+ GeneratedYangParser.ConfigStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, CONFIG_DATA, "", ENTRY);
+
+ boolean isConfig = getValidBooleanValue(ctx.config().getText(), CONFIG_DATA, ctx);
+
+ Parsable tmpData = listener.getParsedDataStack().peek();
+ switch (tmpData.getYangConstructType()) {
+ case LEAF_DATA:
+ YangLeaf leaf = (YangLeaf) tmpData;
+ leaf.setConfig(isConfig);
+ break;
+ case CONTAINER_DATA:
+ YangContainer container = (YangContainer) tmpData;
+ container.setConfig(isConfig);
+ break;
+ case LEAF_LIST_DATA:
+ YangLeafList leafList = (YangLeafList) tmpData;
+ leafList.setConfig(isConfig);
+ break;
+ case LIST_DATA:
+ YangList yangList = (YangList) tmpData;
+ yangList.setConfig(isConfig);
+ break;
+ case CHOICE_DATA: // TODO
+ break;
+ default:
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, CONFIG_DATA, "", ENTRY));
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ContactListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ContactListener.java
new file mode 100644
index 0000000..d648e52
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ContactListener.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangSubModule;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.CONTACT_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ContactStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * meta-stmts = ;; these stmts can appear in any order
+ * [organization-stmt stmtsep]
+ * [contact-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * contact-stmt = contact-keyword sep string optsep stmtend
+ *
+ * ANTLR grammar rule
+ * meta_stmts : organization_stmt? contact_stmt? description_stmt? reference_stmt?
+ * | organization_stmt? contact_stmt? reference_stmt? description_stmt?
+ * | organization_stmt? description_stmt? contact_stmt? reference_stmt?
+ * | organization_stmt? description_stmt? reference_stmt? contact_stmt?
+ * | organization_stmt? reference_stmt? contact_stmt? description_stmt?
+ * | organization_stmt? reference_stmt? description_stmt? contact_stmt?
+ * | contact_stmt? organization_stmt? description_stmt? reference_stmt?
+ * | contact_stmt? organization_stmt? reference_stmt? description_stmt?
+ * | contact_stmt? reference_stmt? organization_stmt? description_stmt?
+ * | contact_stmt? reference_stmt? description_stmt? organization_stmt?
+ * | contact_stmt? description_stmt? reference_stmt? organization_stmt?
+ * | contact_stmt? description_stmt? organization_stmt? reference_stmt?
+ * | reference_stmt? contact_stmt? organization_stmt? description_stmt?
+ * | reference_stmt? contact_stmt? description_stmt? organization_stmt?
+ * | reference_stmt? organization_stmt? contact_stmt? description_stmt?
+ * | reference_stmt? organization_stmt? description_stmt? contact_stmt?
+ * | reference_stmt? description_stmt? organization_stmt? contact_stmt?
+ * | reference_stmt? description_stmt? contact_stmt? organization_stmt?
+ * | description_stmt? reference_stmt? contact_stmt? organization_stmt?
+ * | description_stmt? reference_stmt? organization_stmt? contact_stmt?
+ * | description_stmt? contact_stmt? reference_stmt? organization_stmt?
+ * | description_stmt? contact_stmt? organization_stmt? reference_stmt?
+ * | description_stmt? organization_stmt? contact_stmt? reference_stmt?
+ * | description_stmt? organization_stmt? reference_stmt? contact_stmt?
+ * ;
+ * contact_stmt : CONTACT_KEYWORD string STMTEND;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "contact"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class ContactListener {
+
+ /**
+ * Creates a new contact listener.
+ */
+ private ContactListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar rule
+ * (contact), perform validations and update the data model tree.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processContactEntry(TreeWalkListener listener, ContactStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, CONTACT_DATA, ctx.string().getText(), ENTRY);
+
+ // Obtain the node of the stack.
+ Parsable tmpNode = listener.getParsedDataStack().peek();
+ switch (tmpNode.getYangConstructType()) {
+ case MODULE_DATA: {
+ YangModule module = (YangModule) tmpNode;
+ module.setContact(ctx.string().getText());
+ break;
+ }
+ case SUB_MODULE_DATA: {
+ YangSubModule subModule = (YangSubModule) tmpNode;
+ subModule.setContact(ctx.string().getText());
+ break;
+ }
+ default:
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, CONTACT_DATA,
+ ctx.string().getText(), ENTRY));
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ContainerListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ContainerListener.java
new file mode 100644
index 0000000..abe01fa
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ContainerListener.java
@@ -0,0 +1,204 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangAugment;
+import org.onosproject.yang.compiler.datamodel.YangCase;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangGrouping;
+import org.onosproject.yang.compiler.datamodel.YangInput;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNotification;
+import org.onosproject.yang.compiler.datamodel.YangOutput;
+import org.onosproject.yang.compiler.datamodel.YangSubModule;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+
+import static org.onosproject.yang.compiler.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.CONFIG_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.CONTAINER_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.DESCRIPTION_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.PRESENCE_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.REFERENCE_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.STATUS_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ContainerStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.getParentNodeConfig;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.validateCardinalityMaxOne;
+import static org.onosproject.yang.compiler.translator.tojava.YangDataModelFactory.getYangContainerNode;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * container-stmt = container-keyword sep identifier-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [when-stmt stmtsep]
+ * *(if-feature-stmt stmtsep)
+ * *(must-stmt stmtsep)
+ * [presence-stmt stmtsep]
+ * [config-stmt stmtsep]
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * *((typedef-stmt /
+ * grouping-stmt) stmtsep)
+ * *(data-def-stmt stmtsep)
+ * "}")
+ *
+ * ANTLR grammar rule
+ * containerStatement : CONTAINER_KEYWORD identifier
+ * (STMTEND | LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | mustStatement |
+ * presenceStatement | configStatement | statusStatement | descriptionStatement |
+ * referenceStatement | typedefStatement | groupingStatement
+ * | dataDefStatement)* RIGHT_CURLY_BRACE);
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "container"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class ContainerListener {
+
+ /**
+ * Creates a new container listener.
+ */
+ private ContainerListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar rule
+ * (container), performs validation and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processContainerEntry(TreeWalkListener listener,
+ ContainerStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, CONTAINER_DATA, ctx.identifier().getText(), ENTRY);
+
+ String identifier = getValidIdentifier(ctx.identifier().getText(), CONTAINER_DATA, ctx);
+
+ // Validate sub statement cardinality.
+ validateSubStatementsCardinality(ctx);
+
+ // Check for identifier collision
+ int line = ctx.getStart().getLine();
+ int charPositionInLine = ctx.getStart().getCharPositionInLine();
+ detectCollidingChildUtil(listener, line, charPositionInLine, identifier, CONTAINER_DATA);
+
+ YangContainer container = getYangContainerNode(JAVA_GENERATION);
+ container.setName(identifier);
+
+ container.setLineNumber(line);
+ container.setCharPosition(charPositionInLine);
+ container.setFileName(listener.getFileName());
+ /*
+ * If "config" is not specified, the default is the same as the parent
+ * schema node's "config" value.
+ */
+ if (ctx.configStatement().isEmpty()) {
+ boolean parentConfig = getParentNodeConfig(listener);
+ container.setConfig(parentConfig);
+ }
+
+ Parsable curData = listener.getParsedDataStack().peek();
+ if (curData instanceof YangModule || curData instanceof YangSubModule
+ || curData instanceof YangContainer || curData instanceof YangList
+ || curData instanceof YangCase || curData instanceof YangNotification
+ || curData instanceof YangInput || curData instanceof YangOutput
+ || curData instanceof YangAugment || curData instanceof YangGrouping) {
+ YangNode curNode = (YangNode) curData;
+ try {
+ curNode.addChild(container);
+ } catch (DataModelException e) {
+ throw new ParserException(constructExtendedListenerErrorMessage(
+ UNHANDLED_PARSED_DATA, CONTAINER_DATA,
+ ctx.identifier().getText(), ENTRY, e.getMessage()));
+ }
+ listener.getParsedDataStack().push(container);
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, CONTAINER_DATA,
+ ctx.identifier().getText(), ENTRY));
+ }
+ }
+
+ /**
+ * It is called when parser exits from grammar rule (container), it perform
+ * validations and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processContainerExit(TreeWalkListener listener,
+ ContainerStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, CONTAINER_DATA, ctx.identifier().getText(), EXIT);
+
+ if (listener.getParsedDataStack().peek() instanceof YangContainer) {
+ YangContainer yangContainer = (YangContainer) listener.getParsedDataStack().peek();
+ try {
+ yangContainer.validateDataOnExit();
+ } catch (DataModelException e) {
+ ParserException parserException = new ParserException(constructExtendedListenerErrorMessage(
+ UNHANDLED_PARSED_DATA, CONTAINER_DATA, ctx.identifier().getText(), EXIT, e.getMessage()));
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+ listener.getParsedDataStack().pop();
+ } else {
+ throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, CONTAINER_DATA,
+ ctx.identifier().getText(), EXIT));
+ }
+ }
+
+ /**
+ * Validates the cardinality of container sub-statements as per grammar.
+ *
+ * @param ctx context object of the grammar rule
+ */
+ private static void validateSubStatementsCardinality(ContainerStatementContext ctx) {
+
+ validateCardinalityMaxOne(ctx.presenceStatement(), PRESENCE_DATA, CONTAINER_DATA, ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.configStatement(), CONFIG_DATA, CONTAINER_DATA, ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.descriptionStatement(), DESCRIPTION_DATA, CONTAINER_DATA,
+ ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.referenceStatement(), REFERENCE_DATA, CONTAINER_DATA, ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.statusStatement(), STATUS_DATA, CONTAINER_DATA, ctx.identifier().getText());
+ // TODO validate 'when' cardinality
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/DataStructureKeyListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/DataStructureKeyListener.java
new file mode 100644
index 0000000..eed8185
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/DataStructureKeyListener.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangAppDataStructure;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.KEY_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.DataStructureKeyStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SPACE;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * data-structure-key-stmt = prefix:key-keyword string ";"
+ *
+ * ANTLR grammar rule
+ * dataStructureKeyStatement : DATA_STRUCTURE_KEY string STMTEND;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "key"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class DataStructureKeyListener {
+
+ /**
+ * Creates a new data-structure-key listener.
+ */
+ private DataStructureKeyListener() {
+ }
+
+ /**
+ * Performs validation and updates the data model tree. It is called when parser receives an
+ * input matching the grammar rule(key).
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processDataStructureKeyEntry(TreeWalkListener listener,
+ DataStructureKeyStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, KEY_DATA, ctx.string().getText(), ENTRY);
+
+ Parsable tmpData = listener.getParsedDataStack().peek();
+ if (listener.getParsedDataStack().peek() instanceof YangAppDataStructure) {
+ YangAppDataStructure dataStructure = (YangAppDataStructure) tmpData;
+
+ dataStructure.setLineNumber(ctx.getStart().getLine());
+ dataStructure.setCharPosition(ctx.getStart().getCharPositionInLine());
+ dataStructure.setFileName(listener.getFileName());
+ String tmpKeyValue = removeQuotesAndHandleConcat(ctx.string().getText());
+ if (tmpKeyValue.contains(SPACE)) {
+ String[] keyValues = tmpKeyValue.split(SPACE);
+ for (String keyValue : keyValues) {
+ dataStructure.addKey(keyValue);
+ }
+ } else {
+ dataStructure.addKey(tmpKeyValue);
+ }
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, KEY_DATA, ctx.string().getText(),
+ ENTRY));
+ }
+ }
+}
+
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/Decimal64Listener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/Decimal64Listener.java
new file mode 100644
index 0000000..5ebd7f1
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/Decimal64Listener.java
@@ -0,0 +1,153 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * type-body-stmts = numerical-restrictions /
+ * decimal64-specification /
+ * string-restrictions /
+ * enum-specification /
+ * leafref-specification /
+ * identityref-specification /
+ * instance-identifier-specification /
+ * bits-specification /
+ * union-specification
+ *
+ * decimal64-specification = fraction-digits-stmt [range-stmt stmtsep]
+ *
+ * fraction-digits-stmt = fraction-digits-keyword sep
+ * fraction-digits-arg-str stmtend
+ *
+ * fraction-digits-arg-str = < a string that matches the rule
+ * fraction-digits-arg >
+ *
+ * fraction-digits-arg = ("1" ["0" / "1" / "2" / "3" / "4" /
+ * "5" / "6" / "7" / "8"])
+ * / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9"
+ *
+ * range-stmt = range-keyword sep range-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [error-message-stmt stmtsep]
+ * [error-app-tag-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * "}")
+ * ANTLR grammar rule
+ *
+ * typeBodyStatements : numericalRestrictions | decimal64Specification | stringRestrictions | enumSpecification
+ * | leafrefSpecification | identityrefSpecification | instanceIdentifierSpecification
+ * | bitsSpecification | unionSpecification;
+ *
+ * decimal64Specification : fractionDigitStatement rangeStatement?;
+ *
+ * fractionDigitStatement : FRACTION_DIGITS_KEYWORD fraction STMTEND;
+ *
+ * fraction : string;
+ */
+
+import org.onosproject.yang.compiler.datamodel.YangDecimal64;
+import org.onosproject.yang.compiler.datamodel.YangRangeRestriction;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.Decimal64SpecificationContext;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.DECIMAL64_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+
+/**
+ * Represents listener based call back function corresponding to the "decimal64" rule
+ * defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class Decimal64Listener {
+
+ /**
+ * Creates a new Decimal64 listener.
+ */
+ private Decimal64Listener() {
+ }
+
+ /**
+ * It is called when parser enters grammar rule (decimal64), it perform
+ * validations and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processDecimal64Entry(TreeWalkListener listener,
+ Decimal64SpecificationContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, DECIMAL64_DATA, "", ENTRY);
+
+ Parsable tmpNode = listener.getParsedDataStack().peek();
+ if (tmpNode instanceof YangType) {
+ YangType<YangDecimal64<YangRangeRestriction>> typeNode =
+ (YangType<YangDecimal64<YangRangeRestriction>>) tmpNode;
+ YangDecimal64 decimal64Node = new YangDecimal64();
+ typeNode.setDataTypeExtendedInfo(decimal64Node);
+
+ decimal64Node.setLineNumber(ctx.getStart().getLine());
+ decimal64Node.setCharPosition(ctx.getStart().getCharPositionInLine());
+ decimal64Node.setFileName(listener.getFileName());
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, DECIMAL64_DATA, "", ENTRY));
+ }
+ }
+
+ /**
+ * Performs validation and updates the data model tree.
+ * It is called when parser exits from grammar rule (decimal64).
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processDecimal64Exit(TreeWalkListener listener,
+ Decimal64SpecificationContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, DECIMAL64_DATA, "", EXIT);
+
+ Parsable tmpNode = listener.getParsedDataStack().peek();
+ if (tmpNode instanceof YangType) {
+ YangType<YangDecimal64<YangRangeRestriction>> typeNode =
+ (YangType<YangDecimal64<YangRangeRestriction>>) tmpNode;
+ YangDecimal64<YangRangeRestriction> decimal64Node = typeNode.getDataTypeExtendedInfo();
+ try {
+ decimal64Node.validateRange();
+ } catch (DataModelException e) {
+ throw new ParserException(e);
+ }
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, DECIMAL64_DATA, "", EXIT));
+ }
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/DefaultListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/DefaultListener.java
new file mode 100644
index 0000000..0000aff
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/DefaultListener.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * typedef-stmt = typedef-keyword sep identifier-arg-str optsep
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * type-stmt stmtsep
+ * [units-stmt stmtsep]
+ * [default-stmt stmtsep]
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * "}"
+ * default-stmt = default-keyword sep string stmtend
+
+ *
+ * ANTLR grammar rule
+ * typedefStatement : TYPEDEF_KEYWORD IDENTIFIER LEFT_CURLY_BRACE
+ * (typeStatement | unitsStatement | defaultStatement | statusStatement
+ * | descriptionStatement | referenceStatement)* RIGHT_CURLY_BRACE;
+ * defaultStatement : DEFAULT_KEYWORD string STMTEND;
+ */
+
+import org.onosproject.yang.compiler.datamodel.YangChoice;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangTypeDef;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.DEFAULT_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.DefaultStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/**
+ * Represents listener for default YANG statement.
+ */
+public final class DefaultListener {
+
+ /**
+ * Creates a new default listener.
+ */
+ private DefaultListener() {
+ }
+
+ /**
+ * It is called when parser enters grammar rule (default), it perform
+ * validations and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processDefaultEntry(TreeWalkListener listener,
+ DefaultStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, DEFAULT_DATA, ctx.string().getText(), ENTRY);
+
+ Parsable tmpNode = listener.getParsedDataStack().peek();
+ switch (tmpNode.getYangConstructType()) {
+ case TYPEDEF_DATA: {
+ YangTypeDef typeDef = (YangTypeDef) tmpNode;
+ typeDef.setDefaultValueInString(removeQuotesAndHandleConcat(ctx.string().getText()));
+ break;
+ }
+ case LEAF_DATA: {
+ YangLeaf leaf = (YangLeaf) tmpNode;
+ leaf.setDefaultValueInString(removeQuotesAndHandleConcat(ctx.string().getText()));
+ break;
+ }
+ case CHOICE_DATA: {
+ YangChoice choice = (YangChoice) tmpNode;
+ choice.setDefaultValueInString(removeQuotesAndHandleConcat(ctx.string().getText()));
+ break;
+ }
+ default:
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER,
+ DEFAULT_DATA, ctx.string().getText(), ENTRY));
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/DescriptionListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/DescriptionListener.java
new file mode 100644
index 0000000..fdc5cc4
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/DescriptionListener.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangDesc;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.DESCRIPTION_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.DescriptionStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * description-stmt = description-keyword sep string optsep stmtend
+ *
+ * ANTLR grammar rule
+ * descriptionStatement : DESCRIPTION_KEYWORD string STMTEND;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the
+ * "description" rule defined in ANTLR grammar file for corresponding ABNF rule
+ * in RFC 6020.
+ */
+public final class DescriptionListener {
+
+ /**
+ * Creates a new description listener.
+ */
+ private DescriptionListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar rule
+ * (description), perform validations and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processDescriptionEntry(TreeWalkListener listener,
+ DescriptionStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, DESCRIPTION_DATA, ctx.string().getText(), ENTRY);
+
+ Parsable tmpData = listener.getParsedDataStack().peek();
+ if (tmpData instanceof YangDesc) {
+ YangDesc description = (YangDesc) tmpData;
+ description.setDescription(ctx.string().getText());
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, DESCRIPTION_DATA,
+ ctx.string().getText(), ENTRY));
+ }
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/EnumListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/EnumListener.java
new file mode 100644
index 0000000..46f2e86
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/EnumListener.java
@@ -0,0 +1,191 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * enum-stmt = enum-keyword sep string optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [value-stmt stmtsep]
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * "}")
+ *
+ * ANTLR grammar rule
+ * enumStatement : ENUM_KEYWORD string (STMTEND | LEFT_CURLY_BRACE enumStatementBody RIGHT_CURLY_BRACE);
+ *
+ * enumStatementBody : valueStatement? statusStatement? descriptionStatement? referenceStatement?
+ * | valueStatement? statusStatement? referenceStatement? descriptionStatement?
+ * | valueStatement? descriptionStatement? statusStatement? referenceStatement?
+ * | valueStatement? descriptionStatement? referenceStatement? statusStatement?
+ * | valueStatement? referenceStatement? statusStatement? descriptionStatement?
+ * | valueStatement? referenceStatement? descriptionStatement? statusStatement?
+ * | statusStatement? valueStatement? descriptionStatement? referenceStatement?
+ * | statusStatement? valueStatement? referenceStatement? descriptionStatement?
+ * | statusStatement? descriptionStatement? descriptionStatement? valueStatement?
+ * | statusStatement? descriptionStatement? valueStatement? descriptionStatement?
+ * | statusStatement? referenceStatement? valueStatement? descriptionStatement?
+ * | statusStatement? referenceStatement? descriptionStatement? valueStatement?
+ * | descriptionStatement? valueStatement? statusStatement? referenceStatement?
+ * | descriptionStatement? valueStatement? referenceStatement? statusStatement?
+ * | descriptionStatement? statusStatement? valueStatement? referenceStatement?
+ * | descriptionStatement? statusStatement? referenceStatement? valueStatement?
+ * | descriptionStatement? referenceStatement? valueStatement? statusStatement?
+ * | descriptionStatement? referenceStatement? statusStatement? valueStatement?
+ * | referenceStatement? valueStatement? descriptionStatement? statusStatement?
+ * | referenceStatement? valueStatement? statusStatement? descriptionStatement?
+ * | referenceStatement? statusStatement? descriptionStatement? valueStatement?
+ * | referenceStatement? statusStatement? valueStatement? descriptionStatement?
+ * | referenceStatement? descriptionStatement? valueStatement? statusStatement?
+ * | referenceStatement? descriptionStatement? statusStatement? valueStatement?
+ * ;
+ */
+
+import org.onosproject.yang.compiler.datamodel.YangEnum;
+import org.onosproject.yang.compiler.datamodel.YangEnumeration;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.ENUM_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.EnumStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.DUPLICATE_ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EMPTY_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.QUOTES;
+
+/**
+ * Represents listener based call back function corresponding to the "enum" rule
+ * defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class EnumListener {
+
+ /**
+ * Creates a new enum listener.
+ */
+ private EnumListener() {
+ }
+
+ /**
+ * It is called when parser enters grammar rule (enum), it perform
+ * validations and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processEnumEntry(TreeWalkListener listener, EnumStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, ENUM_DATA, ctx.string().getText(), ENTRY);
+
+ YangEnum enumNode = new YangEnum();
+ enumNode.setNamedValue(getValidNamedValue(ctx.string().getText()));
+
+ enumNode.setLineNumber(ctx.getStart().getLine());
+ enumNode.setCharPosition(ctx.getStart().getCharPositionInLine());
+ enumNode.setFileName(listener.getFileName());
+ listener.getParsedDataStack().push(enumNode);
+ }
+
+ /*Removes quotes from the enum name if present.*/
+ private static String getValidNamedValue(String name) {
+ if (name.contains(QUOTES)) {
+ name = name.replace(QUOTES, EMPTY_STRING);
+ }
+ return name;
+ }
+
+ /**
+ * It is called when parser exits from grammar rule (enum), it perform
+ * validations and update the data model tree.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processEnumExit(TreeWalkListener listener, EnumStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, ENUM_DATA, ctx.string().getText(), EXIT);
+
+ Parsable tmpEnumNode = listener.getParsedDataStack().peek();
+ if (tmpEnumNode instanceof YangEnum) {
+ listener.getParsedDataStack().pop();
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, ENUM_DATA, ctx.string().getText(), EXIT);
+
+ Parsable tmpNode = listener.getParsedDataStack().peek();
+ switch (tmpNode.getYangConstructType()) {
+ case ENUMERATION_DATA: {
+ YangEnumeration yangEnumeration = (YangEnumeration) tmpNode;
+ if (ctx.enumStatementBody() == null || ctx.enumStatementBody().valueStatement() == null) {
+ int maxValue = 0;
+ boolean isValuePresent = false;
+
+ for (YangEnum curEnum : yangEnumeration.getEnumSet()) {
+ if (curEnum.getValue() == Integer.MAX_VALUE) {
+ ParserException parserException = new ParserException("YANG file error : "
+ + "An enum value MUST be specified for enum substatements following the one"
+ + "with the current highest value");
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ } else if (maxValue <= curEnum.getValue()) {
+ maxValue = curEnum.getValue();
+ isValuePresent = true;
+ }
+ }
+ if (isValuePresent) {
+ maxValue++;
+ }
+ ((YangEnum) tmpEnumNode).setValue(maxValue);
+ }
+ try {
+ yangEnumeration.addEnumInfo((YangEnum) tmpEnumNode);
+ } catch (DataModelException e) {
+ ParserException parserException = new ParserException(constructExtendedListenerErrorMessage(
+ DUPLICATE_ENTRY, ENUM_DATA, ctx.string().getText(), EXIT, e.getMessage()));
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+ break;
+ }
+ default:
+ throw new ParserException(
+ constructListenerErrorMessage(INVALID_HOLDER, ENUM_DATA, ctx.string().getText(), EXIT));
+ }
+ } else {
+ throw new ParserException(
+ constructListenerErrorMessage(MISSING_CURRENT_HOLDER, ENUM_DATA, ctx.string().getText(), EXIT));
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/EnumerationListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/EnumerationListener.java
new file mode 100644
index 0000000..c73ea68
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/EnumerationListener.java
@@ -0,0 +1,227 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * type-body-stmts = numerical-restrictions /
+ * decimal64-specification /
+ * string-restrictions /
+ * enum-specification /
+ * leafref-specification /
+ * identityref-specification /
+ * instance-identifier-specification /
+ * bits-specification /
+ * union-specification
+ *
+ * enum-specification = 1*(enum-stmt stmtsep)
+ *
+ * ANTLR grammar rule
+ *
+ * typeBodyStatements : numericalRestrictions | stringRestrictions | enumSpecification
+ * | leafrefSpecification | identityrefSpecification | instanceIdentifierSpecification
+ * | bitsSpecification | unionSpecification;
+ *
+ * enumSpecification : enumStatement+;
+ */
+
+import org.onosproject.yang.compiler.datamodel.YangEnumeration;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.YangTypeDef;
+import org.onosproject.yang.compiler.datamodel.YangUnion;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.EnumSpecificationContext;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+
+import static org.onosproject.yang.compiler.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.ENUMERATION_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.TYPE_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+import static org.onosproject.yang.compiler.translator.tojava.YangDataModelFactory.getYangEnumerationNode;
+
+/**
+ * Represents listener based call back function corresponding to the
+ * "enumeration" rule defined in ANTLR grammar file for corresponding ABNF rule
+ * in RFC 6020.
+ */
+public final class EnumerationListener {
+
+ /**
+ * Suffix to be used while creating enumeration class.
+ */
+ private static final String ENUMERATION_CLASS_SUFFIX = "_enum";
+
+ /**
+ * Creates a new enumeration listener.
+ */
+ private EnumerationListener() {
+ }
+
+ /**
+ * It is called when parser enters grammar rule (enumeration), it perform
+ * validations and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processEnumerationEntry(TreeWalkListener listener,
+ EnumSpecificationContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, ENUMERATION_DATA, "", ENTRY);
+
+ if (listener.getParsedDataStack().peek() instanceof YangType) {
+ YangEnumeration enumerationNode = getYangEnumerationNode(JAVA_GENERATION);
+ enumerationNode.setLineNumber(ctx.getStart().getLine());
+ enumerationNode.setCharPosition(ctx.getStart().getCharPositionInLine());
+ enumerationNode.setFileName(listener.getFileName());
+ Parsable typeData = listener.getParsedDataStack().pop();
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, ENUMERATION_DATA, "", ENTRY);
+
+ Parsable tmpData = listener.getParsedDataStack().peek();
+
+ switch (tmpData.getYangConstructType()) {
+ case LEAF_DATA:
+ // Set the name of enumeration same as leaf.
+ enumerationNode.setName(((YangLeaf) tmpData).getName() + ENUMERATION_CLASS_SUFFIX);
+ // Pop the stack entry to obtain the parent YANG node.
+ Parsable leaf = listener.getParsedDataStack().pop();
+ // Add the enumeration node to the parent holder of leaf.
+ addChildToParentNode(listener, enumerationNode);
+ // Push the popped entry back to the stack.
+ listener.getParsedDataStack().push(leaf);
+ break;
+ case LEAF_LIST_DATA:
+ // Set the name of enumeration same as leaf list.
+ enumerationNode.setName(((YangLeafList) tmpData).getName() + ENUMERATION_CLASS_SUFFIX);
+ // Pop the stack entry to obtain the parent YANG node.
+ Parsable leafList = listener.getParsedDataStack().pop();
+ // Add the enumeration node to the parent holder of leaf.
+ addChildToParentNode(listener, enumerationNode);
+ // Push the popped entry back to the stack.
+ listener.getParsedDataStack().push(leafList);
+ break;
+ case UNION_DATA:
+ YangUnion yangUnion = (YangUnion) tmpData;
+ /*
+ * In case parent of enumeration is a union, name of the
+ * enumeration is parent union name suffixed with running
+ * integer number, this is done because under union there
+ * could be multiple child union types.
+ */
+ enumerationNode.setName(yangUnion.getName() + ENUMERATION_CLASS_SUFFIX
+ + yangUnion.getChildUnionNumber());
+ // Increment the running number.
+ yangUnion.setChildUnionNumber(yangUnion.getChildUnionNumber() + 1);
+ // Add union as a child to parent union.
+ addChildToParentNode(listener, enumerationNode);
+ break;
+ case TYPEDEF_DATA:
+ YangTypeDef typeDef = (YangTypeDef) tmpData;
+ // Set the name of enumeration same as typedef name.
+ enumerationNode.setName(typeDef.getName() + ENUMERATION_CLASS_SUFFIX);
+ // Add enumeration as a child to parent type def.
+ addChildToParentNode(listener, enumerationNode);
+ break;
+ // TODO deviate.
+ default:
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, TYPE_DATA,
+ ((YangType<?>) typeData).getDataTypeName(), ENTRY));
+ }
+ listener.getParsedDataStack().push(typeData);
+ listener.getParsedDataStack().push(enumerationNode);
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, ENUMERATION_DATA, "", ENTRY));
+ }
+ }
+
+ /**
+ * It is called when parser exits from grammar rule (enumeration), it
+ * perform validations and update the data model tree.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processEnumerationExit(TreeWalkListener listener,
+ EnumSpecificationContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, ENUMERATION_DATA, "", EXIT);
+
+ Parsable tmpEnumerationNode = listener.getParsedDataStack().peek();
+ if (tmpEnumerationNode instanceof YangEnumeration) {
+ YangEnumeration enumerationNode = (YangEnumeration) tmpEnumerationNode;
+ listener.getParsedDataStack().pop();
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, ENUMERATION_DATA, "", EXIT);
+
+ Parsable tmpNode = listener.getParsedDataStack().peek();
+ switch (tmpNode.getYangConstructType()) {
+ case TYPE_DATA: {
+ YangType<YangEnumeration> typeNode = (YangType<YangEnumeration>) tmpNode;
+ typeNode.setDataTypeExtendedInfo(enumerationNode);
+ break;
+ }
+ default:
+ throw new ParserException(
+ constructListenerErrorMessage(INVALID_HOLDER, ENUMERATION_DATA, "", EXIT));
+ }
+ } else {
+ throw new ParserException(
+ constructListenerErrorMessage(MISSING_CURRENT_HOLDER, ENUMERATION_DATA, "", EXIT));
+ }
+ }
+
+ /**
+ * Adds the enumeration node to the parent holder.
+ *
+ * @param listener listener's object
+ * @param enumerationNode enumeration node which needs to be added to parent
+ */
+ private static void addChildToParentNode(TreeWalkListener listener, YangEnumeration enumerationNode) {
+ if (!(listener.getParsedDataStack().peek() instanceof YangNode)) {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, ENUMERATION_DATA,
+ "", ENTRY));
+ } else {
+ YangNode curNode = (YangNode) listener.getParsedDataStack().peek();
+ try {
+ curNode.addChild(enumerationNode);
+ } catch (DataModelException e) {
+ throw new ParserException(constructExtendedListenerErrorMessage(
+ UNHANDLED_PARSED_DATA, ENUMERATION_DATA, "", ENTRY, e.getMessage()));
+ }
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ErrorAppTagListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ErrorAppTagListener.java
new file mode 100644
index 0000000..6c2c05f
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ErrorAppTagListener.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangAppErrorHolder;
+import org.onosproject.yang.compiler.datamodel.YangAppErrorInfo;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.ERROR_APP_TAG_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ErrorAppTagStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC 6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC 6020
+ *
+ * error-app-tag-stmt = error-app-tag-keyword sep string stmtend
+ *
+ * ANTLR grammar rule
+ * errorAppTagStatement : ERROR_APP_TAG_KEYWORD string STMTEND;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the
+ * error app tag defined in ANTLR grammar file for corresponding ABNF rule
+ * in RFC 6020.
+ */
+public final class ErrorAppTagListener {
+
+ /**
+ * Creates a new error app tag listener.
+ */
+ private ErrorAppTagListener() {
+ }
+
+ /**
+ * Performs validations and updates the data model tree. It is called when parser
+ * receives an input matching the grammar rule error app tag.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processErrorAppTagMessageEntry(TreeWalkListener listener,
+ ErrorAppTagStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, ERROR_APP_TAG_DATA, ctx.string().getText(), ENTRY);
+ String errorMessage = removeQuotesAndHandleConcat(ctx.string().getText());
+ // Obtain the node of the stack.
+ Parsable tmpNode = listener.getParsedDataStack().peek();
+ if (tmpNode instanceof YangAppErrorHolder) {
+ YangAppErrorInfo yangAppErrorInfo = ((YangAppErrorHolder) tmpNode).getAppErrorInfo();
+ yangAppErrorInfo.setErrorAppTag(errorMessage);
+ yangAppErrorInfo.setLineNumber(ctx.getStart().getLine());
+ yangAppErrorInfo.setCharPosition(ctx.getStart().getCharPositionInLine());
+ yangAppErrorInfo.setFileName(listener.getFileName());
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, ERROR_APP_TAG_DATA,
+ ctx.string().getText(), ENTRY));
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ErrorMessageListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ErrorMessageListener.java
new file mode 100644
index 0000000..137502d
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ErrorMessageListener.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangAppErrorHolder;
+import org.onosproject.yang.compiler.datamodel.YangAppErrorInfo;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.ERROR_MESSAGE_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ErrorMessageStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ *
+ * error-message-stmt = error-message-keyword sep string stmtend
+ *
+ * ANTLR grammar rule
+ * errorMessageStatement : ERROR_MESSAGE_KEYWORD string STMTEND;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the
+ * app error message defined in ANTLR grammar file for corresponding ABNF rule
+ * in RFC 6020.
+ */
+public final class ErrorMessageListener {
+
+ /**
+ * Creates a new must listener.
+ */
+ private ErrorMessageListener() {
+ }
+
+ /**
+ * Performs validations and updates the data model tree. It is called when parser
+ * receives an input matching the grammar rule (app error message).
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processErrorMessageEntry(TreeWalkListener listener,
+ ErrorMessageStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, ERROR_MESSAGE_DATA, ctx.string().getText(), ENTRY);
+ String errorMessage = removeQuotesAndHandleConcat(ctx.string().getText());
+
+ // Obtain the node of the stack.
+ Parsable tmpNode = listener.getParsedDataStack().peek();
+ if (tmpNode instanceof YangAppErrorHolder) {
+ YangAppErrorInfo yangAppErrorInfo = ((YangAppErrorHolder) tmpNode).getAppErrorInfo();
+ yangAppErrorInfo.setErrorMessage(errorMessage);
+
+ yangAppErrorInfo.setLineNumber(ctx.getStart().getLine());
+ yangAppErrorInfo.setCharPosition(ctx.getStart().getCharPositionInLine());
+ yangAppErrorInfo.setFileName(listener.getFileName());
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, ERROR_MESSAGE_DATA,
+ ctx.string().getText(), ENTRY));
+ }
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ExtensionListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ExtensionListener.java
new file mode 100644
index 0000000..d4d1749
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ExtensionListener.java
@@ -0,0 +1,126 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangExtension;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangSubModule;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.EXTENSION_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ExtensionStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * extension-stmt = extension-keyword sep identifier-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [argument-stmt stmtsep]
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * "}")
+ *
+ * ANTLR grammar rule
+ * extensionStatement : EXTENSION_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE extensionBody RIGHT_CURLY_BRACE);
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "extension"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class ExtensionListener {
+
+ /**
+ * Creates a new extension listener.
+ */
+ private ExtensionListener() {
+ }
+
+ /**
+ * Performs validation and updates the data model tree. It is called when parser
+ * receives an input matching the grammar rule (extension).
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processExtensionEntry(TreeWalkListener listener,
+ ExtensionStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, EXTENSION_DATA, ctx.identifier().getText(), ENTRY);
+
+ String identifier = getValidIdentifier(ctx.identifier().getText(), EXTENSION_DATA, ctx);
+
+ YangExtension extension = new YangExtension();
+
+ extension.setLineNumber(ctx.getStart().getLine());
+ extension.setCharPosition(ctx.getStart().getCharPositionInLine());
+ extension.setFileName(listener.getFileName());
+ extension.setName(identifier);
+
+ Parsable curData = listener.getParsedDataStack().peek();
+ switch (curData.getYangConstructType()) {
+ case MODULE_DATA:
+ YangModule module = ((YangModule) curData);
+ module.addExtension(extension);
+ break;
+ case SUB_MODULE_DATA:
+ YangSubModule subModule = ((YangSubModule) curData);
+ subModule.addExtension(extension);
+ break;
+ default:
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, EXTENSION_DATA,
+ ctx.identifier().getText(), ENTRY));
+ }
+ listener.getParsedDataStack().push(extension);
+ }
+
+ /**
+ * Performs validation and updates the data model tree. It is called when parser exits
+ * from grammar rule(extension).
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processExtensionExit(TreeWalkListener listener,
+ ExtensionStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, EXTENSION_DATA, ctx.identifier().getText(), EXIT);
+
+ if (!(listener.getParsedDataStack().peek() instanceof YangExtension)) {
+ throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, EXTENSION_DATA,
+ ctx.identifier().getText(), EXIT));
+ }
+ listener.getParsedDataStack().pop();
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/FeatureListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/FeatureListener.java
new file mode 100644
index 0000000..5b14c25
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/FeatureListener.java
@@ -0,0 +1,124 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * feature-stmt = feature-keyword sep identifier-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * *(if-feature-stmt stmtsep)
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * "}")
+ *
+ *
+ *
+ * ANTLR grammar rule
+ * featureStatement : FEATURE_KEYWORD string (STMTEND | LEFT_CURLY_BRACE featureBody RIGHT_CURLY_BRACE);
+ */
+
+import org.onosproject.yang.compiler.datamodel.YangFeature;
+import org.onosproject.yang.compiler.datamodel.YangFeatureHolder;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.FEATURE_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.FeatureStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/**
+ * Represents listener based call back function corresponding to the "feature"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class FeatureListener {
+
+ /**
+ * Creates a new feature listener.
+ */
+ private FeatureListener() {
+ }
+
+ /**
+ * Performs validation and updates the data model tree.It is called when parser receives
+ * an input matching the grammar rule (feature).
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processFeatureEntry(TreeWalkListener listener,
+ FeatureStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, FEATURE_DATA, ctx.string().getText(), ENTRY);
+
+ String identifier = getValidIdentifier(ctx.string().getText(), FEATURE_DATA, ctx);
+
+ // Obtain the node of the stack.
+ Parsable tmpNode = listener.getParsedDataStack().peek();
+ if (tmpNode instanceof YangFeatureHolder) {
+ YangFeatureHolder featureHolder = (YangFeatureHolder) tmpNode;
+
+ YangFeature feature = new YangFeature();
+ feature.setName(identifier);
+
+ feature.setLineNumber(ctx.getStart().getLine());
+ feature.setCharPosition(ctx.getStart().getCharPositionInLine());
+ feature.setFileName(listener.getFileName());
+ featureHolder.addFeatureList(feature);
+ listener.getParsedDataStack().push(feature);
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, FEATURE_DATA,
+ ctx.string().getText(), ENTRY));
+ }
+ }
+
+ /**
+ * Perform validations and updates the data model tree.It is called when parser exits from
+ * grammar rule(feature).
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processFeatureExit(TreeWalkListener listener,
+ FeatureStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, FEATURE_DATA, ctx.string().getText(), EXIT);
+
+ if (listener.getParsedDataStack().peek() instanceof YangFeature) {
+ listener.getParsedDataStack().pop();
+ } else {
+ throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, FEATURE_DATA,
+ ctx.string().getText(), EXIT));
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/FractionDigitsListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/FractionDigitsListener.java
new file mode 100644
index 0000000..ae68da0
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/FractionDigitsListener.java
@@ -0,0 +1,130 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * decimal64-specification = fraction-digits-stmt
+ *
+ * fraction-digits-stmt = fraction-digits-keyword sep
+ * fraction-digits-arg-str stmtend
+ *
+ * fraction-digits-arg-str = < a string that matches the rule
+ * fraction-digits-arg >
+ *
+ * fraction-digits-arg = ("1" ["0" / "1" / "2" / "3" / "4" /
+ * "5" / "6" / "7" / "8"])
+ * / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9"
+ *
+ * ANTLR grammar rule
+ * decimal64Specification : FRACTION_DIGITS_KEYWORD fraction STMTEND;
+ *
+ * fraction : string;
+ */
+
+import org.onosproject.yang.compiler.datamodel.YangDecimal64;
+import org.onosproject.yang.compiler.datamodel.YangRangeRestriction;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+
+import static org.onosproject.yang.compiler.datamodel.YangDecimal64.MAX_FRACTION_DIGITS_VALUE;
+import static org.onosproject.yang.compiler.datamodel.YangDecimal64.MIN_FRACTION_DIGITS_VALUE;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.FRACTION_DIGITS_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.FractionDigitStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_CONTENT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/**
+ * Represents listener based call back function corresponding to the "fraction-digits"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class FractionDigitsListener {
+
+ /**
+ * Creates a new bit listener.
+ */
+ private FractionDigitsListener() {
+ }
+
+ /**
+ * It is called when parser enters grammar rule (fraction-digits), it perform
+ * validations and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processFractionDigitsEntry(TreeWalkListener listener,
+ FractionDigitStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, FRACTION_DIGITS_DATA,
+ ctx.fraction().getText(), ENTRY);
+ int value = getValidFractionDigits(ctx);
+ Parsable tmpNode = listener.getParsedDataStack().peek();
+ if (tmpNode instanceof YangType) {
+ YangType<YangDecimal64<YangRangeRestriction>> typeNode =
+ (YangType<YangDecimal64<YangRangeRestriction>>) tmpNode;
+ YangDecimal64 decimal64Node = typeNode.getDataTypeExtendedInfo();
+ decimal64Node.setFractionDigit(value);
+ if (!decimal64Node.isValidFractionDigit()) {
+ throw new ParserException(constructErrorMsg(ctx, INVALID_CONTENT));
+ }
+ } else {
+ throw new ParserException(constructErrorMsg(ctx, INVALID_HOLDER));
+ }
+ }
+
+ private static String constructErrorMsg(
+ FractionDigitStatementContext ctx,
+ ListenerErrorType type) {
+ return constructListenerErrorMessage(type, FRACTION_DIGITS_DATA,
+ ctx.fraction().getText(), ENTRY);
+ }
+
+ /**
+ * Validate fraction digits.
+ *
+ * @param ctx context object of the grammar rule
+ * @return validated fraction-digits
+ */
+ private static int getValidFractionDigits(FractionDigitStatementContext ctx) {
+ String value = ctx.fraction().getText().trim();
+ ParserException parserException;
+
+ int fractionDigits = Integer.parseInt(value);
+ if (fractionDigits >= MIN_FRACTION_DIGITS_VALUE &&
+ fractionDigits <= MAX_FRACTION_DIGITS_VALUE) {
+ return fractionDigits;
+ } else {
+ parserException =
+ new ParserException("YANG file error : fraction-digits value" +
+ " should be between 1 and 18.");
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/GroupingListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/GroupingListener.java
new file mode 100644
index 0000000..d47d577
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/GroupingListener.java
@@ -0,0 +1,181 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangGrouping;
+import org.onosproject.yang.compiler.datamodel.YangInput;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNotification;
+import org.onosproject.yang.compiler.datamodel.YangOutput;
+import org.onosproject.yang.compiler.datamodel.YangRpc;
+import org.onosproject.yang.compiler.datamodel.YangSubModule;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerCollisionDetector;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil;
+
+import static org.onosproject.yang.compiler.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.DESCRIPTION_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.GROUPING_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.REFERENCE_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.STATUS_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.GroupingStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.validateCardinalityMaxOne;
+import static org.onosproject.yang.compiler.translator.tojava.YangDataModelFactory.getYangGroupingNode;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * grouping-stmt = grouping-keyword sep identifier-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * *((typedef-stmt /
+ * grouping-stmt) stmtsep)
+ * *(data-def-stmt stmtsep)
+ * "}")
+ *
+ * ANTLR grammar rule
+ * groupingStatement : GROUPING_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE
+ * (statusStatement | descriptionStatement | referenceStatement | typedefStatement | groupingStatement
+ * | dataDefStatement)* RIGHT_CURLY_BRACE);
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "grouping"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class GroupingListener {
+
+ /**
+ * Creates a new grouping listener.
+ */
+ private GroupingListener() {
+ }
+
+ /**
+ * It is called when parser enters grammar rule (grouping), it perform
+ * validations and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processGroupingEntry(TreeWalkListener listener,
+ GroupingStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, GROUPING_DATA, ctx.identifier().getText(), ENTRY);
+
+ // Check validity of identifier and remove double quotes.
+ String identifier = getValidIdentifier(ctx.identifier().getText(), GROUPING_DATA, ctx);
+
+ // Validate sub statement cardinality.
+ validateSubStatementsCardinality(ctx);
+
+ // Increase the grouping count by one.
+ listener.increaseGroupingDepth();
+ Parsable curData = listener.getParsedDataStack().peek();
+
+ // Check for identifier collision
+ int line = ctx.getStart().getLine();
+ int charPositionInLine = ctx.getStart().getCharPositionInLine();
+ detectCollidingChildUtil(listener, line, charPositionInLine, identifier, GROUPING_DATA);
+
+ if (curData instanceof YangModule || curData instanceof YangSubModule
+ || curData instanceof YangContainer || curData instanceof YangNotification
+ || curData instanceof YangList || curData instanceof YangGrouping
+ || curData instanceof YangRpc || curData instanceof YangInput
+ || curData instanceof YangOutput) {
+
+ YangGrouping groupingNode = getYangGroupingNode(JAVA_GENERATION);
+ groupingNode.setName(identifier);
+ groupingNode.setGroupingDepth(listener.getGroupingDepth());
+
+ groupingNode.setLineNumber(line);
+ groupingNode.setCharPosition(charPositionInLine);
+ groupingNode.setFileName(listener.getFileName());
+ YangNode curNode = (YangNode) curData;
+ try {
+ curNode.addChild(groupingNode);
+ } catch (DataModelException e) {
+ throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
+ GROUPING_DATA, ctx.identifier().getText(), ENTRY, e.getMessage()));
+ }
+ listener.getParsedDataStack().push(groupingNode);
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER,
+ GROUPING_DATA, ctx.identifier().getText(), ENTRY));
+ }
+ }
+
+ /**
+ * It is called when parser exits from grammar rule (grouping), it perform
+ * validations and update the data model tree.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processGroupingExit(TreeWalkListener listener,
+ GroupingStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, GROUPING_DATA, ctx.identifier().getText(), EXIT);
+
+ // Decrease the grouping count by one.
+ listener.decreaseGroupingDepth();
+ if (listener.getParsedDataStack().peek() instanceof YangGrouping) {
+ listener.getParsedDataStack().pop();
+ } else {
+ throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, GROUPING_DATA,
+ ctx.identifier().getText(), EXIT));
+ }
+ }
+
+ /**
+ * Validates the cardinality of case sub-statements as per grammar.
+ *
+ * @param ctx context object of the grammar rule
+ */
+ private static void validateSubStatementsCardinality(GroupingStatementContext ctx) {
+
+ validateCardinalityMaxOne(ctx.statusStatement(), STATUS_DATA, GROUPING_DATA, ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.descriptionStatement(), DESCRIPTION_DATA, GROUPING_DATA,
+ ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.referenceStatement(), REFERENCE_DATA, GROUPING_DATA, ctx.identifier().getText());
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/IdentityListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/IdentityListener.java
new file mode 100644
index 0000000..e47b2d6
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/IdentityListener.java
@@ -0,0 +1,124 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangIdentity;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangSubModule;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+
+import static org.onosproject.yang.compiler.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.IDENTITY_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.IdentityStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+import static org.onosproject.yang.compiler.translator.tojava.YangDataModelFactory.getYangIdentityNode;
+
+/**
+ * Reference: RFC6020 and YANG ANTLR Grammar.
+ * <p>
+ * ABNF grammar as per RFC6020
+ * identity-stmt = identity-keyword sep identifier-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [base-stmt stmtsep]
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * "}")
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "identity"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class IdentityListener {
+
+ //Creates a identity listener.
+ private IdentityListener() {
+ }
+
+ /**
+ * Performs validations and update the data model tree when parser receives an input
+ * matching the grammar rule (identity).
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processIdentityEntry(TreeWalkListener listener,
+ IdentityStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, IDENTITY_DATA, ctx.identifier().getText(), ENTRY);
+
+ String identifier = getValidIdentifier(ctx.identifier().getText(), IDENTITY_DATA, ctx);
+
+ YangIdentity identity = getYangIdentityNode(JAVA_GENERATION);
+ identity.setName(identifier);
+
+ identity.setLineNumber(ctx.getStart().getLine());
+ identity.setCharPosition(ctx.getStart().getCharPositionInLine());
+ identity.setFileName(listener.getFileName());
+ Parsable curData = listener.getParsedDataStack().peek();
+ if (curData instanceof YangModule || curData instanceof YangSubModule) {
+ YangNode curNode = (YangNode) curData;
+ try {
+ curNode.addChild(identity);
+ } catch (DataModelException e) {
+ throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
+ IDENTITY_DATA, ctx.identifier().getText(), ENTRY, e.getMessage()));
+ }
+ // Push identity node to the stack.
+ listener.getParsedDataStack().push(identity);
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, IDENTITY_DATA,
+ ctx.identifier().getText(), ENTRY));
+ }
+ }
+
+ /**
+ * Performs validations and update the data model tree when parser exits from grammar
+ * rule (identity).
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processIdentityExit(TreeWalkListener listener,
+ IdentityStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_CURRENT_HOLDER, IDENTITY_DATA, ctx.identifier().getText(), EXIT);
+
+ Parsable parsableType = listener.getParsedDataStack().pop();
+ if (!(parsableType instanceof YangIdentity)) {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, IDENTITY_DATA,
+ ctx.identifier().getText(), EXIT));
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/IdentityRefListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/IdentityRefListener.java
new file mode 100644
index 0000000..adcdee1
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/IdentityRefListener.java
@@ -0,0 +1,188 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangIdentityRef;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeIdentifier;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus;
+import org.onosproject.yang.compiler.linker.impl.YangResolutionInfoImpl;
+import org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.IdentityrefSpecificationContext;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.addResolutionInfo;
+import static org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus.UNRESOLVED;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.BASE_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.IDENTITYREF_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidNodeIdentifier;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EMPTY_STRING;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ * <p/>
+ * ABNF grammar as per RFC6020
+ * identityref-specification =
+ * base-stmt stmtsep
+ * base-stmt = base-keyword sep identifier-ref-arg-str
+ * optsep stmtend*
+ * identifier-ref-arg = [prefix ":"] identifier
+ */
+
+/**
+ * Represents listener based call back function corresponding to the
+ * "identityref" rule defined in ANTLR grammar file for corresponding ABNF
+ * rule in RFC 6020.
+ */
+public final class IdentityRefListener {
+
+ // No instantiation.
+ private IdentityRefListener() {
+ }
+
+ /**
+ * Performs validation and updates the data model tree when parser receives an input
+ * matching the grammar rule (identity-ref).
+ *
+ * @param listener listener object
+ * @param ctx context object
+ */
+ public static void processIdentityRefEntry(TreeWalkListener listener,
+ IdentityrefSpecificationContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, IDENTITYREF_DATA,
+ EMPTY_STRING, ENTRY);
+
+ if (!(listener.getParsedDataStack().peek() instanceof YangType)) {
+ throw new ParserException(constructListenerErrorMessage(
+ INVALID_HOLDER, IDENTITYREF_DATA, EMPTY_STRING, ENTRY));
+ }
+
+ YangIdentityRef idRef = new YangIdentityRef();
+ Parsable typeData = listener.getParsedDataStack().pop();
+ YangResolutionInfoImpl<YangIdentityRef> resolutionInfo;
+
+ // Validate node identifier.
+ YangNodeIdentifier nodeId = getValidNodeIdentifier(
+ ctx.baseStatement().string().getText(), BASE_DATA, ctx);
+ idRef.setBaseIdentity(nodeId);
+ ((YangType) typeData).setDataTypeExtendedInfo(idRef);
+
+ int errLine = ctx.getStart().getLine();
+ int errPos = ctx.getStart().getCharPositionInLine();
+
+ idRef.setLineNumber(errLine);
+ idRef.setCharPosition(errPos);
+ idRef.setFileName(listener.getFileName());
+
+ Parsable tmpData = listener.getParsedDataStack().peek();
+ Parsable parentNode;
+ switch (tmpData.getYangConstructType()) {
+
+ case LEAF_DATA:
+ Parsable leaf = listener.getParsedDataStack().pop();
+ parentNode = listener.getParsedDataStack().peek();
+ listener.getParsedDataStack().push(leaf);
+ break;
+
+ case LEAF_LIST_DATA:
+ Parsable leafList = listener.getParsedDataStack().pop();
+ parentNode = listener.getParsedDataStack().peek();
+ listener.getParsedDataStack().push(leafList);
+ break;
+
+ case UNION_DATA:
+ parentNode = listener.getParsedDataStack().peek();
+ break;
+
+ case TYPEDEF_DATA:
+ parentNode = listener.getParsedDataStack().peek();
+ break;
+
+ default:
+ throw new ParserException(
+ constructListenerErrorMessage(INVALID_HOLDER,
+ IDENTITYREF_DATA,
+ ctx.getText(), EXIT));
+ }
+
+ if (!(parentNode instanceof YangNode)) {
+ throw new ParserException(
+ constructListenerErrorMessage(INVALID_HOLDER,
+ IDENTITYREF_DATA,
+ ctx.getText(), EXIT));
+ }
+ idRef.setResolvableStatus(UNRESOLVED);
+ // Adds resolution information to the list
+ resolutionInfo = new YangResolutionInfoImpl<>(
+ idRef, (YangNode) parentNode, errLine, errPos);
+ addToResolution(resolutionInfo, ctx);
+
+ listener.getParsedDataStack().push(typeData);
+ listener.getParsedDataStack().push(idRef);
+ }
+
+ /**
+ * Performs validations and update the data model tree when parser exits
+ * from grammar rule (identity-ref).
+ *
+ * @param listener Listener's object
+ * @param ctx context object
+ */
+ public static void processIdentityRefExit(TreeWalkListener listener,
+ IdentityrefSpecificationContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_CURRENT_HOLDER, IDENTITYREF_DATA,
+ ctx.getText(), EXIT);
+
+ Parsable parsableType = listener.getParsedDataStack().pop();
+ if (!(parsableType instanceof YangIdentityRef)) {
+ throw new ParserException(constructListenerErrorMessage(
+ INVALID_HOLDER, IDENTITYREF_DATA, ctx.getText(), EXIT));
+ }
+ }
+
+ /**
+ * Adds to resolution list.
+ *
+ * @param info resolution info
+ * @param ctx context object
+ */
+ private static void addToResolution(YangResolutionInfoImpl<YangIdentityRef> info,
+ IdentityrefSpecificationContext ctx) {
+ try {
+ addResolutionInfo(info);
+ } catch (DataModelException e) {
+ throw new ParserException(constructExtendedListenerErrorMessage(
+ UNHANDLED_PARSED_DATA, IDENTITYREF_DATA, ctx.getText(),
+ ENTRY, e.getMessage()));
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/IfFeatureListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/IfFeatureListener.java
new file mode 100644
index 0000000..9a56209
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/IfFeatureListener.java
@@ -0,0 +1,147 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ *
+ * if-feature-stmt = if-feature-keyword sep identifier-ref-arg-str
+ * optsep stmtend
+ *
+ * ANTLR grammar rule
+ * ifFeatureStatement : IF_FEATURE_KEYWORD string STMTEND;
+ */
+
+import org.onosproject.yang.compiler.datamodel.YangFeature;
+import org.onosproject.yang.compiler.datamodel.YangIfFeature;
+import org.onosproject.yang.compiler.datamodel.YangIfFeatureHolder;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeIdentifier;
+import org.onosproject.yang.compiler.datamodel.YangResolutionInfo;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.linker.impl.YangResolutionInfoImpl;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.addResolutionInfo;
+import static org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus.UNRESOLVED;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.IF_FEATURE_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.IfFeatureStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidNodeIdentifier;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/**
+ * Represents listener based call back function corresponding to the "if-feature"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class IfFeatureListener {
+
+ /**
+ * Creates a new IfFeature listener.
+ */
+ private IfFeatureListener() {
+ }
+
+ /**
+ * Performs validation and updates the data model tree.It is called when parser receives
+ * an input matching the grammar rule (if-feature).
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processIfFeatureEntry(TreeWalkListener listener,
+ IfFeatureStatementContext ctx) {
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, IF_FEATURE_DATA, ctx.string().getText(), ENTRY);
+
+ // Validate if-feature argument string
+ YangNodeIdentifier nodeIdentifier = getValidNodeIdentifier(ctx.string().getText(),
+ IF_FEATURE_DATA, ctx);
+
+ YangIfFeature ifFeature = new YangIfFeature();
+ ifFeature.setName(nodeIdentifier);
+ ifFeature.setResolvableStatus(UNRESOLVED);
+
+ ifFeature.setLineNumber(ctx.getStart().getLine());
+ ifFeature.setCharPosition(ctx.getStart().getCharPositionInLine());
+ ifFeature.setFileName(listener.getFileName());
+ YangIfFeatureHolder ifFeatureHolder;
+
+ // Obtain the node of the stack.
+ Parsable tmpNode = listener.getParsedDataStack().peek();
+ if (tmpNode instanceof YangIfFeatureHolder) {
+ ifFeatureHolder = (YangIfFeatureHolder) tmpNode;
+ ifFeatureHolder.addIfFeatureList(ifFeature);
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, IF_FEATURE_DATA,
+ ctx.string().getText(), ENTRY));
+ }
+
+ // Add resolution information to the list
+ Parsable parentNode;
+ if (tmpNode instanceof YangLeafList || tmpNode instanceof YangLeaf
+ || tmpNode instanceof YangFeature) {
+ Parsable leafData = listener.getParsedDataStack().pop();
+ parentNode = listener.getParsedDataStack().peek();
+ listener.getParsedDataStack().push(leafData);
+ } else {
+ parentNode = tmpNode;
+ }
+
+ // Verify parent node of leaf
+ if (!(parentNode instanceof YangNode)) {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, IF_FEATURE_DATA,
+ ctx.string().getText(), EXIT));
+ }
+
+ int errorLine = ctx.getStart().getLine();
+ int errorPosition = ctx.getStart().getCharPositionInLine();
+ YangResolutionInfoImpl resolutionInfo = new YangResolutionInfoImpl<YangIfFeature>(ifFeature,
+ (YangNode) parentNode, errorLine,
+ errorPosition);
+ addToResolutionList(resolutionInfo, ctx);
+ }
+
+ /**
+ * Add to resolution list.
+ *
+ * @param resolutionInfo resolution information.
+ * @param ctx context object of the grammar rule
+ */
+ private static void addToResolutionList(YangResolutionInfo<YangIfFeature> resolutionInfo,
+ IfFeatureStatementContext ctx) {
+
+ try {
+ addResolutionInfo(resolutionInfo);
+ } catch (DataModelException e) {
+ throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
+ IF_FEATURE_DATA, ctx.string().getText(), EXIT, e.getMessage()));
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ImportListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ImportListener.java
new file mode 100644
index 0000000..57694f3
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ImportListener.java
@@ -0,0 +1,141 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangImport;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangSubModule;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.IMPORT_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ImportStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * linkage-stmts = ;; these stmts can appear in any order
+ * *(import-stmt stmtsep)
+ * *(include-stmt stmtsep)
+ *
+ * import-stmt = import-keyword sep identifier-arg-str optsep
+ * "{" stmtsep
+ * prefix-stmt stmtsep
+ * [revision-date-stmt stmtsep]
+ * "}"
+ *
+ * ANTLR grammar rule
+ * linkage_stmts : (import_stmt
+ * | include_stmt)*;
+ * import_stmt : IMPORT_KEYWORD identifier LEFT_CURLY_BRACE import_stmt_body
+ * RIGHT_CURLY_BRACE;
+ * import_stmt_body : prefix_stmt revision_date_stmt?;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "import"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class ImportListener {
+
+ /**
+ * Creates a new import listener.
+ */
+ private ImportListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar rule
+ * (import), perform validations and update the data model tree.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processImportEntry(TreeWalkListener listener, ImportStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, IMPORT_DATA, ctx.identifier().getText(), ENTRY);
+
+ String identifier = getValidIdentifier(ctx.identifier().getText(), IMPORT_DATA, ctx);
+
+ YangImport importNode = new YangImport();
+ importNode.setModuleName(identifier);
+
+ // Set the line number and character position in line for the belongs to.
+ int errorLine = ctx.getStart().getLine();
+ int errorPosition = ctx.getStart().getCharPositionInLine();
+ importNode.setLineNumber(errorLine);
+ importNode.setCharPosition(errorPosition);
+ importNode.setFileName(listener.getFileName());
+
+ // Push import node to the stack.
+ listener.getParsedDataStack().push(importNode);
+ }
+
+ /**
+ * It is called when parser exits from grammar rule (import), it perform
+ * validations and update the data model tree.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processImportExit(TreeWalkListener listener, ImportStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, IMPORT_DATA, ctx.identifier().getText(), EXIT);
+
+ Parsable tmpImportNode = listener.getParsedDataStack().peek();
+ if (tmpImportNode instanceof YangImport) {
+ listener.getParsedDataStack().pop();
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, IMPORT_DATA, ctx.identifier().getText(),
+ EXIT);
+
+ Parsable tmpNode = listener.getParsedDataStack().peek();
+ switch (tmpNode.getYangConstructType()) {
+ case MODULE_DATA: {
+ YangModule module = (YangModule) tmpNode;
+ module.addToImportList((YangImport) tmpImportNode);
+ break;
+ }
+ case SUB_MODULE_DATA: {
+ YangSubModule subModule = (YangSubModule) tmpNode;
+ subModule.addToImportList((YangImport) tmpImportNode);
+ break;
+ }
+ default:
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, IMPORT_DATA,
+ ctx.identifier().getText(),
+ EXIT));
+ }
+ } else {
+ throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, IMPORT_DATA,
+ ctx.identifier().getText(), EXIT));
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/IncludeListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/IncludeListener.java
new file mode 100644
index 0000000..773a789
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/IncludeListener.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangInclude;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangSubModule;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.INCLUDE_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.IncludeStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * linkage-stmts = ;; these stmts can appear in any order
+ * *(import-stmt stmtsep)
+ * *(include-stmt stmtsep)
+ *
+ * include-stmt = include-keyword sep identifier-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * [revision-date-stmt stmtsep]
+ * "}")
+ *
+ * ANTLR grammar rule
+ * linkage_stmts : (import_stmt
+ * | include_stmt)*;
+ * include_stmt : INCLUDE_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE
+ * revision_date_stmt? RIGHT_CURLY_BRACE);
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "include"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class IncludeListener {
+
+ /**
+ * Creates a new include listener.
+ */
+ private IncludeListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar rule
+ * (include), perform validations and update the data model tree.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processIncludeEntry(TreeWalkListener listener, IncludeStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, INCLUDE_DATA, ctx.identifier().getText(),
+ ENTRY);
+
+ String identifier = getValidIdentifier(ctx.identifier().getText(), INCLUDE_DATA, ctx);
+
+ YangInclude includeNode = new YangInclude();
+ includeNode.setSubModuleName(identifier);
+
+ // Set the line number and character position in line for the belongs to.
+ int errorLine = ctx.getStart().getLine();
+ int errorPosition = ctx.getStart().getCharPositionInLine();
+ includeNode.setLineNumber(errorLine);
+ includeNode.setCharPosition(errorPosition);
+ includeNode.setFileName(listener.getFileName());
+
+ listener.getParsedDataStack().push(includeNode);
+ }
+
+ /**
+ * It is called when parser exits from grammar rule (include), it perform
+ * validations and update the data model tree.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processIncludeExit(TreeWalkListener listener, IncludeStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, INCLUDE_DATA, ctx.identifier().getText(), EXIT);
+
+ Parsable tmpIncludeNode = listener.getParsedDataStack().peek();
+ if (tmpIncludeNode instanceof YangInclude) {
+ listener.getParsedDataStack().pop();
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, INCLUDE_DATA, ctx.identifier().getText(),
+ EXIT);
+
+ Parsable tmpNode = listener.getParsedDataStack().peek();
+ switch (tmpNode.getYangConstructType()) {
+ case MODULE_DATA: {
+ YangModule module = (YangModule) tmpNode;
+ module.addToIncludeList((YangInclude) tmpIncludeNode);
+ break;
+ }
+ case SUB_MODULE_DATA: {
+ YangSubModule subModule = (YangSubModule) tmpNode;
+ subModule.addToIncludeList((YangInclude) tmpIncludeNode);
+ break;
+ }
+ default:
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, INCLUDE_DATA,
+ ctx.identifier().getText(),
+ EXIT));
+ }
+ } else {
+ throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, INCLUDE_DATA,
+ ctx.identifier().getText(), EXIT));
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/InputListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/InputListener.java
new file mode 100644
index 0000000..a350b18
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/InputListener.java
@@ -0,0 +1,130 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangInput;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangRpc;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.utils.UtilConstants;
+
+import static org.onosproject.yang.compiler.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.INPUT_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.InputStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+import static org.onosproject.yang.compiler.translator.tojava.YangDataModelFactory.getYangInputNode;
+import static org.onosproject.yang.compiler.utils.UtilConstants.INPUT;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ *
+ * input-stmt = input-keyword optsep
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * *((typedef-stmt /
+ * grouping-stmt) stmtsep)
+ * 1*(data-def-stmt stmtsep)
+ * "}"
+ *
+ * inputStatement : INPUT_KEYWORD LEFT_CURLY_BRACE inputStatementBody RIGHT_CURLY_BRACE;
+
+ * inputStatementBody : typedefStatement* dataDefStatement+
+ * | dataDefStatement+ typedefStatement*
+ * | groupingStatement* dataDefStatement+
+ * | dataDefStatement+ groupingStatement*;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "input"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class InputListener {
+
+ /**
+ * Creates a new input listener.
+ */
+ private InputListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar rule
+ * (input), performs validation and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processInputEntry(TreeWalkListener listener,
+ InputStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, INPUT_DATA, "", ENTRY);
+
+ Parsable curData = listener.getParsedDataStack().peek();
+ if (curData instanceof YangRpc) {
+
+ YangInput yangInput = getYangInputNode(JAVA_GENERATION);
+ yangInput.setName(INPUT);
+ yangInput.setLineNumber(ctx.getStart().getLine());
+ yangInput.setCharPosition(ctx.getStart().getCharPositionInLine());
+ yangInput.setFileName(listener.getFileName());
+ YangNode curNode = (YangNode) curData;
+ try {
+ curNode.addChild(yangInput);
+ } catch (DataModelException e) {
+ throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
+ INPUT_DATA, "", ENTRY, e.getMessage()));
+ }
+ listener.getParsedDataStack().push(yangInput);
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, INPUT_DATA,
+ "", ENTRY));
+ }
+ }
+
+ /**
+ * It is called when parser exits from grammar rule (input), it perform
+ * validations and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processInputExit(TreeWalkListener listener,
+ InputStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, INPUT_DATA, "", EXIT);
+
+ if (!(listener.getParsedDataStack().peek() instanceof YangInput)) {
+ throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, INPUT_DATA,
+ "", EXIT));
+ }
+ listener.getParsedDataStack().pop();
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/KeyListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/KeyListener.java
new file mode 100644
index 0000000..5b67812
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/KeyListener.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.KEY_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.KeyStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * key-stmt = key-keyword sep key-arg-str stmtend
+ *
+ * ANTLR grammar rule
+ * keyStatement : KEY_KEYWORD key STMTEND;
+ * key : string;
+ */
+
+/**
+ * Represesnts listener based call back function corresponding to the "key" rule
+ * defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class KeyListener {
+
+ /**
+ * Creates a new key listener.
+ */
+ private KeyListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar rule
+ * (key), perform validations and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processKeyEntry(TreeWalkListener listener,
+ KeyStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, KEY_DATA, ctx.key().getText(), ENTRY);
+
+ Parsable tmpData = listener.getParsedDataStack().peek();
+ if (listener.getParsedDataStack().peek() instanceof YangList) {
+ YangList yangList = (YangList) tmpData;
+ String tmpKeyValue = removeQuotesAndHandleConcat(ctx.key().getText());
+ if (tmpKeyValue.contains(" ")) {
+ String[] keyValues = tmpKeyValue.split(" ");
+ for (String keyValue : keyValues) {
+ try {
+ yangList.addKey(keyValue);
+ } catch (DataModelException e) {
+ throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA, KEY_DATA,
+ ctx.key().getText(), ENTRY, e.getMessage()));
+ }
+ }
+ } else {
+ try {
+ yangList.addKey(tmpKeyValue);
+ } catch (DataModelException e) {
+ throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA, KEY_DATA,
+ ctx.key().getText(), ENTRY, e.getMessage()));
+ }
+ }
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, KEY_DATA, ctx.key().getText(),
+ ENTRY));
+ }
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/LeafListListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/LeafListListener.java
new file mode 100644
index 0000000..75dde98
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/LeafListListener.java
@@ -0,0 +1,181 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangLeavesHolder;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+
+import static org.onosproject.yang.compiler.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.CONFIG_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.DESCRIPTION_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.LEAF_LIST_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.MAX_ELEMENT_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.MIN_ELEMENT_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.REFERENCE_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.STATUS_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.TYPE_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.UNITS_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.LeafListStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.getParentNodeConfig;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.validateCardinalityEqualsOne;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.validateCardinalityMaxOne;
+import static org.onosproject.yang.compiler.translator.tojava.YangDataModelFactory.getYangLeafList;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * leaf-list-stmt = leaf-list-keyword sep identifier-arg-str optsep
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [when-stmt stmtsep]
+ * *(if-feature-stmt stmtsep)
+ * type-stmt stmtsep
+ * [units-stmt stmtsep]
+ * *(must-stmt stmtsep)
+ * [config-stmt stmtsep]
+ * [min-elements-stmt stmtsep]
+ * [max-elements-stmt stmtsep]
+ * [ordered-by-stmt stmtsep]
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * "}"
+ *
+ * ANTLR grammar rule
+ * leafListStatement : LEAF_LIST_KEYWORD identifier LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement |
+ * typeStatement | unitsStatement | mustStatement | configStatement | minElementsStatement | maxElementsStatement |
+ * orderedByStatement | statusStatement | descriptionStatement | referenceStatement)* RIGHT_CURLY_BRACE;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "leaf-list"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class LeafListListener {
+
+ /**
+ * Creates a new leaf list listener.
+ */
+ private LeafListListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar rule
+ * (leaf-list), performs validation and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processLeafListEntry(TreeWalkListener listener,
+ LeafListStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, LEAF_LIST_DATA, ctx.identifier().getText(), ENTRY);
+
+ String identifier = getValidIdentifier(ctx.identifier().getText(), LEAF_LIST_DATA, ctx);
+
+ // Validate sub statement cardinality.
+ validateSubStatementsCardinality(ctx);
+
+ // Check for identifier collision
+ int line = ctx.getStart().getLine();
+ int charPositionInLine = ctx.getStart().getCharPositionInLine();
+ detectCollidingChildUtil(listener, line, charPositionInLine, identifier, LEAF_LIST_DATA);
+
+ YangLeafList leafList = getYangLeafList(JAVA_GENERATION);
+ leafList.setName(identifier);
+ leafList.setLineNumber(line);
+ leafList.setCharPosition(charPositionInLine);
+ leafList.setFileName(listener.getFileName());
+ /*
+ * If "config" is not specified, the default is the same as the parent
+ * schema node's "config" value.
+ */
+ if (ctx.configStatement().isEmpty()) {
+ boolean parentConfig = getParentNodeConfig(listener);
+ leafList.setConfig(parentConfig);
+ }
+
+ Parsable tmpData = listener.getParsedDataStack().peek();
+ YangLeavesHolder leavesHolder;
+
+ if (tmpData instanceof YangLeavesHolder) {
+ leavesHolder = (YangLeavesHolder) tmpData;
+ leavesHolder.addLeafList(leafList);
+ leafList.setContainedIn(leavesHolder);
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LEAF_LIST_DATA,
+ ctx.identifier().getText(), ENTRY));
+ }
+ listener.getParsedDataStack().push(leafList);
+ }
+
+ /**
+ * It is called when parser exits from grammar rule (leaf-list), it performs
+ * validation and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processLeafListExit(TreeWalkListener listener,
+ LeafListStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, LEAF_LIST_DATA, ctx.identifier().getText(), EXIT);
+
+ if (listener.getParsedDataStack().peek() instanceof YangLeafList) {
+ listener.getParsedDataStack().pop();
+ } else {
+ throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, LEAF_LIST_DATA,
+ ctx.identifier().getText(), EXIT));
+ }
+ }
+
+ /**
+ * Validates the cardinality of leaf-list sub-statements as per grammar.
+ *
+ * @param ctx context object of the grammar rule
+ */
+ private static void validateSubStatementsCardinality(LeafListStatementContext ctx) {
+
+ validateCardinalityEqualsOne(ctx.typeStatement(), TYPE_DATA, LEAF_LIST_DATA, ctx.identifier().getText(), ctx);
+ validateCardinalityMaxOne(ctx.unitsStatement(), UNITS_DATA, LEAF_LIST_DATA, ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.configStatement(), CONFIG_DATA, LEAF_LIST_DATA, ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.maxElementsStatement(), MAX_ELEMENT_DATA, LEAF_LIST_DATA,
+ ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.minElementsStatement(), MIN_ELEMENT_DATA, LEAF_LIST_DATA,
+ ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.descriptionStatement(), DESCRIPTION_DATA, LEAF_LIST_DATA,
+ ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.referenceStatement(), REFERENCE_DATA, LEAF_LIST_DATA, ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.statusStatement(), STATUS_DATA, LEAF_LIST_DATA, ctx.identifier().getText());
+ //TODO ordered by
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/LeafListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/LeafListener.java
new file mode 100644
index 0000000..6331361
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/LeafListener.java
@@ -0,0 +1,206 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+/**
+ * Implements listener based call back function corresponding to the "leaf"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeavesHolder;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerCollisionDetector;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation;
+import org.onosproject.yang.compiler.translator.tojava.YangDataModelFactory;
+
+import static org.onosproject.yang.compiler.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.CONFIG_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.DESCRIPTION_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.LEAF_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.MANDATORY_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.REFERENCE_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.STATUS_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.TYPE_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.UNITS_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.LeafStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_CONTENT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.getParentNodeConfig;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.validateCardinalityEqualsOne;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.validateCardinalityMaxOne;
+import static org.onosproject.yang.compiler.translator.tojava.YangDataModelFactory.getYangLeaf;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * leaf-stmt = leaf-keyword sep identifier-arg-str optsep
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [when-stmt stmtsep]
+ * *(if-feature-stmt stmtsep)
+ * type-stmt stmtsep
+ * [units-stmt stmtsep]
+ * *(must-stmt stmtsep)
+ * [default-stmt stmtsep]
+ * [config-stmt stmtsep]
+ * [mandatory-stmt stmtsep]
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * "}"
+ *
+ * ANTLR grammar rule
+ * leafStatement : LEAF_KEYWORD identifier LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | typeStatement |
+ * unitsStatement | mustStatement | defaultStatement | configStatement | mandatoryStatement | statusStatement |
+ * descriptionStatement | referenceStatement)* RIGHT_CURLY_BRACE;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "leaf" rule
+ * defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class LeafListener {
+
+ /**
+ * Creates a new leaf listener.
+ */
+ private LeafListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar rule
+ * (leaf), performs validation and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processLeafEntry(TreeWalkListener listener,
+ LeafStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, LEAF_DATA, ctx.identifier().getText(), ENTRY);
+
+ String identifier = getValidIdentifier(ctx.identifier().getText(), LEAF_DATA, ctx);
+
+ // Validate sub statement cardinality.
+ validateSubStatementsCardinality(ctx);
+
+ // Check for identifier collision
+ int line = ctx.getStart().getLine();
+ int charPositionInLine = ctx.getStart().getCharPositionInLine();
+ detectCollidingChildUtil(listener, line, charPositionInLine, identifier, LEAF_DATA);
+
+ YangLeaf leaf = getYangLeaf(JAVA_GENERATION);
+ leaf.setName(identifier);
+ leaf.setLineNumber(line);
+ leaf.setCharPosition(charPositionInLine);
+ leaf.setFileName(listener.getFileName());
+
+ /*
+ * If "config" is not specified, the default is the same as the parent
+ * schema node's "config" value.
+ */
+ if (ctx.configStatement().isEmpty()) {
+ boolean parentConfig = ListenerValidation.getParentNodeConfig(listener);
+ leaf.setConfig(parentConfig);
+ }
+
+ Parsable tmpData = listener.getParsedDataStack().peek();
+ YangLeavesHolder leavesHolder;
+
+ if (tmpData instanceof YangLeavesHolder) {
+ leavesHolder = (YangLeavesHolder) tmpData;
+ leavesHolder.addLeaf(leaf);
+ leaf.setContainedIn(leavesHolder);
+ if (tmpData instanceof YangList) {
+ YangList list = (YangList) tmpData;
+ if (list.isConfig()) {
+ for (String key : list.getKeyList()) {
+ if (key.equals(leaf.getName())) {
+ leaf.setKeyLeaf(true);
+ }
+ }
+ }
+ }
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LEAF_DATA,
+ ctx.identifier().getText(), ENTRY));
+ }
+
+ listener.getParsedDataStack().push(leaf);
+ }
+
+ /**
+ * It is called when parser exits from grammar rule (leaf), performs
+ * validation and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processLeafExit(TreeWalkListener listener,
+ LeafStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, LEAF_DATA, ctx.identifier().getText(), EXIT);
+
+ if (listener.getParsedDataStack().peek() instanceof YangLeaf) {
+ YangLeaf leafNode = (YangLeaf) listener.getParsedDataStack().peek();
+ try {
+ leafNode.validateDataOnExit();
+ } catch (DataModelException e) {
+ throw new ParserException(constructListenerErrorMessage(INVALID_CONTENT, LEAF_DATA,
+ ctx.identifier().getText(), EXIT));
+ }
+ listener.getParsedDataStack().pop();
+ } else {
+ throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, LEAF_DATA,
+ ctx.identifier().getText(), EXIT));
+ }
+ }
+
+ /**
+ * Validates the cardinality of leaf sub-statements as per grammar.
+ *
+ * @param ctx context object of the grammar rule
+ */
+ private static void validateSubStatementsCardinality(LeafStatementContext ctx) {
+
+ validateCardinalityEqualsOne(ctx.typeStatement(), TYPE_DATA, LEAF_DATA, ctx.identifier().getText(), ctx);
+ validateCardinalityMaxOne(ctx.unitsStatement(), UNITS_DATA, LEAF_DATA, ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.configStatement(), CONFIG_DATA, LEAF_DATA, ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.mandatoryStatement(), MANDATORY_DATA, LEAF_DATA, ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.descriptionStatement(), DESCRIPTION_DATA, LEAF_DATA, ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.referenceStatement(), REFERENCE_DATA, LEAF_DATA, ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.statusStatement(), STATUS_DATA, LEAF_DATA, ctx.identifier().getText());
+ //TODO when.
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/LeafrefListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/LeafrefListener.java
new file mode 100644
index 0000000..4935a8e
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/LeafrefListener.java
@@ -0,0 +1,230 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangLeafRef;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.DataModelUtils;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.linker.impl.YangResolutionInfoImpl;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.addResolutionInfo;
+import static org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus.UNRESOLVED;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.LEAFREF_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.LeafrefSpecificationContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * type-body-stmts = numerical-restrictions /
+ * decimal64-specification /
+ * string-restrictions /
+ * enum-specification /
+ * leafref-specification /
+ * identityref-specification /
+ * instance-identifier-specification /
+ * bits-specification /
+ * union-specification
+ *
+ * leafref-specification =
+ * ;; these stmts can appear in any order
+ * path-stmt stmtsep
+ * [require-instance-stmt stmtsep]
+ *
+ * ANTLR grammar rule
+ *
+ * typeBodyStatements : numericalRestrictions | stringRestrictions | enumSpecification
+ * | leafrefSpecification | identityrefSpecification | instanceIdentifierSpecification
+ * | bitsSpecification | unionSpecification;
+ *
+ * leafrefSpecification : (pathStatement (requireInstanceStatement)?) | ((requireInstanceStatement)? pathStatement);
+ */
+
+/**
+ * Represents listener based call back function corresponding to the
+ * "leafref" rule defined in ANTLR grammar file for corresponding ABNF rule
+ * in RFC 6020.
+ */
+public final class LeafrefListener {
+
+ /**
+ * Creates a new leafref listener.
+ */
+ private LeafrefListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar rule
+ * (leafref), perform validations and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processLeafrefEntry(TreeWalkListener listener,
+ LeafrefSpecificationContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, LEAFREF_DATA, "", ENTRY);
+
+ int errorLine = ctx.getStart().getLine();
+ int errorPosition = ctx.getStart().getCharPositionInLine();
+
+ YangLeafRef<?> leafRef = new YangLeafRef<>();
+
+ leafRef.setLineNumber(errorLine);
+ leafRef.setCharPosition(errorPosition);
+ leafRef.setFileName(listener.getFileName());
+ Parsable typeData = listener.getParsedDataStack().pop();
+
+ if (!(typeData instanceof YangType)) {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LEAFREF_DATA,
+ "", ENTRY));
+ }
+
+ YangType type = (YangType) typeData;
+ type.setDataTypeExtendedInfo(leafRef);
+
+ // Setting by default the value of require-instance as true.
+ leafRef.setRequireInstance(true);
+ Parsable tmpData = listener.getParsedDataStack().peek();
+
+ switch (tmpData.getYangConstructType()) {
+
+ case LEAF_DATA:
+
+ // Parent YANG node of leaf to be added in resolution information.
+ YangLeaf leaf = (YangLeaf) listener.getParsedDataStack().pop();
+ Parsable parentNodeOfLeaf = listener.getParsedDataStack().peek();
+ listener.getParsedDataStack().push(leaf);
+
+ // Verify parent node of leaf.
+ if (!(parentNodeOfLeaf instanceof YangNode)) {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LEAFREF_DATA,
+ "", ENTRY));
+ }
+
+ leafRef.setResolvableStatus(UNRESOLVED);
+ leafRef.setParentNode((YangNode) parentNodeOfLeaf);
+ if (listener.getGroupingDepth() == 0) {
+ // Add resolution information to the list.
+ YangResolutionInfoImpl resolutionInfo = new YangResolutionInfoImpl<YangLeafRef>(leafRef,
+ (YangNode) parentNodeOfLeaf, errorLine, errorPosition);
+ addToResolutionList(resolutionInfo);
+ } else {
+ leafRef.setInGrouping(true);
+ }
+ break;
+
+ case LEAF_LIST_DATA:
+
+ // Parent YANG node of leaf-list to be added in resolution information.
+ YangLeafList leafList = (YangLeafList) listener.getParsedDataStack().pop();
+ Parsable parentNodeOfLeafList = listener.getParsedDataStack().peek();
+ listener.getParsedDataStack().push(leafList);
+
+ // Verify parent node of leaf-list.
+ if (!(parentNodeOfLeafList instanceof YangNode)) {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LEAFREF_DATA,
+ "", ENTRY));
+ }
+
+ leafRef.setResolvableStatus(UNRESOLVED);
+ leafRef.setParentNode((YangNode) parentNodeOfLeafList);
+
+ if (listener.getGroupingDepth() == 0) {
+ // Add resolution information to the list.
+ YangResolutionInfoImpl resolutionInfoImpl = new YangResolutionInfoImpl<YangLeafRef>(leafRef,
+ (YangNode) parentNodeOfLeafList, errorLine, errorPosition);
+ addToResolutionList(resolutionInfoImpl);
+ } else {
+ leafRef.setInGrouping(true);
+ }
+ break;
+
+ case TYPEDEF_DATA:
+ Parsable parentNodeOfLeafref = listener.getParsedDataStack().peek();
+ leafRef.setParentNode((YangNode) parentNodeOfLeafref);
+ if (listener.getGroupingDepth() != 0) {
+ leafRef.setInGrouping(true);
+ }
+ /*
+ * Do not add the leaf ref to resolution list. It needs to be
+ * added to resolution list, when leaf/leaf list references to
+ * this typedef. At this time that leaf/leaf-list becomes the
+ * parent for the leafref.
+ */
+ break;
+
+ default:
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LEAFREF_DATA,
+ "", ENTRY));
+ }
+ listener.getParsedDataStack().push(typeData);
+ listener.getParsedDataStack().push(leafRef);
+ }
+
+ /**
+ * It is called when parser exits from grammar rule (leafref), it performs
+ * validation and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processLeafrefExit(TreeWalkListener listener,
+ LeafrefSpecificationContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_CURRENT_HOLDER, LEAFREF_DATA, "", EXIT);
+
+ Parsable parsableType = listener.getParsedDataStack().pop();
+ if (!(parsableType instanceof YangLeafRef)) {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LEAFREF_DATA,
+ "", EXIT));
+ }
+ }
+
+ /**
+ * Adds to resolution list.
+ *
+ * @param resolutionInfo resolution information
+ */
+ private static void addToResolutionList(YangResolutionInfoImpl resolutionInfo) {
+
+ try {
+ addResolutionInfo(resolutionInfo);
+ } catch (DataModelException e) {
+ throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
+ LEAFREF_DATA, "", ENTRY, e.getMessage()));
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/LengthRestrictionListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/LengthRestrictionListener.java
new file mode 100644
index 0000000..f682a30
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/LengthRestrictionListener.java
@@ -0,0 +1,190 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangDerivedInfo;
+import org.onosproject.yang.compiler.datamodel.YangRangeRestriction;
+import org.onosproject.yang.compiler.datamodel.YangStringRestriction;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation;
+
+import static org.onosproject.yang.compiler.datamodel.utils.RestrictionResolver.processLengthRestriction;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.LENGTH_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.TYPE_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.getYangConstructType;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.BINARY;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.STRING;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * length-stmt = length-keyword sep length-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [error-message-stmt stmtsep]
+ * [error-app-tag-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * "}")
+ *
+ *
+ * ANTLR grammar rule
+ * lengthStatement : LENGTH_KEYWORD length
+ * (STMTEND | LEFT_CURLY_BRACE commonStatements RIGHT_CURLY_BRACE);
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "length"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class LengthRestrictionListener {
+
+ /**
+ * Creates a new length restriction listener.
+ */
+ private LengthRestrictionListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar
+ * rule (length), performs validation and updates the data model
+ * tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processLengthRestrictionEntry(TreeWalkListener listener,
+ GeneratedYangParser.LengthStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, LENGTH_DATA, ctx.length().getText(), ENTRY);
+
+ Parsable tmpData = listener.getParsedDataStack().peek();
+ if (tmpData.getYangConstructType() == TYPE_DATA) {
+ YangType type = (YangType) tmpData;
+ setLengthRestriction(listener, type, ctx);
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LENGTH_DATA,
+ ctx.length().getText(), ENTRY));
+ }
+ }
+
+ /**
+ * Sets the length restriction to type.
+ *
+ * @param listener listener's object
+ * @param type Yang type for which length restriction to be set
+ * @param ctx context object of the grammar rule
+ */
+ private static void setLengthRestriction(TreeWalkListener listener, YangType type,
+ GeneratedYangParser.LengthStatementContext ctx) {
+
+ if (type.getDataType() == DERIVED) {
+ ((YangDerivedInfo<YangRangeRestriction>) type.getDataTypeExtendedInfo())
+ .setLengthRestrictionString(ctx.length().getText());
+ ((YangDerivedInfo<YangRangeRestriction>) type.getDataTypeExtendedInfo())
+ .setLineNumber(ctx.getStart().getLine());
+ ((YangDerivedInfo<YangRangeRestriction>) type.getDataTypeExtendedInfo())
+ .setCharPosition(ctx.getStart().getCharPositionInLine());
+ return;
+ }
+
+ if (type.getDataType() != STRING && type.getDataType() != BINARY) {
+ ParserException parserException =
+ new ParserException(
+ "YANG file error : " +
+ getYangConstructType(LENGTH_DATA) +
+ " name " + ctx.length().getText() +
+ " can be used to restrict the built-in type string/binary" +
+ " or types derived from string/binary.");
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+
+ YangRangeRestriction lengthRestriction = null;
+ try {
+ lengthRestriction = processLengthRestriction(null, ctx.getStart().getLine(),
+ ctx.getStart().getCharPositionInLine(), false, ctx.length
+ ().getText(), listener.getFileName());
+ } catch (DataModelException e) {
+ ParserException parserException = new ParserException(e.getMessage());
+ parserException.setCharPosition(e.getCharPositionInLine());
+ parserException.setLine(e.getLineNumber());
+ throw parserException;
+ }
+
+ if (type.getDataType() == STRING) {
+ YangStringRestriction stringRestriction = (YangStringRestriction) type.getDataTypeExtendedInfo();
+ if (stringRestriction == null) {
+ stringRestriction = new YangStringRestriction();
+ stringRestriction.setFileName(listener.getFileName());
+ stringRestriction.setCharPosition(ctx.getStart().getCharPositionInLine());
+ stringRestriction.setLineNumber(ctx.getStart().getLine());
+ type.setDataTypeExtendedInfo(stringRestriction);
+ }
+
+ stringRestriction.setLengthRestriction(lengthRestriction);
+ } else {
+ type.setDataTypeExtendedInfo(lengthRestriction);
+ }
+
+ listener.getParsedDataStack().push(lengthRestriction);
+ }
+
+ /**
+ * Performs validation and updates the data model tree.
+ * It is called when parser exits from grammar rule (length).
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processLengthRestrictionExit(TreeWalkListener listener,
+ GeneratedYangParser.LengthStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, LENGTH_DATA, ctx.length().getText(), EXIT);
+
+ Parsable tmpData = listener.getParsedDataStack().peek();
+ if (tmpData instanceof YangRangeRestriction) {
+ listener.getParsedDataStack().pop();
+ } else if (tmpData instanceof YangType
+ && ((YangType) tmpData).getDataType() == DERIVED) {
+ // TODO : need to handle in linker
+ } else {
+ throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, LENGTH_DATA,
+ ctx.length().getText(), EXIT));
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ListListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ListListener.java
new file mode 100644
index 0000000..0048c16
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ListListener.java
@@ -0,0 +1,213 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangAugment;
+import org.onosproject.yang.compiler.datamodel.YangCase;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangGrouping;
+import org.onosproject.yang.compiler.datamodel.YangInput;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNotification;
+import org.onosproject.yang.compiler.datamodel.YangOutput;
+import org.onosproject.yang.compiler.datamodel.YangSubModule;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.translator.tojava.YangDataModelFactory;
+
+import static org.onosproject.yang.compiler.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.CONFIG_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.DATA_DEF_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.DESCRIPTION_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.KEY_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.LIST_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.MAX_ELEMENT_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.MIN_ELEMENT_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.REFERENCE_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.STATUS_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ListStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.validateUniqueInList;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.getParentNodeConfig;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.validateCardinalityMaxOne;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.validateCardinalityNonZero;
+import static org.onosproject.yang.compiler.translator.tojava.YangDataModelFactory.getYangListNode;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * list-stmt = list-keyword sep identifier-arg-str optsep
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [when-stmt stmtsep]
+ * *(if-feature-stmt stmtsep)
+ * *(must-stmt stmtsep)
+ * [key-stmt stmtsep]
+ * *(unique-stmt stmtsep)
+ * [config-stmt stmtsep]
+ * [min-elements-stmt stmtsep]
+ * [max-elements-stmt stmtsep]
+ * [ordered-by-stmt stmtsep]
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * *((typedef-stmt /
+ * grouping-stmt) stmtsep)
+ * 1*(data-def-stmt stmtsep)
+ * "}"
+ *
+ * ANTLR grammar rule
+ * listStatement : LIST_KEYWORD identifier LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | mustStatement |
+ * keyStatement | uniqueStatement | configStatement | minElementsStatement | maxElementsStatement |
+ * orderedByStatement | statusStatement | descriptionStatement | referenceStatement | typedefStatement |
+ * groupingStatement| dataDefStatement)* RIGHT_CURLY_BRACE;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "list" rule
+ * defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class ListListener {
+
+ /**
+ * Creates a new list listener.
+ */
+ private ListListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar rule
+ * (list), performs validation and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processListEntry(TreeWalkListener listener,
+ ListStatementContext ctx) {
+
+ YangNode curNode;
+
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, LIST_DATA, ctx.identifier().getText(), ENTRY);
+
+ String identifier = getValidIdentifier(ctx.identifier().getText(), LIST_DATA, ctx);
+
+ // Validate sub statement cardinality.
+ validateSubStatementsCardinality(ctx);
+
+ // Check for identifier collision
+ int line = ctx.getStart().getLine();
+ int charPositionInLine = ctx.getStart().getCharPositionInLine();
+ detectCollidingChildUtil(listener, line, charPositionInLine, identifier, LIST_DATA);
+
+ YangList yangList = getYangListNode(JAVA_GENERATION);
+ yangList.setName(identifier);
+ yangList.setLineNumber(line);
+ yangList.setCharPosition(charPositionInLine);
+ yangList.setFileName(listener.getFileName());
+ /*
+ * If "config" is not specified, the default is the same as the parent
+ * schema node's "config" value.
+ */
+ if (ctx.configStatement().isEmpty()) {
+ boolean parentConfig = getParentNodeConfig(listener);
+ yangList.setConfig(parentConfig);
+ }
+
+ Parsable curData = listener.getParsedDataStack().peek();
+ if (curData instanceof YangModule || curData instanceof YangContainer
+ || curData instanceof YangList || curData instanceof YangCase
+ || curData instanceof YangNotification || curData instanceof YangInput
+ || curData instanceof YangOutput || curData instanceof YangAugment
+ || curData instanceof YangGrouping || curData instanceof YangSubModule) {
+ curNode = (YangNode) curData;
+ try {
+ curNode.addChild(yangList);
+ } catch (DataModelException e) {
+ throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
+ LIST_DATA, ctx.identifier().getText(), ENTRY, e.getMessage()));
+ }
+ listener.getParsedDataStack().push(yangList);
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LIST_DATA,
+ ctx.identifier().getText(), ENTRY));
+ }
+ }
+
+ /**
+ * It is called when parser exits from grammar rule (list), it performs
+ * validation and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processListExit(TreeWalkListener listener,
+ ListStatementContext ctx) {
+
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, LIST_DATA, ctx.identifier().getText(), EXIT);
+
+ if (listener.getParsedDataStack().peek() instanceof YangList) {
+ YangList yangList = (YangList) listener.getParsedDataStack().peek();
+ try {
+ yangList.validateDataOnExit();
+ validateUniqueInList(yangList, ctx);
+ } catch (DataModelException e) {
+ ParserException parserException = new ParserException(constructExtendedListenerErrorMessage(
+ UNHANDLED_PARSED_DATA, LIST_DATA, ctx.identifier().getText(), EXIT, e.getMessage()));
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+ listener.getParsedDataStack().pop();
+ } else {
+ throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, LIST_DATA,
+ ctx.identifier().getText(), EXIT));
+ }
+ }
+
+ /**
+ * Validates the cardinality of list sub-statements as per grammar.
+ *
+ * @param ctx context object of the grammar rule
+ */
+ private static void validateSubStatementsCardinality(ListStatementContext ctx) {
+
+ validateCardinalityMaxOne(ctx.keyStatement(), KEY_DATA, LIST_DATA, ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.configStatement(), CONFIG_DATA, LIST_DATA, ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.maxElementsStatement(), MAX_ELEMENT_DATA, LIST_DATA, ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.minElementsStatement(), MIN_ELEMENT_DATA, LIST_DATA, ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.descriptionStatement(), DESCRIPTION_DATA, LIST_DATA, ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.referenceStatement(), REFERENCE_DATA, LIST_DATA, ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.statusStatement(), STATUS_DATA, LIST_DATA, ctx.identifier().getText());
+ validateCardinalityNonZero(ctx.dataDefStatement(), DATA_DEF_DATA, LIST_DATA, ctx.identifier().getText(), ctx);
+ //TODO when, typedef, grouping, unique
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/MandatoryListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/MandatoryListener.java
new file mode 100644
index 0000000..b711592
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/MandatoryListener.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.MANDATORY_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.MandatoryStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidBooleanValue;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * mandatory-stmt = mandatory-keyword sep
+ * mandatory-arg-str stmtend
+ *
+ * mandatory-arg-str = < a string that matches the rule
+ * mandatory-arg >
+ *
+ * mandatory-arg = true-keyword / false-keyword
+ *
+ * ANTLR grammar rule
+ * mandatoryStatement : MANDATORY_KEYWORD mandatory STMTEND;
+ * mandatory : string;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "mandatory"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class MandatoryListener {
+
+ /**
+ * Creates a new mandatory listener.
+ */
+ private MandatoryListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar
+ * rule (mandatory), performs validation and updates the data model
+ * tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processMandatoryEntry(TreeWalkListener listener,
+ MandatoryStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, MANDATORY_DATA, "", ENTRY);
+
+ boolean isMandatory = getValidBooleanValue(ctx.mandatory().getText(), MANDATORY_DATA, ctx);
+
+ Parsable tmpNode = listener.getParsedDataStack().peek();
+ switch (tmpNode.getYangConstructType()) {
+ case LEAF_DATA:
+ YangLeaf leaf = (YangLeaf) tmpNode;
+ leaf.setMandatory(isMandatory);
+ break;
+ case CHOICE_DATA: // TODO
+ break;
+ default:
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, MANDATORY_DATA, "", ENTRY));
+ }
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/MaxElementsListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/MaxElementsListener.java
new file mode 100644
index 0000000..ee7f1ef
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/MaxElementsListener.java
@@ -0,0 +1,141 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangMaxElement;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.MAX_ELEMENT_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.MaxElementsStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * max-elements-stmt = max-elements-keyword sep
+ * max-value-arg-str stmtend
+ * max-value-arg-str = < a string that matches the rule
+ * max-value-arg >
+ *
+ * ANTLR grammar rule
+ * maxElementsStatement : MAX_ELEMENTS_KEYWORD maxValue STMTEND;
+ * maxValue : string;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the
+ * "max-elements" rule defined in ANTLR grammar file for corresponding ABNF rule
+ * in RFC 6020.
+ */
+public final class MaxElementsListener {
+
+ private static final String POSITIVE_INTEGER_PATTERN = "[1-9][0-9]*";
+ private static final String UNBOUNDED_KEYWORD = "unbounded";
+
+ /**
+ * Creates a new max-elements listener.
+ */
+ private MaxElementsListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar rule
+ * (max-elements), performs validation and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processMaxElementsEntry(TreeWalkListener listener,
+ MaxElementsStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, MAX_ELEMENT_DATA, "", ENTRY);
+
+ int maxElementsValue = getValidMaxElementValue(ctx);
+
+ YangMaxElement maxElement = new YangMaxElement();
+ maxElement.setMaxElement(maxElementsValue);
+
+ maxElement.setLineNumber(ctx.getStart().getLine());
+ maxElement.setCharPosition(ctx.getStart().getCharPositionInLine());
+ maxElement.setFileName(listener.getFileName());
+ Parsable tmpData = listener.getParsedDataStack().peek();
+ switch (tmpData.getYangConstructType()) {
+ case LEAF_LIST_DATA:
+ YangLeafList leafList = (YangLeafList) tmpData;
+ leafList.setMaxElements(maxElement);
+ break;
+ case LIST_DATA:
+ YangList yangList = (YangList) tmpData;
+ yangList.setMaxElements(maxElement);
+ break;
+ default:
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, MAX_ELEMENT_DATA, "", ENTRY));
+ }
+ }
+
+ /**
+ * Validates max element value and returns the value from context.
+ *
+ * @param ctx context object of the grammar rule
+ * @return max element's value
+ */
+ private static int getValidMaxElementValue(MaxElementsStatementContext ctx) {
+
+ int maxElementsValue;
+
+ String value = removeQuotesAndHandleConcat(ctx.maxValue().getText());
+ if (value.equals(UNBOUNDED_KEYWORD)) {
+ maxElementsValue = Integer.MAX_VALUE;
+ } else if (value.matches(POSITIVE_INTEGER_PATTERN)) {
+ try {
+ maxElementsValue = Integer.parseInt(value);
+ } catch (NumberFormatException e) {
+ ParserException parserException = new ParserException("YANG file error : " +
+ YangConstructType.getYangConstructType(
+ MAX_ELEMENT_DATA) + " value " +
+ value + " is not " +
+ "valid.");
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+ } else {
+ ParserException parserException = new ParserException("YANG file error : " +
+ YangConstructType.getYangConstructType(
+ MAX_ELEMENT_DATA) + " value " +
+ value + " is not " +
+ "valid.");
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+
+ return maxElementsValue;
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/MinElementsListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/MinElementsListener.java
new file mode 100644
index 0000000..ed80c4c
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/MinElementsListener.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangMinElement;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.MIN_ELEMENT_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.MinElementsStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidNonNegativeIntegerValue;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * min-elements-stmt = min-elements-keyword sep
+ * min-value-arg-str stmtend
+ * min-value-arg-str = < a string that matches the rule
+ * min-value-arg >
+ * min-value-arg = non-negative-integer-value
+ *
+ * ANTLR grammar rule
+ * minElementsStatement : MIN_ELEMENTS_KEYWORD minValue STMTEND;
+ * minValue : string;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "min-elements"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class MinElementsListener {
+
+ /**
+ * Creates a new min-elements listener.
+ */
+ private MinElementsListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar
+ * rule (min-elements), performs validation and updates the data model
+ * tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processMinElementsEntry(TreeWalkListener listener,
+ MinElementsStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, MIN_ELEMENT_DATA, ctx.minValue().getText(), ENTRY);
+
+ int minElementValue = getValidNonNegativeIntegerValue(ctx.minValue().getText(), MIN_ELEMENT_DATA, ctx);
+
+ YangMinElement minElement = new YangMinElement();
+
+ minElement.setMinElement(minElementValue);
+ minElement.setLineNumber(ctx.getStart().getLine());
+ minElement.setCharPosition(ctx.getStart().getCharPositionInLine());
+ minElement.setFileName(listener.getFileName());
+ Parsable tmpData = listener.getParsedDataStack().peek();
+ switch (tmpData.getYangConstructType()) {
+ case LEAF_LIST_DATA:
+ YangLeafList leafList = (YangLeafList) tmpData;
+ leafList.setMinElements(minElement);
+ break;
+ case LIST_DATA:
+ YangList yangList = (YangList) tmpData;
+ yangList.setMinElements(minElement);
+ break;
+ default:
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, MIN_ELEMENT_DATA,
+ ctx.minValue().getText(), ENTRY));
+ }
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ModuleListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ModuleListener.java
new file mode 100644
index 0000000..346e35c
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ModuleListener.java
@@ -0,0 +1,158 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangReferenceResolver;
+import org.onosproject.yang.compiler.datamodel.YangResolutionInfo;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.linker.exceptions.LinkerException;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+
+import java.util.List;
+
+import static org.onosproject.yang.compiler.datamodel.ResolvableType.YANG_BASE;
+import static org.onosproject.yang.compiler.datamodel.ResolvableType.YANG_COMPILER_ANNOTATION;
+import static org.onosproject.yang.compiler.datamodel.ResolvableType.YANG_DERIVED_DATA_TYPE;
+import static org.onosproject.yang.compiler.datamodel.ResolvableType.YANG_IDENTITYREF;
+import static org.onosproject.yang.compiler.datamodel.ResolvableType.YANG_IF_FEATURE;
+import static org.onosproject.yang.compiler.datamodel.ResolvableType.YANG_LEAFREF;
+import static org.onosproject.yang.compiler.datamodel.ResolvableType.YANG_USES;
+import static org.onosproject.yang.compiler.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.MODULE_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ModuleStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_CHILD;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsEmpty;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+import static org.onosproject.yang.compiler.translator.tojava.YangDataModelFactory.getYangModuleNode;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * module-stmt = optsep module-keyword sep identifier-arg-str
+ * optsep
+ * "{" stmtsep
+ * module-header-stmts
+ * linkage-stmts
+ * meta-stmts
+ * revision-stmts
+ * body-stmts
+ * "}" optsep
+ *
+ * ANTLR grammar rule
+ * module_stmt : MODULE_KEYWORD identifier LEFT_CURLY_BRACE module_body* RIGHT_CURLY_BRACE;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "module"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class ModuleListener {
+
+ /**
+ * Creates a new module listener.
+ */
+ private ModuleListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar rule
+ * (module), perform validations and update the data model tree.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processModuleEntry(TreeWalkListener listener,
+ ModuleStatementContext ctx) {
+
+ // Check if stack is empty.
+ checkStackIsEmpty(listener, INVALID_HOLDER, MODULE_DATA,
+ ctx.identifier().getText(), ENTRY);
+ String identifier = getValidIdentifier(ctx.identifier().getText(),
+ MODULE_DATA, ctx);
+ YangModule yangModule = getYangModuleNode(JAVA_GENERATION);
+ yangModule.setName(identifier);
+ yangModule.setLineNumber(ctx.getStart().getLine());
+ yangModule.setCharPosition(ctx.getStart().getCharPositionInLine());
+ yangModule.setFileName(listener.getFileName());
+
+ if (ctx.moduleBody().moduleHeaderStatement().yangVersionStatement() == null) {
+ yangModule.setVersion((byte) 1);
+ }
+
+ listener.getParsedDataStack().push(yangModule);
+ }
+
+ /**
+ * It is called when parser exits from grammar rule (module), it perform
+ * validations and update the data model tree.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processModuleExit(TreeWalkListener listener,
+ ModuleStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, MODULE_DATA,
+ ctx.identifier().getText(), EXIT);
+ Parsable tmpNode = listener.getParsedDataStack().peek();
+ if (!(tmpNode instanceof YangModule)) {
+ throwError(MISSING_CURRENT_HOLDER, ctx);
+ }
+
+ YangModule module = (YangModule) tmpNode;
+ List<YangResolutionInfo> info = module.getUnresolvedResolutionList(
+ YANG_COMPILER_ANNOTATION);
+ if (info != null && !info.isEmpty() && module.getChild() != null) {
+ throwError(INVALID_CHILD, ctx);
+ }
+ YangReferenceResolver resolver = (YangReferenceResolver) listener
+ .getParsedDataStack().peek();
+ try {
+ resolver.resolveSelfFileLinking(YANG_IF_FEATURE);
+ resolver.resolveSelfFileLinking(YANG_USES);
+ resolver.resolveSelfFileLinking(YANG_DERIVED_DATA_TYPE);
+ resolver.resolveSelfFileLinking(YANG_LEAFREF);
+ resolver.resolveSelfFileLinking(YANG_BASE);
+ resolver.resolveSelfFileLinking(YANG_IDENTITYREF);
+ } catch (DataModelException e) {
+ LinkerException linkerException = new LinkerException(e.getMessage());
+ linkerException.setLine(e.getLineNumber());
+ linkerException.setCharPosition(e.getCharPositionInLine());
+ linkerException.setFileName(listener.getFileName());
+ throw linkerException;
+ }
+ }
+
+ private static void throwError(ListenerErrorType type,
+ ModuleStatementContext ctx) {
+ throw new ParserException(constructListenerErrorMessage(
+ type, MODULE_DATA, ctx.identifier().getText(), EXIT));
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/MustListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/MustListener.java
new file mode 100644
index 0000000..b9e542d
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/MustListener.java
@@ -0,0 +1,122 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangMust;
+import org.onosproject.yang.compiler.datamodel.YangMustHolder;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.MUST_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.MustStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ *
+ * must-stmt = must-keyword sep string optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [error-message-stmt stmtsep]
+ * [error-app-tag-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * "}")
+ *
+ * ANTLR grammar rule
+ * mustStatement : MUST_KEYWORD string (STMTEND | LEFT_CURLY_BRACE commonStatements RIGHT_CURLY_BRACE);
+ */
+
+/**
+ * Represents listener based call back function corresponding to the
+ * "must" rule defined in ANTLR grammar file for corresponding ABNF rule
+ * in RFC 6020.
+ */
+public final class MustListener {
+
+ /**
+ * Creates a new must listener.
+ */
+ private MustListener() {
+ }
+
+ /**
+ * Perform validations and updates the data model tree.It is called when parser
+ * receives an input matching the grammar rule (must).
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processMustEntry(TreeWalkListener listener,
+ MustStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, MUST_DATA, ctx.string().getText(), ENTRY);
+ String constraint = removeQuotesAndHandleConcat(ctx.string().getText());
+
+ // Obtain the node of the stack.
+ Parsable tmpNode = listener.getParsedDataStack().peek();
+ if (tmpNode instanceof YangMustHolder) {
+
+ YangMust must = new YangMust();
+ must.setConstraint(constraint);
+
+ must.setLineNumber(ctx.getStart().getLine());
+ must.setCharPosition(ctx.getStart().getCharPositionInLine());
+ must.setFileName(listener.getFileName());
+ YangMustHolder mustHolder = (YangMustHolder) tmpNode;
+ mustHolder.addMust(must);
+
+ listener.getParsedDataStack().push(must);
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, MUST_DATA,
+ ctx.string().getText(), ENTRY));
+ }
+ }
+
+ /**
+ * Performs validation and updates the data model tree.It is called when parser
+ * exits from grammar rule (must).
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processMustExit(TreeWalkListener listener,
+ MustStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, MUST_DATA, ctx.string().getText(), EXIT);
+
+ if (listener.getParsedDataStack().peek() instanceof YangMust) {
+ listener.getParsedDataStack().pop();
+ } else {
+ throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, MUST_DATA,
+ ctx.string().getText(), EXIT));
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/NamespaceListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/NamespaceListener.java
new file mode 100644
index 0000000..b783c09
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/NamespaceListener.java
@@ -0,0 +1,118 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+
+import java.net.URI;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.NAMESPACE_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.NamespaceStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * module-header-stmts = ;; these stmts can appear in any order
+ * [yang-version-stmt stmtsep]
+ * namespace-stmt stmtsep
+ * prefix-stmt stmtsep
+ *
+ * namespace-stmt = namespace-keyword sep uri-str optsep stmtend
+ *
+ * ANTLR grammar rule
+ * module_header_statement : yang_version_stmt? namespace_stmt prefix_stmt
+ * | yang_version_stmt? prefix_stmt namespace_stmt
+ * | namespace_stmt yang_version_stmt? prefix_stmt
+ * | namespace_stmt prefix_stmt yang_version_stmt?
+ * | prefix_stmt namespace_stmt yang_version_stmt?
+ * | prefix_stmt yang_version_stmt? namespace_stmt
+ * ;
+ * namespace_stmt : NAMESPACE_KEYWORD string STMTEND;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "namespace"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class NamespaceListener {
+
+ /**
+ * Creates a new namespace listener.
+ */
+ private NamespaceListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar rule
+ * (namespace), perform validations and update the data model tree.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processNamespaceEntry(TreeWalkListener listener,
+ NamespaceStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, NAMESPACE_DATA, ctx.string().getText(), ENTRY);
+
+ if (!validateUriValue(ctx.string().getText())) {
+ ParserException parserException = new ParserException("YANG file error: Invalid namespace URI");
+ parserException.setLine(ctx.string().STRING(0).getSymbol().getLine());
+ parserException.setCharPosition(ctx.string().STRING(0).getSymbol().getCharPositionInLine());
+ throw parserException;
+ }
+
+ // Obtain the node of the stack.
+ Parsable tmpNode = listener.getParsedDataStack().peek();
+ switch (tmpNode.getYangConstructType()) {
+ case MODULE_DATA: {
+ YangModule module = (YangModule) tmpNode;
+ module.setModuleNamespace(removeQuotesAndHandleConcat(ctx.string().getText()));
+ break;
+ }
+ default:
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, NAMESPACE_DATA,
+ ctx.string().getText(), ENTRY));
+ }
+ }
+
+ /**
+ * Validate input URI.
+ *
+ * @param uri input namespace URI
+ * @return validation result
+ */
+ private static boolean validateUriValue(String uri) {
+ uri = uri.replace("\"", "");
+ try {
+ URI.create(uri);
+ } catch (Exception e1) {
+ return false;
+ }
+ return true;
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/NotificationListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/NotificationListener.java
new file mode 100644
index 0000000..94bcee4
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/NotificationListener.java
@@ -0,0 +1,171 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.RpcNotificationContainer;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNotification;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+
+import static org.onosproject.yang.compiler.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.DESCRIPTION_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.NOTIFICATION_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.REFERENCE_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.STATUS_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.NotificationStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.validateCardinalityMaxOne;
+import static org.onosproject.yang.compiler.translator.tojava.YangDataModelFactory.getYangNotificationNode;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * notification-stmt = notification-keyword sep
+ * identifier-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * *(if-feature-stmt stmtsep)
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * *((typedef-stmt /
+ * grouping-stmt) stmtsep)
+ * *(data-def-stmt stmtsep)
+ * "}")
+ *
+ * ANTLR grammar rule
+ * notificationStatement : NOTIFICATION_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE (ifFeatureStatement
+ * | statusStatement | descriptionStatement | referenceStatement | typedefStatement
+ * | groupingStatement | dataDefStatement)* RIGHT_CURLY_BRACE);
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "notification"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class NotificationListener {
+
+ /**
+ * Creates a new notification listener.
+ */
+ private NotificationListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar rule
+ * (notification), performs validation and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processNotificationEntry(TreeWalkListener listener,
+ NotificationStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, NOTIFICATION_DATA,
+ ctx.identifier().getText(), ENTRY);
+
+ String identifier = getValidIdentifier(ctx.identifier().getText(),
+ NOTIFICATION_DATA, ctx);
+
+ // Validate sub statement cardinality.
+ validateSubStatementsCardinality(ctx);
+
+ // Check for identifier collision
+ int line = ctx.getStart().getLine();
+ int charPositionInLine = ctx.getStart().getCharPositionInLine();
+ detectCollidingChildUtil(listener, line, charPositionInLine, identifier,
+ NOTIFICATION_DATA);
+
+ Parsable curData = listener.getParsedDataStack().peek();
+ if (curData instanceof RpcNotificationContainer) {
+
+ YangNotification notification = getYangNotificationNode(JAVA_GENERATION);
+ notification.setName(identifier);
+
+ notification.setLineNumber(ctx.getStart().getLine());
+ notification.setCharPosition(ctx.getStart().getCharPositionInLine());
+ notification.setFileName(listener.getFileName());
+ ((RpcNotificationContainer) curData).setNotificationPresenceFlag(true);
+ YangNode curNode = (YangNode) curData;
+ try {
+ curNode.addChild(notification);
+ } catch (DataModelException e) {
+ throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
+ NOTIFICATION_DATA, ctx.identifier().getText(), ENTRY, e.getMessage()));
+ }
+ listener.getParsedDataStack().push(notification);
+ } else {
+ throw new ParserException(constructListenerErrorMessage(ListenerErrorType.INVALID_HOLDER, NOTIFICATION_DATA,
+ ctx.identifier().getText(), ENTRY));
+ }
+ }
+
+ /**
+ * It is called when parser exits from grammar rule (notification), it perform
+ * validations and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processNotificationExit(TreeWalkListener listener,
+ NotificationStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, NOTIFICATION_DATA,
+ ctx.identifier().getText(), EXIT);
+
+ if (listener.getParsedDataStack().peek() instanceof YangNotification) {
+ listener.getParsedDataStack().pop();
+ } else {
+ throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, NOTIFICATION_DATA,
+ ctx.identifier().getText(), EXIT));
+ }
+ }
+
+ /**
+ * Validates the cardinality of notification sub-statements as per grammar.
+ *
+ * @param ctx context object of the grammar rule
+ */
+ private static void validateSubStatementsCardinality(NotificationStatementContext ctx) {
+
+ validateCardinalityMaxOne(ctx.statusStatement(), STATUS_DATA,
+ NOTIFICATION_DATA, ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.descriptionStatement(),
+ DESCRIPTION_DATA, NOTIFICATION_DATA,
+ ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.referenceStatement(), REFERENCE_DATA,
+ NOTIFICATION_DATA,
+ ctx.identifier().getText());
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/OrganizationListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/OrganizationListener.java
new file mode 100644
index 0000000..9fc259f
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/OrganizationListener.java
@@ -0,0 +1,119 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangSubModule;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.ORGANIZATION_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.OrganizationStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * meta-stmts = ;; these stmts can appear in any order
+ * [organization-stmt stmtsep]
+ * [contact-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * organization-stmt = organization-keyword sep string
+ * optsep stmtend
+ *
+ * ANTLR grammar rule
+ * meta_stmts : organization_stmt? contact_stmt? description_stmt? reference_stmt?
+ * | organization_stmt? contact_stmt? reference_stmt? description_stmt?
+ * | organization_stmt? description_stmt? contact_stmt? reference_stmt?
+ * | organization_stmt? description_stmt? reference_stmt? contact_stmt?
+ * | organization_stmt? reference_stmt? contact_stmt? description_stmt?
+ * | organization_stmt? reference_stmt? description_stmt? contact_stmt?
+ * | contact_stmt? organization_stmt? description_stmt? reference_stmt?
+ * | contact_stmt? organization_stmt? reference_stmt? description_stmt?
+ * | contact_stmt? reference_stmt? organization_stmt? description_stmt?
+ * | contact_stmt? reference_stmt? description_stmt? organization_stmt?
+ * | contact_stmt? description_stmt? reference_stmt? organization_stmt?
+ * | contact_stmt? description_stmt? organization_stmt? reference_stmt?
+ * | reference_stmt? contact_stmt? organization_stmt? description_stmt?
+ * | reference_stmt? contact_stmt? description_stmt? organization_stmt?
+ * | reference_stmt? organization_stmt? contact_stmt? description_stmt?
+ * | reference_stmt? organization_stmt? description_stmt? contact_stmt?
+ * | reference_stmt? description_stmt? organization_stmt? contact_stmt?
+ * | reference_stmt? description_stmt? contact_stmt? organization_stmt?
+ * | description_stmt? reference_stmt? contact_stmt? organization_stmt?
+ * | description_stmt? reference_stmt? organization_stmt? contact_stmt?
+ * | description_stmt? contact_stmt? reference_stmt? organization_stmt?
+ * | description_stmt? contact_stmt? organization_stmt? reference_stmt?
+ * | description_stmt? organization_stmt? contact_stmt? reference_stmt?
+ * | description_stmt? organization_stmt? reference_stmt? contact_stmt?
+ * ;
+ * organization_stmt : ORGANIZATION_KEYWORD string STMTEND;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the
+ * "organization" rule defined in ANTLR grammar file for corresponding ABNF rule
+ * in RFC 6020.
+ */
+public final class OrganizationListener {
+
+ /**
+ * Creates a new organization listener.
+ */
+ private OrganizationListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar rule
+ * (organization), perform validations and update the data model tree.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processOrganizationEntry(TreeWalkListener listener,
+ OrganizationStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, ORGANIZATION_DATA, ctx.string().getText(),
+ ENTRY);
+
+ // Obtain the node of the stack.
+ Parsable tmpNode = listener.getParsedDataStack().peek();
+ switch (tmpNode.getYangConstructType()) {
+ case MODULE_DATA: {
+ YangModule module = (YangModule) tmpNode;
+ module.setOrganization(ctx.string().getText());
+ break;
+ }
+ case SUB_MODULE_DATA: {
+ YangSubModule subModule = (YangSubModule) tmpNode;
+ subModule.setOrganization(ctx.string().getText());
+ break;
+ }
+ default:
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, ORGANIZATION_DATA,
+ ctx.string().getText(), ENTRY));
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/OutputListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/OutputListener.java
new file mode 100644
index 0000000..ae240b4
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/OutputListener.java
@@ -0,0 +1,130 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangOutput;
+import org.onosproject.yang.compiler.datamodel.YangRpc;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.utils.UtilConstants;
+
+import static org.onosproject.yang.compiler.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.OUTPUT_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.OutputStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+import static org.onosproject.yang.compiler.translator.tojava.YangDataModelFactory.getYangOutputNode;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OUTPUT;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ *
+ * output-stmt = output-keyword optsep
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * *((typedef-stmt /
+ * grouping-stmt) stmtsep)
+ * 1*(data-def-stmt stmtsep)
+ * "}"
+ *
+ * outputStatement : OUTPUT_KEYWORD LEFT_CURLY_BRACE outputStatementBody RIGHT_CURLY_BRACE;
+
+ * outputStatementBody : typedefStatement* dataDefStatement+
+ * | dataDefStatement+ typedefStatement*
+ * | groupingStatement* dataDefStatement+
+ * | dataDefStatement+ groupingStatement*;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "output"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class OutputListener {
+
+ /**
+ * Creates a new output listener.
+ */
+ private OutputListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar rule
+ * (output), performs validation and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processOutputEntry(TreeWalkListener listener,
+ OutputStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, OUTPUT_DATA, "", ENTRY);
+
+ Parsable curData = listener.getParsedDataStack().peek();
+ if (curData instanceof YangRpc) {
+
+ YangOutput yangOutput = getYangOutputNode(JAVA_GENERATION);
+ yangOutput.setName(OUTPUT);
+ yangOutput.setLineNumber(ctx.getStart().getLine());
+ yangOutput.setCharPosition(ctx.getStart().getCharPositionInLine());
+ yangOutput.setFileName(listener.getFileName());
+ YangNode curNode = (YangNode) curData;
+ try {
+ curNode.addChild(yangOutput);
+ } catch (DataModelException e) {
+ throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
+ OUTPUT_DATA, "", ENTRY, e.getMessage()));
+ }
+ listener.getParsedDataStack().push(yangOutput);
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, OUTPUT_DATA,
+ "", ENTRY));
+ }
+ }
+
+ /**
+ * It is called when parser exits from grammar rule (output), it perform
+ * validations and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processOutputExit(TreeWalkListener listener,
+ OutputStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, OUTPUT_DATA, "", EXIT);
+
+ if (!(listener.getParsedDataStack().peek() instanceof YangOutput)) {
+ throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, OUTPUT_DATA,
+ "", EXIT));
+ }
+ listener.getParsedDataStack().pop();
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/PathListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/PathListener.java
new file mode 100644
index 0000000..c1e8b7c
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/PathListener.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangLeafRef;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.PathStatementContext;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.PATH_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.validatePath;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * leafref-specification =
+ * ;; these stmts can appear in any order
+ * path-stmt stmtsep
+ * [require-instance-stmt stmtsep]
+ *
+ * path-stmt = path-keyword sep path-arg-str stmtend
+ *
+ * ANTLR grammar rule
+ *
+ * leafrefSpecification : (pathStatement (requireInstanceStatement)?) |
+ * ((requireInstanceStatement)? pathStatement);
+ *
+ * pathStatement : PATH_KEYWORD path STMTEND;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the
+ * "path" rule defined in ANTLR grammar file for corresponding ABNF rule
+ * in RFC 6020.
+ */
+public final class PathListener {
+
+ // No instantiation.
+ private PathListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar rule
+ * (path), performs validation and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processPathEntry(TreeWalkListener listener,
+ PathStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, PATH_DATA,
+ ctx.path().getText(), ENTRY);
+
+ Parsable curData = listener.getParsedDataStack().peek();
+
+ // Checks the holder of path as leaf-ref, else throws error.
+ if (curData instanceof YangLeafRef) {
+ // Parsing the path and updating in leaf-ref path.
+ validatePath(ctx.path().getText(), PATH_DATA, ctx,
+ (YangLeafRef) curData);
+ } else {
+ throw new ParserException(
+ constructListenerErrorMessage(INVALID_HOLDER, PATH_DATA,
+ ctx.path().getText(), ENTRY));
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/PatternRestrictionListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/PatternRestrictionListener.java
new file mode 100644
index 0000000..c522c4b
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/PatternRestrictionListener.java
@@ -0,0 +1,203 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.antlr.v4.runtime.tree.TerminalNode;
+import org.onosproject.yang.compiler.datamodel.YangDerivedInfo;
+import org.onosproject.yang.compiler.datamodel.YangPatternRestriction;
+import org.onosproject.yang.compiler.datamodel.YangStringRestriction;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+
+import java.util.List;
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.PATTERN_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.TYPE_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.getYangConstructType;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.PatternStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * pattern-stmt = pattern-keyword sep string optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [error-message-stmt stmtsep]
+ * [error-app-tag-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * "}")
+ *
+ * ANTLR grammar rule
+ * patternStatement : PATTERN_KEYWORD string (STMTEND | LEFT_CURLY_BRACE commonStatements RIGHT_CURLY_BRACE);
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "pattern"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class PatternRestrictionListener {
+
+ private static final String EMPTY_STRING = "";
+
+ /**
+ * Creates a new pattern restriction listener.
+ */
+ private PatternRestrictionListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar
+ * rule (pattern), performs validation and updates the data model
+ * tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processPatternRestrictionEntry(TreeWalkListener listener,
+ PatternStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, PATTERN_DATA, ctx.string().getText(), ENTRY);
+
+ Parsable tmpData = listener.getParsedDataStack().peek();
+ if (tmpData.getYangConstructType() == TYPE_DATA) {
+ YangType type = (YangType) tmpData;
+ setPatternRestriction(listener, type, ctx);
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, PATTERN_DATA,
+ ctx.string().getText(), ENTRY));
+ }
+ }
+
+ /**
+ * Sets the pattern restriction to type.
+ *
+ * @param listener listener's object
+ * @param type Yang type for which pattern restriction to be set
+ * @param ctx context object of the grammar rule
+ */
+ private static void setPatternRestriction(TreeWalkListener listener, YangType type,
+ PatternStatementContext ctx) {
+
+ if (type.getDataType() != YangDataTypes.STRING && type.getDataType() != YangDataTypes.DERIVED) {
+
+ ParserException parserException = new ParserException("YANG file error : " +
+ getYangConstructType(PATTERN_DATA) + " name " + ctx.string().getText() +
+ " can be used to restrict the built-in type string or types derived from string.");
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+
+ // Validate and get valid pattern restriction string.
+ String patternArgument = getValidPattern(ctx);
+
+ if (type.getDataType() == YangDataTypes.STRING) {
+ YangStringRestriction stringRestriction = (YangStringRestriction) type.getDataTypeExtendedInfo();
+ if (stringRestriction == null) {
+ stringRestriction = new YangStringRestriction();
+ stringRestriction.setFileName(listener.getFileName());
+ stringRestriction.setCharPosition(ctx.getStart().getCharPositionInLine());
+ stringRestriction.setLineNumber(ctx.getStart().getLine());
+ type.setDataTypeExtendedInfo(stringRestriction);
+ stringRestriction.addPattern(patternArgument);
+ } else {
+ stringRestriction.addPattern(patternArgument);
+ }
+ listener.getParsedDataStack().push(stringRestriction);
+ } else {
+ YangPatternRestriction patternRestriction = ((YangDerivedInfo<?>) type
+ .getDataTypeExtendedInfo()).getPatternRestriction();
+ if (patternRestriction == null) {
+ patternRestriction = new YangPatternRestriction();
+ ((YangDerivedInfo<?>) type.getDataTypeExtendedInfo()).setPatternRestriction(patternRestriction);
+ patternRestriction.addPattern(patternArgument);
+ } else {
+ ((YangDerivedInfo<?>) type.getDataTypeExtendedInfo()).setPatternRestriction(patternRestriction);
+ patternRestriction.addPattern(patternArgument);
+ }
+ }
+ }
+
+ /**
+ * Performs validation and updates the data model tree.
+ * It is called when parser exits from grammar rule (pattern).
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processPatternRestrictionExit(TreeWalkListener listener,
+ PatternStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, PATTERN_DATA, ctx.string().getText(), EXIT);
+
+ Parsable tmpData = listener.getParsedDataStack().peek();
+ if (tmpData instanceof YangStringRestriction) {
+ listener.getParsedDataStack().pop();
+ } else if (tmpData instanceof YangType
+ && ((YangType) tmpData).getDataType() == DERIVED) {
+ // TODO : need to handle in linker
+ } else {
+ throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, PATTERN_DATA,
+ ctx.string().getText(), EXIT));
+ }
+ }
+
+ /**
+ * Validates and return the valid pattern.
+ *
+ * @param ctx context object of the grammar rule
+ * @return validated string
+ */
+ private static String getValidPattern(PatternStatementContext ctx) {
+ List<TerminalNode> patternList = ctx.string().STRING();
+ StringBuilder userInputPattern = new StringBuilder();
+ String compile;
+ for (TerminalNode pattern : patternList) {
+ userInputPattern.append(pattern.getText());
+ }
+ compile = userInputPattern.toString().replaceAll("[\'\"]", EMPTY_STRING);
+ try {
+ Pattern.compile(compile);
+ } catch (PatternSyntaxException exception) {
+ ParserException parserException = new ParserException("YANG file error : " +
+ getYangConstructType(PATTERN_DATA) + " name " + ctx.string().getText() +
+ " is not a valid regular expression");
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+ return compile;
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/PositionListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/PositionListener.java
new file mode 100644
index 0000000..a29d3a0
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/PositionListener.java
@@ -0,0 +1,130 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * position-stmt = position-keyword sep
+ * position-value-arg-str stmtend
+ * position-value-arg-str = < a string that matches the rule
+ * position-value-arg >
+ * position-value-arg = non-negative-integer-value
+ * non-negative-integer-value = "0" / positive-integer-value
+ * positive-integer-value = (non-zero-digit *DIGIT)
+ * zero-integer-value = 1*DIGIT
+ *
+ * ANTLR grammar rule
+ * positionStatement : POSITION_KEYWORD position STMTEND;
+ * position : string;
+ */
+
+import org.onosproject.yang.compiler.datamodel.YangBit;
+import org.onosproject.yang.compiler.datamodel.YangBits;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.POSITION_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.PositionStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidNonNegativeIntegerValue;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/**
+ * Represents listener based call back function corresponding to the "position"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class PositionListener {
+
+ /**
+ * Creates a new position listener.
+ */
+ private PositionListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar rule
+ * (position), perform validations and update the data model tree.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processPositionEntry(TreeWalkListener listener,
+ PositionStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, POSITION_DATA, ctx.position().getText(), ENTRY);
+
+ // Obtain the node of the stack.
+ Parsable tmpNode = listener.getParsedDataStack().peek();
+ switch (tmpNode.getYangConstructType()) {
+ case BIT_DATA: {
+ YangBit bitNode = (YangBit) tmpNode;
+ int positionValue = getValidBitPosition(listener, ctx);
+ bitNode.setPosition(positionValue);
+ break;
+ }
+ default:
+ throw new ParserException(
+ constructListenerErrorMessage(INVALID_HOLDER, POSITION_DATA, ctx.position().getText(), ENTRY));
+ }
+ }
+
+ /**
+ * Validates BITS position value correctness and uniqueness.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ * @return position value
+ */
+ private static int getValidBitPosition(TreeWalkListener listener,
+ PositionStatementContext ctx) {
+ Parsable bitNode = listener.getParsedDataStack().pop();
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, POSITION_DATA, ctx.position().getText(), ENTRY);
+
+ int positionValue = getValidNonNegativeIntegerValue(ctx.position().getText(), POSITION_DATA, ctx);
+
+ Parsable tmpNode = listener.getParsedDataStack().peek();
+ switch (tmpNode.getYangConstructType()) {
+ case BITS_DATA: {
+ YangBits yangBits = (YangBits) tmpNode;
+ listener.getParsedDataStack().push(bitNode);
+ if (yangBits.isBitPositionExists(positionValue)) {
+ ParserException parserException = new ParserException("YANG file error: Duplicate value of " +
+ "position is invalid.");
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+ return positionValue;
+ }
+ default:
+ listener.getParsedDataStack().push(bitNode);
+ throw new ParserException(
+ constructListenerErrorMessage(INVALID_HOLDER, POSITION_DATA, ctx.position().getText(), ENTRY));
+ }
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/PrefixListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/PrefixListener.java
new file mode 100644
index 0000000..5aadc65
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/PrefixListener.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangBelongsTo;
+import org.onosproject.yang.compiler.datamodel.YangImport;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.PREFIX_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.PrefixStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * module-header-stmts = ;; these stmts can appear in any order
+ * [yang-version-stmt stmtsep]
+ * namespace-stmt stmtsep
+ * prefix-stmt stmtsep
+ *
+ * prefix-stmt = prefix-keyword sep prefix-arg-str
+ * optsep stmtend
+ *
+ * ANTLR grammar rule
+ * module_header_statement : yang_version_stmt? namespace_stmt prefix_stmt
+ * | yang_version_stmt? prefix_stmt namespace_stmt
+ * | namespace_stmt yang_version_stmt? prefix_stmt
+ * | namespace_stmt prefix_stmt yang_version_stmt?
+ * | prefix_stmt namespace_stmt yang_version_stmt?
+ * | prefix_stmt yang_version_stmt? namespace_stmt
+ * ;
+ * prefix_stmt : PREFIX_KEYWORD identifier STMTEND;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "prefix"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class PrefixListener {
+
+ /**
+ * Creates a new prefix listener.
+ */
+ private PrefixListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar rule
+ * (prefix),perform validations and update the data model tree.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processPrefixEntry(TreeWalkListener listener, PrefixStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, PREFIX_DATA, ctx.identifier().getText(), ENTRY);
+
+ String identifier = getValidIdentifier(ctx.identifier().getText(), PREFIX_DATA, ctx);
+
+ // Obtain the node of the stack.
+ Parsable tmpNode = listener.getParsedDataStack().peek();
+ switch (tmpNode.getYangConstructType()) {
+ case MODULE_DATA: {
+ YangModule module = (YangModule) tmpNode;
+ module.setPrefix(identifier);
+ break;
+ }
+ case IMPORT_DATA: {
+ YangImport importNode = (YangImport) tmpNode;
+ importNode.setPrefixId(identifier);
+ break;
+ }
+ case BELONGS_TO_DATA: {
+ YangBelongsTo belongstoNode = (YangBelongsTo) tmpNode;
+ belongstoNode.setPrefix(identifier);
+ break;
+ }
+ default:
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, PREFIX_DATA,
+ ctx.identifier().getText(), ENTRY));
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/PresenceListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/PresenceListener.java
new file mode 100644
index 0000000..27b9061
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/PresenceListener.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.CONTAINER_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.PRESENCE_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.PresenceStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * presence-stmt = presence-keyword sep string stmtend
+ *
+ * ANTLR grammar rule
+ * presenceStatement : PRESENCE_KEYWORD string STMTEND;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "presence"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class PresenceListener {
+
+ /**
+ * Creates a new presence listener.
+ */
+ private PresenceListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar
+ * rule (presence), performs validation and updates the data model
+ * tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processPresenceEntry(TreeWalkListener listener,
+ PresenceStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, PRESENCE_DATA, ctx.string().getText(), ENTRY);
+
+ Parsable tmpData = listener.getParsedDataStack().peek();
+ if (tmpData.getYangConstructType() == CONTAINER_DATA) {
+ YangContainer container = (YangContainer) tmpData;
+ container.setPresence(ctx.string().getText());
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, PRESENCE_DATA,
+ ctx.string().getText(), ENTRY));
+ }
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/RangeRestrictionListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/RangeRestrictionListener.java
new file mode 100644
index 0000000..418482f
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/RangeRestrictionListener.java
@@ -0,0 +1,186 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangDecimal64;
+import org.onosproject.yang.compiler.datamodel.YangDerivedInfo;
+import org.onosproject.yang.compiler.datamodel.YangRangeRestriction;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+
+import static org.onosproject.yang.compiler.datamodel.utils.RestrictionResolver.processRangeRestriction;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.RANGE_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.TYPE_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypeUtils.isOfRangeRestrictedType;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.DECIMAL64;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RangeStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * range-stmt = range-keyword sep range-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [error-message-stmt stmtsep]
+ * [error-app-tag-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * "}")
+ *
+ * ANTLR grammar rule
+ * rangeStatement : RANGE_KEYWORD range (STMTEND | LEFT_CURLY_BRACE commonStatements RIGHT_CURLY_BRACE);
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "range"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class RangeRestrictionListener {
+
+ /**
+ * Creates a new range restriction listener.
+ */
+ private RangeRestrictionListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar
+ * rule (range), performs validation and updates the data model
+ * tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processRangeRestrictionEntry(TreeWalkListener listener,
+ RangeStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, RANGE_DATA, ctx.range().getText(), ENTRY);
+
+ Parsable tmpData = listener.getParsedDataStack().peek();
+ if (tmpData.getYangConstructType() == TYPE_DATA) {
+ YangType type = (YangType) tmpData;
+ setRangeRestriction(listener, type, ctx);
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, RANGE_DATA,
+ ctx.range().getText(), ENTRY));
+ }
+ }
+
+ /**
+ * Sets the range restriction to type.
+ *
+ * @param listener listener's object
+ * @param type YANG type for which range restriction to be added
+ * @param ctx context object of the grammar rule
+ */
+ private static void setRangeRestriction(TreeWalkListener listener, YangType type,
+ RangeStatementContext ctx) {
+
+ if (type.getDataType() == DERIVED) {
+ ((YangDerivedInfo<YangRangeRestriction>) type.getDataTypeExtendedInfo())
+ .setRangeRestrictionString(ctx.range().getText());
+ ((YangDerivedInfo<YangRangeRestriction>) type.getDataTypeExtendedInfo())
+ .setLineNumber(ctx.getStart().getLine());
+ ((YangDerivedInfo<YangRangeRestriction>) type.getDataTypeExtendedInfo())
+ .setCharPosition(ctx.getStart().getCharPositionInLine());
+ return;
+ }
+
+ if (!(isOfRangeRestrictedType(type.getDataType())) && (type.getDataType() != DECIMAL64)) {
+ ParserException parserException = new ParserException("YANG file error: Range restriction can't be " +
+ "applied to a given type");
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+
+ YangRangeRestriction rangeRestriction = null;
+ try {
+ if (type.getDataType() == DECIMAL64) {
+ YangDecimal64 yangDecimal64 = (YangDecimal64) type.getDataTypeExtendedInfo();
+ rangeRestriction =
+ processRangeRestriction(yangDecimal64.getDefaultRangeRestriction(),
+ ctx.getStart().getLine(),
+ ctx.getStart().getCharPositionInLine(),
+ true, ctx.range().getText(),
+ type.getDataType(), listener.getFileName());
+ } else {
+ rangeRestriction =
+ processRangeRestriction(null, ctx.getStart().getLine(),
+ ctx.getStart().getCharPositionInLine(),
+ false, ctx.range()
+ .getText(), type
+ .getDataType(),
+ listener.getFileName());
+ }
+ } catch (DataModelException e) {
+ ParserException parserException = new ParserException(e.getMessage());
+ parserException.setCharPosition(e.getCharPositionInLine());
+ parserException.setLine(e.getLineNumber());
+ throw parserException;
+ }
+
+ if (rangeRestriction != null) {
+ if (type.getDataType() == DECIMAL64) {
+ ((YangDecimal64<YangRangeRestriction>) type.getDataTypeExtendedInfo())
+ .setRangeRestrictedExtendedInfo(rangeRestriction);
+ } else {
+ type.setDataTypeExtendedInfo(rangeRestriction);
+ }
+ }
+ listener.getParsedDataStack().push(rangeRestriction);
+ }
+
+ /**
+ * Performs validation and updates the data model tree.
+ * It is called when parser exits from grammar rule (range).
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processRangeRestrictionExit(TreeWalkListener listener,
+ RangeStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, RANGE_DATA, ctx.range().getText(), EXIT);
+
+ Parsable tmpData = listener.getParsedDataStack().peek();
+ if (tmpData instanceof YangRangeRestriction) {
+ listener.getParsedDataStack().pop();
+ } else if (tmpData instanceof YangType
+ && ((YangType) tmpData).getDataType() == DERIVED) {
+ // TODO : need to handle in linker
+ } else {
+ throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, RANGE_DATA,
+ ctx.range().getText(), EXIT));
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ReferenceListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ReferenceListener.java
new file mode 100644
index 0000000..877ad35
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ReferenceListener.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangReference;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.REFERENCE_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ReferenceStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * reference-stmt = reference-keyword sep string optsep stmtend
+ *
+ * ANTLR grammar rule
+ * referenceStatement : REFERENCE_KEYWORD string STMTEND;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "reference"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class ReferenceListener {
+
+ /**
+ * Creates a new reference listener.
+ */
+ private ReferenceListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar
+ * rule (reference), performs validation and updates the data model
+ * tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processReferenceEntry(TreeWalkListener listener,
+ ReferenceStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, REFERENCE_DATA, ctx.string().getText(), ENTRY);
+
+ Parsable tmpData = listener.getParsedDataStack().peek();
+ if (tmpData instanceof YangReference) {
+ YangReference reference = (YangReference) tmpData;
+ reference.setReference(ctx.string().getText());
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, REFERENCE_DATA,
+ ctx.string().getText(), ENTRY));
+ }
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/RequireInstanceListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/RequireInstanceListener.java
new file mode 100644
index 0000000..c83623a
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/RequireInstanceListener.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangLeafRef;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.REQUIRE_INSTANCE_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.INSTANCE_IDENTIFIER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidBooleanValue;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * require-instance-stmt = require-instance-keyword sep
+ * require-instance-arg-str stmtend
+ *
+ * require-instance-arg-str = < a string that matches the rule
+ * require-instance-arg >
+ *
+ * require-instance-arg = true-keyword / false-keyword
+ *
+ * ANTLR grammar rule
+ *
+ * requireInstanceStatement : REQUIRE_INSTANCE_KEYWORD requireInstance STMTEND;
+ *
+ * requireInstance : string;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the
+ * "require-instance" rule defined in ANTLR grammar file for corresponding ABNF rule
+ * in RFC 6020.
+ */
+public final class RequireInstanceListener {
+
+ /**
+ * Creates a new require instance listener.
+ */
+ private RequireInstanceListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar rule
+ * (require-instance), performs validation and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processRequireInstanceEntry(TreeWalkListener listener,
+ GeneratedYangParser.RequireInstanceStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, REQUIRE_INSTANCE_DATA, "", ENTRY);
+
+ Parsable curData = listener.getParsedDataStack().peek();
+
+ // Gets the status of require instance
+ boolean isRequireInstance = getValidBooleanValue(ctx.requireInstance().getText(), REQUIRE_INSTANCE_DATA, ctx);
+
+ // Checks the holder of require-instance as leafref or type, else throws error.
+ if (curData instanceof YangLeafRef) {
+
+ // Sets the require-instance status to leafref.
+ ((YangLeafRef) curData).setRequireInstance(isRequireInstance);
+ } else if (curData instanceof YangType) {
+
+ // Checks type should be instance-identifier, else throw error.
+ if (((YangType) curData).getDataType() == INSTANCE_IDENTIFIER) {
+
+ // Sets the require-instance status to instance-identifier type.
+ ((YangType) curData).setDataTypeExtendedInfo(isRequireInstance);
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, REQUIRE_INSTANCE_DATA,
+ ctx.getText(), ENTRY));
+ }
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, REQUIRE_INSTANCE_DATA,
+ ctx.getText(), ENTRY));
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/RevisionDateListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/RevisionDateListener.java
new file mode 100644
index 0000000..7a49388
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/RevisionDateListener.java
@@ -0,0 +1,114 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangImport;
+import org.onosproject.yang.compiler.datamodel.YangInclude;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil;
+
+import java.util.Date;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.REVISION_DATE_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RevisionDateStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidDateFromString;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * import-stmt = import-keyword sep identifier-arg-str optsep
+ * "{" stmtsep
+ * prefix-stmt stmtsep
+ * [revision-date-stmt stmtsep]
+ * "}"
+ * include-stmt = include-keyword sep identifier-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * [revision-date-stmt stmtsep]
+ * "}")
+ * revision-date-stmt = revision-date-keyword sep revision-date stmtend
+ *
+ * ANTLR grammar rule
+ * import_stmt : IMPORT_KEYWORD IDENTIFIER LEFT_CURLY_BRACE import_stmt_body
+ * RIGHT_CURLY_BRACE;
+ * import_stmt_body : prefix_stmt revision_date_stmt?;
+ *
+ * include_stmt : INCLUDE_KEYWORD IDENTIFIER (STMTEND | LEFT_CURLY_BRACE
+ * revision_date_stmt_body? RIGHT_CURLY_BRACE);
+ *
+ * revision_date_stmt : REVISION_DATE_KEYWORD DATE_ARG STMTEND;
+ *
+ */
+
+/**
+ * Represents listener based call back function corresponding to the
+ * "revision date" rule defined in ANTLR grammar file for corresponding ABNF
+ * rule in RFC 6020.
+ */
+public final class RevisionDateListener {
+
+ /**
+ * Creates a new revision date listener.
+ */
+ private RevisionDateListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar rule
+ * (revision date),perform validations and update the data model tree.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processRevisionDateEntry(TreeWalkListener listener,
+ RevisionDateStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, REVISION_DATE_DATA, ctx.dateArgumentString().getText(),
+ ENTRY);
+
+ Date date = getValidDateFromString(ctx.dateArgumentString().getText(), ctx);
+
+ // Obtain the node of the stack.
+ Parsable tmpNode = listener.getParsedDataStack().peek();
+ switch (tmpNode.getYangConstructType()) {
+ case IMPORT_DATA: {
+ YangImport importNode = (YangImport) tmpNode;
+ importNode.setRevision(date);
+ break;
+ }
+ case INCLUDE_DATA: {
+ YangInclude includeNode = (YangInclude) tmpNode;
+ includeNode.setRevision(date);
+ break;
+ }
+ default:
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, REVISION_DATE_DATA,
+ ctx.dateArgumentString().getText(), ENTRY));
+ }
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/RevisionListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/RevisionListener.java
new file mode 100644
index 0000000..50b630d
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/RevisionListener.java
@@ -0,0 +1,170 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangRevision;
+import org.onosproject.yang.compiler.datamodel.YangSubModule;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+
+import java.util.Date;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.REVISION_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RevisionStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidDateFromString;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * module-stmt = optsep module-keyword sep identifier-arg-str
+ * optsep
+ * "{" stmtsep
+ * module-header-stmts
+ * linkage-stmts
+ * meta-stmts
+ * revision-stmts
+ * body-stmts
+ * "}" optsep
+ *
+ * revision-stmt = revision-keyword sep revision-date optsep
+ * (";" /
+ * "{" stmtsep
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * "}")
+ *
+ * ANTLR grammar rule
+ * module_stmt : MODULE_KEYWORD IDENTIFIER LEFT_CURLY_BRACE module_body* RIGHT_CURLY_BRACE;
+ *
+ * revision_stmt : REVISION_KEYWORD DATE_ARG (STMTEND | LEFT_CURLY_BRACE revision_stmt_body RIGHT_CURLY_BRACE);
+ * revision_stmt_body : description_stmt? reference_stmt?;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "revision"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class RevisionListener {
+
+ /**
+ * Creates a new revision listener.
+ */
+ private RevisionListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar rule
+ * (revision),perform validations and update the data model tree.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processRevisionEntry(TreeWalkListener listener,
+ RevisionStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, REVISION_DATA, ctx.dateArgumentString().getText(), ENTRY);
+
+ Date date = getValidDateFromString(ctx.dateArgumentString().getText(), ctx);
+
+ YangRevision revisionNode = new YangRevision();
+ revisionNode.setRevDate(date);
+
+ listener.getParsedDataStack().push(revisionNode);
+ }
+
+ /**
+ * It is called when parser exits from grammar rule (revision), it perform
+ * validations and update the data model tree.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processRevisionExit(TreeWalkListener listener, RevisionStatementContext
+ ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, REVISION_DATA, ctx.dateArgumentString().getText(), EXIT);
+
+ Parsable tmpRevisionNode = listener.getParsedDataStack().peek();
+ if (tmpRevisionNode instanceof YangRevision) {
+ listener.getParsedDataStack().pop();
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, REVISION_DATA, ctx.dateArgumentString().getText(),
+ EXIT);
+
+ Parsable tmpNode = listener.getParsedDataStack().peek();
+ switch (tmpNode.getYangConstructType()) {
+ case MODULE_DATA: {
+ YangModule module = (YangModule) tmpNode;
+ if (module.getRevision() != null) {
+ Date curRevisionDate = module.getRevision().getRevDate();
+ if (curRevisionDate.before(((YangRevision) tmpRevisionNode).getRevDate())) {
+ module.setRevision((YangRevision) tmpRevisionNode);
+ }
+ } else {
+ module.setRevision((YangRevision) tmpRevisionNode);
+ }
+ break;
+ }
+ case SUB_MODULE_DATA: {
+ YangSubModule subModule = (YangSubModule) tmpNode;
+ if (subModule.getRevision() != null) {
+ Date curRevisionDate = subModule.getRevision().getRevDate();
+ if (curRevisionDate.before(((YangRevision) tmpRevisionNode).getRevDate())) {
+ subModule.setRevision((YangRevision) tmpRevisionNode);
+ }
+ } else {
+ subModule.setRevision((YangRevision) tmpRevisionNode);
+ }
+ break;
+ }
+ default:
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, REVISION_DATA,
+ ctx.dateArgumentString().getText(),
+ EXIT));
+ }
+ } else {
+ throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, REVISION_DATA,
+ ctx.dateArgumentString().getText(), EXIT));
+ }
+ }
+
+ /**
+ * Validate revision.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ * @return validation result
+ */
+ private static boolean validateRevision(TreeWalkListener listener,
+ RevisionStatementContext ctx) {
+ // TODO to be implemented
+ return true;
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/RpcListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/RpcListener.java
new file mode 100644
index 0000000..25baa54
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/RpcListener.java
@@ -0,0 +1,165 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangRpc;
+import org.onosproject.yang.compiler.datamodel.YangSubModule;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+
+import static org.onosproject.yang.compiler.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.DESCRIPTION_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.INPUT_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.OUTPUT_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.REFERENCE_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.RPC_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.STATUS_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.RpcStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.validateCardinalityMaxOne;
+import static org.onosproject.yang.compiler.translator.tojava.YangDataModelFactory.getYangRpcNode;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * rpc-stmt = rpc-keyword sep identifier-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * *(if-feature-stmt stmtsep)
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * *((typedef-stmt /
+ * grouping-stmt) stmtsep)
+ * [input-stmt stmtsep]
+ * [output-stmt stmtsep]
+ * "}")
+ *
+ * ANTLR grammar rule
+ * rpcStatement : RPC_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE (ifFeatureStatement | statusStatement
+ * | descriptionStatement | referenceStatement | typedefStatement | groupingStatement | inputStatement
+ * | outputStatement)* RIGHT_CURLY_BRACE);
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "rpc"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class RpcListener {
+
+ /**
+ * Creates a new rpc listener.
+ */
+ private RpcListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar rule
+ * (rpc), performs validation and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processRpcEntry(TreeWalkListener listener,
+ RpcStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, RPC_DATA, ctx.identifier().getText(), ENTRY);
+
+ String identifier = getValidIdentifier(ctx.identifier().getText(), RPC_DATA, ctx);
+
+ // Validate sub statement cardinality.
+ validateSubStatementsCardinality(ctx);
+
+ // Check for identifier collision
+ int line = ctx.getStart().getLine();
+ int charPositionInLine = ctx.getStart().getCharPositionInLine();
+ detectCollidingChildUtil(listener, line, charPositionInLine, identifier, RPC_DATA);
+
+ Parsable curData = listener.getParsedDataStack().peek();
+ if (curData instanceof YangModule || curData instanceof YangSubModule) {
+
+ YangNode curNode = (YangNode) curData;
+ YangRpc yangRpc = getYangRpcNode(JAVA_GENERATION);
+
+ yangRpc.setLineNumber(ctx.getStart().getLine());
+ yangRpc.setCharPosition(ctx.getStart().getCharPositionInLine());
+ yangRpc.setFileName(listener.getFileName());
+ yangRpc.setName(identifier);
+ try {
+ curNode.addChild(yangRpc);
+ } catch (DataModelException e) {
+ throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
+ RPC_DATA, ctx.identifier().getText(), ENTRY, e.getMessage()));
+ }
+ listener.getParsedDataStack().push(yangRpc);
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, RPC_DATA,
+ ctx.identifier().getText(), ENTRY));
+ }
+ }
+
+ /**
+ * It is called when parser exits from grammar rule (rpc), it perform
+ * validations and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processRpcExit(TreeWalkListener listener,
+ RpcStatementContext ctx) {
+
+ //Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, RPC_DATA, ctx.identifier().getText(), EXIT);
+
+ if (!(listener.getParsedDataStack().peek() instanceof YangRpc)) {
+ throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, RPC_DATA,
+ ctx.identifier().getText(), EXIT));
+ }
+ listener.getParsedDataStack().pop();
+ }
+
+ /**
+ * Validates the cardinality of rpc sub-statements as per grammar.
+ *
+ * @param ctx context object of the grammar rule
+ */
+ private static void validateSubStatementsCardinality(RpcStatementContext ctx) {
+
+ validateCardinalityMaxOne(ctx.statusStatement(), STATUS_DATA, RPC_DATA, ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.descriptionStatement(), DESCRIPTION_DATA, RPC_DATA, ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.referenceStatement(), REFERENCE_DATA, RPC_DATA, ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.inputStatement(), INPUT_DATA, RPC_DATA, ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.outputStatement(), OUTPUT_DATA, RPC_DATA, ctx.identifier().getText());
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ShortCaseListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ShortCaseListener.java
new file mode 100644
index 0000000..8876bda
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ShortCaseListener.java
@@ -0,0 +1,160 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.antlr.v4.runtime.ParserRuleContext;
+import org.antlr.v4.runtime.tree.ParseTree;
+import org.onosproject.yang.compiler.datamodel.YangCase;
+import org.onosproject.yang.compiler.datamodel.YangChoice;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerCollisionDetector;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil;
+import org.onosproject.yang.compiler.translator.tojava.YangDataModelFactory;
+
+import static org.onosproject.yang.compiler.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.CASE_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.SHORT_CASE_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ShortCaseStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_CHILD;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+import static org.onosproject.yang.compiler.translator.tojava.YangDataModelFactory.getYangCaseNode;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * short-case-stmt = container-stmt /
+ * leaf-stmt /
+ * leaf-list-stmt /
+ * list-stmt /
+ * anyxml-stmt
+ *
+ * ANTLR grammar rule
+ * shortCaseStatement : containerStatement | leafStatement | leafListStatement | listStatement;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "short
+ * case" rule defined in ANTLR grammar file for corresponding ABNF rule in RFC
+ * 6020.
+ */
+public final class ShortCaseListener {
+
+ /**
+ * Create a new short case listener.
+ */
+ private ShortCaseListener() {
+ }
+
+ /**
+ * It is called when parser enters grammar rule (short case), it perform
+ * validations and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processShortCaseEntry(TreeWalkListener listener,
+ ShortCaseStatementContext ctx) {
+
+ ParseTree errorConstructContext;
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, SHORT_CASE_DATA, "", ENTRY);
+
+ YangCase caseNode = getYangCaseNode(JAVA_GENERATION);
+
+ caseNode.setLineNumber(ctx.getStart().getLine());
+ caseNode.setCharPosition(ctx.getStart().getCharPositionInLine());
+ caseNode.setFileName(listener.getFileName());
+ if (ctx.containerStatement() != null) {
+ caseNode.setName(getValidIdentifier(ctx.containerStatement().identifier().getText(), CASE_DATA, ctx));
+ errorConstructContext = ctx.containerStatement();
+ } else if (ctx.listStatement() != null) {
+ caseNode.setName(getValidIdentifier(ctx.listStatement().identifier().getText(), CASE_DATA, ctx));
+ errorConstructContext = ctx.listStatement();
+ } else if (ctx.leafListStatement() != null) {
+ caseNode.setName(getValidIdentifier(ctx.leafListStatement().identifier().getText(), CASE_DATA, ctx));
+ errorConstructContext = ctx.leafListStatement();
+ } else if (ctx.leafStatement() != null) {
+ caseNode.setName(getValidIdentifier(ctx.leafStatement().identifier().getText(), CASE_DATA, ctx));
+ errorConstructContext = ctx.leafStatement();
+ } else if (ctx.anyxmlStatement() != null) {
+ // Anyxml statement is not supported
+ return;
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_CHILD, SHORT_CASE_DATA, "", ENTRY));
+ }
+ // TODO implement for augment.
+
+ int line = ((ParserRuleContext) errorConstructContext).getStart().getLine();
+ int charPositionInLine = ((ParserRuleContext) errorConstructContext).getStart().getCharPositionInLine();
+
+ // Check for identifier collision
+ detectCollidingChildUtil(listener, line, charPositionInLine, caseNode.getName(), CASE_DATA);
+
+ if ((listener.getParsedDataStack().peek()) instanceof YangChoice) {
+ try {
+ ((YangChoice) listener.getParsedDataStack().peek()).addChild(caseNode);
+ } catch (DataModelException e) {
+ throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
+ SHORT_CASE_DATA, caseNode.getName(), ENTRY, e.getMessage()));
+ }
+ listener.getParsedDataStack().push(caseNode);
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, SHORT_CASE_DATA,
+ caseNode.getName(), ENTRY));
+ }
+ }
+
+ /**
+ * It is called when parser exits from grammar rule (short case), it perform
+ * validations and update the data model tree.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processShortCaseExit(TreeWalkListener listener,
+ ShortCaseStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, SHORT_CASE_DATA, "", EXIT);
+
+ if (listener.getParsedDataStack().peek() instanceof YangCase) {
+ listener.getParsedDataStack().pop();
+ } else if (ctx.anyxmlStatement() != null) {
+ // Anyxml statement is not supported
+ return;
+ } else {
+ throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, SHORT_CASE_DATA,
+ "", EXIT));
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/StatusListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/StatusListener.java
new file mode 100644
index 0000000..d00afd1
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/StatusListener.java
@@ -0,0 +1,133 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangStatus;
+import org.onosproject.yang.compiler.datamodel.YangStatusType;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+import org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.STATUS_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.getYangConstructType;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * status-stmt = status-keyword sep status-arg-str stmtend
+ * status-arg-str = < a string that matches the rule
+ * status-arg >
+ * status-arg = current-keyword /
+ * obsolete-keyword /
+ * deprecated-keyword
+ *
+ * ANTLR grammar rule
+ * statusStatement : STATUS_KEYWORD status STMTEND;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "status"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class StatusListener {
+
+ private static final String CURRENT_KEYWORD = "current";
+ private static final String DEPRECATED_KEYWORD = "deprecated";
+ private static final String OBSOLETE_KEYWORD = "obsolete";
+
+ /**
+ * Creates a new status listener.
+ */
+ private StatusListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar
+ * rule (status), performs validation and updates the data model
+ * tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processStatusEntry(TreeWalkListener listener,
+ GeneratedYangParser.StatusStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, STATUS_DATA, "", ENTRY);
+
+ YangStatusType status = getValidStatus(ctx);
+
+ Parsable tmpData = listener.getParsedDataStack().peek();
+ if (tmpData instanceof YangStatus) {
+ YangStatus yangStatus = (YangStatus) tmpData;
+ yangStatus.setStatus(status);
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, STATUS_DATA, "", ENTRY));
+ }
+ }
+
+ /**
+ * Validates status value and returns the value from context.
+ *
+ * @param ctx context object of the grammar rule
+ * @return status current/deprecated/obsolete
+ */
+ private static YangStatusType getValidStatus(GeneratedYangParser.StatusStatementContext ctx) {
+
+ YangStatusType status;
+
+ String value = removeQuotesAndHandleConcat(ctx.status().getText());
+ switch (value) {
+ case CURRENT_KEYWORD: {
+ status = YangStatusType.CURRENT;
+ break;
+ }
+ case DEPRECATED_KEYWORD: {
+ status = YangStatusType.DEPRECATED;
+ break;
+ }
+ case OBSOLETE_KEYWORD: {
+ status = YangStatusType.OBSOLETE;
+ break;
+ }
+ default: {
+ ParserException parserException = new ParserException("YANG file error : " +
+ getYangConstructType(STATUS_DATA) + " " + ctx.status().getText() +
+ " is not valid.");
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+ }
+
+ return status;
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/SubModuleListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/SubModuleListener.java
new file mode 100644
index 0000000..7b18d5b
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/SubModuleListener.java
@@ -0,0 +1,158 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.ResolvableType;
+import org.onosproject.yang.compiler.datamodel.YangReferenceResolver;
+import org.onosproject.yang.compiler.datamodel.YangSubModule;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.linker.exceptions.LinkerException;
+import org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation;
+
+import static org.onosproject.yang.compiler.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.MODULE_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.SUB_MODULE_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_CHILD;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsEmpty;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+import static org.onosproject.yang.compiler.translator.tojava.YangDataModelFactory.getYangSubModuleNode;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * submodule-stmt = optsep submodule-keyword sep identifier-arg-str
+ * optsep
+ * "{" stmtsep
+ * submodule-header-stmts
+ * linkage-stmts
+ * meta-stmts
+ * revision-stmts
+ * body-stmts
+ * "}" optsep
+ *
+ * ANTLR grammar rule
+ * submodule_stmt : SUBMODULE_KEYWORD identifier LEFT_CURLY_BRACE submodule_body* RIGHT_CURLY_BRACE;
+ * submodule_body : submodule_header_statement linkage_stmts meta_stmts revision_stmts body_stmts;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "submodule"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class SubModuleListener {
+
+ /**
+ * Creates a new sub module listener.
+ */
+ private SubModuleListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar rule (sub
+ * module), perform validations and update the data model tree.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processSubModuleEntry(TreeWalkListener listener,
+ GeneratedYangParser.SubModuleStatementContext ctx) {
+
+ // Check if stack is empty.
+ checkStackIsEmpty(listener, INVALID_HOLDER, SUB_MODULE_DATA, ctx.identifier().getText(),
+ ENTRY);
+
+ String identifier = getValidIdentifier(ctx.identifier().getText(), SUB_MODULE_DATA, ctx);
+
+ YangSubModule yangSubModule = getYangSubModuleNode(JAVA_GENERATION);
+ yangSubModule.setName(identifier);
+
+ yangSubModule.setLineNumber(ctx.getStart().getLine());
+ yangSubModule.setCharPosition(ctx.getStart().getCharPositionInLine());
+ yangSubModule.setFileName(listener.getFileName());
+ if (ctx.submoduleBody().submoduleHeaderStatement().yangVersionStatement() == null) {
+ yangSubModule.setVersion((byte) 1);
+ }
+
+ listener.getParsedDataStack().push(yangSubModule);
+ }
+
+ /**
+ * It is called when parser exits from grammar rule (submodule), it perform
+ * validations and update the data model tree.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processSubModuleExit(TreeWalkListener listener,
+ GeneratedYangParser.SubModuleStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, SUB_MODULE_DATA, ctx.identifier().getText(),
+ EXIT);
+
+ Parsable tmpNode = listener.getParsedDataStack().peek();
+ if (!(tmpNode instanceof YangSubModule)) {
+ throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, SUB_MODULE_DATA,
+ ctx.identifier().getText(), EXIT));
+ }
+
+ YangSubModule subModule = (YangSubModule) tmpNode;
+ if (subModule.getUnresolvedResolutionList(ResolvableType.YANG_COMPILER_ANNOTATION) != null
+ && subModule.getUnresolvedResolutionList(ResolvableType.YANG_COMPILER_ANNOTATION).size() != 0
+ && subModule.getChild() != null) {
+ throw new ParserException(constructListenerErrorMessage(INVALID_CHILD, MODULE_DATA,
+ ctx.identifier().getText(), EXIT));
+ }
+
+ try {
+ ((YangReferenceResolver) listener.getParsedDataStack().peek())
+ .resolveSelfFileLinking(ResolvableType.YANG_IF_FEATURE);
+ ((YangReferenceResolver) listener.getParsedDataStack().peek())
+ .resolveSelfFileLinking(ResolvableType.YANG_USES);
+ ((YangReferenceResolver) listener.getParsedDataStack().peek())
+ .resolveSelfFileLinking(ResolvableType.YANG_DERIVED_DATA_TYPE);
+ ((YangReferenceResolver) listener.getParsedDataStack().peek())
+ .resolveSelfFileLinking(ResolvableType.YANG_LEAFREF);
+ ((YangReferenceResolver) listener.getParsedDataStack().peek())
+ .resolveSelfFileLinking(ResolvableType.YANG_BASE);
+ ((YangReferenceResolver) listener.getParsedDataStack().peek())
+ .resolveSelfFileLinking(ResolvableType.YANG_IDENTITYREF);
+ } catch (DataModelException e) {
+ LinkerException linkerException = new LinkerException(e.getMessage());
+ linkerException.setLine(e.getLineNumber());
+ linkerException.setCharPosition(e.getCharPositionInLine());
+ linkerException.setFileName(listener.getFileName());
+ throw linkerException;
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/TypeDefListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/TypeDefListener.java
new file mode 100644
index 0000000..5e9d7a6
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/TypeDefListener.java
@@ -0,0 +1,204 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangGrouping;
+import org.onosproject.yang.compiler.datamodel.YangInput;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNotification;
+import org.onosproject.yang.compiler.datamodel.YangOutput;
+import org.onosproject.yang.compiler.datamodel.YangRpc;
+import org.onosproject.yang.compiler.datamodel.YangSubModule;
+import org.onosproject.yang.compiler.datamodel.YangTypeDef;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerCollisionDetector;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil;
+
+import static org.onosproject.yang.compiler.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.DEFAULT_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.DESCRIPTION_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.REFERENCE_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.STATUS_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.TYPEDEF_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.TYPE_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.UNITS_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.TypedefStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_CONTENT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.validateCardinalityEqualsOne;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.validateCardinalityMaxOne;
+import static org.onosproject.yang.compiler.translator.tojava.YangDataModelFactory.getYangTypeDefNode;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * body-stmts = *((extension-stmt /
+ * feature-stmt /
+ * identity-stmt /
+ * typedef-stmt /
+ * grouping-stmt /
+ * data-def-stmt /
+ * augment-stmt /
+ * rpc-stmt /
+ * notification-stmt /
+ * deviation-stmt) stmtsep)
+ *
+ * typedef-stmt = typedef-keyword sep identifier-arg-str optsep
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * type-stmt stmtsep
+ * [units-stmt stmtsep]
+ * [default-stmt stmtsep]
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * "}"
+ *
+ * ANTLR grammar rule
+ * typedefStatement : TYPEDEF_KEYWORD identifier LEFT_CURLY_BRACE
+ * (typeStatement | unitsStatement | defaultStatement | statusStatement
+ * | descriptionStatement | referenceStatement)* RIGHT_CURLY_BRACE;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "typedef"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class TypeDefListener {
+
+ /**
+ * Creates a new typedef listener.
+ */
+ private TypeDefListener() {
+ }
+
+ /**
+ * It is called when parser enters grammar rule (typedef), it perform
+ * validations and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processTypeDefEntry(TreeWalkListener listener,
+ TypedefStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, TYPEDEF_DATA, ctx.identifier().getText(), ENTRY);
+
+ String identifier = getValidIdentifier(ctx.identifier().getText(), TYPEDEF_DATA, ctx);
+
+ // Validate sub statement cardinality.
+ validateSubStatementsCardinality(ctx);
+
+ // Check for identifier collision
+ int line = ctx.getStart().getLine();
+ int charPositionInLine = ctx.getStart().getCharPositionInLine();
+ detectCollidingChildUtil(listener, line, charPositionInLine, identifier, TYPEDEF_DATA);
+
+ /*
+ * Create a derived type information, the base type must be set in type
+ * listener.
+ */
+ YangTypeDef typeDefNode = getYangTypeDefNode(JAVA_GENERATION);
+ typeDefNode.setName(identifier);
+
+ typeDefNode.setLineNumber(ctx.getStart().getLine());
+ typeDefNode.setCharPosition(ctx.getStart().getCharPositionInLine());
+ typeDefNode.setFileName(listener.getFileName());
+ Parsable curData = listener.getParsedDataStack().peek();
+
+ if (curData instanceof YangModule || curData instanceof YangSubModule || curData instanceof YangContainer
+ || curData instanceof YangList || curData instanceof YangNotification || curData instanceof YangRpc
+ || curData instanceof YangInput || curData instanceof YangOutput || curData instanceof YangGrouping) {
+
+ YangNode curNode = (YangNode) curData;
+ try {
+ curNode.addChild(typeDefNode);
+ } catch (DataModelException e) {
+ throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
+ TYPEDEF_DATA, ctx.identifier().getText(), ENTRY, e.getMessage()));
+ }
+ listener.getParsedDataStack().push(typeDefNode);
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER,
+ TYPEDEF_DATA, ctx.identifier().getText(), ENTRY));
+ }
+ }
+
+ /**
+ * It is called when parser exits from grammar rule (typedef), it perform
+ * validations and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processTypeDefExit(TreeWalkListener listener,
+ TypedefStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, TYPEDEF_DATA, ctx.identifier().getText(), EXIT);
+
+ if (listener.getParsedDataStack().peek() instanceof YangTypeDef) {
+ YangTypeDef typeDefNode = (YangTypeDef) listener.getParsedDataStack().peek();
+ try {
+ typeDefNode.validateDataOnExit();
+ } catch (DataModelException e) {
+ throw new ParserException(constructListenerErrorMessage(INVALID_CONTENT, TYPEDEF_DATA,
+ ctx.identifier().getText(), EXIT));
+ }
+
+ listener.getParsedDataStack().pop();
+ } else {
+ throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, TYPEDEF_DATA,
+ ctx.identifier().getText(), EXIT));
+ }
+ }
+
+ /**
+ * Validates the cardinality of typedef sub-statements as per grammar.
+ *
+ * @param ctx context object of the grammar rule
+ */
+ private static void validateSubStatementsCardinality(TypedefStatementContext ctx) {
+
+ validateCardinalityMaxOne(ctx.unitsStatement(), UNITS_DATA, TYPEDEF_DATA, ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.defaultStatement(), DEFAULT_DATA, TYPEDEF_DATA, ctx.identifier().getText());
+ validateCardinalityEqualsOne(ctx.typeStatement(), TYPE_DATA, TYPEDEF_DATA, ctx.identifier().getText(), ctx);
+ validateCardinalityMaxOne(ctx.descriptionStatement(), DESCRIPTION_DATA, TYPEDEF_DATA,
+ ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.referenceStatement(), REFERENCE_DATA, TYPEDEF_DATA, ctx.identifier().getText());
+ validateCardinalityMaxOne(ctx.statusStatement(), STATUS_DATA, TYPEDEF_DATA, ctx.identifier().getText());
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/TypeListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/TypeListener.java
new file mode 100644
index 0000000..0b16af7
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/TypeListener.java
@@ -0,0 +1,352 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangDerivedInfo;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeIdentifier;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.YangTypeDef;
+import org.onosproject.yang.compiler.datamodel.YangUnion;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.DataModelUtils;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.linker.impl.YangResolutionInfoImpl;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil;
+
+import static org.onosproject.yang.compiler.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
+import static org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus.UNRESOLVED;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.TYPE_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.INSTANCE_IDENTIFIER;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.getType;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.TypeStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidNodeIdentifier;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+import static org.onosproject.yang.compiler.translator.tojava.YangDataModelFactory.getYangType;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * type-stmt = type-keyword sep identifier-ref-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * type-body-stmts
+ * "}")
+ *
+ * ANTLR grammar rule
+ * typeStatement : TYPE_KEYWORD string (STMTEND | LEFT_CURLY_BRACE typeBodyStatements RIGHT_CURLY_BRACE);
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "type" rule
+ * defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class TypeListener {
+
+ /**
+ * Creates a new type listener.
+ */
+ private TypeListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar rule
+ * (type), performs validation and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processTypeEntry(TreeWalkListener listener,
+ TypeStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, TYPE_DATA, ctx.string().getText(), ENTRY);
+
+ // Validate node identifier.
+ YangNodeIdentifier nodeIdentifier = getValidNodeIdentifier(ctx.string().getText(), TYPE_DATA,
+ ctx);
+
+ // Obtain the YANG data type.
+ YangDataTypes yangDataTypes = getType(ctx.string().getText());
+
+ // validate type sub-statement cardinality
+ validateTypeSubStatementCardinality(ctx, yangDataTypes);
+
+ // Create YANG type object and fill the values.
+ YangType<?> type = getYangType(JAVA_GENERATION);
+ type.setNodeId(nodeIdentifier);
+ type.setDataType(yangDataTypes);
+
+ type.setLineNumber(ctx.getStart().getLine());
+ type.setCharPosition(ctx.getStart().getCharPositionInLine());
+ type.setFileName(listener.getFileName());
+ // Set default require instance value as true for instance identifier.
+ setDefaultRequireInstanceForInstanceIdentifier(type);
+
+ int errorLine = ctx.getStart().getLine();
+ int errorPosition = ctx.getStart().getCharPositionInLine();
+
+ Parsable tmpData = listener.getParsedDataStack().peek();
+ switch (tmpData.getYangConstructType()) {
+ case LEAF_DATA:
+ YangLeaf leaf = (YangLeaf) tmpData;
+ leaf.setDataType(type);
+
+ /*
+ * If data type is derived, resolution information to be added
+ * in resolution list.
+ */
+ if (yangDataTypes == DERIVED) {
+ // Parent YANG node of leaf to be added in resolution information.
+ Parsable leafData = listener.getParsedDataStack().pop();
+ Parsable parentNodeOfLeaf = listener.getParsedDataStack().peek();
+ listener.getParsedDataStack().push(leafData);
+
+ // Verify parent node of leaf
+ if (!(parentNodeOfLeaf instanceof YangNode)) {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, TYPE_DATA,
+ ctx.string().getText(), EXIT));
+ }
+
+ // Create empty derived info and attach it to type extended info.
+ YangDerivedInfo<?> yangDerivedInfo = new YangDerivedInfo<>();
+ yangDerivedInfo.setLineNumber(ctx.getStart().getLine());
+ yangDerivedInfo.setCharPosition(ctx.getStart().getCharPositionInLine());
+ yangDerivedInfo.setFileName(listener.getFileName());
+ ((YangType<YangDerivedInfo>) type).setDataTypeExtendedInfo(yangDerivedInfo);
+
+ type.setResolvableStatus(UNRESOLVED);
+
+ // Add resolution information to the list
+ YangResolutionInfoImpl resolutionInfo =
+ new YangResolutionInfoImpl<YangType>(
+ type, (YangNode) parentNodeOfLeaf, errorLine,
+ errorPosition);
+ addToResolutionList(resolutionInfo, ctx);
+ }
+ break;
+ case LEAF_LIST_DATA:
+ YangLeafList leafList = (YangLeafList) tmpData;
+ leafList.setDataType(type);
+
+ /*
+ * If data type is derived, resolution information to be added
+ * in resolution list.
+ */
+ if (yangDataTypes == DERIVED) {
+ // Parent YANG node of leaf list to be added in resolution information.
+ Parsable leafListData = listener.getParsedDataStack().pop();
+ Parsable parentNodeOfLeafList = listener.getParsedDataStack().peek();
+ listener.getParsedDataStack().push(leafListData);
+
+ // Verify parent node of leaf
+ if (!(parentNodeOfLeafList instanceof YangNode)) {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, TYPE_DATA,
+ ctx.string().getText(), EXIT));
+ }
+
+ // Create empty derived info and attach it to type extended info.
+ YangDerivedInfo<?> yangDerivedInfo = new YangDerivedInfo<>();
+ yangDerivedInfo.setLineNumber(ctx.getStart().getLine());
+ yangDerivedInfo.setCharPosition(ctx.getStart().getCharPositionInLine());
+ yangDerivedInfo.setFileName(listener.getFileName());
+ ((YangType<YangDerivedInfo>) type).setDataTypeExtendedInfo(yangDerivedInfo);
+
+ // Add resolution information to the list
+ YangResolutionInfoImpl resolutionInfo =
+ new YangResolutionInfoImpl<YangType>(
+ type, (YangNode) parentNodeOfLeafList,
+ errorLine, errorPosition);
+ addToResolutionList(resolutionInfo, ctx);
+ }
+ break;
+ case UNION_DATA:
+ YangUnion unionNode = (YangUnion) tmpData;
+ try {
+ unionNode.addType(type);
+ } catch (DataModelException e) {
+ ParserException parserException = new ParserException(e.getMessage());
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+
+ /*
+ * If data type is derived, resolution information to be added
+ * in resolution list.
+ */
+ if (yangDataTypes == DERIVED) {
+
+ // Create empty derived info and attach it to type extended info.
+ YangDerivedInfo<?> yangDerivedInfo = new YangDerivedInfo<>();
+ yangDerivedInfo.setLineNumber(ctx.getStart().getLine());
+ yangDerivedInfo.setCharPosition(ctx.getStart().getCharPositionInLine());
+ yangDerivedInfo.setFileName(listener.getFileName());
+ ((YangType<YangDerivedInfo>) type).setDataTypeExtendedInfo(yangDerivedInfo);
+
+ type.setResolvableStatus(UNRESOLVED);
+
+ // Add resolution information to the list
+ YangResolutionInfoImpl resolutionInfo =
+ new YangResolutionInfoImpl<YangType>(
+ type, unionNode, errorLine, errorPosition);
+ addToResolutionList(resolutionInfo, ctx);
+ }
+
+ break;
+ case TYPEDEF_DATA:
+ /* Prepare the base type info and set in derived type */
+ YangTypeDef typeDef = (YangTypeDef) tmpData;
+ typeDef.setDataType(type);
+
+ /*
+ * If data type is derived, resolution information to be added
+ * in resolution list.
+ */
+ if (yangDataTypes == DERIVED) {
+ // Create empty derived info and attach it to type extended info.
+ YangDerivedInfo<?> yangDerivedInfo = new YangDerivedInfo<>();
+ yangDerivedInfo.setLineNumber(ctx.getStart().getLine());
+ yangDerivedInfo.setCharPosition(ctx.getStart().getCharPositionInLine());
+ yangDerivedInfo.setFileName(listener.getFileName());
+ ((YangType<YangDerivedInfo>) type).setDataTypeExtendedInfo(yangDerivedInfo);
+
+ type.setResolvableStatus(UNRESOLVED);
+ // Add resolution information to the list
+ YangResolutionInfoImpl resolutionInfo =
+ new YangResolutionInfoImpl<YangType>(
+ type, typeDef, errorLine, errorPosition);
+ addToResolutionList(resolutionInfo, ctx);
+ }
+ break;
+ //TODO: deviate replacement statement.
+
+ default:
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, TYPE_DATA,
+ ctx.string().getText(), EXIT));
+ }
+
+ // Push the type to the stack.
+ listener.getParsedDataStack().push(type);
+ }
+
+ /**
+ * Sets the default require instance value as true when the type is instance identifier.
+ *
+ * @param type type to which the value has to be set
+ */
+ private static void setDefaultRequireInstanceForInstanceIdentifier(YangType<?> type) {
+
+ if (type.getDataType() == INSTANCE_IDENTIFIER) {
+ ((YangType<Boolean>) type).setDataTypeExtendedInfo(true);
+ }
+ }
+
+ /**
+ * It is called when parser exits from grammar rule (type), it perform
+ * validations and update the data model tree.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processTypeExit(TreeWalkListener listener,
+ TypeStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, ListenerErrorType.MISSING_CURRENT_HOLDER, TYPE_DATA, ctx.string().getText(), EXIT);
+
+ Parsable parsableType = listener.getParsedDataStack().pop();
+ if (!(parsableType instanceof YangType)) {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, TYPE_DATA,
+ ctx.string().getText(), EXIT));
+ }
+ }
+
+ /**
+ * Adds to resolution list.
+ *
+ * @param resolutionInfo resolution information
+ * @param ctx context object of the grammar rule
+ */
+ private static void addToResolutionList(YangResolutionInfoImpl<YangType> resolutionInfo,
+ TypeStatementContext ctx) {
+ try {
+ DataModelUtils.addResolutionInfo(resolutionInfo);
+ } catch (DataModelException e) {
+ throw new ParserException(constructExtendedListenerErrorMessage(ListenerErrorType.UNHANDLED_PARSED_DATA,
+ TYPE_DATA, ctx.string().getText(), ENTRY, e.getMessage()));
+ }
+ }
+
+ /**
+ * Validates type body statements cardinality.
+ *
+ * @param ctx context object of the grammar rule
+ * @param yangDataType yang data type
+ */
+ private static void validateTypeSubStatementCardinality(TypeStatementContext ctx,
+ YangDataTypes yangDataType) {
+ if (ctx.typeBodyStatements() == null || ctx.typeBodyStatements().isEmpty()) {
+ ParserException parserException;
+ switch (yangDataType) {
+ case UNION:
+ parserException = new ParserException("YANG file error : a type union" +
+ " must have atleast one type statement.");
+ break;
+ case ENUMERATION:
+ parserException = new ParserException("YANG file error : a type enumeration" +
+ " must have atleast one enum statement.");
+ break;
+ case BITS:
+ parserException = new ParserException("YANG file error : a type bits" +
+ " must have atleast one bit statement.");
+ break;
+ case DECIMAL64:
+ parserException = new ParserException("YANG file error : a type decimal64" +
+ " must have fraction-digits statement.");
+ break;
+ case LEAFREF:
+ parserException = new ParserException("YANG file error : a type leafref" +
+ " must have one path statement.");
+ break;
+ case IDENTITYREF:
+ parserException = new ParserException("YANG file error : a type identityref" +
+ " must have base statement.");
+ break;
+ default:
+ return;
+ }
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/UnionListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/UnionListener.java
new file mode 100644
index 0000000..54aa1c0
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/UnionListener.java
@@ -0,0 +1,223 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * type-body-stmts = numerical-restrictions /
+ * decimal64-specification /
+ * string-restrictions /
+ * enum-specification /
+ * leafref-specification /
+ * identityref-specification /
+ * instance-identifier-specification /
+ * bits-specification /
+ * union-specification
+ *
+ * union-specification = 1*(type-stmt stmtsep)
+ *
+ * ANTLR grammar rule
+ * typeBodyStatements : numericalRestrictions | stringRestrictions | enumSpecification
+ * | leafrefSpecification | identityrefSpecification | instanceIdentifierSpecification
+ * | bitsSpecification | unionSpecification;
+ *
+ * unionSpecification : typeStatement+;
+ */
+
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.YangTypeDef;
+import org.onosproject.yang.compiler.datamodel.YangUnion;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+
+import static org.onosproject.yang.compiler.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.TYPE_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.UNION_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.UnionSpecificationContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+import static org.onosproject.yang.compiler.translator.tojava.YangDataModelFactory.getYangUnionNode;
+
+/**
+ * Represents listener based call back function corresponding to the "union" rule
+ * defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class UnionListener {
+
+ /**
+ * Suffix to be used while creating union class.
+ */
+ private static final String UNION_CLASS_SUFFIX = "_union";
+
+ /**
+ * Creates a new union listener.
+ */
+ private UnionListener() {
+ }
+
+ /**
+ * It is called when parser enters grammar rule (union), it perform
+ * validations and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processUnionEntry(TreeWalkListener listener,
+ UnionSpecificationContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, UNION_DATA, "", ENTRY);
+
+ if (listener.getParsedDataStack().peek() instanceof YangType) {
+ YangUnion unionNode = getYangUnionNode(JAVA_GENERATION);
+ Parsable typeData = listener.getParsedDataStack().pop();
+
+ unionNode.setLineNumber(ctx.getStart().getLine());
+ unionNode.setCharPosition(ctx.getStart().getCharPositionInLine());
+ unionNode.setFileName(listener.getFileName());
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, UNION_DATA, "", ENTRY);
+
+ Parsable tmpData = listener.getParsedDataStack().peek();
+
+ switch (tmpData.getYangConstructType()) {
+ case LEAF_DATA:
+ // Set the name of union same as leaf.
+ unionNode.setName(((YangLeaf) tmpData).getName() + UNION_CLASS_SUFFIX);
+ // Pop the stack entry to obtain the parent YANG node.
+ Parsable leaf = listener.getParsedDataStack().pop();
+ // Add the union node to the parent holder of leaf.
+ addChildToParentNode(listener, unionNode);
+ // Push the popped entry back to the stack.
+ listener.getParsedDataStack().push(leaf);
+ break;
+ case LEAF_LIST_DATA:
+ // Set the name of union same as leaf list.
+ unionNode.setName(((YangLeafList) tmpData).getName() + UNION_CLASS_SUFFIX);
+ // Pop the stack entry to obtain the parent YANG node.
+ Parsable leafList = listener.getParsedDataStack().pop();
+ // Add the union node to the parent holder of leaf.
+ addChildToParentNode(listener, unionNode);
+ // Push the popped entry back to the stack.
+ listener.getParsedDataStack().push(leafList);
+ break;
+ case UNION_DATA:
+ YangUnion parentUnion = (YangUnion) tmpData;
+ /*
+ * In case parent of union is again a union, name of the
+ * child union is parent union name suffixed with running
+ * integer number, this is done because under union there
+ * could be multiple child union types.
+ */
+ unionNode.setName(parentUnion.getName() + UNION_CLASS_SUFFIX + parentUnion.getChildUnionNumber());
+ // Increment the running number.
+ parentUnion.setChildUnionNumber(parentUnion.getChildUnionNumber() + 1);
+ // Add union as a child to parent union.
+ addChildToParentNode(listener, unionNode);
+ break;
+ case TYPEDEF_DATA:
+ YangTypeDef typeDef = (YangTypeDef) tmpData;
+ // Set the name of union same as typedef name.
+ unionNode.setName(typeDef.getName() + UNION_CLASS_SUFFIX);
+ // Add union as a child to parent type def.
+ addChildToParentNode(listener, unionNode);
+ break;
+ // TODO deviate.
+ default:
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, TYPE_DATA,
+ ((YangType<?>) typeData).getDataTypeName(), ENTRY));
+ }
+ listener.getParsedDataStack().push(typeData);
+ listener.getParsedDataStack().push(unionNode);
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, UNION_DATA, "", ENTRY));
+ }
+ }
+
+ /**
+ * It is called when parser exits from grammar rule (union), it perform
+ * validations and update the data model tree.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processUnionExit(TreeWalkListener listener,
+ UnionSpecificationContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, UNION_DATA, "", EXIT);
+
+ Parsable tmpUnionNode = listener.getParsedDataStack().peek();
+ if (tmpUnionNode instanceof YangUnion) {
+ YangUnion unionNode = (YangUnion) tmpUnionNode;
+ listener.getParsedDataStack().pop();
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, UNION_DATA, "", EXIT);
+
+ Parsable tmpNode = listener.getParsedDataStack().peek();
+ switch (tmpNode.getYangConstructType()) {
+ case TYPE_DATA: {
+ YangType<YangUnion> typeNode = (YangType<YangUnion>) tmpNode;
+ typeNode.setDataTypeExtendedInfo(unionNode);
+ break;
+ }
+ default:
+ throw new ParserException(
+ constructListenerErrorMessage(INVALID_HOLDER, UNION_DATA, "", EXIT));
+ }
+ } else {
+ throw new ParserException(
+ constructListenerErrorMessage(MISSING_CURRENT_HOLDER, UNION_DATA, "", EXIT));
+ }
+ }
+
+ /**
+ * Adds the union node to the parent holder.
+ *
+ * @param listener listener's object
+ * @param unionNode union node which needs to be added to parent
+ */
+ private static void addChildToParentNode(TreeWalkListener listener, YangUnion unionNode) {
+ if (!(listener.getParsedDataStack().peek() instanceof YangNode)) {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, UNION_DATA,
+ "", ENTRY));
+ } else {
+ YangNode curNode = (YangNode) listener.getParsedDataStack().peek();
+ try {
+ curNode.addChild(unionNode);
+ } catch (DataModelException e) {
+ throw new ParserException(constructExtendedListenerErrorMessage(ListenerErrorType.UNHANDLED_PARSED_DATA,
+ UNION_DATA, "", ENTRY, e.getMessage()));
+ }
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/UniqueListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/UniqueListener.java
new file mode 100644
index 0000000..e222422
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/UniqueListener.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.UNIQUE_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * unique-stmt = unique-keyword sep unique-arg-str stmtend
+ *
+ * ANTLR grammar rule
+ * uniqueStatement: UNIQUE_KEYWORD unique STMTEND;
+ * unique : string;
+ */
+
+/**
+ * Represesnts listener based call back function corresponding to the "unique" rule
+ * defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class UniqueListener {
+
+ /**
+ * Creates a new unique listener.
+ */
+ private UniqueListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar rule
+ * (unique), perform validations and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processUniqueEntry(TreeWalkListener listener,
+ GeneratedYangParser.UniqueStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, UNIQUE_DATA, ctx.unique().getText(), ENTRY);
+
+ Parsable tmpData = listener.getParsedDataStack().peek();
+ if (listener.getParsedDataStack().peek() instanceof YangList) {
+ YangList yangList = (YangList) tmpData;
+ String tmpUniqueValue = removeQuotesAndHandleConcat(ctx.unique().getText());
+
+ if (tmpUniqueValue.contains(" ")) {
+ String[] uniqueValues = tmpUniqueValue.split(" ");
+ for (String uniqueValue : uniqueValues) {
+ try {
+ yangList.addUnique(uniqueValue);
+ } catch (DataModelException e) {
+ throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
+ UNIQUE_DATA,
+ ctx.unique().getText(), ENTRY, e.getMessage()));
+ }
+ }
+ } else {
+ try {
+ yangList.addUnique(tmpUniqueValue);
+ } catch (DataModelException e) {
+ throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA, UNIQUE_DATA,
+ ctx.unique().getText(), ENTRY, e.getMessage()));
+ }
+ }
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, UNIQUE_DATA, ctx.unique().getText(),
+ ENTRY));
+ }
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/UnitsListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/UnitsListener.java
new file mode 100644
index 0000000..f8db2cf
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/UnitsListener.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.UNITS_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.UnitsStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * units-stmt = units-keyword sep string optsep stmtend
+ *
+ * ANTLR grammar rule
+ * unitsStatement : UNITS_KEYWORD string STMTEND;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "units"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class UnitsListener {
+
+ /**
+ * Creates a new units listener.
+ */
+ private UnitsListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar
+ * rule (units), performs validation and updates the data model
+ * tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processUnitsEntry(TreeWalkListener listener,
+ UnitsStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, UNITS_DATA, ctx.string().getText(), ENTRY);
+
+ Parsable tmpData = listener.getParsedDataStack().peek();
+ switch (tmpData.getYangConstructType()) {
+ case LEAF_DATA:
+ YangLeaf leaf = (YangLeaf) tmpData;
+ leaf.setUnits(ctx.string().getText());
+ break;
+ case LEAF_LIST_DATA:
+ YangLeafList leafList = (YangLeafList) tmpData;
+ leafList.setUnits(ctx.string().getText());
+ break;
+ case TYPEDEF_DATA:
+ // TODO
+ break;
+ default:
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, UNITS_DATA,
+ ctx.string().getText(), ENTRY));
+ }
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/UsesListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/UsesListener.java
new file mode 100644
index 0000000..616d761
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/UsesListener.java
@@ -0,0 +1,231 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangAugment;
+import org.onosproject.yang.compiler.datamodel.YangCase;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangGrouping;
+import org.onosproject.yang.compiler.datamodel.YangInput;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeIdentifier;
+import org.onosproject.yang.compiler.datamodel.YangNotification;
+import org.onosproject.yang.compiler.datamodel.YangOutput;
+import org.onosproject.yang.compiler.datamodel.YangSubModule;
+import org.onosproject.yang.compiler.datamodel.YangUses;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.linker.impl.YangResolutionInfoImpl;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerCollisionDetector;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType;
+import org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil;
+
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.addResolutionInfo;
+import static org.onosproject.yang.compiler.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.DESCRIPTION_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.REFERENCE_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.STATUS_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.USES_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.WHEN_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.UsesStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidNodeIdentifier;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.validateCardinalityMaxOne;
+import static org.onosproject.yang.compiler.translator.tojava.YangDataModelFactory.getYangUsesNode;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * data-def-stmt = container-stmt /
+ * leaf-stmt /
+ * leaf-list-stmt /
+ * list-stmt /
+ * choice-stmt /
+ * anyxml-stmt /
+ * uses-stmt
+ *
+ * uses-stmt = uses-keyword sep identifier-ref-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [when-stmt stmtsep]
+ * *(if-feature-stmt stmtsep)
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * *(refine-stmt stmtsep)
+ * *(uses-augment-stmt stmtsep)
+ * "}")
+ *
+ * ANTLR grammar rule
+ * dataDefStatement : containerStatement
+ * | leafStatement
+ * | leafListStatement
+ * | listStatement
+ * | choiceStatement
+ * | usesStatement;
+ *
+ * usesStatement : USES_KEYWORD string (STMTEND | LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement
+ * | statusStatement | descriptionStatement | referenceStatement | refineStatement
+ * | usesAugmentStatement)* RIGHT_CURLY_BRACE);
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "uses"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class UsesListener {
+
+ /**
+ * Creates a new uses listener.
+ */
+ private UsesListener() {
+ }
+
+ /**
+ * It is called when parser enters grammar rule (uses), it perform
+ * validations and updates the data model tree.
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processUsesEntry(TreeWalkListener listener, UsesStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, USES_DATA, ctx.string().getText(), ENTRY);
+
+ // Validate sub statement cardinality.
+ validateSubStatementsCardinality(ctx);
+
+ // Check for identifier collision
+ int line = ctx.getStart().getLine();
+ int charPositionInLine = ctx.getStart().getCharPositionInLine();
+
+ detectCollidingChildUtil(listener, line, charPositionInLine, ctx.string().getText(), USES_DATA);
+ Parsable curData = listener.getParsedDataStack().peek();
+
+ if (curData instanceof YangModule || curData instanceof YangSubModule
+ || curData instanceof YangContainer || curData instanceof YangList
+ || curData instanceof YangUses || curData instanceof YangAugment
+ || curData instanceof YangCase || curData instanceof YangGrouping
+ || curData instanceof YangInput || curData instanceof YangOutput
+ || curData instanceof YangNotification) {
+
+ YangUses usesNode = getYangUsesNode(JAVA_GENERATION);
+
+ usesNode.setLineNumber(ctx.getStart().getLine());
+ usesNode.setCharPosition(ctx.getStart().getCharPositionInLine());
+ usesNode.setFileName(listener.getFileName());
+ YangNodeIdentifier nodeIdentifier = getValidNodeIdentifier(ctx.string().getText(), USES_DATA, ctx);
+ usesNode.setNodeIdentifier(nodeIdentifier);
+ usesNode.setCurrentGroupingDepth(listener.getGroupingDepth());
+ YangNode curNode = (YangNode) curData;
+
+ try {
+ curNode.addChild(usesNode);
+ } catch (DataModelException e) {
+ throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
+ USES_DATA, ctx.string().getText(), ENTRY, e.getMessage()));
+ }
+ listener.getParsedDataStack().push(usesNode);
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER,
+ USES_DATA, ctx.string().getText(), ENTRY));
+ }
+ }
+
+ /**
+ * It is called when parser exits from grammar rule (uses), it perform
+ * validations and update the data model tree.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processUsesExit(TreeWalkListener listener,
+ UsesStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, USES_DATA, ctx.string().getText(), EXIT);
+
+ Parsable parsableUses = listener.getParsedDataStack().pop();
+ if (!(parsableUses instanceof YangUses)) {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, USES_DATA,
+ ctx.string().getText(), EXIT));
+ }
+ YangUses uses = (YangUses) parsableUses;
+ int errorLine = ctx.getStart().getLine();
+ int errorPosition = ctx.getStart().getCharPositionInLine();
+
+ // Parent YANG node of uses to be added in resolution information.
+ Parsable parentNode = listener.getParsedDataStack().peek();
+
+ // Verify parent node of leaf
+ if (!(parentNode instanceof YangNode)) {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, USES_DATA,
+ ctx.string().getText(), EXIT));
+ }
+
+ // Add resolution information to the list
+ YangResolutionInfoImpl resolutionInfo = new YangResolutionInfoImpl<YangUses>(uses,
+ (YangNode) parentNode, errorLine,
+ errorPosition);
+ addToResolutionList(resolutionInfo, ctx);
+ }
+
+ // TODO linker to handle collision scenarios like leaf obtained by uses, conflicts with some existing leaf.
+
+ /**
+ * Validates the cardinality of case sub-statements as per grammar.
+ *
+ * @param ctx context object of the grammar rule
+ */
+ private static void validateSubStatementsCardinality(UsesStatementContext ctx) {
+ validateCardinalityMaxOne(ctx.whenStatement(), WHEN_DATA, USES_DATA, ctx.string().getText());
+ validateCardinalityMaxOne(ctx.statusStatement(), STATUS_DATA, USES_DATA, ctx.string().getText());
+ validateCardinalityMaxOne(ctx.descriptionStatement(), DESCRIPTION_DATA, USES_DATA, ctx.string().getText());
+ validateCardinalityMaxOne(ctx.referenceStatement(), REFERENCE_DATA, USES_DATA, ctx.string().getText());
+ }
+
+ /**
+ * Add to resolution list.
+ *
+ * @param resolutionInfo resolution information.
+ * @param ctx context object of the grammar rule
+ */
+ private static void addToResolutionList(YangResolutionInfoImpl<YangUses> resolutionInfo,
+ UsesStatementContext ctx) {
+
+ try {
+ addResolutionInfo(resolutionInfo);
+ } catch (DataModelException e) {
+ throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
+ USES_DATA, ctx.string().getText(), EXIT, e.getMessage()));
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ValueListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ValueListener.java
new file mode 100644
index 0000000..c28b694
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/ValueListener.java
@@ -0,0 +1,125 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * value-stmt = value-keyword sep integer-value stmtend
+ *
+ * ANTLR grammar rule
+ * valueStatement : VALUE_KEYWORD ((MINUS INTEGER) | INTEGER) STMTEND;
+ */
+
+import org.onosproject.yang.compiler.datamodel.YangEnum;
+import org.onosproject.yang.compiler.datamodel.YangEnumeration;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.VALUE_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.ValueStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidIntegerValue;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/**
+ * Represents listener based call back function corresponding to the "value"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class ValueListener {
+
+ /**
+ * Creates a new value listener.
+ */
+ private ValueListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar rule
+ * (value), perform validations and update the data model tree.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processValueEntry(TreeWalkListener listener, ValueStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, VALUE_DATA, ctx.value().getText(), ENTRY);
+
+ // Validate value
+ int value = getValidIntegerValue(ctx.value().getText(), VALUE_DATA, ctx);
+
+ // Obtain the node of the stack.
+ Parsable tmpNode = listener.getParsedDataStack().peek();
+ switch (tmpNode.getYangConstructType()) {
+ case ENUM_DATA: {
+ YangEnum enumNode = (YangEnum) tmpNode;
+ if (!isEnumValueValid(listener, ctx, value)) {
+ ParserException parserException = new ParserException("Duplicate Value Entry");
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+ enumNode.setValue(value);
+ break;
+ }
+ default:
+ throw new ParserException(
+ constructListenerErrorMessage(INVALID_HOLDER, VALUE_DATA, ctx.value().getText(), ENTRY));
+ }
+ }
+
+ /**
+ * Validates ENUM value uniqueness.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ * @param value enum value
+ * @return validation result
+ */
+ private static boolean isEnumValueValid(TreeWalkListener listener, ValueStatementContext ctx,
+ int value) {
+ Parsable enumNode = listener.getParsedDataStack().pop();
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, VALUE_DATA, ctx.value().getText(), ENTRY);
+
+ Parsable tmpNode = listener.getParsedDataStack().peek();
+ switch (tmpNode.getYangConstructType()) {
+ case ENUMERATION_DATA: {
+ YangEnumeration yangEnumeration = (YangEnumeration) tmpNode;
+ for (YangEnum curEnum : yangEnumeration.getEnumSet()) {
+ if (value == curEnum.getValue()) {
+ listener.getParsedDataStack().push(enumNode);
+ return false;
+ }
+ }
+ listener.getParsedDataStack().push(enumNode);
+ return true;
+ }
+ default:
+ listener.getParsedDataStack().push(enumNode);
+ throw new ParserException(
+ constructListenerErrorMessage(INVALID_HOLDER, VALUE_DATA, ctx.value().getText(), ENTRY));
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/VersionListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/VersionListener.java
new file mode 100644
index 0000000..9c46b26
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/VersionListener.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangSubModule;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.VERSION_DATA;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.getValidVersion;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ * module-header-stmts = ;; these stmts can appear in any order
+ * [yang-version-stmt stmtsep]
+ * namespace-stmt stmtsep
+ * prefix-stmt stmtsep
+ *
+ * submodule-header-stmts =
+ * ;; these stmts can appear in any order
+ * [yang-version-stmt stmtsep]
+ * belongs-to-stmt stmtsep
+ *
+ * yang-version-stmt = yang-version-keyword sep yang-version-arg-str
+ * optsep stmtend
+ *
+ *
+ * ANTLR grammar rule
+ * module_header_statement : yang_version_stmt? namespace_stmt prefix_stmt
+ * | yang_version_stmt? prefix_stmt namespace_stmt
+ * | namespace_stmt yang_version_stmt? prefix_stmt
+ * | namespace_stmt prefix_stmt yang_version_stmt?
+ * | prefix_stmt namespace_stmt yang_version_stmt?
+ * | prefix_stmt yang_version_stmt? namespace_stmt?
+ * ;
+ * submodule_header_statement : yang_version_stmt? belongs_to_stmt
+ * | belongs_to_stmt yang_version_stmt?
+ * ;
+ * yang_version_stmt : YANG_VERSION_KEYWORD version STMTEND;
+ * version : string;
+ */
+
+/**
+ * Represents listener based call back function corresponding to the "version"
+ * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
+ */
+public final class VersionListener {
+
+ /**
+ * Creates a new version listener.
+ */
+ private VersionListener() {
+ }
+
+ /**
+ * It is called when parser receives an input matching the grammar rule
+ * (version), perform validations and update the data model tree.
+ *
+ * @param listener Listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processVersionEntry(TreeWalkListener listener,
+ GeneratedYangParser.YangVersionStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, VERSION_DATA, ctx.version().getText(), ENTRY);
+
+ byte version = getValidVersion(ctx);
+
+ // Obtain the node of the stack.
+ Parsable tmpNode = listener.getParsedDataStack().peek();
+ switch (tmpNode.getYangConstructType()) {
+ case MODULE_DATA: {
+ YangModule module = (YangModule) tmpNode;
+ module.setVersion(version);
+ break;
+ }
+ case SUB_MODULE_DATA: {
+ YangSubModule subModule = (YangSubModule) tmpNode;
+ subModule.setVersion(version);
+ break;
+ }
+ default:
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, VERSION_DATA,
+ ctx.version().getText(), ENTRY));
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/WhenListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/WhenListener.java
new file mode 100644
index 0000000..3f9602d
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/WhenListener.java
@@ -0,0 +1,123 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.onosproject.yang.compiler.datamodel.YangWhen;
+import org.onosproject.yang.compiler.datamodel.YangWhenHolder;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.WHEN_DATA;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.WhenStatementContext;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
+
+/*
+ * Reference: RFC6020 and YANG ANTLR Grammar
+ *
+ * ABNF grammar as per RFC6020
+ *
+ * when-stmt = when-keyword sep string optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * "}")
+ *
+ * ANTLR grammar rule
+ * whenStatement : WHEN_KEYWORD string (STMTEND | LEFT_CURLY_BRACE ((descriptionStatement? referenceStatement?)
+ * | (referenceStatement? descriptionStatement?)) RIGHT_CURLY_BRACE);
+ */
+
+/**
+ * Represents listener based call back function corresponding to the
+ * "when" rule defined in ANTLR grammar file for corresponding ABNF rule
+ * in RFC 6020.
+ */
+public final class WhenListener {
+
+ /**
+ * Creates a new when listener.
+ */
+ private WhenListener() {
+ }
+
+ /**
+ * Perform validations and updates the data model tree.It is called when parser
+ * receives an input matching the grammar rule (when).
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processWhenEntry(TreeWalkListener listener,
+ WhenStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, WHEN_DATA, ctx.string().getText(), ENTRY);
+ String condition = removeQuotesAndHandleConcat(ctx.string().getText());
+
+ YangWhenHolder whenHolder;
+
+ // Obtain the node of the stack.
+ Parsable tmpNode = listener.getParsedDataStack().peek();
+ if (tmpNode instanceof YangWhenHolder) {
+ whenHolder = (YangWhenHolder) tmpNode;
+
+ YangWhen when = new YangWhen();
+ when.setCondition(condition);
+
+ when.setLineNumber(ctx.getStart().getLine());
+ when.setCharPosition(ctx.getStart().getCharPositionInLine());
+ when.setFileName(listener.getFileName());
+
+ whenHolder.setWhen(when);
+ listener.getParsedDataStack().push(when);
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER,
+ WHEN_DATA, ctx.string().getText(), ENTRY));
+ }
+ }
+
+ /**
+ * Performs validation and updates the data model tree.It is called when parser
+ * exits from grammar rule (when).
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processWhenExit(TreeWalkListener listener,
+ WhenStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, WHEN_DATA, ctx.string().getText(), EXIT);
+
+ if (listener.getParsedDataStack().peek() instanceof YangWhen) {
+ listener.getParsedDataStack().pop();
+ } else {
+ throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, WHEN_DATA,
+ ctx.string().getText(), EXIT));
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/package-info.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/package-info.java
new file mode 100644
index 0000000..71a1796
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/listeners/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+/**
+ * Provide call back functions for listeners based tree walk.
+ */
+package org.onosproject.yang.compiler.parser.impl.listeners;
\ No newline at end of file
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/package-info.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/package-info.java
new file mode 100644
index 0000000..1dfb458
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+/**
+ * Parse the YANG information from ANTLR generated parse tree.
+ */
+package org.onosproject.yang.compiler.parser.impl;
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/parserutils/ListenerCollisionDetector.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/parserutils/ListenerCollisionDetector.java
new file mode 100644
index 0000000..d13e7f9
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/parserutils/ListenerCollisionDetector.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.parserutils;
+
+import org.onosproject.yang.compiler.datamodel.CollisionDetector;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.EXIT;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
+
+/**
+ * Represents the detector of YANG construct collision in a YANG file.
+ */
+public final class ListenerCollisionDetector {
+
+ /**
+ * Creates a new listener collision.
+ */
+ private ListenerCollisionDetector() {
+ }
+
+ /**
+ * Detects that the identifiers of all these child nodes must be unique
+ * within all cases in a choice.
+ *
+ * @param listener listener's object
+ * @param line line of identifier in YANG file, required for error
+ * reporting
+ * @param charPosition character position of identifier in YANG file,
+ * required for error reporting
+ * @param identifierName name for which uniqueness is to be detected
+ * @param constructType type of YANG construct for which collision check is
+ * to be performed
+ * @throws ParserException if identifier is not unique
+ */
+ public static void detectCollidingChildUtil(TreeWalkListener listener, int line, int charPosition,
+ String identifierName, YangConstructType constructType)
+ throws ParserException {
+
+ Object obj = listener.getParsedDataStack().peek();
+ if (obj instanceof CollisionDetector) {
+ try {
+ ((CollisionDetector) obj).detectCollidingChild(
+ identifierName, constructType);
+ } catch (DataModelException e) {
+ ParserException parserException = new ParserException(e.getMessage());
+ parserException.setLine(line);
+ parserException.setCharPosition(charPosition);
+ throw parserException;
+ }
+ } else {
+ throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, constructType, identifierName,
+ EXIT));
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/parserutils/ListenerErrorLocation.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/parserutils/ListenerErrorLocation.java
new file mode 100644
index 0000000..8d98840
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/parserutils/ListenerErrorLocation.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.parserutils;
+
+/**
+ * Represents listener error location.
+ */
+public enum ListenerErrorLocation {
+ /**
+ * Represents that the error location is before processing.
+ */
+ ENTRY(),
+
+ /**
+ * Represents that the error location is before processing.
+ */
+ EXIT();
+
+ /**
+ * Returns the message corresponding to listener error location.
+ *
+ * @param errorLocation enum value for type of error
+ * @return message corresponding to listener error location
+ */
+ public static String getErrorLocationMessage(ListenerErrorLocation errorLocation) {
+
+ switch (errorLocation) {
+ case ENTRY:
+ return "before";
+ case EXIT:
+ return "after";
+ default:
+ return "during";
+ }
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/parserutils/ListenerErrorMessageConstruction.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/parserutils/ListenerErrorMessageConstruction.java
new file mode 100644
index 0000000..db20b50
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/parserutils/ListenerErrorMessageConstruction.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.parserutils;
+
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.getYangConstructType;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorLocation.getErrorLocationMessage;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorType.getErrorType;
+
+/**
+ * Represents a utility to help construct detailed error message.
+ */
+public final class ListenerErrorMessageConstruction {
+
+ /**
+ * Creates a object of listen error message.
+ */
+ private ListenerErrorMessageConstruction() {
+ }
+
+ /**
+ * Constructs message for error with extended information and returns the
+ * same.
+ *
+ * @param errorType error type needs to be set in error message
+ * @param yangConstructType type of parsable data in which error occurred
+ * @param parsableDataTypeName identifier/string of parsable data type in
+ * which error occurred
+ * @param errorLocation location where error occurred
+ * @param extendedErrorInformation extended error information
+ * @return constructed error message
+ */
+ public static String constructExtendedListenerErrorMessage(ListenerErrorType errorType,
+ YangConstructType yangConstructType,
+ String parsableDataTypeName,
+ ListenerErrorLocation errorLocation,
+ String extendedErrorInformation) {
+ String newErrorMessage;
+ newErrorMessage = constructListenerErrorMessage(errorType, yangConstructType, parsableDataTypeName,
+ errorLocation)
+ + "\n"
+ + "Error Information: "
+ + extendedErrorInformation;
+ return newErrorMessage;
+ }
+
+ /**
+ * Constructs message for error during listener based tree walk and returns
+ * the same.
+ *
+ * @param errorType error type needs to be set in error message
+ * @param yangConstructType type of parsable data in which error occurred
+ * @param parsableDataTypeName identifier/string of parsable data type in
+ * which error occurred
+ * @param errorLocation location where error occurred
+ * @return constructed error message
+ */
+ public static String constructListenerErrorMessage(ListenerErrorType errorType,
+ YangConstructType yangConstructType,
+ String parsableDataTypeName,
+ ListenerErrorLocation errorLocation) {
+
+ String errorMessage;
+
+ errorMessage = "Internal parser error detected: " + getErrorType(errorType) + " "
+ + getYangConstructType(yangConstructType);
+
+ if (!parsableDataTypeName.isEmpty()) {
+ errorMessage = errorMessage + " \"" + parsableDataTypeName + "\" ";
+ } else {
+ errorMessage = errorMessage + " ";
+
+ }
+ errorMessage = errorMessage + getErrorLocationMessage(errorLocation) + " processing.";
+ return errorMessage;
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/parserutils/ListenerErrorType.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/parserutils/ListenerErrorType.java
new file mode 100644
index 0000000..7e0aa5c
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/parserutils/ListenerErrorType.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.parserutils;
+
+/**
+ * Represents listener error type.
+ */
+public enum ListenerErrorType {
+ /**
+ * Represents the parent holder in parsable stack for given YANG construct
+ * is invalid.
+ */
+ INVALID_HOLDER(),
+
+ /**
+ * Represents the parent holder in parsable stack for given YANG construct
+ * is missing.
+ */
+ MISSING_HOLDER(),
+
+ /**
+ * Represents the current holder in parsable stack for given YANG construct
+ * is missing.
+ */
+ MISSING_CURRENT_HOLDER(),
+
+ /**
+ * Represents that the child in parsable stack for given YANG construct is
+ * invalid.
+ */
+ INVALID_CHILD(),
+
+ /**
+ * Represents that the cardinality for given YANG construct is invalid.
+ */
+ INVALID_CARDINALITY(),
+
+ /**
+ * Represents that the entry is duplicate.
+ */
+ DUPLICATE_ENTRY(),
+
+ /**
+ * Represents that the content is invalid.
+ */
+ INVALID_CONTENT(),
+
+ /**
+ * Represents that the identifier collision is detected.
+ */
+ IDENTIFIER_COLLISION(),
+
+ /**
+ * Represents that some of earlier parsed data is not handled correctly.
+ */
+ UNHANDLED_PARSED_DATA();
+
+ /**
+ * Returns the message corresponding to listener error type.
+ *
+ * @param errorType enum value for type of error
+ * @return message corresponding to listener error type
+ */
+ public static String getErrorType(ListenerErrorType errorType) {
+
+ switch (errorType) {
+ case INVALID_HOLDER:
+ return "Invalid holder for";
+ case MISSING_HOLDER:
+ return "Missing holder at";
+ case MISSING_CURRENT_HOLDER:
+ return "Missing";
+ case INVALID_CHILD:
+ return "Invalid child in";
+ case INVALID_CARDINALITY:
+ return "Invalid cardinality in";
+ case DUPLICATE_ENTRY:
+ return "Duplicate";
+ case INVALID_CONTENT:
+ return "Invalid content in";
+ case IDENTIFIER_COLLISION:
+ return "Identifier collision detected for";
+ case UNHANDLED_PARSED_DATA:
+ return "Unhandled parsed data at";
+ default:
+ return "Problem in";
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/parserutils/ListenerUtil.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/parserutils/ListenerUtil.java
new file mode 100644
index 0000000..e71eb98
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/parserutils/ListenerUtil.java
@@ -0,0 +1,1061 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.parserutils;
+
+import org.antlr.v4.runtime.ParserRuleContext;
+import org.onosproject.yang.compiler.datamodel.YangAtomicPath;
+import org.onosproject.yang.compiler.datamodel.YangImport;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafRef;
+import org.onosproject.yang.compiler.datamodel.YangLeavesHolder;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeIdentifier;
+import org.onosproject.yang.compiler.datamodel.YangPathArgType;
+import org.onosproject.yang.compiler.datamodel.YangPathPredicate;
+import org.onosproject.yang.compiler.datamodel.YangReferenceResolver;
+import org.onosproject.yang.compiler.datamodel.YangRelativePath;
+import org.onosproject.yang.compiler.datamodel.YangSubModule;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import static org.onosproject.yang.compiler.datamodel.YangPathOperator.EQUALTO;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.UNIQUE_DATA;
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.getYangConstructType;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.PathStatementContext;
+import static org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser.YangVersionStatementContext;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ADD;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ANCESTOR;
+import static org.onosproject.yang.compiler.utils.UtilConstants.CARET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.CHAR_OF_OPEN_SQUARE_BRACKET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.CHAR_OF_SLASH;
+import static org.onosproject.yang.compiler.utils.UtilConstants.CLOSE_PARENTHESIS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.COLON;
+import static org.onosproject.yang.compiler.utils.UtilConstants.CURRENT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EMPTY_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.FALSE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.INVALID_TREE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OPEN_SQUARE_BRACKET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.QUOTES;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SLASH;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SLASH_ANCESTOR;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SLASH_FOR_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.TRUE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.YANG_FILE_ERROR;
+
+/**
+ * Represents an utility for listener.
+ */
+public final class ListenerUtil {
+
+ private static final Pattern IDENTIFIER_PATTERN =
+ Pattern.compile("[a-zA-Z_][a-zA-Z0-9_.-]*");
+ private static final String DATE_PATTERN =
+ "[0-9]{4}-([0-9]{2}|[0-9])-([0-9]{2}|[0-9])";
+ private static final String NON_NEGATIVE_INTEGER_PATTERN = "[0-9]+";
+ private static final Pattern INTEGER_PATTERN =
+ Pattern.compile("[-][0-9]+|[0-9]+");
+ private static final Pattern PREDICATE =
+ Pattern.compile("\\[(.*?)\\]");
+ private static final String XML = "xml";
+ private static final String ONE = "1";
+ private static final int IDENTIFIER_LENGTH = 64;
+ private static final String DATE_FORMAT = "yyyy-MM-dd";
+ private static final String REGEX_EQUAL = "[=]";
+ private static final String REGEX_OPEN_BRACE = "[(]";
+
+ // No instantiation.
+ private ListenerUtil() {
+ }
+
+ /**
+ * Removes doubles quotes and concatenates if string has plus symbol.
+ *
+ * @param yangStringData string from yang file
+ * @return concatenated string after removing double quotes
+ */
+ public static String removeQuotesAndHandleConcat(String yangStringData) {
+
+ yangStringData = yangStringData.replace("\"", EMPTY_STRING);
+ String[] tmpData = yangStringData.split(Pattern.quote(ADD));
+ StringBuilder builder = new StringBuilder();
+ for (String yangString : tmpData) {
+ builder.append(yangString);
+ }
+ return builder.toString();
+ }
+
+ /**
+ * Validates identifier and returns concatenated string if string contains plus symbol.
+ *
+ * @param identifier string from yang file
+ * @param yangConstruct yang construct for creating error message
+ * @param ctx yang construct's context to get the line number and character position
+ * @return concatenated string after removing double quotes
+ */
+ public static String getValidIdentifier(String identifier,
+ YangConstructType yangConstruct,
+ ParserRuleContext ctx) {
+
+ String identifierString = removeQuotesAndHandleConcat(identifier);
+ ParserException parserException;
+
+ if (identifierString.length() > IDENTIFIER_LENGTH) {
+ parserException = new ParserException("YANG file error : " +
+ getYangConstructType(yangConstruct) + " name " + identifierString + " is " +
+ "greater than 64 characters.");
+ } else if (!IDENTIFIER_PATTERN.matcher(identifierString).matches()) {
+ parserException = new ParserException("YANG file error : " +
+ getYangConstructType(yangConstruct) + " name " + identifierString + " is not " +
+ "valid.");
+ } else if (identifierString.toLowerCase().startsWith(XML)) {
+ parserException = new ParserException("YANG file error : " +
+ getYangConstructType(yangConstruct) + " identifier " + identifierString +
+ " must not start with (('X'|'x') ('M'|'m') ('L'|'l')).");
+ } else {
+ return identifierString;
+ }
+
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+
+ /**
+ * Validates the revision date.
+ *
+ * @param dateToValidate input revision date
+ * @return validation result, true for success, false for failure
+ */
+ public static boolean isDateValid(String dateToValidate) {
+ if (dateToValidate == null || !dateToValidate.matches(DATE_PATTERN)) {
+ return false;
+ }
+
+ SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
+ sdf.setLenient(false);
+
+ try {
+ //if not valid, it will throw ParseException
+ sdf.parse(dateToValidate);
+ } catch (ParseException e) {
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Validates YANG version.
+ *
+ * @param ctx version context object of the grammar rule
+ * @return valid version
+ */
+ public static byte getValidVersion(YangVersionStatementContext ctx) {
+
+ String value = removeQuotesAndHandleConcat(ctx.version().getText());
+ if (!value.equals(ONE)) {
+ ParserException parserException = new ParserException("YANG file error: Input version not supported");
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+
+ return Byte.valueOf(value);
+ }
+
+ /**
+ * Validates non negative integer value.
+ *
+ * @param integerValue integer to be validated
+ * @param yangConstruct yang construct for creating error message
+ * @param ctx context object of the grammar rule
+ * @return valid non negative integer value
+ */
+ public static int getValidNonNegativeIntegerValue(String integerValue, YangConstructType yangConstruct,
+ ParserRuleContext ctx) {
+
+ String value = removeQuotesAndHandleConcat(integerValue);
+ if (!value.matches(NON_NEGATIVE_INTEGER_PATTERN)) {
+ ParserException parserException = new ParserException("YANG file error : " +
+ getYangConstructType(yangConstruct) + " value " + value + " is not " +
+ "valid.");
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+
+ int valueInInteger;
+ try {
+ valueInInteger = Integer.parseInt(value);
+ } catch (NumberFormatException e) {
+ ParserException parserException = new ParserException("YANG file error : " +
+ getYangConstructType(yangConstruct) + " value " + value + " is not " +
+ "valid.");
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+ return valueInInteger;
+ }
+
+ /**
+ * Validates integer value.
+ *
+ * @param integerValue integer to be validated
+ * @param yangConstruct yang construct for creating error message
+ * @param ctx context object of the grammar rule
+ * @return valid integer value
+ */
+ public static int getValidIntegerValue(String integerValue, YangConstructType yangConstruct,
+ ParserRuleContext ctx) {
+
+ String value = removeQuotesAndHandleConcat(integerValue);
+ if (!INTEGER_PATTERN.matcher(value).matches()) {
+ ParserException parserException = new ParserException("YANG file error : " +
+ getYangConstructType(yangConstruct) + " value " + value + " is not " +
+ "valid.");
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+
+ int valueInInteger;
+ try {
+ valueInInteger = Integer.parseInt(value);
+ } catch (NumberFormatException e) {
+ ParserException parserException = new ParserException("YANG file error : " +
+ getYangConstructType(yangConstruct) + " value " + value + " is not " +
+ "valid.");
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+ return valueInInteger;
+ }
+
+ /**
+ * Validates boolean value.
+ *
+ * @param booleanValue value to be validated
+ * @param yangConstruct yang construct for creating error message
+ * @param ctx context object of the grammar rule
+ * @return boolean value either true or false
+ */
+ public static boolean getValidBooleanValue(String booleanValue, YangConstructType yangConstruct,
+ ParserRuleContext ctx) {
+
+ String value = removeQuotesAndHandleConcat(booleanValue);
+ if (value.equals(TRUE)) {
+ return true;
+ } else if (value.equals(FALSE)) {
+ return false;
+ } else {
+ ParserException parserException = new ParserException("YANG file error : " +
+ getYangConstructType(yangConstruct) + " value " + value + " is not " +
+ "valid.");
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+ }
+
+ /**
+ * Returns current date and makes it in usable format for revision.
+ *
+ * @return usable current date format for revision
+ */
+ public static Date getCurrentDateForRevision() {
+
+ SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);
+
+ Date date = new Date();
+ String dateInString = dateFormat.format(date);
+ try {
+ //if not valid, it will throw ParseException
+ Date now = dateFormat.parse(dateInString);
+ return date;
+ } catch (ParseException e) {
+ ParserException parserException = new ParserException("YANG file error: Input date is not correct");
+ throw parserException;
+ }
+ }
+
+ /**
+ * Checks and return valid node identifier.
+ *
+ * @param nodeIdentifierString string from yang file
+ * @param yangConstruct yang construct for creating error message
+ * @param ctx yang construct's context to get the line number and character position
+ * @return valid node identifier
+ */
+ public static YangNodeIdentifier getValidNodeIdentifier(String nodeIdentifierString,
+ YangConstructType yangConstruct, ParserRuleContext ctx) {
+ String tmpIdentifierString = removeQuotesAndHandleConcat(nodeIdentifierString);
+ String[] tmpData = tmpIdentifierString.split(Pattern.quote(COLON));
+ if (tmpData.length == 1) {
+ YangNodeIdentifier nodeIdentifier = new YangNodeIdentifier();
+ nodeIdentifier.setName(getValidIdentifier(tmpData[0], yangConstruct, ctx));
+ return nodeIdentifier;
+ } else if (tmpData.length == 2) {
+ YangNodeIdentifier nodeIdentifier = new YangNodeIdentifier();
+ nodeIdentifier.setPrefix(getValidIdentifier(tmpData[0], yangConstruct, ctx));
+ nodeIdentifier.setName(getValidIdentifier(tmpData[1], yangConstruct, ctx));
+ return nodeIdentifier;
+ } else {
+ ParserException parserException = new ParserException("YANG file error : " +
+ getYangConstructType(yangConstruct) + " name " + nodeIdentifierString +
+ " is not valid.");
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+ }
+
+ /**
+ * Validates the prefix of the YANG file where leaf-ref is present and
+ * puts it in the map of node and prefix in leaf-ref.
+ *
+ * @param atomicList atomic content list in leaf-ref
+ * @param leafRef YANG leaf-ref
+ */
+ private static void valPrefix(List<YangAtomicPath> atomicList,
+ YangLeafRef leafRef) {
+
+ for (YangAtomicPath atomicPath : atomicList) {
+ String prefix = atomicPath.getNodeIdentifier().getPrefix();
+ YangNode parent = leafRef.getParentNode();
+ YangNode rootNode = getRootNode(parent);
+
+ List<YangImport> imports;
+ if (rootNode instanceof YangModule) {
+ imports = ((YangModule) rootNode).getImportList();
+ } else {
+ imports = ((YangSubModule) rootNode).getImportList();
+ }
+ updatePrefixWithNode(rootNode, imports, prefix, leafRef);
+ }
+ }
+
+ /**
+ * Updates the prefix and its respective node in the leaf-ref by taking
+ * the node from the import list of the root node which matches with the
+ * prefix.
+ *
+ * @param root root node
+ * @param imports import list
+ * @param prefix prefix in path
+ * @param leafRef YANG leaf-ref
+ */
+ private static void updatePrefixWithNode(YangNode root,
+ List<YangImport> imports,
+ String prefix,
+ YangLeafRef<?> leafRef) {
+
+ Map<String, String> prefixMap = leafRef.getPrefixAndNode();
+ if (prefixMap == null) {
+ prefixMap = new HashMap<>();
+ leafRef.setPrefixAndNode(prefixMap);
+ }
+
+ if (prefix == null ||
+ prefix.equals(((YangReferenceResolver) root).getPrefix())) {
+ prefixMap.put(prefix, root.getName());
+ return;
+ }
+
+ if (imports != null) {
+ for (YangImport yangImp : imports) {
+ if (yangImp.getPrefixId().equals(prefix)) {
+ prefixMap.put(prefix, yangImp.getModuleName());
+ }
+ }
+ }
+ }
+
+ /**
+ * Returns the root node from the current node.
+ *
+ * @param node YANG node
+ * @return root node
+ */
+ private static YangNode getRootNode(YangNode node) {
+
+ YangNode curNode = node;
+ while (!(curNode instanceof YangModule) &&
+ !(curNode instanceof YangSubModule)) {
+ if (curNode == null) {
+ throw new ParserException(INVALID_TREE);
+ }
+ curNode = curNode.getParent();
+ }
+ return curNode;
+ }
+
+ /**
+ * Validates the unique syntax from the reference path.
+ *
+ * @param uniquePath path of unique
+ * @param prefixOfFile current file's prefix
+ * @param ctx yang construct's context to get the line number and character position
+ * @return list of absolute path
+ */
+ private static List<YangAtomicPath> validateUniqueValues(String uniquePath, String prefixOfFile,
+ ParserRuleContext ctx) {
+ List<YangAtomicPath> atomicPath = new LinkedList<>();
+ String[] pathInUnique = uniquePath.split(SLASH_FOR_STRING);
+ for (String uniqueValue : pathInUnique) {
+ YangAtomicPath yangAtomicPathPath = new YangAtomicPath();
+ YangNodeIdentifier nodeIdentifier = getValidNodeIdentifier(uniqueValue, UNIQUE_DATA, ctx);
+ yangAtomicPathPath.setNodeIdentifier(nodeIdentifier);
+ atomicPath.add(yangAtomicPathPath);
+ if (nodeIdentifier.getPrefix() != null && nodeIdentifier.getPrefix() != prefixOfFile) {
+ ParserException parserException = new ParserException("YANG file error : A leaf reference, in unique," +
+ " must refer to a leaf in the list");
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+ }
+ return atomicPath;
+ }
+
+ /**
+ * Validates unique field from the list.
+ *
+ * @param yangList instance of YANG list
+ * @param ctx yang construct's context to get the line number and character position
+ */
+ public static void validateUniqueInList(YangList yangList, ParserRuleContext ctx) {
+ YangLeaf leaf;
+ // Returns the prefix for the file where unique is present.
+ String prefixOfTheFile = getRootPrefix(yangList);
+ List<String> uniques = yangList.getUniqueList();
+ if (uniques != null && !uniques.isEmpty()) {
+ Iterator<String> uniqueList = uniques.listIterator();
+ while (uniqueList.hasNext()) {
+ String pathInUnique = uniqueList.next();
+ List<YangAtomicPath> atomicPathInUnique = validateUniqueValues(pathInUnique, prefixOfTheFile, ctx);
+ YangAtomicPath leafInPath = atomicPathInUnique.get(atomicPathInUnique.size() - 1);
+ if (atomicPathInUnique.size() == 1) {
+ leaf = getReferenceLeafFromUnique(yangList, leafInPath);
+ } else {
+ atomicPathInUnique.remove(atomicPathInUnique.size() - 1);
+ YangNode holderOfLeaf = getNodeUnderListFromPath(atomicPathInUnique, yangList, ctx);
+ leaf = getReferenceLeafFromUnique(holderOfLeaf, leafInPath);
+ }
+ if (leaf == null) {
+ ParserException parserException = new ParserException("YANG file error : A leaf reference, in " +
+ "unique," +
+ " must refer to a leaf under the list");
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+ }
+ }
+ }
+
+ /**
+ * Returns the last node under the unique path.
+ *
+ * @param uniquePath atomic path list
+ * @param node root node from where it starts searching
+ * @param ctx yang construct's context to get the line number and character position
+ * @return last node in the list
+ */
+ private static YangNode getNodeUnderListFromPath(List<YangAtomicPath> uniquePath, YangNode node,
+ ParserRuleContext ctx) {
+ Iterator<YangAtomicPath> nodesInReference = uniquePath.listIterator();
+ YangNode potentialReferredNode = node.getChild();
+ while (nodesInReference.hasNext()) {
+ YangAtomicPath nodeInUnique = nodesInReference.next();
+ YangNode referredNode = getReferredNodeFromTheUniqueNodes(nodeInUnique.getNodeIdentifier(),
+ potentialReferredNode);
+ if (referredNode == null) {
+ ParserException parserException = new ParserException("YANG file error : The target node in unique " +
+ "reference path is invalid");
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ } else {
+ potentialReferredNode = referredNode.getChild();
+ }
+ }
+ return potentialReferredNode;
+ }
+
+ /**
+ * Returns the node that matches with the name of the node in path.
+ *
+ * @param nodeInUnique node name in path
+ * @param potentialReferredNode node under which it has to match
+ * @return referred node
+ */
+ private static YangNode getReferredNodeFromTheUniqueNodes(YangNodeIdentifier nodeInUnique, YangNode
+ potentialReferredNode) {
+ while (potentialReferredNode != null) {
+ // Check if the potential referred node is the actual referred node
+ if (potentialReferredNode.getName().equals(nodeInUnique.getName())) {
+ return potentialReferredNode;
+ }
+ potentialReferredNode = potentialReferredNode.getNextSibling();
+ }
+ return null;
+ }
+
+ /**
+ * Returns the leaf which unique refers.
+ *
+ * @param nodeForLeaf last node where leaf is referred
+ * @param leafInUnique leaf in unique path
+ * @return YANG leaf
+ */
+ private static YangLeaf getReferenceLeafFromUnique(YangNode nodeForLeaf, YangAtomicPath leafInUnique) {
+ YangLeavesHolder leavesHolder = (YangLeavesHolder) nodeForLeaf;
+ List<YangLeaf> leaves = leavesHolder.getListOfLeaf();
+ if (leaves != null && !leaves.isEmpty()) {
+ for (YangLeaf leaf : leaves) {
+ if (leafInUnique.getNodeIdentifier().getName().equals(leaf.getName())) {
+ return leaf;
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns the prefix of the root node from any node inside it.
+ *
+ * @param curNode YANG node
+ * @return prefix of the root node
+ */
+ public static String getRootPrefix(YangNode curNode) {
+
+ String prefix;
+ YangNode node = getRootNode(curNode);
+ if (node instanceof YangModule) {
+ YangModule yangModule = (YangModule) node;
+ prefix = yangModule.getPrefix();
+ } else {
+ YangSubModule yangSubModule = (YangSubModule) node;
+ prefix = yangSubModule.getPrefix();
+ }
+ return prefix;
+ }
+
+ /**
+ * Returns the matched first path predicate in a given string. Returns
+ * null if match is not found.
+ *
+ * @param str string to be matched
+ * @return the matched string
+ */
+ private static String getMatchedPredicate(String str) {
+
+ Matcher matcher = PREDICATE.matcher(str);
+ if (matcher.find()) {
+ return matcher.group(0);
+ }
+ return null;
+ }
+
+ /**
+ * Checks and return valid absolute schema node id.
+ *
+ * @param argumentString string from yang file
+ * @param yangConstructType yang construct for creating error message
+ * @param ctx yang construct's context to get the line number and character position
+ * @return target nodes list of absolute schema node id
+ */
+ public static List<YangAtomicPath> getValidAbsoluteSchemaNodeId(String argumentString,
+ YangConstructType yangConstructType,
+ ParserRuleContext ctx) {
+
+ List<YangAtomicPath> targetNodes = new ArrayList<>();
+ YangNodeIdentifier yangNodeIdentifier;
+ String tmpSchemaNodeId = removeQuotesAndHandleConcat(argumentString);
+
+ // absolute-schema-nodeid = 1*("/" node-identifier)
+ if (!tmpSchemaNodeId.startsWith(SLASH)) {
+ ParserException parserException = new ParserException("YANG file error : " +
+ getYangConstructType(yangConstructType) + " name " + argumentString +
+ "is not valid");
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+ String[] tmpData = tmpSchemaNodeId.replaceFirst(CARET + SLASH, EMPTY_STRING).split(SLASH);
+ for (String nodeIdentifiers : tmpData) {
+ yangNodeIdentifier = getValidNodeIdentifier(nodeIdentifiers, yangConstructType, ctx);
+ YangAtomicPath yangAbsPath = new YangAtomicPath();
+ yangAbsPath.setNodeIdentifier(yangNodeIdentifier);
+ targetNodes.add(yangAbsPath);
+ }
+ return targetNodes;
+ }
+
+ /**
+ * Throws parser exception for unsupported YANG constructs.
+ *
+ * @param type construct type
+ * @param ctx construct context
+ * @param errorInfo error msg
+ * @param fileName YANG file name
+ */
+ public static void handleUnsupportedYangConstruct(YangConstructType type,
+ ParserRuleContext ctx,
+ String errorInfo,
+ String fileName) {
+ ParserException parserException = new ParserException(
+ YANG_FILE_ERROR + QUOTES + getYangConstructType(
+ type) + QUOTES + errorInfo);
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ //FIXME this exception should probably be thrown rather than just logged
+ //throw parserException;
+ }
+
+ /**
+ * Returns date and makes it in usable format for revision.
+ *
+ * @param dateInString date argument string from yang file
+ * @param ctx yang construct's context to get the line number and character position
+ * @return date format for revision
+ */
+ public static Date getValidDateFromString(String dateInString, ParserRuleContext ctx) {
+ String dateArgument = removeQuotesAndHandleConcat(dateInString);
+ if (!dateArgument.matches(DATE_PATTERN)) {
+ ParserException parserException = new ParserException("YANG file error: Input date is not correct");
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+
+ SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
+ sdf.setLenient(false);
+
+ try {
+ //if not valid, it will throw ParseException
+ return sdf.parse(dateArgument);
+ } catch (ParseException e) {
+ ParserException parserException = new ParserException("YANG file error: Input date is not correct");
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+ }
+
+ /**
+ * Checks and return valid prefix.
+ *
+ * @param inputString string from yang file
+ * @param yangConstruct yang construct for creating error message
+ * @param ctx yang construct's context to get the line number and character position
+ * @return valid prefix
+ */
+ public static String getValidPrefix(String inputString,
+ YangConstructType yangConstruct, ParserRuleContext ctx) {
+ String tmpPrefixString = removeQuotesAndHandleConcat(inputString);
+ String[] tmpData = tmpPrefixString.split(Pattern.quote(COLON));
+ if (tmpData.length == 2) {
+ return tmpData[0];
+ } else {
+ ParserException parserException = new ParserException("YANG file error : " +
+ getYangConstructType(yangConstruct) + " name " + inputString +
+ " is not valid.");
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+ }
+
+ /**
+ * Validates path under leaf-ref and parses the path and stores in the
+ * leaf-ref.
+ *
+ * @param path path of leaf-ref
+ * @param type construct type
+ * @param ctx construct details
+ * @param leafRef YANG leaf-ref having path
+ */
+ public static void validatePath(String path, YangConstructType type,
+ PathStatementContext ctx,
+ YangLeafRef leafRef) {
+
+ String concatPath = removeQuotesAndHandleConcat(path);
+ if (!concatPath.startsWith(SLASH_FOR_STRING) &&
+ !concatPath.startsWith(ANCESTOR)) {
+ throw getPathException(ctx, leafRef);
+ }
+ leafRef.setPath(concatPath);
+ if (concatPath.startsWith(SLASH_FOR_STRING)) {
+ List<YangAtomicPath> atomicList = new LinkedList<>();
+ valAbsPath(concatPath, atomicList, ctx, leafRef, type);
+ leafRef.setPathType(YangPathArgType.ABSOLUTE_PATH);
+ valPrefix(atomicList, leafRef);
+ leafRef.setAtomicPath(atomicList);
+ return;
+ }
+ leafRef.setPathType(YangPathArgType.RELATIVE_PATH);
+ valRelPath(concatPath, leafRef, ctx, type);
+ }
+
+ /**
+ * Validates relative path, parses the string and stores it in the leaf-ref.
+ *
+ * @param path leaf-ref path
+ * @param leafRef YANG leaf-ref data model information
+ * @param pathType yang construct for creating error message
+ */
+ private static void valRelPath(String path, YangLeafRef leafRef,
+ PathStatementContext pathCtx,
+ YangConstructType pathType) {
+
+ YangRelativePath relPath = new YangRelativePath();
+ int count = 0;
+ while (path.startsWith(SLASH_ANCESTOR)) {
+ path = path.replaceFirst(SLASH_ANCESTOR, EMPTY_STRING);
+ count = count + 1;
+ }
+ if (path.isEmpty()) {
+ throw getPathException(pathCtx, leafRef);
+ }
+
+ List<YangAtomicPath> atomicList = new ArrayList<>();
+ relPath.setAncestorNodeCount(count);
+ valAbsPath(SLASH_FOR_STRING + path, atomicList, pathCtx, leafRef,
+ pathType);
+ valPrefix(atomicList, leafRef);
+ relPath.setAtomicPathList(atomicList);
+ leafRef.setRelativePath(relPath);
+ }
+
+ /**
+ * Validates absolute path, parses the string and stores it in leaf-ref.
+ *
+ * @param path leaf-ref path
+ * @param atomics atomic content list
+ * @param pathCtx path statement context
+ * @param yangLeafRef YANG leaf ref
+ * @param pathType yang construct for creating error message
+ */
+ private static void valAbsPath(String path, List<YangAtomicPath> atomics,
+ PathStatementContext pathCtx,
+ YangLeafRef yangLeafRef,
+ YangConstructType pathType) {
+
+ String comPath = path;
+ while (comPath != null) {
+ comPath = comPath.substring(1);
+ if (comPath.isEmpty()) {
+ throw getPathException(pathCtx, yangLeafRef);
+ }
+ int nodeId = comPath.indexOf(CHAR_OF_SLASH);
+ int predicate = comPath.indexOf(CHAR_OF_OPEN_SQUARE_BRACKET);
+ if (predicate < nodeId && predicate != -1) {
+ comPath = getPathWithPredicate(comPath, atomics,
+ pathCtx, yangLeafRef, pathType);
+ } else {
+ comPath = getPath(comPath, atomics, pathType, pathCtx);
+ }
+ }
+ }
+
+ /**
+ * Returns the remaining path after parsing and the predicates of an atomic
+ * content.
+ *
+ * @param path leaf-ref path
+ * @param atomics atomic content list
+ * @param pathCtx yang construct's context to get the line number and
+ * character position
+ * @param yangLeafRef YANG leaf-ref data model information
+ * @param pathType yang construct for creating error message
+ * @return parsed path after removing one atomic content.
+ */
+ private static String getPathWithPredicate(String path,
+ List<YangAtomicPath> atomics,
+ PathStatementContext pathCtx,
+ YangLeafRef yangLeafRef,
+ YangConstructType pathType) {
+
+ String[] node = new String[2];
+ int bracket = path.indexOf(CHAR_OF_OPEN_SQUARE_BRACKET);
+ node[0] = path.substring(0, bracket);
+ node[1] = path.substring(bracket);
+ return getParsedPath(node[0], node[1], atomics, pathCtx, yangLeafRef,
+ pathType);
+ }
+
+ /**
+ * Returns the path after taking all the path predicates of an atomic
+ * content.
+ *
+ * @param nodeId atomic content nodeId
+ * @param path leaf-ref path
+ * @param atomics atomic content list
+ * @param pathCtx yang construct's context to get the line number
+ * and character position
+ * @param yangLeafRef YANG leaf-ref data model information
+ * @param pathType yang construct for creating error message
+ * @return parsed path after removing one atomic content.
+ */
+ public static String getParsedPath(String nodeId, String path,
+ List<YangAtomicPath> atomics,
+ PathStatementContext pathCtx,
+ YangLeafRef yangLeafRef,
+ YangConstructType pathType) {
+
+ String comPath = path;
+ List<String> predicateList = new ArrayList<>();
+ while (comPath.startsWith(OPEN_SQUARE_BRACKET)) {
+ String matchedVal = getMatchedPredicate(comPath);
+ if (matchedVal == null || matchedVal.isEmpty()) {
+ throw getPathException(pathCtx, yangLeafRef);
+ }
+ predicateList.add(matchedVal);
+ comPath = comPath.substring(matchedVal.length());
+ }
+
+ YangAtomicPath atomicPath = new YangAtomicPath();
+ YangNodeIdentifier validId =
+ getValidNodeIdentifier(nodeId, pathType, pathCtx);
+
+ List<YangPathPredicate> predicates = valPathPredicates(predicateList,
+ pathType,
+ pathCtx, yangLeafRef);
+ atomicPath.setNodeIdentifier(validId);
+ atomicPath.setPathPredicatesList(predicates);
+ atomics.add(atomicPath);
+ return comPath;
+ }
+
+ /**
+ * Validates the path predicates of an atomic content after parsing the
+ * predicates and storing it in the leaf-ref.
+ *
+ * @param predicates list of predicates
+ * @param pathType yang construct for creating error message
+ * @param pathCtx yang construct's context to get the line number
+ * and character position
+ * @param yangLeafRef YANG leaf-ref data model information
+ * @return list of path predicates of an atomic content
+ */
+ private static List<YangPathPredicate> valPathPredicates(List<String> predicates,
+ YangConstructType pathType,
+ PathStatementContext pathCtx,
+ YangLeafRef yangLeafRef) {
+
+ List<YangPathPredicate> result = new ArrayList<>();
+ for (String p : predicates) {
+ p = p.substring(1, p.length() - 1);
+ result.add(valPathEqualityExp(p.trim(), pathType, pathCtx, yangLeafRef));
+ }
+ return result;
+ }
+
+ /**
+ * Validates the path equality expression of a path predicate and after
+ * parsing the string assigns it to the YANG path predicate.
+ *
+ * @param predicate path predicate
+ * @param pathType yang construct for creating error message
+ * @param pathCtx yang construct's context to get the line number
+ * and character position
+ * @param yangLeafRef YANG leaf-ref data model information
+ * @return YANG path predicate
+ */
+ private static YangPathPredicate valPathEqualityExp(String predicate,
+ YangConstructType pathType,
+ PathStatementContext pathCtx,
+ YangLeafRef yangLeafRef) {
+
+ String[] exp = predicate.split(REGEX_EQUAL);
+ YangNodeIdentifier nodeId =
+ getValidNodeIdentifier(exp[0].trim(), pathType, pathCtx);
+ YangRelativePath relPath = valPathKeyExp(exp[1].trim(), pathType,
+ pathCtx, yangLeafRef);
+
+ YangPathPredicate pathPredicate = new YangPathPredicate();
+ pathPredicate.setNodeId(nodeId);
+ pathPredicate.setPathOp(EQUALTO);
+ pathPredicate.setRelPath(relPath);
+ return pathPredicate;
+ }
+
+ /**
+ * Validates the path key expression of the path-predicate and stores it
+ * in the relative path of the leaf-ref.
+ *
+ * @param relPath relative path
+ * @param pathType yang construct for creating error message
+ * @param pathCtx yang construct's context to get the line number
+ * and character position
+ * @param yangLeafRef YANG leaf-ref data model information
+ * @return YANG relative path
+ */
+ private static YangRelativePath valPathKeyExp(String relPath,
+ YangConstructType pathType,
+ PathStatementContext pathCtx,
+ YangLeafRef yangLeafRef) {
+
+ String[] relative = relPath.split(SLASH_FOR_STRING);
+ int count = 0;
+ List<String> atomicContent = new ArrayList<>();
+ for (String val : relative) {
+ if (val.trim().equals(ANCESTOR)) {
+ count = count + 1;
+ } else {
+ atomicContent.add(val);
+ }
+ }
+
+ YangRelativePath relativePath = new YangRelativePath();
+ relativePath.setAncestorNodeCount(count);
+ relativePath.setAtomicPathList(valRelPathKeyExp(atomicContent,
+ pathType,
+ pathCtx, yangLeafRef));
+ return relativePath;
+ }
+
+ /**
+ * Validates relative path key expression in the right relative path of
+ * the path predicate, by taking every atomic content in it.
+ *
+ * @param content atomic content list
+ * @param pathType yang construct for creating error message
+ * @param pathCtx yang construct's context to get the line number
+ * and character position
+ * @param yangLeafRef YANG leaf-ref data model information
+ * @return YANG atomic content list
+ */
+ private static List<YangAtomicPath> valRelPathKeyExp(List<String> content,
+ YangConstructType pathType,
+ PathStatementContext pathCtx,
+ YangLeafRef yangLeafRef) {
+
+ String current = content.get(0);
+ String[] curStr = (current.trim()).split(REGEX_OPEN_BRACE);
+ if (!(curStr[0].trim().equals(CURRENT)) ||
+ !(curStr[1].trim().equals(CLOSE_PARENTHESIS))) {
+ throw getPathException(pathCtx, yangLeafRef);
+ }
+
+ content.remove(0);
+ List<YangAtomicPath> atomicList = new ArrayList<>();
+ for (String relPath : content) {
+ YangNodeIdentifier nodeId =
+ getValidNodeIdentifier(relPath, pathType, pathCtx);
+ YangAtomicPath atomicPath = new YangAtomicPath();
+ atomicPath.setNodeIdentifier(nodeId);
+ atomicList.add(atomicPath);
+ }
+ return atomicList;
+ }
+
+ /**
+ * Returns the remaining path after parsing and processing an atomic
+ * content which doesn't have path-predicate.
+ *
+ * @param path leaf-ref path
+ * @param atomicList atomic content list
+ * @param pathType yang construct for creating error message
+ * @param pathCtx yang construct's context to get the line number
+ * and character position
+ * @return remaining path after parsing one atomic content
+ */
+ public static String getPath(String path, List<YangAtomicPath> atomicList,
+ YangConstructType pathType,
+ PathStatementContext pathCtx) {
+
+ String comPath = path;
+ String nodeId;
+ if (comPath.contains(SLASH_FOR_STRING)) {
+ nodeId = comPath.substring(0, comPath.indexOf(CHAR_OF_SLASH));
+ comPath = comPath.substring(comPath.indexOf(CHAR_OF_SLASH));
+ } else {
+ nodeId = comPath;
+ comPath = null;
+ }
+
+ YangNodeIdentifier validNodeId =
+ getValidNodeIdentifier(nodeId, pathType, pathCtx);
+ YangAtomicPath atomicPath = new YangAtomicPath();
+ atomicPath.setNodeIdentifier(validNodeId);
+ atomicList.add(atomicPath);
+ return comPath;
+ }
+
+ /**
+ * Returns the path syntax parser exception.
+ *
+ * @param pathCtx yang construct's context to get the line number
+ * and character position
+ * @param yangLeafRef YANG leaf-ref data model information
+ * @return parser exception
+ */
+ private static ParserException getPathException(PathStatementContext pathCtx,
+ YangLeafRef yangLeafRef) {
+ ParserException exception = new ParserException(
+ "YANG file error : Path " + yangLeafRef.getPath() +
+ " does not follow valid path syntax");
+ exception.setLine(pathCtx.getStart().getLine());
+ exception.setCharPosition(pathCtx.getStart().getCharPositionInLine());
+ return exception;
+ }
+
+ /**
+ * Returns the augment name, after removing the prefix, in each atomic
+ * content, which is equal to the root prefix.
+ *
+ * @param atomics atomic content list
+ * @param root root node
+ * @return prefix removed augment name
+ */
+ public static String getPrefixRemovedName(List<YangAtomicPath> atomics,
+ YangNode root) {
+
+ String rootPrefix = getRootPrefix(root);
+ StringBuilder builder = new StringBuilder();
+ for (YangAtomicPath atomic : atomics) {
+ String id;
+ String prefix = atomic.getNodeIdentifier().getPrefix();
+ String name = atomic.getNodeIdentifier().getName();
+ if (rootPrefix.equals(prefix) || prefix == null) {
+ id = SLASH_FOR_STRING + name;
+ } else {
+ id = SLASH_FOR_STRING + prefix + COLON + name;
+ }
+ builder.append(id);
+ }
+ return builder.toString();
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/parserutils/ListenerValidation.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/parserutils/ListenerValidation.java
new file mode 100644
index 0000000..eeb1dc9
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/parserutils/ListenerValidation.java
@@ -0,0 +1,243 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.parserutils;
+
+import org.antlr.v4.runtime.ParserRuleContext;
+import org.onosproject.yang.compiler.datamodel.YangCase;
+import org.onosproject.yang.compiler.datamodel.YangChoice;
+import org.onosproject.yang.compiler.datamodel.YangConfig;
+import org.onosproject.yang.compiler.datamodel.YangInput;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNotification;
+import org.onosproject.yang.compiler.datamodel.YangOutput;
+import org.onosproject.yang.compiler.datamodel.YangRpc;
+import org.onosproject.yang.compiler.datamodel.utils.Parsable;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+
+import java.util.Iterator;
+import java.util.List;
+
+import static org.onosproject.yang.compiler.datamodel.utils.YangConstructType.getYangConstructType;
+import static org.onosproject.yang.compiler.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
+
+/**
+ * Represents a utility to carry out listener validation.
+ */
+public final class ListenerValidation {
+
+ /**
+ * Creates a new listener validation.
+ */
+ private ListenerValidation() {
+ }
+
+ /**
+ * Checks parsed data stack is not empty.
+ *
+ * @param listener Listener's object
+ * @param errorType error type needs to be set in error message
+ * @param yangConstructType type of parsable data in which error occurred
+ * @param parsableDataTypeName name of parsable data type in which error
+ * occurred
+ * @param errorLocation location where error occurred
+ */
+ public static void checkStackIsNotEmpty(TreeWalkListener listener, ListenerErrorType errorType,
+ YangConstructType yangConstructType, String parsableDataTypeName,
+ ListenerErrorLocation errorLocation) {
+
+ if (listener.getParsedDataStack().empty()) {
+ /*
+ * If stack is empty it indicates error condition, value of
+ * parsableDataTypeName will be null in case there is no name
+ * attached to parsable data type.
+ */
+ String message = constructListenerErrorMessage(errorType, yangConstructType, parsableDataTypeName,
+ errorLocation);
+ throw new ParserException(message);
+ }
+ }
+
+ /**
+ * Checks parsed data stack is empty.
+ *
+ * @param listener Listener's object
+ * @param errorType error type needs to be set in error message
+ * @param yangConstructType type of parsable data in which error occurred
+ * @param parsableDataTypeName name of parsable data type in which error
+ * occurred
+ * @param errorLocation location where error occurred
+ */
+ public static void checkStackIsEmpty(TreeWalkListener listener, ListenerErrorType errorType,
+ YangConstructType yangConstructType, String parsableDataTypeName,
+ ListenerErrorLocation errorLocation) {
+
+ if (!listener.getParsedDataStack().empty()) {
+ /*
+ * If stack is empty it indicates error condition, value of
+ * parsableDataTypeName will be null in case there is no name
+ * attached to parsable data type.
+ */
+ String message = constructListenerErrorMessage(errorType, yangConstructType, parsableDataTypeName,
+ errorLocation);
+ throw new ParserException(message);
+ }
+ }
+
+ /**
+ * Returns parent node config value, if top node does not specify a config
+ * statement then default value true is returned.
+ *
+ * @param listener listener's object
+ * @return true/false parent's config value
+ */
+ public static boolean getParentNodeConfig(TreeWalkListener listener) {
+ Parsable curData = listener.getParsedDataStack().peek();
+ YangNode parentNode = ((YangNode) curData).getParent();
+ if (curData instanceof YangConfig) {
+ return ((YangConfig) curData).isConfig();
+ } else if (curData instanceof YangRpc || curData instanceof YangOutput
+ || curData instanceof YangInput || curData instanceof YangNotification) {
+ return false;
+ } else if (curData instanceof YangCase && parentNode instanceof YangChoice) {
+ return ((YangChoice) parentNode).isConfig();
+ } else {
+ return true;
+ }
+ }
+
+ /**
+ * Checks if a rule occurrences is as per the expected YANG grammar's
+ * cardinality.
+ *
+ * @param childContext child's context
+ * @param yangChildConstruct child construct for whom cardinality is to be
+ * validated
+ * @param yangParentConstruct parent construct
+ * @param parentName parent name
+ * @throws ParserException exception if cardinality check fails
+ */
+ public static void validateCardinalityMaxOne(List<?> childContext, YangConstructType yangChildConstruct,
+ YangConstructType yangParentConstruct, String parentName)
+ throws ParserException {
+
+ if (!childContext.isEmpty() && childContext.size() != 1) {
+ ParserException parserException = new ParserException("YANG file error: \""
+ + getYangConstructType(yangChildConstruct) + "\" is defined more than once in \""
+ + getYangConstructType(yangParentConstruct) + " " + parentName + "\".");
+
+ Iterator<?> context = childContext.iterator();
+ parserException.setLine(((ParserRuleContext) context.next()).getStart().getLine());
+ parserException.setCharPosition(((ParserRuleContext) context.next()).getStart().getCharPositionInLine());
+ throw parserException;
+ }
+ }
+
+ /**
+ * Checks if a rule occurrences is exactly 1.
+ *
+ * @param childContext child's context
+ * @param yangChildConstruct child construct for whom cardinality is to be
+ * validated
+ * @param yangParentConstruct parent construct
+ * @param parentName parent name
+ * @param parentContext parents's context
+ * @throws ParserException exception if cardinality check fails
+ */
+ public static void validateCardinalityEqualsOne(List<?> childContext, YangConstructType yangChildConstruct,
+ YangConstructType yangParentConstruct, String parentName,
+ ParserRuleContext parentContext)
+ throws ParserException {
+
+ if (childContext.isEmpty()) {
+ ParserException parserException = new ParserException("YANG file error: Missing \""
+ + getYangConstructType(yangChildConstruct) + "\" in \"" + getYangConstructType(yangParentConstruct)
+ + " " + parentName + "\".");
+ parserException.setLine(parentContext.getStart().getLine());
+ parserException.setCharPosition(parentContext.getStart().getCharPositionInLine());
+ throw parserException;
+ } else if (!childContext.isEmpty() && childContext.size() != 1) {
+ Iterator<?> childcontext = childContext.iterator();
+ ParserException parserException = new ParserException("YANG file error: \""
+ + getYangConstructType(yangChildConstruct) + "\" is present more than once in \""
+ + getYangConstructType(yangParentConstruct) + " " + parentName + "\".");
+ parserException.setLine(((ParserRuleContext) childcontext.next()).getStart().getLine());
+ parserException.setCharPosition(((ParserRuleContext) childcontext.next()).getStart()
+ .getCharPositionInLine());
+ throw parserException;
+ }
+ }
+
+ /**
+ * Checks if a rule occurrences is minimum 1.
+ *
+ * @param childContext child's context
+ * @param yangChildConstruct child construct for whom cardinality is to be
+ * validated
+ * @param yangParentConstruct parent construct
+ * @param parentName parent name
+ * @param parentContext parents's context
+ * @throws ParserException exception if cardinality check fails
+ */
+ public static void validateCardinalityNonZero(List<?> childContext, YangConstructType yangChildConstruct,
+ YangConstructType yangParentConstruct, String parentName,
+ ParserRuleContext parentContext)
+ throws ParserException {
+
+ if (childContext.isEmpty()) {
+ ParserException parserException = new ParserException("YANG file error: Missing \""
+ + getYangConstructType(yangChildConstruct) + "\" in \"" + getYangConstructType(yangParentConstruct)
+ + " " + parentName + "\".");
+
+ parserException.setLine(parentContext.getStart().getLine());
+ parserException.setCharPosition(parentContext.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+ }
+
+ /**
+ * Checks if a either of one construct occurrence.
+ *
+ * @param child1Context first optional child's context
+ * @param yangChild1Construct first child construct for whom cardinality is
+ * to be validated
+ * @param child2Context second optional child's context
+ * @param yangChild2Construct second child construct for whom cardinality is
+ * to be validated
+ * @param yangParentConstruct parent construct
+ * @param parentName parent name
+ * @param parentContext parents's context
+ * @throws ParserException exception if cardinality check fails
+ */
+ public static void validateCardinalityEitherOne(List<?> child1Context, YangConstructType yangChild1Construct,
+ List<?> child2Context, YangConstructType yangChild2Construct,
+ YangConstructType yangParentConstruct, String parentName,
+ ParserRuleContext parentContext)
+ throws ParserException {
+
+ if (child1Context.isEmpty() && child2Context.isEmpty()) {
+ ParserException parserException = new ParserException("YANG file error: Either \""
+ + getYangConstructType(yangChild1Construct) + "\" or \"" + getYangConstructType(yangChild2Construct)
+ + "\" should be present in \"" + getYangConstructType(yangParentConstruct) + " "
+ + parentName + "\".");
+ parserException.setLine(parentContext.getStart().getLine());
+ parserException.setCharPosition(parentContext.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+ }
+}
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/parserutils/ParseTreeErrorListener.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/parserutils/ParseTreeErrorListener.java
new file mode 100644
index 0000000..e839e2c
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/parserutils/ParseTreeErrorListener.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.parserutils;
+
+import org.antlr.v4.runtime.BaseErrorListener;
+import org.antlr.v4.runtime.RecognitionException;
+import org.antlr.v4.runtime.Recognizer;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+
+/**
+ * Represent the parse tree error listener.
+ * By default, ANTLR sends all errors to standard error, this is changed by
+ * providing this new implementation of interface ANTLRErrorListener. The
+ * interface has a syntaxError() method that applies to both lexer and parser.
+ */
+public class ParseTreeErrorListener extends BaseErrorListener {
+
+ @Override
+ public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int line, int charPositionInLine,
+ String msg, RecognitionException e) {
+
+ ParserException parserException = new ParserException(msg);
+ parserException.setLine(line);
+ parserException.setCharPosition(charPositionInLine);
+ throw parserException;
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/parserutils/package-info.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/parserutils/package-info.java
new file mode 100644
index 0000000..5662cff
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/impl/parserutils/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+/**
+ * Provide common utils for parser implementation.
+ */
+package org.onosproject.yang.compiler.parser.impl.parserutils;
\ No newline at end of file
diff --git a/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/package-info.java b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/package-info.java
new file mode 100644
index 0000000..ac4cd7d
--- /dev/null
+++ b/compiler/base/parser/src/main/java/org/onosproject/yang/compiler/parser/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+/**
+ * Interfaces to process YANG information from ANTLR generated listeners.
+ */
+package org.onosproject.yang.compiler.parser;
diff --git a/compiler/base/parser/src/main/resources/GeneratedYang.g4 b/compiler/base/parser/src/main/resources/GeneratedYang.g4
new file mode 100644
index 0000000..3ba1201
--- /dev/null
+++ b/compiler/base/parser/src/main/resources/GeneratedYang.g4
@@ -0,0 +1,1347 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+/**
+ * This is a YANG grammar for parser based on which ANTLR will generate YANG parser.
+ */
+
+grammar GeneratedYang;
+import YangLexer;
+
+@header {
+package org.onosproject.yang.compiler.parser.antlrgencode;
+}
+
+ yangfile : moduleStatement EOF
+ | subModuleStatement EOF;
+
+ /**
+ * module-stmt = optsep module-keyword sep identifier-arg-str
+ * optsep
+ * "{" stmtsep
+ * module-header-stmts
+ * linkage-stmts
+ * meta-stmts
+ * revision-stmts
+ * body-stmts
+ * "}" optsep
+ */
+
+ moduleStatement : MODULE_KEYWORD identifier LEFT_CURLY_BRACE moduleBody RIGHT_CURLY_BRACE;
+
+ moduleBody : moduleHeaderStatement linkageStatements metaStatements revisionStatements bodyStatements;
+
+ /**
+ * module-header-stmts = ;; these stmts can appear in any order
+ * [yang-version-stmt stmtsep]
+ * namespace-stmt stmtsep
+ * prefix-stmt stmtsep
+ */
+
+ moduleHeaderStatement : yangVersionStatement? namespaceStatement prefixStatement
+ | yangVersionStatement? prefixStatement namespaceStatement
+ | namespaceStatement yangVersionStatement? prefixStatement
+ | namespaceStatement prefixStatement yangVersionStatement?
+ | prefixStatement namespaceStatement yangVersionStatement?
+ | prefixStatement yangVersionStatement? namespaceStatement
+ ;
+
+ /**
+ * linkage-stmts = ;; these stmts can appear in any order
+ * *(import-stmt stmtsep)
+ * *(include-stmt stmtsep)
+ */
+ linkageStatements : (importStatement
+ | includeStatement)*;
+
+ /**
+ * meta-stmts = ;; these stmts can appear in any order
+ * [organization-stmt stmtsep]
+ * [contact-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ */
+ metaStatements : organizationStatement? contactStatement? descriptionStatement? referenceStatement?
+ | organizationStatement? contactStatement? referenceStatement? descriptionStatement?
+ | organizationStatement? descriptionStatement? contactStatement? referenceStatement?
+ | organizationStatement? descriptionStatement? referenceStatement? contactStatement?
+ | organizationStatement? referenceStatement? contactStatement? descriptionStatement?
+ | organizationStatement? referenceStatement? descriptionStatement? contactStatement?
+ | contactStatement? organizationStatement? descriptionStatement? referenceStatement?
+ | contactStatement? organizationStatement? referenceStatement? descriptionStatement?
+ | contactStatement? referenceStatement? organizationStatement? descriptionStatement?
+ | contactStatement? referenceStatement? descriptionStatement? organizationStatement?
+ | contactStatement? descriptionStatement? referenceStatement? organizationStatement?
+ | contactStatement? descriptionStatement? organizationStatement? referenceStatement?
+ | referenceStatement? contactStatement? organizationStatement? descriptionStatement?
+ | referenceStatement? contactStatement? descriptionStatement? organizationStatement?
+ | referenceStatement? organizationStatement? contactStatement? descriptionStatement?
+ | referenceStatement? organizationStatement? descriptionStatement? contactStatement?
+ | referenceStatement? descriptionStatement? organizationStatement? contactStatement?
+ | referenceStatement? descriptionStatement? contactStatement? organizationStatement?
+ | descriptionStatement? referenceStatement? contactStatement? organizationStatement?
+ | descriptionStatement? referenceStatement? organizationStatement? contactStatement?
+ | descriptionStatement? contactStatement? referenceStatement? organizationStatement?
+ | descriptionStatement? contactStatement? organizationStatement? referenceStatement?
+ | descriptionStatement? organizationStatement? contactStatement? referenceStatement?
+ | descriptionStatement? organizationStatement? referenceStatement? contactStatement?
+ ;
+
+ // revision-stmts = *(revision-stmt stmtsep)
+ revisionStatements : revisionStatement*;
+
+ /**
+ * body-stmts = *((extension-stmt /
+ * feature-stmt /
+ * identity-stmt /
+ * typedef-stmt /
+ * grouping-stmt /
+ * data-def-stmt /
+ * augment-stmt /
+ * rpc-stmt /
+ * notification-stmt /
+ * deviation-stmt) stmtsep)
+ */
+ bodyStatements : (extensionStatement
+ | featureStatement
+ | identityStatement
+ | typedefStatement
+ | groupingStatement
+ | dataDefStatement
+ | augmentStatement
+ | rpcStatement
+ | notificationStatement
+ | deviationStatement
+ | compilerAnnotationStatement)*
+ ;
+
+ /**
+ * yang-version-stmt = yang-version-keyword sep yang-version-arg-str
+ * optsep stmtend
+ */
+ yangVersionStatement : YANG_VERSION_KEYWORD version STMTEND;
+
+
+ /**
+ * namespace-stmt = namespace-keyword sep uri-str optsep stmtend
+ * For namespace validation TODO in Listener
+ */
+ namespaceStatement : NAMESPACE_KEYWORD string STMTEND;
+
+ /**
+ * prefix-stmt = prefix-keyword sep prefix-arg-str
+ * optsep stmtend
+ */
+ prefixStatement : PREFIX_KEYWORD identifier STMTEND;
+
+ /**
+ * import-stmt = import-keyword sep identifier-arg-str optsep
+ * "{" stmtsep
+ * prefix-stmt stmtsep
+ * [revision-date-stmt stmtsep]
+ * "}"
+ */
+ importStatement : IMPORT_KEYWORD identifier LEFT_CURLY_BRACE importStatementBody RIGHT_CURLY_BRACE;
+
+ importStatementBody : prefixStatement revisionDateStatement?;
+
+ // revision-date-stmt = revision-date-keyword sep revision-date stmtend
+ revisionDateStatement : REVISION_DATE_KEYWORD dateArgumentString STMTEND;
+
+ /**
+ * include-stmt = include-keyword sep identifier-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * [revision-date-stmt stmtsep]
+ * "}")
+ */
+ includeStatement : INCLUDE_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE revisionDateStatement? RIGHT_CURLY_BRACE);
+
+ /**
+ * organization-stmt = organization-keyword sep string
+ * optsep stmtend
+ */
+ organizationStatement : ORGANIZATION_KEYWORD string STMTEND;
+
+ // contact-stmt = contact-keyword sep string optsep stmtend
+ contactStatement : CONTACT_KEYWORD string STMTEND;
+
+ // description-stmt = description-keyword sep string optsep stmtend
+ descriptionStatement : DESCRIPTION_KEYWORD string STMTEND;
+
+ // reference-stmt = reference-keyword sep string optsep stmtend
+ referenceStatement : REFERENCE_KEYWORD string STMTEND;
+
+ /**
+ * revision-stmt = revision-keyword sep revision-date optsep
+ * (";" /
+ * "{" stmtsep
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * "}")
+ */
+ revisionStatement : REVISION_KEYWORD dateArgumentString (STMTEND | LEFT_CURLY_BRACE revisionStatementBody RIGHT_CURLY_BRACE);
+ revisionStatementBody : descriptionStatement? referenceStatement?;
+
+ /**
+ * submodule-stmt = optsep submodule-keyword sep identifier-arg-str
+ * optsep
+ * "{" stmtsep
+ * submodule-header-stmts
+ * linkage-stmts
+ * meta-stmts
+ * revision-stmts
+ * body-stmts
+ * "}" optsep
+ */
+ subModuleStatement : SUBMODULE_KEYWORD identifier LEFT_CURLY_BRACE submoduleBody RIGHT_CURLY_BRACE;
+ submoduleBody : submoduleHeaderStatement linkageStatements metaStatements revisionStatements bodyStatements;
+
+ /** submodule-header-stmts =
+ * ;; these stmts can appear in any order
+ * [yang-version-stmt stmtsep]
+ * belongs-to-stmt stmtsep
+ */
+ submoduleHeaderStatement : yangVersionStatement? belongstoStatement
+ | belongstoStatement yangVersionStatement?
+ ;
+
+ /**
+ * belongs-to-stmt = belongs-to-keyword sep identifier-arg-str
+ * optsep
+ * "{" stmtsep
+ * prefix-stmt stmtsep
+ * "}"
+ */
+ belongstoStatement : BELONGS_TO_KEYWORD identifier LEFT_CURLY_BRACE belongstoStatementBody RIGHT_CURLY_BRACE;
+ belongstoStatementBody : prefixStatement;
+
+ /**
+ * extension-stmt = extension-keyword sep identifier-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [argument-stmt stmtsep]
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * "}")
+ */
+ extensionStatement : EXTENSION_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE extensionBody RIGHT_CURLY_BRACE);
+ extensionBody : argumentStatement? statusStatement? descriptionStatement? referenceStatement?
+ | argumentStatement? statusStatement? referenceStatement? descriptionStatement?
+ | argumentStatement? descriptionStatement? statusStatement? referenceStatement?
+ | argumentStatement? descriptionStatement? referenceStatement? statusStatement?
+ | argumentStatement? referenceStatement? descriptionStatement? statusStatement?
+ | argumentStatement? referenceStatement? statusStatement? descriptionStatement?
+ | statusStatement? referenceStatement? argumentStatement? descriptionStatement?
+ | statusStatement? referenceStatement? descriptionStatement? argumentStatement?
+ | statusStatement? descriptionStatement? referenceStatement? argumentStatement?
+ | statusStatement? descriptionStatement? argumentStatement? referenceStatement?
+ | statusStatement? argumentStatement? referenceStatement? descriptionStatement?
+ | statusStatement? argumentStatement? descriptionStatement? referenceStatement?
+ | descriptionStatement? argumentStatement? statusStatement? referenceStatement?
+ | descriptionStatement? argumentStatement? referenceStatement? statusStatement?
+ | descriptionStatement? statusStatement? argumentStatement? referenceStatement?
+ | descriptionStatement? statusStatement? referenceStatement? argumentStatement?
+ | descriptionStatement? referenceStatement? statusStatement? argumentStatement?
+ | descriptionStatement? referenceStatement? argumentStatement? statusStatement?
+ | referenceStatement? descriptionStatement? argumentStatement? statusStatement?
+ | referenceStatement? descriptionStatement? statusStatement? argumentStatement?
+ | referenceStatement? statusStatement? argumentStatement? descriptionStatement?
+ | referenceStatement? statusStatement? descriptionStatement? argumentStatement?
+ | referenceStatement? argumentStatement? descriptionStatement? statusStatement?
+ | referenceStatement? argumentStatement? statusStatement? descriptionStatement?
+ ;
+
+ /**
+ * argument-stmt = argument-keyword sep identifier-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * [yin-element-stmt stmtsep]
+ * "}")
+ */
+ argumentStatement : ARGUMENT_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE argumentBody RIGHT_CURLY_BRACE);
+ argumentBody : yinElementStatement?;
+
+ /**
+ * yin-element-stmt = yin-element-keyword sep yin-element-arg-str
+ * stmtend
+ */
+ yinElementStatement : YIN_ELEMENT_KEYWORD (TRUE_KEYWORD | FALSE_KEYWORD) STMTEND;
+
+ /**
+ * identity-stmt = identity-keyword sep identifier-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [base-stmt stmtsep]
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * "}")
+ */
+ identityStatement : IDENTITY_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE identityBody RIGHT_CURLY_BRACE);
+ identityBody : baseStatement? statusStatement? descriptionStatement? referenceStatement?
+ | baseStatement? statusStatement? referenceStatement? descriptionStatement?
+ | baseStatement? descriptionStatement? statusStatement? referenceStatement?
+ | baseStatement? descriptionStatement? referenceStatement? statusStatement?
+ | baseStatement? referenceStatement? descriptionStatement? statusStatement?
+ | baseStatement? referenceStatement? statusStatement? descriptionStatement?
+ | referenceStatement? baseStatement? statusStatement? descriptionStatement?
+ | referenceStatement? baseStatement? descriptionStatement? statusStatement?
+ | referenceStatement? statusStatement? baseStatement? descriptionStatement?
+ | referenceStatement? statusStatement? descriptionStatement? baseStatement?
+ | referenceStatement? descriptionStatement? statusStatement? baseStatement?
+ | referenceStatement? descriptionStatement? baseStatement? statusStatement?
+ | descriptionStatement? referenceStatement? statusStatement? baseStatement?
+ | descriptionStatement? referenceStatement? statusStatement? baseStatement?
+ | descriptionStatement? referenceStatement? baseStatement? statusStatement?
+ | descriptionStatement? statusStatement? baseStatement? referenceStatement?
+ | descriptionStatement? statusStatement? referenceStatement? baseStatement?
+ | descriptionStatement? baseStatement? referenceStatement? statusStatement?
+ | descriptionStatement? baseStatement? statusStatement? referenceStatement?
+ | statusStatement? baseStatement? descriptionStatement? referenceStatement?
+ | statusStatement? baseStatement? referenceStatement? descriptionStatement?
+ | statusStatement? descriptionStatement? baseStatement? referenceStatement?
+ | statusStatement? descriptionStatement? referenceStatement? baseStatement?
+ | statusStatement? referenceStatement? descriptionStatement? baseStatement?
+ | statusStatement? referenceStatement? baseStatement? descriptionStatement?
+ ;
+
+ /**
+ * base-stmt = base-keyword sep identifier-ref-arg-str
+ * optsep stmtend*
+ * identifier-ref-arg = [prefix ":"] identifier
+ */
+ baseStatement : BASE_KEYWORD string STMTEND;
+
+ /**
+ * feature-stmt = feature-keyword sep identifier-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * *(if-feature-stmt stmtsep)
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * "}")
+ */
+ featureStatement : FEATURE_KEYWORD string (STMTEND | LEFT_CURLY_BRACE featureBody RIGHT_CURLY_BRACE);
+ featureBody : ifFeatureStatement* statusStatement? descriptionStatement? referenceStatement?
+ | ifFeatureStatement* statusStatement? referenceStatement? descriptionStatement?
+ | ifFeatureStatement* descriptionStatement? statusStatement? referenceStatement?
+ | ifFeatureStatement* descriptionStatement? referenceStatement? statusStatement?
+ | ifFeatureStatement* referenceStatement? statusStatement? descriptionStatement?
+ | ifFeatureStatement* referenceStatement? descriptionStatement? statusStatement?
+ | statusStatement? ifFeatureStatement* descriptionStatement? referenceStatement?
+ | statusStatement? ifFeatureStatement* referenceStatement? descriptionStatement?
+ | statusStatement? descriptionStatement? ifFeatureStatement* referenceStatement?
+ | statusStatement? descriptionStatement? referenceStatement? ifFeatureStatement*
+ | statusStatement? referenceStatement? ifFeatureStatement* descriptionStatement?
+ | statusStatement? referenceStatement? descriptionStatement? ifFeatureStatement*
+ | descriptionStatement? ifFeatureStatement* statusStatement? referenceStatement?
+ | descriptionStatement? ifFeatureStatement* referenceStatement? statusStatement?
+ | descriptionStatement? statusStatement? ifFeatureStatement* referenceStatement?
+ | descriptionStatement? statusStatement? referenceStatement? ifFeatureStatement*
+ | descriptionStatement? referenceStatement* statusStatement? ifFeatureStatement*
+ | descriptionStatement? referenceStatement* ifFeatureStatement? statusStatement?
+ | referenceStatement? ifFeatureStatement* statusStatement? descriptionStatement?
+ | referenceStatement? ifFeatureStatement* descriptionStatement? statusStatement?
+ | referenceStatement? descriptionStatement? statusStatement? ifFeatureStatement*
+ | referenceStatement? descriptionStatement? ifFeatureStatement* statusStatement?
+ | referenceStatement? statusStatement? descriptionStatement? ifFeatureStatement*
+ | referenceStatement? statusStatement? ifFeatureStatement* descriptionStatement?
+ ;
+
+ /**
+ * data-def-stmt = container-stmt /
+ * leaf-stmt /
+ * leaf-list-stmt /
+ * list-stmt /
+ * choice-stmt /
+ * anyxml-stmt /
+ * uses-stmt
+ */
+ dataDefStatement : containerStatement
+ | leafStatement
+ | leafListStatement
+ | listStatement
+ | choiceStatement
+ | anyxmlStatement
+ | usesStatement;
+
+ /**
+ * if-feature-stmt = if-feature-keyword sep identifier-ref-arg-str
+ * optsep stmtend
+ */
+ ifFeatureStatement : IF_FEATURE_KEYWORD string STMTEND;
+
+ /**
+ * units-stmt = units-keyword sep string optsep stmtend
+ */
+ unitsStatement : UNITS_KEYWORD string STMTEND;
+
+ /**
+ * typedef-stmt = typedef-keyword sep identifier-arg-str optsep
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * type-stmt stmtsep
+ * [units-stmt stmtsep]
+ * [default-stmt stmtsep]
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * "}"
+ * TODO : 0..1 occurance to be validated in listener
+ */
+ typedefStatement : TYPEDEF_KEYWORD identifier LEFT_CURLY_BRACE
+ (typeStatement | unitsStatement | defaultStatement | statusStatement | descriptionStatement | referenceStatement)*
+ RIGHT_CURLY_BRACE;
+
+ /**
+ * type-stmt = type-keyword sep identifier-ref-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * type-body-stmts
+ * "}")
+ */
+ typeStatement : TYPE_KEYWORD string (STMTEND | LEFT_CURLY_BRACE typeBodyStatements RIGHT_CURLY_BRACE);
+
+ /**
+ * type-body-stmts = numerical-restrictions /
+ * decimal64-specification /
+ * string-restrictions /
+ * enum-specification /
+ * leafref-specification /
+ * identityref-specification /
+ * instance-identifier-specification /
+ * bits-specification /
+ * union-specification
+ *
+ */
+ typeBodyStatements : numericalRestrictions | decimal64Specification | stringRestrictions | enumSpecification
+ | leafrefSpecification | identityrefSpecification | instanceIdentifierSpecification
+ | bitsSpecification | unionSpecification;
+
+ /**
+ * decimal64-specification = ;; these stmts can appear in any order
+ * fraction-digits-stmt
+ * [range-stmt]
+ */
+ decimal64Specification : fractionDigitStatement rangeStatement?;
+
+ /**
+ * fraction-digits-stmt = fraction-digits-keyword sep
+ * fraction-digits-arg-str stmtend
+ *
+ * fraction-digits-arg-str = < a string that matches the rule
+ * fraction-digits-arg >
+ *
+ * fraction-digits-arg = ("1" ["0" / "1" / "2" / "3" / "4" /
+ * "5" / "6" / "7" / "8"])
+ * / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9"
+ */
+ fractionDigitStatement : FRACTION_DIGITS_KEYWORD fraction STMTEND;
+
+ /**
+ * numerical-restrictions = range-stmt stmtsep
+ */
+ numericalRestrictions : rangeStatement;
+
+ /**
+ * range-stmt = range-keyword sep range-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [error-message-stmt stmtsep]
+ * [error-app-tag-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * "}")
+ */
+ rangeStatement : RANGE_KEYWORD range (STMTEND | LEFT_CURLY_BRACE commonStatements RIGHT_CURLY_BRACE);
+
+ commonStatements : errorMessageStatement? errorAppTagStatement? descriptionStatement? referenceStatement?
+ | errorMessageStatement? errorAppTagStatement? referenceStatement? descriptionStatement?
+ | errorMessageStatement? descriptionStatement? errorAppTagStatement? referenceStatement?
+ | errorMessageStatement? descriptionStatement? referenceStatement? errorAppTagStatement?
+ | errorMessageStatement? referenceStatement? errorAppTagStatement? descriptionStatement?
+ | errorMessageStatement? referenceStatement? descriptionStatement? errorAppTagStatement?
+ | errorAppTagStatement? errorMessageStatement? descriptionStatement? referenceStatement?
+ | errorAppTagStatement? errorMessageStatement? referenceStatement? descriptionStatement?
+ | errorAppTagStatement? descriptionStatement? descriptionStatement? errorMessageStatement?
+ | errorAppTagStatement? descriptionStatement? errorMessageStatement? descriptionStatement?
+ | errorAppTagStatement? referenceStatement? errorMessageStatement? descriptionStatement?
+ | errorAppTagStatement? referenceStatement? descriptionStatement? errorMessageStatement?
+ | descriptionStatement? errorMessageStatement? errorAppTagStatement? referenceStatement?
+ | descriptionStatement? errorMessageStatement? referenceStatement? errorAppTagStatement?
+ | descriptionStatement? errorAppTagStatement? errorMessageStatement? referenceStatement?
+ | descriptionStatement? errorAppTagStatement? referenceStatement? errorMessageStatement?
+ | descriptionStatement? referenceStatement? errorMessageStatement? errorAppTagStatement?
+ | descriptionStatement? referenceStatement? errorAppTagStatement? errorMessageStatement?
+ | referenceStatement? errorMessageStatement? descriptionStatement? errorAppTagStatement?
+ | referenceStatement? errorMessageStatement? errorAppTagStatement? descriptionStatement?
+ | referenceStatement? errorAppTagStatement? descriptionStatement? errorMessageStatement?
+ | referenceStatement? errorAppTagStatement? errorMessageStatement? descriptionStatement?
+ | referenceStatement? descriptionStatement? errorMessageStatement? errorAppTagStatement?
+ | referenceStatement? descriptionStatement? errorAppTagStatement? errorMessageStatement?
+ ;
+
+ /**
+ * string-restrictions = ;; these stmts can appear in any order
+ * [length-stmt stmtsep]
+ * *(pattern-stmt stmtsep)
+ */
+ stringRestrictions : ((lengthStatement)? (patternStatement)*) | ((patternStatement)* (lengthStatement)?);
+
+ /**
+ * length-stmt = length-keyword sep length-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [error-message-stmt stmtsep]
+ * [error-app-tag-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * "}")
+ */
+ lengthStatement : LENGTH_KEYWORD length
+ (STMTEND | LEFT_CURLY_BRACE commonStatements RIGHT_CURLY_BRACE);
+
+ /**
+ * pattern-stmt = pattern-keyword sep string optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [error-message-stmt stmtsep]
+ * [error-app-tag-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * "}")
+ */
+ patternStatement : PATTERN_KEYWORD string (STMTEND | LEFT_CURLY_BRACE commonStatements RIGHT_CURLY_BRACE);
+
+ /**
+ * default-stmt = default-keyword sep string stmtend
+ */
+ defaultStatement : DEFAULT_KEYWORD string STMTEND;
+
+ /**
+ * enum-specification = 1*(enum-stmt stmtsep)
+ */
+ enumSpecification : enumStatement+;
+
+ /**
+ * enum-stmt = enum-keyword sep string optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [value-stmt stmtsep]
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * "}")
+ */
+ enumStatement : ENUM_KEYWORD string (STMTEND | LEFT_CURLY_BRACE enumStatementBody RIGHT_CURLY_BRACE);
+
+ enumStatementBody : valueStatement? statusStatement? descriptionStatement? referenceStatement?
+ | valueStatement? statusStatement? referenceStatement? descriptionStatement?
+ | valueStatement? descriptionStatement? statusStatement? referenceStatement?
+ | valueStatement? descriptionStatement? referenceStatement? statusStatement?
+ | valueStatement? referenceStatement? statusStatement? descriptionStatement?
+ | valueStatement? referenceStatement? descriptionStatement? statusStatement?
+ | statusStatement? valueStatement? descriptionStatement? referenceStatement?
+ | statusStatement? valueStatement? referenceStatement? descriptionStatement?
+ | statusStatement? descriptionStatement? descriptionStatement? valueStatement?
+ | statusStatement? descriptionStatement? valueStatement? descriptionStatement?
+ | statusStatement? referenceStatement? valueStatement? descriptionStatement?
+ | statusStatement? referenceStatement? descriptionStatement? valueStatement?
+ | descriptionStatement? valueStatement? statusStatement? referenceStatement?
+ | descriptionStatement? valueStatement? referenceStatement? statusStatement?
+ | descriptionStatement? statusStatement? valueStatement? referenceStatement?
+ | descriptionStatement? statusStatement? referenceStatement? valueStatement?
+ | descriptionStatement? referenceStatement? valueStatement? statusStatement?
+ | descriptionStatement? referenceStatement? statusStatement? valueStatement?
+ | referenceStatement? valueStatement? descriptionStatement? statusStatement?
+ | referenceStatement? valueStatement? statusStatement? descriptionStatement?
+ | referenceStatement? statusStatement? descriptionStatement? valueStatement?
+ | referenceStatement? statusStatement? valueStatement? descriptionStatement?
+ | referenceStatement? descriptionStatement? valueStatement? statusStatement?
+ | referenceStatement? descriptionStatement? statusStatement? valueStatement?
+ ;
+
+ /**
+ * leafref-specification =
+ * ;; these stmts can appear in any order
+ * path-stmt stmtsep
+ * [require-instance-stmt stmtsep]
+ */
+ leafrefSpecification : (pathStatement (requireInstanceStatement)?) | ((requireInstanceStatement)? pathStatement);
+
+ /**
+ * path-stmt = path-keyword sep path-arg-str stmtend
+ */
+ pathStatement : PATH_KEYWORD path STMTEND;
+
+ /**
+ * require-instance-stmt = require-instance-keyword sep
+ * require-instance-arg-str stmtend
+ * require-instance-arg-str = < a string that matches the rule
+ * require-instance-arg >
+ * require-instance-arg = true-keyword / false-keyword
+ */
+ requireInstanceStatement : REQUIRE_INSTANCE_KEYWORD requireInstance STMTEND;
+
+ /**
+ * instance-identifier-specification =
+ * [require-instance-stmt stmtsep]
+ */
+ instanceIdentifierSpecification : requireInstanceStatement?;
+
+ /**
+ * identityref-specification =
+ * base-stmt stmtsep
+ */
+ identityrefSpecification : baseStatement;
+
+ /**
+ * union-specification = 1*(type-stmt stmtsep)
+ */
+ unionSpecification : typeStatement+;
+
+ /**
+ * bits-specification = 1*(bit-stmt stmtsep)
+ */
+ bitsSpecification : bitStatement+;
+
+ /**
+ * bit-stmt = bit-keyword sep identifier-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [position-stmt stmtsep]
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * "}"
+ * "}")
+ */
+ bitStatement : BIT_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE bitBodyStatement RIGHT_CURLY_BRACE);
+
+ bitBodyStatement : positionStatement? statusStatement? descriptionStatement? referenceStatement?
+ | positionStatement? statusStatement? referenceStatement? descriptionStatement?
+ | positionStatement? descriptionStatement? statusStatement? referenceStatement?
+ | positionStatement? descriptionStatement? referenceStatement? statusStatement?
+ | positionStatement? referenceStatement? statusStatement? descriptionStatement?
+ | positionStatement? referenceStatement? descriptionStatement? statusStatement?
+ | statusStatement? positionStatement? descriptionStatement? referenceStatement?
+ | statusStatement? positionStatement? referenceStatement? descriptionStatement?
+ | statusStatement? descriptionStatement? descriptionStatement? positionStatement?
+ | statusStatement? descriptionStatement? positionStatement? descriptionStatement?
+ | statusStatement? referenceStatement? positionStatement? descriptionStatement?
+ | statusStatement? referenceStatement? descriptionStatement? positionStatement?
+ | descriptionStatement? positionStatement? statusStatement? referenceStatement?
+ | descriptionStatement? positionStatement? referenceStatement? statusStatement?
+ | descriptionStatement? statusStatement? positionStatement? referenceStatement?
+ | descriptionStatement? statusStatement? referenceStatement? positionStatement?
+ | descriptionStatement? referenceStatement? positionStatement? statusStatement?
+ | descriptionStatement? referenceStatement? statusStatement? positionStatement?
+ | referenceStatement? positionStatement? descriptionStatement? statusStatement?
+ | referenceStatement? positionStatement? statusStatement? descriptionStatement?
+ | referenceStatement? statusStatement? descriptionStatement? positionStatement?
+ | referenceStatement? statusStatement? positionStatement? descriptionStatement?
+ | referenceStatement? descriptionStatement? positionStatement? statusStatement?
+ | referenceStatement? descriptionStatement? statusStatement? positionStatement?
+ ;
+
+ /**
+ * position-stmt = position-keyword sep
+ * position-value-arg-str stmtend
+ * position-value-arg-str = < a string that matches the rule
+ * position-value-arg >
+ * position-value-arg = non-negative-integer-value
+ */
+ positionStatement : POSITION_KEYWORD position STMTEND;
+
+ /**
+ * status-stmt = status-keyword sep status-arg-str stmtend
+ * status-arg-str = < a string that matches the rule
+ * status-arg >
+ * status-arg = current-keyword /
+ * obsolete-keyword /
+ * deprecated-keyword
+ */
+ statusStatement : STATUS_KEYWORD status STMTEND;
+
+ /**
+ * config-stmt = config-keyword sep
+ * config-arg-str stmtend
+ * config-arg-str = < a string that matches the rule
+ * config-arg >
+ * config-arg = true-keyword / false-keyword
+ */
+ configStatement : CONFIG_KEYWORD config STMTEND;
+
+ /**
+ * mandatory-stmt = mandatory-keyword sep
+ * mandatory-arg-str stmtend
+ *
+ * mandatory-arg-str = < a string that matches the rule
+ * mandatory-arg >
+ *
+ * mandatory-arg = true-keyword / false-keyword
+ */
+ mandatoryStatement : MANDATORY_KEYWORD mandatory STMTEND;
+
+ /**
+ * presence-stmt = presence-keyword sep string stmtend
+ */
+ presenceStatement : PRESENCE_KEYWORD string STMTEND;
+
+ /**
+ * ordered-by-stmt = ordered-by-keyword sep
+ * ordered-by-arg-str stmtend
+ *
+ * ordered-by-arg-str = < a string that matches the rule
+ * ordered-by-arg >
+ *
+ * ordered-by-arg = user-keyword / system-keyword
+ */
+ orderedByStatement : ORDERED_BY_KEYWORD orderedBy STMTEND;
+
+ /**
+ * must-stmt = must-keyword sep string optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [error-message-stmt stmtsep]
+ * [error-app-tag-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * "}")
+ */
+ mustStatement : MUST_KEYWORD string (STMTEND | LEFT_CURLY_BRACE commonStatements RIGHT_CURLY_BRACE);
+
+ /**
+ * error-message-stmt = error-message-keyword sep string stmtend
+ */
+ errorMessageStatement : ERROR_MESSAGE_KEYWORD string STMTEND;
+
+ /**
+ * error-app-tag-stmt = error-app-tag-keyword sep string stmtend
+ */
+ errorAppTagStatement : ERROR_APP_TAG_KEYWORD string STMTEND;
+
+ /**
+ * min-elements-stmt = min-elements-keyword sep
+ * min-value-arg-str stmtend
+ * min-value-arg-str = < a string that matches the rule
+ * min-value-arg >
+ * min-value-arg = non-negative-integer-value
+ */
+ minElementsStatement : MIN_ELEMENTS_KEYWORD minValue STMTEND;
+
+ /**
+ * max-elements-stmt = max-elements-keyword sep
+ * max-value-arg-str stmtend
+ * max-value-arg-str = < a string that matches the rule
+ * max-value-arg >
+ * max-value-arg = unbounded-keyword /
+ * positive-integer-value
+ */
+ maxElementsStatement : MAX_ELEMENTS_KEYWORD maxValue STMTEND;
+
+ /**
+ * value-stmt = value-keyword sep integer-value stmtend
+ */
+ valueStatement : VALUE_KEYWORD value STMTEND;
+
+ /**
+ * grouping-stmt = grouping-keyword sep identifier-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * *((typedef-stmt /
+ * grouping-stmt) stmtsep)
+ * *(data-def-stmt stmtsep)
+ * "}")
+ * TODO : 0..1 occurance to be checked in listener
+ */
+ groupingStatement : GROUPING_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE
+ (statusStatement | descriptionStatement | referenceStatement | typedefStatement | groupingStatement
+ | dataDefStatement)* RIGHT_CURLY_BRACE);
+
+ /**
+ * container-stmt = container-keyword sep identifier-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [when-stmt stmtsep]
+ * *(if-feature-stmt stmtsep)
+ * *(must-stmt stmtsep)
+ * [presence-stmt stmtsep]
+ * [config-stmt stmtsep]
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * *((typedef-stmt /
+ * grouping-stmt) stmtsep)
+ * *(data-def-stmt stmtsep)
+ * "}")
+ * TODO : 0..1 occurance to be checked in listener
+ */
+ containerStatement : CONTAINER_KEYWORD identifier
+ (STMTEND | LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | mustStatement | presenceStatement | configStatement
+ | statusStatement | descriptionStatement | referenceStatement | typedefStatement | groupingStatement
+ | dataDefStatement)* RIGHT_CURLY_BRACE);
+
+ /**
+ * leaf-stmt = leaf-keyword sep identifier-arg-str optsep
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [when-stmt stmtsep]
+ * *(if-feature-stmt stmtsep)
+ * type-stmt stmtsep
+ * [units-stmt stmtsep]
+ * *(must-stmt stmtsep)
+ * [default-stmt stmtsep]
+ * [config-stmt stmtsep]
+ * [mandatory-stmt stmtsep]
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * "}"
+ * TODO : 0..1 occurance to be checked in listener
+ */
+ leafStatement : LEAF_KEYWORD identifier LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | typeStatement | unitsStatement
+ | mustStatement | defaultStatement | configStatement | mandatoryStatement | statusStatement | descriptionStatement
+ | referenceStatement)* RIGHT_CURLY_BRACE;
+
+ /**
+ * leaf-list-stmt = leaf-list-keyword sep identifier-arg-str optsep
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [when-stmt stmtsep]
+ * *(if-feature-stmt stmtsep)
+ * type-stmt stmtsep
+ * [units-stmt stmtsep]
+ * *(must-stmt stmtsep)
+ * [config-stmt stmtsep]
+ * [min-elements-stmt stmtsep]
+ * [max-elements-stmt stmtsep]
+ * [ordered-by-stmt stmtsep]
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * "}"
+ * TODO : 0..1 occurance to be checked in listener
+ */
+ leafListStatement : LEAF_LIST_KEYWORD identifier LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | typeStatement
+ | unitsStatement | mustStatement | configStatement | minElementsStatement | maxElementsStatement | orderedByStatement
+ | statusStatement | descriptionStatement | referenceStatement)* RIGHT_CURLY_BRACE;
+
+ /**
+ * list-stmt = list-keyword sep identifier-arg-str optsep
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [when-stmt stmtsep]
+ * *(if-feature-stmt stmtsep)
+ * *(must-stmt stmtsep)
+ * [key-stmt stmtsep]
+ * *(unique-stmt stmtsep)
+ * [config-stmt stmtsep]
+ * [min-elements-stmt stmtsep]
+ * [max-elements-stmt stmtsep]
+ * [ordered-by-stmt stmtsep]
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * *((typedef-stmt /
+ * grouping-stmt) stmtsep)
+ * 1*(data-def-stmt stmtsep)
+ * "}"
+ * TODO : 0..1 occurance to be checked in listener
+ */
+ listStatement : LIST_KEYWORD identifier LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | mustStatement | keyStatement
+ | uniqueStatement | configStatement | minElementsStatement | maxElementsStatement | orderedByStatement | statusStatement
+ | descriptionStatement | referenceStatement | typedefStatement | groupingStatement| dataDefStatement)* RIGHT_CURLY_BRACE;
+
+ /**
+ * key-stmt = key-keyword sep key-arg-str stmtend
+ */
+ keyStatement : KEY_KEYWORD key STMTEND;
+
+ /**
+ * unique-stmt = unique-keyword sep unique-arg-str stmtend
+ */
+ uniqueStatement: UNIQUE_KEYWORD unique STMTEND;
+
+ /**
+ * choice-stmt = choice-keyword sep identifier-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [when-stmt stmtsep]
+ * *(if-feature-stmt stmtsep)
+ * [default-stmt stmtsep]
+ * [config-stmt stmtsep]
+ * [mandatory-stmt stmtsep]
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * *((short-case-stmt / case-stmt) stmtsep)
+ * "}")
+ * TODO : 0..1 occurance to be checked in listener
+ */
+ choiceStatement : CHOICE_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | defaultStatement
+ | configStatement | mandatoryStatement | statusStatement | descriptionStatement | referenceStatement | shortCaseStatement
+ | caseStatement)* RIGHT_CURLY_BRACE);
+
+ /**
+ * short-case-stmt = container-stmt /
+ * leaf-stmt /
+ * leaf-list-stmt /
+ * list-stmt /
+ * anyxml-stmt
+ */
+ shortCaseStatement : containerStatement | leafStatement | leafListStatement | listStatement | anyxmlStatement;
+
+ /**
+ * case-stmt = case-keyword sep identifier-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [when-stmt stmtsep]
+ * *(if-feature-stmt stmtsep)
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * *(data-def-stmt stmtsep)
+ * "}")
+ * TODO : 0..1 occurance to be checked in listener
+ */
+ caseStatement : CASE_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | statusStatement
+ | descriptionStatement | referenceStatement | dataDefStatement)* RIGHT_CURLY_BRACE);
+
+ /**
+ * anyxml-stmt = anyxml-keyword sep identifier-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [when-stmt stmtsep]
+ * *(if-feature-stmt stmtsep)
+ * *(must-stmt stmtsep)
+ * [config-stmt stmtsep]
+ * [mandatory-stmt stmtsep]
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * "}")
+ */
+ anyxmlStatement : ANYXML_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement
+ | mustStatement | configStatement | mandatoryStatement | statusStatement | descriptionStatement
+ | referenceStatement)* RIGHT_CURLY_BRACE);
+
+ /**
+ * uses-stmt = uses-keyword sep identifier-ref-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [when-stmt stmtsep]
+ * *(if-feature-stmt stmtsep)
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * *(refine-stmt stmtsep)
+ * *(uses-augment-stmt stmtsep)
+ * "}")
+ * TODO : 0..1 occurance to be checked in listener
+ */
+ usesStatement : USES_KEYWORD string (STMTEND | LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | statusStatement
+ | descriptionStatement | referenceStatement | refineStatement | augmentStatement)* RIGHT_CURLY_BRACE);
+
+ /**
+ * refine-stmt = refine-keyword sep refine-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * (refine-container-stmts /
+ * refine-leaf-stmts /
+ * refine-leaf-list-stmts /
+ * refine-list-stmts /
+ * refine-choice-stmts /
+ * refine-case-stmts /
+ * refine-anyxml-stmts)
+ * "}")
+ */
+ refineStatement : REFINE_KEYWORD refine (STMTEND | LEFT_CURLY_BRACE (refineContainerStatements
+ | refineLeafStatements | refineLeafListStatements | refineListStatements | refineChoiceStatements
+ | refineCaseStatements | refineAnyxmlStatements) RIGHT_CURLY_BRACE);
+
+ /**
+ * refine-container-stmts =
+ * ;; these stmts can appear in any order
+ * *(must-stmt stmtsep)
+ * [presence-stmt stmtsep]
+ * [config-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * TODO : 0..1 occurance to be checked in listener
+ */
+ refineContainerStatements : (mustStatement | presenceStatement | configStatement | descriptionStatement | referenceStatement)* ;
+
+ /**
+ * refine-leaf-stmts = ;; these stmts can appear in any order
+ * *(must-stmt stmtsep)
+ * [default-stmt stmtsep]
+ * [config-stmt stmtsep]
+ * [mandatory-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * TODO : 0..1 occurance to be checked in listener
+ */
+ refineLeafStatements : (mustStatement | defaultStatement | configStatement | mandatoryStatement | descriptionStatement | referenceStatement)*;
+
+ /**
+ * refine-leaf-list-stmts =
+ * ;; these stmts can appear in any order
+ * *(must-stmt stmtsep)
+ * [config-stmt stmtsep]
+ * [min-elements-stmt stmtsep]
+ * [max-elements-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * TODO : 0..1 occurance to be checked in listener
+ */
+ refineLeafListStatements : (mustStatement | configStatement | minElementsStatement | maxElementsStatement | descriptionStatement
+ | referenceStatement)*;
+
+ /**
+ * refine-list-stmts = ;; these stmts can appear in any order
+ * *(must-stmt stmtsep)
+ * [config-stmt stmtsep]
+ * [min-elements-stmt stmtsep]
+ * [max-elements-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * TODO : 0..1 occurance to be checked in listener
+ */
+ refineListStatements : (mustStatement | configStatement | minElementsStatement | maxElementsStatement | descriptionStatement
+ | referenceStatement)*;
+
+ /**
+ * refine-choice-stmts = ;; these stmts can appear in any order
+ * [default-stmt stmtsep]
+ * [config-stmt stmtsep]
+ * [mandatory-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * TODO : 0..1 occurance to be checked in listener
+ */
+ refineChoiceStatements : (defaultStatement | configStatement | mandatoryStatement | descriptionStatement | referenceStatement)*;
+
+ /**
+ * refine-case-stmts = ;; these stmts can appear in any order
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ *
+ */
+ refineCaseStatements : (descriptionStatement | referenceStatement)? | (referenceStatement | descriptionStatement)?;
+
+ /**
+ * refine-anyxml-stmts = ;; these stmts can appear in any order
+ * *(must-stmt stmtsep)
+ * [config-stmt stmtsep]
+ * [mandatory-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ */
+ refineAnyxmlStatements : (mustStatement | configStatement | mandatoryStatement | descriptionStatement
+ | referenceStatement)*;
+
+ /**
+ * augment-stmt = augment-keyword sep augment-arg-str optsep
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [when-stmt stmtsep]
+ * *(if-feature-stmt stmtsep)
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * 1*((data-def-stmt stmtsep) /
+ * (case-stmt stmtsep))
+ * "}"
+ * TODO : 0..1 occurance to be checked in listener
+ */
+ augmentStatement : AUGMENT_KEYWORD augment LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | statusStatement
+ | descriptionStatement | referenceStatement | dataDefStatement | caseStatement)* RIGHT_CURLY_BRACE;
+
+ /**
+ * when-stmt = when-keyword sep string optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * "}")
+ *
+ */
+ whenStatement : WHEN_KEYWORD string (STMTEND | LEFT_CURLY_BRACE ((descriptionStatement? referenceStatement?)
+ | (referenceStatement? descriptionStatement?)) RIGHT_CURLY_BRACE);
+
+ /**
+ * rpc-stmt = rpc-keyword sep identifier-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * *(if-feature-stmt stmtsep)
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * *((typedef-stmt /
+ * grouping-stmt) stmtsep)
+ * [input-stmt stmtsep]
+ * [output-stmt stmtsep]
+ * "}")
+ */
+ rpcStatement : RPC_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE (ifFeatureStatement | statusStatement | descriptionStatement
+ | referenceStatement | typedefStatement | groupingStatement | inputStatement | outputStatement)* RIGHT_CURLY_BRACE);
+
+ /**
+ * input-stmt = input-keyword optsep
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * *((typedef-stmt /
+ * grouping-stmt) stmtsep)
+ * 1*(data-def-stmt stmtsep)
+ * "}"
+ */
+ inputStatement : INPUT_KEYWORD LEFT_CURLY_BRACE (typedefStatement | groupingStatement | dataDefStatement)* RIGHT_CURLY_BRACE;
+
+ /**
+ * output-stmt = output-keyword optsep
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * *((typedef-stmt /
+ * grouping-stmt) stmtsep)
+ * 1*(data-def-stmt stmtsep)
+ * "}"
+ */
+ outputStatement : OUTPUT_KEYWORD LEFT_CURLY_BRACE (typedefStatement | groupingStatement | dataDefStatement)* RIGHT_CURLY_BRACE;
+
+ /**
+ * notification-stmt = notification-keyword sep
+ * identifier-arg-str optsep
+ * (";" /
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * *(if-feature-stmt stmtsep)
+ * [status-stmt stmtsep]
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * *((typedef-stmt /
+ * grouping-stmt) stmtsep)
+ * *(data-def-stmt stmtsep)
+ * "}")
+ * TODO : 0..1 occurance to be checked in listener
+ */
+ notificationStatement : NOTIFICATION_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE (ifFeatureStatement
+ | statusStatement | descriptionStatement | referenceStatement | typedefStatement
+ | groupingStatement | dataDefStatement)* RIGHT_CURLY_BRACE);
+
+ /**
+ * deviation-stmt = deviation-keyword sep
+ * deviation-arg-str optsep
+ * "{" stmtsep
+ * ;; these stmts can appear in any order
+ * [description-stmt stmtsep]
+ * [reference-stmt stmtsep]
+ * (deviate-not-supported-stmt /
+ * 1*(deviate-add-stmt /
+ * deviate-replace-stmt /
+ * deviate-delete-stmt))
+ * "}"
+ * TODO : 0..1 occurance to be checked in listener
+ */
+ deviationStatement: DEVIATION_KEYWORD deviation LEFT_CURLY_BRACE (descriptionStatement | referenceStatement
+ | deviateNotSupportedStatement | deviateAddStatement | deviateReplaceStatement
+ | deviateDeleteStatement)* RIGHT_CURLY_BRACE;
+
+ /**
+ * deviate-not-supported-stmt =
+ * deviate-keyword sep
+ * not-supported-keyword optsep
+ * (";" /
+ * "{" stmtsep
+ * "}")
+ */
+ deviateNotSupportedStatement: DEVIATE_KEYWORD NOT_SUPPORTED_KEYWORD (STMTEND | LEFT_CURLY_BRACE RIGHT_CURLY_BRACE);
+
+ /**
+ * deviate-add-stmt = deviate-keyword sep add-keyword optsep
+ * (";" /
+ * "{" stmtsep
+ * [units-stmt stmtsep]
+ * *(must-stmt stmtsep)
+ * *(unique-stmt stmtsep)
+ * [default-stmt stmtsep]
+ * [config-stmt stmtsep]
+ * [mandatory-stmt stmtsep]
+ * [min-elements-stmt stmtsep]
+ * [max-elements-stmt stmtsep]
+ * "}")
+ */
+ deviateAddStatement: DEVIATE_KEYWORD ADD_KEYWORD (STMTEND | (LEFT_CURLY_BRACE unitsStatement? mustStatement* uniqueStatement*
+ defaultStatement? configStatement? mandatoryStatement? minElementsStatement? maxElementsStatement?
+ RIGHT_CURLY_BRACE));
+
+ /**
+ * deviate-delete-stmt = deviate-keyword sep delete-keyword optsep
+ * (";" /
+ * "{" stmtsep
+ * [units-stmt stmtsep]
+ * *(must-stmt stmtsep)
+ * *(unique-stmt stmtsep)
+ * [default-stmt stmtsep]
+ * "}")
+ */
+ deviateDeleteStatement: DEVIATE_KEYWORD DELETE_KEYWORD (STMTEND
+ | (LEFT_CURLY_BRACE unitsStatement? mustStatement* uniqueStatement* defaultStatement? RIGHT_CURLY_BRACE));
+
+ /**
+ * deviate-replace-stmt = deviate-keyword sep replace-keyword optsep
+ * (";" /
+ * "{" stmtsep
+ * [type-stmt stmtsep]
+ * [units-stmt stmtsep]
+ * [default-stmt stmtsep]
+ * [config-stmt stmtsep]
+ * [mandatory-stmt stmtsep]
+ * [min-elements-stmt stmtsep]
+ * [max-elements-stmt stmtsep]
+ * "}")
+ */
+ deviateReplaceStatement: DEVIATE_KEYWORD REPLACE_KEYWORD (STMTEND | (LEFT_CURLY_BRACE typeStatement? unitsStatement?
+ defaultStatement? configStatement? mandatoryStatement? minElementsStatement?
+ maxElementsStatement? RIGHT_CURLY_BRACE));
+
+ /**
+ * compiler-annotation-stmt = prefix:compiler-annotation-keyword string
+ * "{"
+ * [app-data-structure-stmt stmtsep]
+ * [app-extended-stmt stmtsep]
+ * "}"
+ */
+ compilerAnnotationStatement : COMPILER_ANNOTATION string LEFT_CURLY_BRACE
+ compilerAnnotationBodyStatement RIGHT_CURLY_BRACE;
+
+ compilerAnnotationBodyStatement : appDataStructureStatement? appExtendedStatement? ;
+
+ /**
+ * app-data-structure-stmt = prefix:app-data-structure-keyword string
+ * (";" /
+ * "{"
+ * [data-structure-key-stmt stmtsep]
+ * "}")
+ */
+ appDataStructureStatement : APP_DATA_STRUCTURE appDataStructure (STMTEND | (LEFT_CURLY_BRACE
+ dataStructureKeyStatement? RIGHT_CURLY_BRACE));
+
+ /**
+ * data-structure-key-stmt = prefix:key-keyword string ";"
+ */
+ dataStructureKeyStatement : DATA_STRUCTURE_KEY string STMTEND;
+
+ /**
+ * app-extended-stmt = prefix:app-extended-name-keyword string ";"
+ */
+ appExtendedStatement : APP_EXTENDED extendedName STMTEND;
+
+ string : STRING (PLUS STRING)*
+ | IDENTIFIER
+ | INTEGER
+ | yangConstruct;
+
+ identifier : STRING (PLUS STRING)*
+ | IDENTIFIER
+ | yangConstruct;
+
+ dateArgumentString : DATE_ARG
+ | STRING (PLUS STRING)*;
+
+ version : string;
+
+ range : string;
+
+ length : string;
+
+ path : string;
+
+ position : string;
+
+ status : string;
+
+ config : string;
+
+ mandatory : string;
+
+ orderedBy : string;
+
+ minValue : string;
+
+ maxValue : string;
+
+ key : string;
+
+ unique : string;
+
+ refine : string;
+
+ requireInstance : string;
+
+ augment : string;
+
+ deviation : string;
+
+ value : string;
+
+ fraction : string;
+
+ appDataStructure : string;
+
+ extendedName : string;
+
+ yangConstruct : ANYXML_KEYWORD | ARGUMENT_KEYWORD | AUGMENT_KEYWORD | BASE_KEYWORD | BELONGS_TO_KEYWORD
+ | BIT_KEYWORD | CASE_KEYWORD | CHOICE_KEYWORD | CONFIG_KEYWORD | CONTACT_KEYWORD | CONTAINER_KEYWORD
+ | DEFAULT_KEYWORD | DESCRIPTION_KEYWORD | ENUM_KEYWORD | ERROR_APP_TAG_KEYWORD | ERROR_MESSAGE_KEYWORD
+ | EXTENSION_KEYWORD | DEVIATION_KEYWORD | DEVIATE_KEYWORD | FEATURE_KEYWORD
+ | FRACTION_DIGITS_KEYWORD | GROUPING_KEYWORD | IDENTITY_KEYWORD | IF_FEATURE_KEYWORD
+ | IMPORT_KEYWORD | INCLUDE_KEYWORD | INPUT_KEYWORD | KEY_KEYWORD | LEAF_KEYWORD | LEAF_LIST_KEYWORD
+ | LENGTH_KEYWORD | LIST_KEYWORD | MANDATORY_KEYWORD | MAX_ELEMENTS_KEYWORD | MIN_ELEMENTS_KEYWORD
+ | MODULE_KEYWORD | MUST_KEYWORD | NAMESPACE_KEYWORD | NOTIFICATION_KEYWORD | ORDERED_BY_KEYWORD
+ | ORGANIZATION_KEYWORD | OUTPUT_KEYWORD | PATH_KEYWORD | PATTERN_KEYWORD | POSITION_KEYWORD
+ | PREFIX_KEYWORD | PRESENCE_KEYWORD | RANGE_KEYWORD | REFERENCE_KEYWORD | REFINE_KEYWORD
+ | REQUIRE_INSTANCE_KEYWORD | REVISION_KEYWORD | REVISION_DATE_KEYWORD | RPC_KEYWORD
+ | STATUS_KEYWORD | SUBMODULE_KEYWORD | TYPE_KEYWORD | TYPEDEF_KEYWORD | UNIQUE_KEYWORD
+ | UNITS_KEYWORD | USES_KEYWORD | VALUE_KEYWORD | WHEN_KEYWORD | YANG_VERSION_KEYWORD
+ | YIN_ELEMENT_KEYWORD | ADD_KEYWORD | CURRENT_KEYWORD | DELETE_KEYWORD | DEPRECATED_KEYWORD
+ | FALSE_KEYWORD | MAX_KEYWORD | MIN_KEYWORD | NOT_SUPPORTED_KEYWORD | OBSOLETE_KEYWORD
+ | REPLACE_KEYWORD | SYSTEM_KEYWORD | TRUE_KEYWORD | UNBOUNDED_KEYWORD | USER_KEYWORD
+ | COMPILER_ANNOTATION_KEYWORD | APP_DATA_STRUCTURE_KEYWORD | DATA_STRUCTURE_KEYWORD
+ | APP_EXTENDED_KEYWORD;
diff --git a/parser/src/main/resources/YangLexer.g4 b/compiler/base/parser/src/main/resources/YangLexer.g4
similarity index 100%
rename from parser/src/main/resources/YangLexer.g4
rename to compiler/base/parser/src/main/resources/YangLexer.g4
diff --git a/parser/src/main/resources/YangLexer.tokens b/compiler/base/parser/src/main/resources/YangLexer.tokens
similarity index 100%
rename from parser/src/main/resources/YangLexer.tokens
rename to compiler/base/parser/src/main/resources/YangLexer.tokens
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/CustomExceptionMatcher.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/CustomExceptionMatcher.java
new file mode 100644
index 0000000..2f3e9ed
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/CustomExceptionMatcher.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl;
+
+import org.hamcrest.Description;
+import org.hamcrest.TypeSafeMatcher;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+
+/**
+ * ExpectedException framework can use the Hamcrest matcher's to test
+ * custom/extended exceptions. This class extends the type safe matcher to
+ * define the custom exception matcher.
+ */
+public final class CustomExceptionMatcher extends TypeSafeMatcher<ParserException> {
+
+ private int actualLine;
+ private final int expectedLine;
+ private int actualCharPosition;
+ private final int expectedCharPosition;
+
+ /**
+ * Customized exception matcher to match error location.
+ *
+ * @param line error line
+ * @param charPosition error character position
+ * @return customized exception matcher to match error location
+ */
+ public static CustomExceptionMatcher errorLocation(int line, int charPosition) {
+ return new CustomExceptionMatcher(line, charPosition);
+ }
+
+ private CustomExceptionMatcher(int expectedLine, int expectedCharPosition) {
+ this.expectedLine = expectedLine;
+ this.expectedCharPosition = expectedCharPosition;
+ }
+
+ @Override
+ protected boolean matchesSafely(final ParserException exception) {
+ actualLine = exception.getLineNumber();
+ actualCharPosition = exception.getCharPositionInLine();
+ return ((actualLine == expectedLine) && (actualCharPosition == expectedCharPosition));
+ }
+
+ @Override
+ public void describeTo(Description description) {
+ description.appendText(" Error reported location ")
+ .appendText("Line " + actualLine + ", " + "CharPosition " + actualCharPosition)
+ .appendText(" instead of expected ")
+ .appendText("Line " + expectedLine + ", " + "CharPosition " + expectedCharPosition);
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/TreeWalkListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/TreeWalkListenerTest.java
new file mode 100644
index 0000000..d199b38
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/TreeWalkListenerTest.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+
+import java.io.IOException;
+
+/**
+ * Test cases for testing tree walk listener functionality.
+ */
+public class TreeWalkListenerTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ /**
+ * Checks whether exception is thrown for ordered statement.
+ */
+ @Test
+ public void processOrderedByStatement() throws IOException, ParserException {
+ // Now no exception should be thrown. logs should come.
+ manager.getDataModel("src/test/resources/OrderedByStatement.yang");
+ }
+
+ /**
+ * Checks whether exception is thrown for anyxml statement.
+ */
+ @Test
+ public void processAnyXmlStatement() throws IOException, ParserException {
+ // Now no exception should be thrown. logs should come.
+ 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/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/YangUtilsParserManagerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/YangUtilsParserManagerTest.java
new file mode 100644
index 0000000..c74869b
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/YangUtilsParserManagerTest.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+
+/**
+ * Test case for testing YANG utils parser manager.
+ */
+public class YangUtilsParserManagerTest {
+
+ YangUtilsParserManager manager = new YangUtilsParserManager();
+ File file;
+ BufferedWriter out;
+
+ @Before
+ public void setUp() throws Exception {
+ file = new File("demo.yang");
+ out = new BufferedWriter(new FileWriter(file));
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ file.delete();
+ }
+
+ /**
+ * This test case checks whether the null pointer exception is generated
+ * when the input YANG file is null.
+ */
+ @Test(expected = NullPointerException.class)
+ public void getDataModelNullFileTest() throws IOException, ParserException {
+ YangUtilsParserManager manager = new YangUtilsParserManager();
+ YangNode node = manager.getDataModel(null);
+ }
+
+ /**
+ * This test case checks whether the io exception is generated
+ * when the input YANG file is non existent.
+ */
+ @Test(expected = ParserException.class)
+ public void getDataModelNonExistentFileTest() throws IOException, ParserException {
+
+ YangUtilsParserManager manager = new YangUtilsParserManager();
+ YangNode node = manager.getDataModel("nonexistent.yang");
+ }
+
+ /**
+ * This test case checks if the input YANG file is correct no exception
+ * should be generated.
+ */
+ @Test
+ public void getDataModelCorrectFileTest() throws IOException, ParserException {
+
+ out.write("module ONOS {\n");
+ out.write("yang-version 1;\n");
+ out.write("namespace urn:ietf:params:xml:ns:yang:ietf-ospf;\n");
+ out.write("prefix On;\n");
+ out.write("}\n");
+ out.close();
+
+ YangNode node = manager.getDataModel("demo.yang");
+ }
+
+ /**
+ * This test case checks if the input YANG file with wrong YANG constructs
+ * than parser exception should be generated.
+ */
+ @Test(expected = ParserException.class)
+ public void getDataModelIncorrectFileTest() throws IOException, ParserException {
+
+ out.write("module ONOS {\n");
+ out.write("yang-version 1\n");
+ out.write("namespace urn:ietf:params:xml:ns:yang:ietf-ospf;\n");
+ out.write("prefix On;\n");
+ out.write("}\n");
+ out.close();
+
+ YangNode node = manager.getDataModel("demo.yang");
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/AugmentListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/AugmentListenerTest.java
new file mode 100644
index 0000000..0e0fd10
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/AugmentListenerTest.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.hamcrest.core.Is;
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangAtomicPath;
+import org.onosproject.yang.compiler.datamodel.YangAugment;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.ListIterator;
+
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Test cases for testing augment listener functionality.
+ */
+public class AugmentListenerTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks valid augment statement.
+ */
+ @Test
+ public void processValidAugmentStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ValidAugmentStatement.yang");
+
+ assertThat(node instanceof YangModule, is(true));
+ assertThat(node.getNodeType(), Is.is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangAugment yangAugment = (YangAugment) yangNode.getChild();
+ ListIterator<YangAtomicPath> absPathIterator = yangAugment.getTargetNode().listIterator();
+ YangAtomicPath absPathIdentifier = absPathIterator.next();
+ assertThat(absPathIdentifier.getNodeIdentifier().getPrefix(), is("if"));
+ assertThat(absPathIdentifier.getNodeIdentifier().getName(), is("interfaces"));
+
+ ListIterator<YangLeaf> leafIterator = yangAugment.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("ds0ChannelNumber"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("ChannelNumber"));
+ assertThat(leafInfo.getDataType().getDataType(), Is.is(YangDataTypes.DERIVED));
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/BaseFileListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/BaseFileListenerTest.java
new file mode 100644
index 0000000..3a3c744
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/BaseFileListenerTest.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.javadatamodel.YangJavaModule;
+import org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+
+/**
+ * Test cases for testing base rule listener functionality.
+ */
+public class BaseFileListenerTest {
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ /**
+ * Checks for exception if stack of parsable data is not empty at the entry
+ * of yang base rule.
+ */
+ @Test
+ public void processYangFileEntryNonEmptyStack() {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("Internal parser error detected: Invalid holder for yangbase before processing.");
+
+ YangModule tmpModule = new YangJavaModule();
+ TreeWalkListener listener = new TreeWalkListener();
+ listener.getParsedDataStack().push(tmpModule);
+ GeneratedYangParser.YangfileContext ctx = null;
+ BaseFileListener.processYangFileEntry(listener, ctx);
+ }
+
+ /**
+ * Checks that exception shouldn't be generated if stack of parsable data is
+ * empty at the entry of yang base rule.
+ */
+ @Test
+ public void processYangFileEntryEmptyStack() {
+
+ TreeWalkListener listener = new TreeWalkListener();
+ GeneratedYangParser.YangfileContext ctx = null;
+ BaseFileListener.processYangFileEntry(listener, ctx);
+ }
+
+ /**
+ * Checks that exception should be generated if stack of parsable data is
+ * not empty at the exit of yang base rule.
+ */
+ @Test
+ public void processYangFileExitEmptyStack() {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("Internal parser error detected: Missing holder at yangbase after processing.");
+
+ TreeWalkListener listener = new TreeWalkListener();
+ GeneratedYangParser.YangfileContext ctx = null;
+ BaseFileListener.processYangFileExit(listener, ctx);
+ }
+
+ /**
+ * Checks that exception shouldn't be generated if stack of parsable data is
+ * empty at the exit of yang base rule.
+ */
+ @Test
+ public void processYangFileExitNonEmptyStack() {
+
+ TreeWalkListener listener = new TreeWalkListener();
+ GeneratedYangParser.YangfileContext ctx = null;
+ BaseFileListener.processYangFileEntry(listener, ctx);
+ }
+
+ /**
+ * Checks that after popping out the parsable node from stack it should be
+ * empty.
+ */
+ @Test
+ public void processYangFileExitStackErrorExtraEntryTest() {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("Internal parser error detected: Invalid holder for yangbase after processing.");
+
+ YangModule tmpModule = new YangJavaModule();
+ YangModule tmpModule2 = new YangJavaModule();
+ TreeWalkListener listener = new TreeWalkListener();
+ listener.getParsedDataStack().push(tmpModule);
+ listener.getParsedDataStack().push(tmpModule2);
+ GeneratedYangParser.YangfileContext ctx = null;
+ BaseFileListener.processYangFileExit(listener, ctx);
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/BelongstoListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/BelongstoListenerTest.java
new file mode 100644
index 0000000..c9336ce
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/BelongstoListenerTest.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangSubModule;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.CustomExceptionMatcher;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Test cases for testing belongsto listener functionality.
+ */
+public class BelongstoListenerTest {
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks if mandatory belongsto parameter "prefix" is not present.
+ */
+ @Test
+ public void processBelongsToWithoutPrefix() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("mismatched input '}' expecting 'prefix'");
+ thrown.expect(CustomExceptionMatcher.errorLocation(4, 0));
+ YangNode node = manager.getDataModel("src/test/resources/BelongsToWithoutPrefix.yang");
+ }
+
+ /**
+ * Checks that prefix must be present only once in belongsto.
+ */
+ @Test
+ public void processBelongsToDualPrefix() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("mismatched input 'prefix' expecting '}'");
+ thrown.expect(CustomExceptionMatcher.errorLocation(5, 0));
+ YangNode node = manager.getDataModel("src/test/resources/BelongsToDualPrefix.yang");
+ }
+
+ /**
+ * Checks if belongsto listener updates the date model tree.
+ */
+ @Test
+ public void processBelongsToWithPrefix() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/BelongsToWithPrefix.yang");
+ YangSubModule yangNode = (YangSubModule) node;
+ assertThat(yangNode.getBelongsTo().getBelongsToModuleName(), is("ONOS"));
+ }
+
+ /**
+ * Checks if mandatory parameter "belongsto" is present.
+ */
+ @Test
+ public void processSubModuleWithoutBelongsTo() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("mismatched input '}' expecting 'belongs-to'");
+ thrown.expect(CustomExceptionMatcher.errorLocation(3, 0));
+ YangNode node = manager.getDataModel("src/test/resources/SubModuleWithoutBelongsTo.yang");
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/BitListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/BitListenerTest.java
new file mode 100644
index 0000000..b6f6c64
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/BitListenerTest.java
@@ -0,0 +1,362 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.hamcrest.core.Is;
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangBit;
+import org.onosproject.yang.compiler.datamodel.YangBits;
+import org.onosproject.yang.compiler.datamodel.YangDerivedInfo;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.YangTypeDef;
+import org.onosproject.yang.compiler.datamodel.YangUnion;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for bit listener.
+ */
+public class BitListenerTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks bit statement without position.
+ */
+ @Test
+ public void processBitTypeStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/BitTypeStatement.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), Is.is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("mybits"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("bits"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.BITS));
+ assertThat(((YangBits) leafInfo.getDataType().getDataTypeExtendedInfo()).getBitsName(),
+ is("mybits"));
+
+ // Check bit name map
+ Map<String, YangBit> bitNameMap = ((YangBits) leafInfo.getDataType().getDataTypeExtendedInfo()).getBitNameMap();
+ assertThat(bitNameMap.size(), is(3));
+ for (Map.Entry<String, YangBit> element : bitNameMap.entrySet()) {
+ String bitName = element.getKey();
+ YangBit yangBit = element.getValue();
+ if (bitName.equals("disable-nagle")) {
+ assertThat(yangBit.getPosition(), is(0));
+ } else if (bitName.equals("auto-sense-speed")) {
+ assertThat(yangBit.getPosition(), is(1));
+ } else if (bitName.equals("Ten-Mb-only")) {
+ assertThat(yangBit.getPosition(), is(2));
+ } else {
+ throw new IOException("Invalid bit name: " + bitName);
+ }
+ }
+
+ // Check bit position map
+ Map<Integer, YangBit> bitPositionMap = ((YangBits) leafInfo.getDataType().getDataTypeExtendedInfo())
+ .getBitPositionMap();
+ assertThat(bitPositionMap.size(), is(3));
+ for (Map.Entry<Integer, YangBit> element : bitPositionMap.entrySet()) {
+ int position = element.getKey();
+ YangBit yangBit = element.getValue();
+ if (position == 0) {
+ assertThat(yangBit.getBitName(), is("disable-nagle"));
+ } else if (position == 1) {
+ assertThat(yangBit.getBitName(), is("auto-sense-speed"));
+ } else if (position == 2) {
+ assertThat(yangBit.getBitName(), is("Ten-Mb-only"));
+ } else {
+ throw new IOException("Invalid bit position: " + position);
+ }
+ }
+ }
+
+ /**
+ * Checks bit statement with typedef.
+ */
+ @Test
+ public void processBitTypedefStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/BitTypedefStatement.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangTypeDef typedef = (YangTypeDef) yangNode.getChild();
+ assertThat(typedef.getName(), is("type15"));
+
+ YangType type = typedef.getTypeList().iterator().next();
+ assertThat(type.getDataType(), is(YangDataTypes.BITS));
+ assertThat(type.getDataTypeName(), is("bits"));
+
+ // Check bit name map
+ Map<String, YangBit> bitNameMap = ((YangBits) type.getDataTypeExtendedInfo()).getBitNameMap();
+ assertThat(bitNameMap.size(), is(3));
+ for (Map.Entry<String, YangBit> element : bitNameMap.entrySet()) {
+ String bitName = element.getKey();
+ YangBit yangBit = element.getValue();
+ if (bitName.equals("disable-nagle")) {
+ assertThat(yangBit.getPosition(), is(0));
+ } else if (bitName.equals("auto-sense-speed")) {
+ assertThat(yangBit.getPosition(), is(1));
+ } else if (bitName.equals("Mb-only")) {
+ assertThat(yangBit.getPosition(), is(2));
+ } else {
+ throw new IOException("Invalid bit name: " + bitName);
+ }
+ }
+
+ // Check bit position map
+ Map<Integer, YangBit> bitPositionMap = ((YangBits) type.getDataTypeExtendedInfo()).getBitPositionMap();
+ assertThat(bitPositionMap.size(), is(3));
+ for (Map.Entry<Integer, YangBit> element : bitPositionMap.entrySet()) {
+ int position = element.getKey();
+ YangBit yangBit = element.getValue();
+ if (position == 0) {
+ assertThat(yangBit.getBitName(), is("disable-nagle"));
+ } else if (position == 1) {
+ assertThat(yangBit.getBitName(), is("auto-sense-speed"));
+ } else if (position == 2) {
+ assertThat(yangBit.getBitName(), is("Mb-only"));
+ } else {
+ throw new IOException("Invalid bit position: " + position);
+ }
+ }
+ }
+
+ /**
+ * Checks bit statement with typedef with referred leaf.
+ */
+ @Test
+ public void processBitTypedefReferredLeafStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/BitTypedefReferredLeafStatement.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangTypeDef typedef = (YangTypeDef) yangNode.getChild();
+ assertThat(typedef.getName(), is("topBits"));
+
+ YangType type = typedef.getTypeList().iterator().next();
+ assertThat(type.getDataType(), is(YangDataTypes.BITS));
+ assertThat(type.getDataTypeName(), is("bits"));
+
+ // Check bit name map
+ Map<String, YangBit> bitNameMap = ((YangBits) type.getDataTypeExtendedInfo()).getBitNameMap();
+ assertThat(bitNameMap.size(), is(3));
+ for (Map.Entry<String, YangBit> element : bitNameMap.entrySet()) {
+ String bitName = element.getKey();
+ YangBit yangBit = element.getValue();
+ if (bitName.equals("disable-nagle")) {
+ assertThat(yangBit.getPosition(), is(0));
+ } else if (bitName.equals("auto-sense-speed")) {
+ assertThat(yangBit.getPosition(), is(1));
+ } else if (bitName.equals("Mb-only")) {
+ assertThat(yangBit.getPosition(), is(2));
+ } else {
+ throw new IOException("Invalid bit name: " + bitName);
+ }
+ }
+
+ // Check bit position map
+ Map<Integer, YangBit> bitPositionMap = ((YangBits) type.getDataTypeExtendedInfo()).getBitPositionMap();
+ assertThat(bitPositionMap.size(), is(3));
+ for (Map.Entry<Integer, YangBit> element : bitPositionMap.entrySet()) {
+ int position = element.getKey();
+ YangBit yangBit = element.getValue();
+ if (position == 0) {
+ assertThat(yangBit.getBitName(), is("disable-nagle"));
+ } else if (position == 1) {
+ assertThat(yangBit.getBitName(), is("auto-sense-speed"));
+ } else if (position == 2) {
+ assertThat(yangBit.getBitName(), is("Mb-only"));
+ } else {
+ throw new IOException("Invalid bit position: " + position);
+ }
+ }
+
+ // Check leaf reffered typedef
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("myBits"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("topBits"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.DERIVED));
+ YangType<YangDerivedInfo> typeDerived = (YangType<YangDerivedInfo>) leafInfo.getDataType();
+ YangDerivedInfo derivedInfo = (YangDerivedInfo) typeDerived.getDataTypeExtendedInfo();
+ YangTypeDef prevTypedef = (YangTypeDef) derivedInfo.getReferredTypeDef();
+ assertThat(prevTypedef.getName(), is("topBits"));
+ YangType topType = prevTypedef.getTypeList().iterator().next();
+ assertThat(topType.getDataType(), is(YangDataTypes.BITS));
+ assertThat(topType.getDataTypeName(), is("bits"));
+ YangType<YangBits> typeBits = (YangType<YangBits>) topType;
+ YangBits bits = typeBits.getDataTypeExtendedInfo();
+
+ // Check bit name map
+ bitNameMap = bits.getBitNameMap();
+ assertThat(bitNameMap.size(), is(3));
+ for (Map.Entry<String, YangBit> element : bitNameMap.entrySet()) {
+ String bitName = element.getKey();
+ YangBit yangBit = element.getValue();
+ if (bitName.equals("disable-nagle")) {
+ assertThat(yangBit.getPosition(), is(0));
+ } else if (bitName.equals("auto-sense-speed")) {
+ assertThat(yangBit.getPosition(), is(1));
+ } else if (bitName.equals("Mb-only")) {
+ assertThat(yangBit.getPosition(), is(2));
+ } else {
+ throw new IOException("Invalid bit name: " + bitName);
+ }
+ }
+
+ // Check bit position map
+ bitPositionMap = bits.getBitPositionMap();
+ assertThat(bitPositionMap.size(), is(3));
+ for (Map.Entry<Integer, YangBit> element : bitPositionMap.entrySet()) {
+ int position = element.getKey();
+ YangBit yangBit = element.getValue();
+ if (position == 0) {
+ assertThat(yangBit.getBitName(), is("disable-nagle"));
+ } else if (position == 1) {
+ assertThat(yangBit.getBitName(), is("auto-sense-speed"));
+ } else if (position == 2) {
+ assertThat(yangBit.getBitName(), is("Mb-only"));
+ } else {
+ throw new IOException("Invalid bit position: " + position);
+ }
+ }
+ }
+
+ /**
+ * Checks bit statement with union.
+ */
+ @Test
+ public void processBitUnionStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/BitUnionStatement.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("type15"));
+
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UNION));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("union"));
+
+ YangUnion yangUnion = (YangUnion) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ List<YangType<?>> typeList = yangUnion.getTypeList();
+ ListIterator<YangType<?>> typeListIterator = typeList.listIterator();
+ YangType<?> yangType = typeListIterator.next();
+
+ assertThat(yangType.getDataType(), is(YangDataTypes.BITS));
+ assertThat(yangType.getDataTypeName(), is("bits"));
+
+ // Check bit name map
+ Map<String, YangBit> bitNameMap = ((YangBits) yangType.getDataTypeExtendedInfo()).getBitNameMap();
+ assertThat(bitNameMap.size(), is(3));
+ for (Map.Entry<String, YangBit> element : bitNameMap.entrySet()) {
+ String bitName = element.getKey();
+ YangBit yangBit = element.getValue();
+ if (bitName.equals("disable-nagle")) {
+ assertThat(yangBit.getPosition(), is(0));
+ } else if (bitName.equals("auto-sense-speed")) {
+ assertThat(yangBit.getPosition(), is(1));
+ } else if (bitName.equals("Mb-only")) {
+ assertThat(yangBit.getPosition(), is(2));
+ } else {
+ throw new IOException("Invalid bit name: " + bitName);
+ }
+ }
+
+ // Check bit position map
+ Map<Integer, YangBit> bitPositionMap = ((YangBits) yangType.getDataTypeExtendedInfo()).getBitPositionMap();
+ assertThat(bitPositionMap.size(), is(3));
+ for (Map.Entry<Integer, YangBit> element : bitPositionMap.entrySet()) {
+ int position = element.getKey();
+ YangBit yangBit = element.getValue();
+ if (position == 0) {
+ assertThat(yangBit.getBitName(), is("disable-nagle"));
+ } else if (position == 1) {
+ assertThat(yangBit.getBitName(), is("auto-sense-speed"));
+ } else if (position == 2) {
+ assertThat(yangBit.getBitName(), is("Mb-only"));
+ } else {
+ throw new IOException("Invalid bit position: " + position);
+ }
+ }
+ }
+
+ /**
+ * Checks if enum with same name is not allowed.
+ */
+ @Test(expected = ParserException.class)
+ public void processBitWithDuplicateName() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/BitWithDuplicateName.yang");
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/CaseListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/CaseListenerTest.java
new file mode 100644
index 0000000..a032297
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/CaseListenerTest.java
@@ -0,0 +1,239 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangAugment;
+import org.onosproject.yang.compiler.datamodel.YangCase;
+import org.onosproject.yang.compiler.datamodel.YangChoice;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.ListIterator;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for case listener.
+ */
+public class CaseListenerTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks multiple case statement.
+ */
+ @Test
+ public void processCaseStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/CaseStatement.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangContainer yangContainer = (YangContainer) yangNode.getChild();
+ assertThat(yangContainer.getName(), is("food"));
+
+ YangChoice yangChoice = (YangChoice) yangContainer.getChild();
+ assertThat(yangChoice.getName(), is("snack"));
+
+ YangCase yangCase1 = (YangCase) yangChoice.getChild();
+ assertThat(yangCase1.getName(), is("sports-arena"));
+
+ // Check whether leaf properties as set correctly.
+ ListIterator<YangLeaf> leafIterator1 = yangCase1.getListOfLeaf().listIterator();
+ YangLeaf leafInfo1 = leafIterator1.next();
+
+ assertThat(leafInfo1.getName(), is("pretzel"));
+
+ YangCase yangCase2 = (YangCase) yangCase1.getNextSibling();
+ assertThat(yangCase2.getName(), is("late-night"));
+
+ // Check whether leaf properties as set correctly.
+ ListIterator<YangLeaf> leafIterator2 = yangCase2.getListOfLeaf().listIterator();
+ YangLeaf leafInfo2 = leafIterator2.next();
+
+ assertThat(leafInfo2.getName(), is("chocolate"));
+ }
+
+ /**
+ * Checks duplicate case in choice.
+ */
+ @Test(expected = ParserException.class)
+ public void processDuplicateCaseInChoice() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/DuplicateCaseInChoice.yang");
+ }
+
+ /**
+ * Checks duplicate leaf at different hierarchy.
+ */
+ @Test(expected = ParserException.class)
+ public void processDuplicateLeafInHierarchy() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/DuplicateLeafInHierarchy.yang");
+ }
+
+ /**
+ * Checks duplicate leaf in different case within choice.
+ */
+ @Test(expected = ParserException.class)
+ public void processDuplicateLeafInChoice() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/DuplicateLeafInChoice.yang");
+ }
+
+ /**
+ * Checks same case within different choice.
+ */
+ @Test
+ public void processCaseStatementSameEntryDifferentChoice() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/CaseStatementSameEntryDifferentChoice.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangContainer yangContainer = (YangContainer) yangNode.getChild();
+ assertThat(yangContainer.getName(), is("food"));
+
+ YangChoice yangChoice = (YangChoice) yangContainer.getChild();
+ assertThat(yangChoice.getName(), is("snack"));
+
+ YangCase yangCase1 = (YangCase) yangChoice.getChild();
+ assertThat(yangCase1.getName(), is("sports-arena"));
+
+ // Check whether leaf properties as set correctly.
+ ListIterator<YangLeaf> leafIterator1 = yangCase1.getListOfLeaf().listIterator();
+ YangLeaf leafInfo1 = leafIterator1.next();
+
+ assertThat(leafInfo1.getName(), is("pretzel"));
+
+ YangChoice yangChoice2 = (YangChoice) yangChoice.getNextSibling();
+ assertThat(yangChoice2.getName(), is("lunch"));
+
+ YangCase yangCase2 = (YangCase) yangChoice2.getChild();
+ assertThat(yangCase2.getName(), is("sports-arena"));
+
+ // Check whether leaf properties as set correctly.
+ ListIterator<YangLeaf> leafIterator2 = yangCase2.getListOfLeaf().listIterator();
+ YangLeaf leafInfo2 = leafIterator2.next();
+
+ assertThat(leafInfo2.getName(), is("chocolate"));
+ }
+
+ /**
+ * Checks case choice hierarchy.
+ */
+ @Test
+ public void processCaseChoiceHierarchy() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/CaseChoiceHierarchy.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangContainer yangContainer = (YangContainer) yangNode.getChild();
+ assertThat(yangContainer.getName(), is("food"));
+
+ YangChoice yangChoice1 = (YangChoice) yangContainer.getChild();
+ assertThat(yangChoice1.getName(), is("snack"));
+
+ YangCase yangCase1 = (YangCase) yangChoice1.getChild();
+ assertThat(yangCase1.getName(), is("sports-arena"));
+
+ // Check whether leaf properties as set correctly.
+ ListIterator<YangLeaf> leafIterator1 = yangCase1.getListOfLeaf().listIterator();
+ YangLeaf leafInfo1 = leafIterator1.next();
+
+ assertThat(leafInfo1.getName(), is("pretzel"));
+
+ YangCase yangCase2 = (YangCase) yangCase1.getNextSibling();
+ assertThat(yangCase2.getName(), is("late-night"));
+
+ YangChoice yangChoice2 = (YangChoice) yangCase2.getChild();
+ assertThat(yangChoice2.getName(), is("dinner"));
+
+ YangCase yangCase3 = (YangCase) yangChoice2.getChild();
+ assertThat(yangCase3.getName(), is("late-night"));
+
+ // Check whether leaf properties as set correctly.
+ ListIterator<YangLeaf> leafIterator2 = yangCase3.getListOfLeaf().listIterator();
+ YangLeaf leafInfo2 = leafIterator2.next();
+ assertThat(leafInfo2.getName(), is("beer"));
+ }
+
+ /**
+ * Checks case substatement of augment.
+ */
+ @Test
+ public void processCaseSubStatementOfAugment() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/CaseSubStatementOfAugment.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("event"));
+
+ YangAugment augment = ((YangAugment) yangNode.getChild());
+ assertThat(augment.getName(), is("/snmp:snmp/snmp:engine/snmp:listen/snmp:transport"));
+
+ YangCase yangCase = ((YangCase) augment.getChild());
+ assertThat(yangCase.getName(), is("tls"));
+
+ YangCase yangCase1 = ((YangCase) yangCase.getNextSibling());
+ assertThat(yangCase1.getName(), is("dtls"));
+
+ YangContainer container = ((YangContainer) yangCase.getChild());
+ assertThat(container.getName(), is("tls"));
+ assertThat(container.getListOfLeaf().iterator().next().getName(), is("ip"));
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ChoiceListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ChoiceListenerTest.java
new file mode 100644
index 0000000..834acb8
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ChoiceListenerTest.java
@@ -0,0 +1,129 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangChoice;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for choice listener.
+ */
+public class ChoiceListenerTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks choice statement without body.
+ */
+ @Test
+ public void processChoiceStatementWithoutBody() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ChoiceStatementWithoutBody.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangContainer yangContainer = (YangContainer) yangNode.getChild();
+ assertThat(yangContainer.getName(), is("food"));
+
+ YangChoice yangChoice = (YangChoice) yangContainer.getChild();
+ assertThat(yangChoice.getName(), is("snack"));
+ }
+
+ /**
+ * Checks choice statement with stmt end.
+ */
+ @Test
+ public void processChoiceStatementWithStmtend() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ChoiceStatementWithStmtend.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangContainer yangContainer = (YangContainer) yangNode.getChild();
+ assertThat(yangContainer.getName(), is("food"));
+
+ YangChoice yangChoice = (YangChoice) yangContainer.getChild();
+ assertThat(yangChoice.getName(), is("snack"));
+ }
+
+ /**
+ * Checks choice statement duplicate entry.
+ */
+ @Test(expected = ParserException.class)
+ public void processChoiceStatementDuplicateEntry() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ChoiceStatementDuplicateEntry.yang");
+ }
+
+ /**
+ * Checks choice statement with same entry in two different container.
+ */
+ @Test
+ public void processChoiceStatementSameEntryDifferentContainer() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ChoiceStatementSameEntryDifferentContainer.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangContainer yangContainer1 = (YangContainer) yangNode.getChild();
+ assertThat(yangContainer1.getName(), is("food1"));
+
+ YangChoice yangChoice1 = (YangChoice) yangContainer1.getChild();
+ assertThat(yangChoice1.getName(), is("snack"));
+
+ YangContainer yangContainer2 = (YangContainer) yangNode.getChild().getNextSibling();
+ assertThat(yangContainer2.getName(), is("food2"));
+
+ YangChoice yangChoice2 = (YangChoice) yangContainer2.getChild();
+ assertThat(yangChoice2.getName(), is("snack"));
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ConfigListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ConfigListenerTest.java
new file mode 100644
index 0000000..b7a0d41
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ConfigListenerTest.java
@@ -0,0 +1,495 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.YangStatusType;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.ListIterator;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for config listener.
+ */
+public class ConfigListenerTest {
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks valid config statement.
+ */
+ @Test
+ public void processConfigTrue() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ConfigTrue.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ // Check whether the Config value is set correctly.
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.isConfig(), is(true));
+ }
+
+ /**
+ * Checks valid config statement.
+ */
+ @Test
+ public void processConfigFalse() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ConfigFalse.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ // Check whether the Config value is set correctly.
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.isConfig(), is(false));
+ }
+
+ /**
+ * Checks invalid config statement and expects parser exception.
+ */
+ @Test
+ public void processConfigWithoutStatementEnd() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("missing ';' at '}'");
+ YangNode node = manager.getDataModel("src/test/resources/ConfigWithoutStatementEnd.yang");
+ }
+
+ /**
+ * Checks invalid config statement and expects parser exception.
+ */
+ @Test
+ public void processConfigInvalidValue() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("YANG file error : config value invalid is not valid.");
+ YangNode node = manager.getDataModel("src/test/resources/ConfigInvalidValue.yang");
+ }
+
+ /**
+ * Checks invalid config statement and expects parser exception.
+ */
+ @Test
+ public void processConfigEmptyValue() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("no viable alternative at input ';'");
+ YangNode node = manager.getDataModel("src/test/resources/ConfigEmptyValue.yang");
+ }
+
+ /**
+ * Checks config statement as sub-statement of container.
+ */
+ @Test
+ public void processContainerSubStatementConfig() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ContainerSubStatementConfig.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the config value is set correctly.
+ YangContainer container = (YangContainer) yangNode.getChild();
+ assertThat(container.getName(), is("valid"));
+ assertThat(container.isConfig(), is(true));
+
+ // Check whether leaf properties as set correctly.
+ ListIterator<YangLeaf> leafIterator = container.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
+ assertThat(leafInfo.getUnits(), is("\"seconds\""));
+ assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
+ assertThat(leafInfo.isMandatory(), is(true));
+ assertThat(leafInfo.getStatus(), is(YangStatusType.CURRENT));
+ assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
+ }
+
+ /**
+ * Checks config statement as sub-statement of list.
+ */
+ @Test
+ public void processListSubStatementConfig() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ListSubStatementConfig.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the list is child of module and config value is set.
+ YangList yangList = (YangList) yangNode.getChild();
+ assertThat(yangList.getName(), is("valid"));
+ assertThat(yangList.isConfig(), is(true));
+
+ // Check whether leaf properties as set correctly.
+ ListIterator<YangLeaf> leafIterator = yangList.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
+ assertThat(leafInfo.getUnits(), is("\"seconds\""));
+ assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
+ assertThat(leafInfo.isMandatory(), is(true));
+ assertThat(leafInfo.getStatus(), is(YangStatusType.CURRENT));
+ assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
+ }
+
+ /**
+ * Checks valid config statement as sub-statement of leaf-list.
+ */
+ @Test
+ public void processLeafListSubStatementConfig() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/LeafListSubStatementConfig.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ // Check whether config value is set correctly.
+ assertThat(leafListInfo.getName(), is("invalid-interval"));
+ assertThat(leafListInfo.isConfig(), is(true));
+ }
+
+ /**
+ * Checks config statement's default Value.
+ */
+ @Test
+ public void processConfigDefaultValue() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ConfigDefaultValue.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the config value is set correctly.
+ YangContainer container = (YangContainer) yangNode.getChild();
+ assertThat(container.getName(), is("valid"));
+ assertThat(container.isConfig(), is(true));
+
+ // Check whether leaf properties as set correctly.
+ ListIterator<YangLeaf> leafIterator = container.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.isConfig(), is(true));
+ }
+
+ /**
+ * Checks whether exception is throw when node's parent config set to false,
+ * no node underneath it can have config set to true.
+ */
+ @Test
+ public void processConfigFalseParentContainerChildLeafList() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("Internal parser error detected: Unhandled parsed data at container \"valid\" after "
+ + "processing.\nError Information: If a container has \"config\" set to \"false\", no node underneath "
+ + "it can have \"config\" set to \"true\".");
+ YangNode node = manager.getDataModel("src/test/resources/ConfigFalseParentContainerChildLeafList.yang");
+ }
+
+ /**
+ * Checks whether exception is throw when node's parent config set to false,
+ * no node underneath it can have config set to true.
+ */
+ @Test
+ public void processConfigFalseParentContainerChildLeaf() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("Internal parser error detected: Unhandled parsed data at container \"valid\" after "
+ + "processing.\nError Information: If a container has \"config\" set to \"false\", no node underneath "
+ + "it can have \"config\" set to \"true\".");
+ YangNode node = manager.getDataModel("src/test/resources/ConfigFalseParentContainerChildLeaf.yang");
+ }
+
+ /**
+ * Checks whether exception is throw when node's parent config set to false,
+ * no node underneath it can have config set to true.
+ */
+ @Test
+ public void processConfigFalseParentListChildLeafList() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("Internal parser error detected: Unhandled parsed data at list \"valid\" after"
+ + " processing.\nError Information: If a list has \"config\" set to \"false\", no node underneath"
+ + " it can have \"config\" set to \"true\".");
+ YangNode node = manager.getDataModel("src/test/resources/ConfigFalseParentListChildLeafList.yang");
+ }
+
+ /**
+ * Checks whether exception is throw when node's parent config set to false,
+ * no node underneath it can have config set to true.
+ */
+ @Test
+ public void processConfigFalseParentListChildLeaf() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("Internal parser error detected: Unhandled parsed data at list \"valid\" after"
+ + " processing.\nError Information: If a list has \"config\" set to \"false\", no node underneath"
+ + " it can have \"config\" set to \"true\".");
+ YangNode node = manager.getDataModel("src/test/resources/ConfigFalseParentListChildLeaf.yang");
+ }
+
+ /**
+ * Checks when config is not specified, the default is same as the parent's schema node's
+ * config statement's value.
+ */
+ @Test
+ public void processNoConfigContainerSubStatementContainer() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/NoConfigContainerSubStatementContainer.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the config value is set correctly.
+ YangContainer container = (YangContainer) yangNode.getChild();
+ assertThat(container.getName(), is("hello"));
+ assertThat(container.isConfig(), is(true));
+
+ YangNode containerNode = container.getChild();
+ assertThat(containerNode instanceof YangContainer, is(true));
+ YangContainer childContainer = (YangContainer) containerNode;
+ assertThat(childContainer.getName(), is("valid"));
+ assertThat(childContainer.isConfig(), is(true));
+ }
+
+ /**
+ * Checks when config is not specified, the default is same as the parent's schema node's
+ * config statement's value.
+ */
+ @Test
+ public void processNoConfigContainerSubStatementLeafList() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/NoConfigContainerSubStatementLeafList.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the config value is set correctly.
+ YangContainer container = (YangContainer) yangNode.getChild();
+ assertThat(container.getName(), is("valid"));
+ assertThat(container.isConfig(), is(true));
+
+ ListIterator<YangLeafList> leafListIterator = container.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ // Check whether config value is set correctly.
+ assertThat(leafListInfo.getName(), is("invalid-interval"));
+ assertThat(leafListInfo.isConfig(), is(true));
+
+ }
+
+ /**
+ * Checks when config is not specified, the default is same as the parent's schema node's
+ * config statement's value.
+ */
+ @Test
+ public void processNoConfigContainerSubStatementLeaf() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/NoConfigContainerSubStatementLeaf.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the config value is set correctly.
+ YangContainer container = (YangContainer) yangNode.getChild();
+ assertThat(container.getName(), is("valid"));
+ assertThat(container.isConfig(), is(true));
+
+ // Check whether leaf properties as set correctly.
+ ListIterator<YangLeaf> leafIterator = container.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.isConfig(), is(true));
+ }
+
+ /**
+ * Checks when config is not specified, the default is same as the parent's schema node's
+ * config statement's value.
+ */
+ @Test
+ public void processNoConfigContainerSubStatementList() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/NoConfigContainerSubStatementList.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the config value is set correctly.
+ YangContainer container = (YangContainer) yangNode.getChild();
+ assertThat(container.getName(), is("hello"));
+ assertThat(container.isConfig(), is(true));
+
+ YangNode listNode = container.getChild();
+ assertThat(listNode instanceof YangList, is(true));
+ YangList childList = (YangList) listNode;
+ assertThat(childList.getName(), is("valid"));
+ assertThat(childList.isConfig(), is(true));
+
+ }
+
+ /**
+ * Checks when config is not specified, the default is same as the parent's schema node's
+ * config statement's value.
+ */
+ @Test
+ public void processNoConfigListSubStatementContainer() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/NoConfigListSubStatementContainer.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the config value is set correctly.
+ YangList list1 = (YangList) yangNode.getChild();
+ assertThat(list1.getName(), is("list1"));
+ assertThat(list1.isConfig(), is(true));
+
+ YangNode containerNode = list1.getChild();
+ assertThat(containerNode instanceof YangContainer, is(true));
+ YangContainer childContainer = (YangContainer) containerNode;
+ assertThat(childContainer.getName(), is("container1"));
+ assertThat(childContainer.isConfig(), is(true));
+ }
+
+ /**
+ * Checks when config is not specified, the default is same as the parent's schema node's
+ * config statement's value.
+ */
+ @Test
+ public void processNoConfigListSubStatementLeaf() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/NoConfigListSubStatementLeaf.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the config value is set correctly.
+ YangList list1 = (YangList) yangNode.getChild();
+ assertThat(list1.getName(), is("valid"));
+ assertThat(list1.isConfig(), is(true));
+
+ // Check whether leaf properties as set correctly.
+ ListIterator<YangLeaf> leafIterator = list1.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.isConfig(), is(true));
+ }
+
+ /**
+ * Checks when config is not specified, the default is same as the parent's schema node's
+ * config statement's value.
+ */
+ @Test
+ public void processNoConfigListSubStatementList() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/NoConfigListSubStatementList.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the config value is set correctly.
+ YangList list1 = (YangList) yangNode.getChild();
+ assertThat(list1.getName(), is("valid"));
+ assertThat(list1.isConfig(), is(true));
+
+ YangNode listNode = list1.getChild();
+ assertThat(listNode instanceof YangList, is(true));
+ YangList childList = (YangList) listNode;
+ assertThat(childList.getName(), is("list1"));
+ assertThat(childList.isConfig(), is(true));
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ContactListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ContactListenerTest.java
new file mode 100644
index 0000000..4b1ef2d
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ContactListenerTest.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Test cases for testing contact listener functionality.
+ */
+public class ContactListenerTest {
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks if contact listener updates the data model tree.
+ */
+ @Test
+ public void processContactValidEntry() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ContactValidEntry.yang");
+
+ // Checks for the contact value in data model tree.
+ assertThat(((YangModule) node).getContact(), is("\"WG List: <mailto:spring@ietf.org>\nEditor: "
+ + "Stephane Litkowski\n " + "<mailto:stephane.litkowski@orange.com>\""));
+ }
+
+ /**
+ * Checks that contact must be present only once.
+ */
+ @Test(expected = ParserException.class)
+ public void processContactDualEntryTest() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ContactDualEntryTest.yang");
+
+ }
+
+ /**
+ * Checks that contact can have a string value without double quotes.
+ */
+ @Test
+ public void processContactWithoutQuotes() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ContactWithoutQuotes.yang");
+
+ // Checks for the contact value in data model tree.
+ assertThat(((YangModule) node).getContact(), is("WG"));
+ }
+
+ /**
+ * Checks if contact is not empty.
+ */
+ @Test(expected = ParserException.class)
+ public void processContactWithEmptyString() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ContactWithEmptyString.yang");
+ }
+
+ /**
+ * Checks that contact must be present after namespace.
+ */
+ @Test(expected = ParserException.class)
+ public void processContactIncorrectOrder() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ContactIncorrectOrder.yang");
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ContainerListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ContainerListenerTest.java
new file mode 100644
index 0000000..572131e
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ContainerListenerTest.java
@@ -0,0 +1,232 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.YangStatusType;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.ListIterator;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for testing container listener.
+ */
+public class ContainerListenerTest {
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks container statement as sub-statement of module.
+ */
+ @Test
+ public void processModuleSubStatementContainer() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ModuleSubStatementContainer.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the container is child of module
+ YangContainer yangContainer = (YangContainer) yangNode.getChild();
+ assertThat(yangContainer.getName(), is("valid"));
+ }
+
+ /**
+ * Checks if container identifier in module is duplicate.
+ */
+ @Test(expected = ParserException.class)
+ public void processModuleDuplicateContainer() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ModuleDuplicateContainer.yang");
+ }
+
+ /**
+ * Checks if container identifier in container is duplicate.
+ */
+ @Test(expected = ParserException.class)
+ public void processContainerDuplicateContainer() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ContainerDuplicateContainer.yang");
+ }
+
+ /**
+ * Checks if container identifier in list is duplicate.
+ */
+ @Test(expected = ParserException.class)
+ public void processListDuplicateContainer() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ListDuplicateContainer.yang");
+ }
+
+ /**
+ * Checks if container identifier collides with list at same level.
+ */
+ @Test(expected = ParserException.class)
+ public void processDuplicateContainerAndList() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/DuplicateContainerAndList.yang");
+ }
+
+ /**
+ * Checks container statement as sub-statement of container.
+ */
+ @Test
+ public void processContainerSubStatementContainer() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ContainerSubStatementContainer.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the container is child of module
+ YangContainer yangContainer = (YangContainer) yangNode.getChild();
+ assertThat(yangContainer.getName(), is("ospf"));
+
+ // Check whether the container is child of container
+ YangContainer yangContainer1 = (YangContainer) yangContainer.getChild();
+ assertThat(yangContainer1.getName(), is("valid"));
+ }
+
+ /**
+ * Checks container statement as sub-statement of list.
+ */
+ @Test
+ public void processListSubStatementContainer() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ListSubStatementContainer.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the list is child of module
+ YangList yangList1 = (YangList) yangNode.getChild();
+ assertThat(yangList1.getName(), is("ospf"));
+
+ ListIterator<String> keyList = yangList1.getKeyList().listIterator();
+ assertThat(keyList.next(), is("process-id"));
+
+ // Check whether the list is child of list
+ YangContainer yangContainer = (YangContainer) yangList1.getChild();
+ assertThat(yangContainer.getName(), is("interface"));
+ }
+
+ /**
+ * Checks container with all its sub-statements.
+ */
+ @Test
+ public void processContainerSubStatements() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ContainerSubStatements.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the container is child of module
+ YangContainer yangContainer = (YangContainer) yangNode.getChild();
+
+ // Check whether container properties as set correctly.
+ assertThat(yangContainer.getName(), is("ospf"));
+
+ assertThat(yangContainer.isConfig(), is(true));
+ assertThat(yangContainer.getPresence(), is("\"ospf logs\""));
+ assertThat(yangContainer.getDescription(), is("\"container description\""));
+ assertThat(yangContainer.getStatus(), is(YangStatusType.CURRENT));
+ assertThat(yangContainer.getReference(), is("\"container reference\""));
+
+ // Check whether leaf properties as set correctly.
+ ListIterator<YangLeaf> leafIterator = yangContainer.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
+ assertThat(leafInfo.getUnits(), is("\"seconds\""));
+ assertThat(leafInfo.getStatus(), is(YangStatusType.CURRENT));
+ assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
+ }
+
+ /**
+ * Checks cardinality of sub-statements of container.
+ */
+ @Test
+ public void processContainerSubStatementCardinality() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("YANG file error: \"reference\" is defined more than once in \"container valid\".");
+ YangNode node = manager.getDataModel("src/test/resources/ContainerSubStatementCardinality.yang");
+ }
+
+ /**
+ * Checks container as root node.
+ */
+ @Test
+ public void processContainerRootNode() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("no viable alternative at input 'container'");
+ YangNode node = manager.getDataModel("src/test/resources/ContainerRootNode.yang");
+ }
+
+ /**
+ * Checks invalid identifier for container statement.
+ */
+ @Test
+ public void processContainerInvalidIdentifier() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("YANG file error : container name 1valid is not valid.");
+ YangNode node = manager.getDataModel("src/test/resources/ContainerInvalidIdentifier.yang");
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/Decimal64ListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/Decimal64ListenerTest.java
new file mode 100644
index 0000000..8a54a51
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/Decimal64ListenerTest.java
@@ -0,0 +1,636 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.hamcrest.core.Is;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangDecimal64;
+import org.onosproject.yang.compiler.datamodel.YangDerivedInfo;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.YangRangeInterval;
+import org.onosproject.yang.compiler.datamodel.YangRangeRestriction;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.YangTypeDef;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.linker.exceptions.LinkerException;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.util.ListIterator;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for decimal64 listener.
+ */
+public class Decimal64ListenerTest {
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ /**
+ * Checks decimal64 statement with fraction-digits.
+ */
+ @Test
+ public void processDecimal64TypeStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/decimal64/Decimal64TypeStatement.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), Is.is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("validDecimal"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("decimal64"));
+ assertThat(leafInfo.getDataType().getDataType(), Is.is(YangDataTypes.DECIMAL64));
+ assertThat(((YangDecimal64) leafInfo.getDataType().getDataTypeExtendedInfo()).getFractionDigit(),
+ is(2));
+ }
+
+ /**
+ * Checks decimal64 statement with range statement.
+ */
+ @Test
+ public void processDecimal64TypeWithRangeStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/decimal64/Decimal64TypeWithRangeStatement.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("validDecimal"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("decimal64"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.DECIMAL64));
+ assertThat(((YangDecimal64) leafInfo.getDataType().getDataTypeExtendedInfo()).getFractionDigit(),
+ is(8));
+
+ YangRangeRestriction rangeRestriction = ((YangDecimal64<YangRangeRestriction>) leafInfo.getDataType()
+ .getDataTypeExtendedInfo())
+ .getRangeRestrictedExtendedInfo();
+
+ ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
+ .listIterator();
+ YangRangeInterval rangeInterval = rangeListIterator.next();
+ assertThat(((YangDecimal64) rangeInterval.getStartValue()).getValue().doubleValue(), is(-92233720368.54775808));
+ assertThat(((YangDecimal64) rangeInterval.getEndValue()).getValue().doubleValue(), is(92233720368.54775807));
+ }
+
+ /**
+ * Successful validation of decimal64 statement.
+ */
+ @Test
+ public void processDecimal64ValueSuccessfulValidation() throws IOException, ParserException, DataModelException {
+
+ YangNode node = manager.getDataModel("src/test/resources/decimal64/Decimal64TypeValidation.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+ YangDecimal64 decimal64 = (YangDecimal64) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ assertThat(leafInfo.getName(), is("validDecimal"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("decimal64"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.DECIMAL64));
+ assertThat(decimal64.getFractionDigit(), is(18));
+
+ decimal64.setValue(new BigDecimal(-9.223372036854775808));
+ decimal64.validateDecimal64();
+ decimal64.setValue(new BigDecimal(9.223372036854775807));
+ decimal64.validateDecimal64();
+ }
+
+ /**
+ * Failure validation of decimal64 statement.
+ */
+ @Test
+ public void processDecimal64ValueFailureValidation() throws IOException, ParserException, DataModelException {
+ thrown.expect(DataModelException.class);
+ thrown.expectMessage(
+ "YANG file error : value is not in decimal64 range.");
+
+ YangNode node = manager.getDataModel("src/test/resources/decimal64/Decimal64TypeValidation.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+ YangDecimal64 decimal64 = (YangDecimal64) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ assertThat(leafInfo.getName(), is("validDecimal"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("decimal64"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.DECIMAL64));
+ assertThat(decimal64.getFractionDigit(), is(18));
+
+ decimal64.setValue(new BigDecimal(-92233720368547758.08));
+ // validation should fail
+ decimal64.validateDecimal64();
+ }
+
+ /**
+ * Validation of invalid maximum value limit of fraction-digits.
+ */
+ @Test
+ public void processDecimal64InvalidMaxFraction() throws IOException, ParserException, DataModelException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("YANG file error : fraction-digits value should be between 1 and 18.");
+
+ manager.getDataModel("src/test/resources/decimal64/Decimal64TypeInvalidMaxValueFraction.yang");
+ }
+
+ /**
+ * Validation of invalid (0) minimum value limit of fraction-digits.
+ */
+ @Test
+ public void processDecimal64InvalidMinFraction1() throws IOException, ParserException, DataModelException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("YANG file error : fraction-digits value should be between 1 and 18.");
+
+ manager.getDataModel("src/test/resources/decimal64/Decimal64TypeInvalidMinValueFraction1.yang");
+ }
+
+ /**
+ * Validation of invalid (-1) minimum value limit of fraction-digits.
+ */
+ @Test
+ public void processDecimal64InvalidMinFraction2() throws IOException, ParserException, DataModelException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("YANG file error : fraction-digits value should be between 1 and 18.");
+
+ manager.getDataModel("src/test/resources/decimal64/Decimal64TypeInvalidMinValueFraction2.yang");
+ }
+
+ /**
+ * Validation of decimal64 range statement.
+ */
+ @Test
+ public void processDecimal64TypeWithMultiValueRangeStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/decimal64/Decimal64TypeWithMultiValueRangeStmnt.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("validDecimal"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("decimal64"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.DECIMAL64));
+ assertThat(((YangDecimal64) leafInfo.getDataType().getDataTypeExtendedInfo()).getFractionDigit(),
+ is(18));
+
+ YangRangeRestriction rangeRestriction = ((YangDecimal64<YangRangeRestriction>) leafInfo.getDataType()
+ .getDataTypeExtendedInfo())
+ .getRangeRestrictedExtendedInfo();
+
+ ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
+ .listIterator();
+ // range "1 .. 3.14 | 10 | 20..max";
+ // check first range 1 .. 3.14
+ YangRangeInterval rangeInterval = rangeListIterator.next();
+ assertThat(((YangDecimal64) rangeInterval.getStartValue()).getValue().doubleValue(), is(-9.22));
+ assertThat(((YangDecimal64) rangeInterval.getEndValue()).getValue().doubleValue(), is(7.22));
+ // check second range 10
+ rangeInterval = rangeListIterator.next();
+ assertThat(((YangDecimal64) rangeInterval.getStartValue()).getValue().doubleValue(), is(8.0));
+ assertThat(((YangDecimal64) rangeInterval.getEndValue()).getValue().doubleValue(), is(8.0));
+ // check third range 20..max
+ rangeInterval = rangeListIterator.next();
+ assertThat(((YangDecimal64) rangeInterval.getStartValue()).getValue().doubleValue(), is(9.0));
+ assertThat(((YangDecimal64) rangeInterval.getEndValue()).getValue().doubleValue(), is(9.223372036854776));
+ }
+
+ /**
+ * Validation of decimal64 with invalid range.
+ */
+ @Test
+ public void processDecimal64InvalidRange() throws IOException, ParserException, DataModelException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage(
+ "YANG file error : decimal64 validation failed.decimal64 in 7 at 12" +
+ " in src/test/resources/decimal64/Decimal64TypeInvalidRangeStmnt.yang\"");
+
+ manager.getDataModel("src/test/resources/decimal64/Decimal64TypeInvalidRangeStmnt.yang");
+ }
+
+ /**
+ * Validation of decimal64 without fraction-digits. Fraction-digits must be present for decimal64.
+ */
+ @Test
+ public void processDecimal64WithoutFraction() throws IOException, ParserException, DataModelException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("YANG file error : a type decimal64 must have fraction-digits statement.");
+
+ manager.getDataModel("src/test/resources/decimal64/Decimal64TypeWithoutFraction.yang");
+ }
+
+ /**
+ * Checks decimal64 with typedef statement.
+ */
+ @Test
+ public void processDecimal64TypedefStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/decimal64/Decimal64TypedefStatement.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("setFourDecimal"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("validDecimal"));
+ YangType<YangDerivedInfo> derivedInfoType = (YangType<YangDerivedInfo>) leafInfo.getDataType();
+ YangDerivedInfo derivedInfo = (YangDerivedInfo) derivedInfoType.getDataTypeExtendedInfo();
+ YangTypeDef typedef = (YangTypeDef) derivedInfo.getReferredTypeDef();
+ assertThat(typedef.getName(), is("validDecimal"));
+
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.DERIVED));
+ YangType type = typedef.getTypeList().iterator().next();
+ assertThat(type.getDataType(), is(YangDataTypes.DECIMAL64));
+ assertThat(type.getDataTypeName(), is("decimal64"));
+ YangType<YangDecimal64> decimal64Type = (YangType<YangDecimal64>) typedef.getTypeList().iterator().next();
+ YangDecimal64 decimal64 = decimal64Type.getDataTypeExtendedInfo();
+ assertThat(decimal64.getFractionDigit(), is(4));
+ }
+
+ /**
+ * Checks decimal64 with multiple typedef statement.
+ */
+ @Test
+ public void processDecimal64MultiTypedefStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/decimal64/Decimal64MultiTypedefStatement.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ // check leaf type
+ assertThat(leafInfo.getName(), is("lowerDecimal"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("midDecimal"));
+ YangType<YangDerivedInfo> derivedInfoType = (YangType<YangDerivedInfo>) leafInfo.getDataType();
+ assertThat(derivedInfoType.getDataType(), is(YangDataTypes.DERIVED));
+ YangDerivedInfo derivedInfo = (YangDerivedInfo) derivedInfoType.getDataTypeExtendedInfo();
+
+ // check previous typedef
+ YangTypeDef prevTypedef = (YangTypeDef) derivedInfo.getReferredTypeDef();
+ assertThat(prevTypedef.getName(), is("midDecimal"));
+ YangType type = prevTypedef.getTypeList().iterator().next();
+ assertThat(type.getDataType(), is(YangDataTypes.DERIVED));
+ derivedInfo = (YangDerivedInfo) type.getDataTypeExtendedInfo();
+
+ // check top typedef
+ YangTypeDef topTypedef = (YangTypeDef) derivedInfo.getReferredTypeDef();
+ assertThat(topTypedef.getName(), is("topDecimal"));
+ type = topTypedef.getTypeList().iterator().next();
+ assertThat(type.getDataType(), is(YangDataTypes.DECIMAL64));
+ assertThat(type.getDataTypeName(), is("decimal64"));
+ YangType<YangDecimal64> decimal64Type = (YangType<YangDecimal64>) type;
+ YangDecimal64 decimal64 = decimal64Type.getDataTypeExtendedInfo();
+ assertThat(decimal64.getFractionDigit(), is(4));
+ }
+
+ /**
+ * Checks decimal64 with multiple typedef with single range statement.
+ * Range value in typedef statement.
+ */
+ @Test
+ public void processDecimal64MultiTypedefRangeStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/decimal64/Decimal64MultiTypedefRangeStatement.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ // check leaf type
+ assertThat(leafInfo.getName(), is("lowerDecimal"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("midDecimal"));
+ YangType<YangDerivedInfo> derivedInfoType = (YangType<YangDerivedInfo>) leafInfo.getDataType();
+ assertThat(derivedInfoType.getDataType(), is(YangDataTypes.DERIVED));
+ YangDerivedInfo derivedInfo = (YangDerivedInfo) derivedInfoType.getDataTypeExtendedInfo();
+
+ // Check range restriction
+ YangRangeRestriction rangeRestriction = (YangRangeRestriction) derivedInfo.getResolvedExtendedInfo();
+ ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
+ .listIterator();
+ YangRangeInterval rangeInterval = rangeListIterator.next();
+ assertThat(((YangDecimal64) rangeInterval.getStartValue()).getValue().doubleValue(), is(1.0));
+ assertThat(((YangDecimal64) rangeInterval.getEndValue()).getValue().doubleValue(), is(12.0));
+
+ // check previous typedef
+ YangTypeDef prevTypedef = (YangTypeDef) derivedInfo.getReferredTypeDef();
+ assertThat(prevTypedef.getName(), is("midDecimal"));
+ YangType type = prevTypedef.getTypeList().iterator().next();
+ assertThat(type.getDataType(), is(YangDataTypes.DERIVED));
+ derivedInfo = (YangDerivedInfo) type.getDataTypeExtendedInfo();
+
+ // check top typedef
+ YangTypeDef topTypedef = (YangTypeDef) derivedInfo.getReferredTypeDef();
+ assertThat(topTypedef.getName(), is("topDecimal"));
+ type = topTypedef.getTypeList().iterator().next();
+ assertThat(type.getDataType(), is(YangDataTypes.DECIMAL64));
+ assertThat(type.getDataTypeName(), is("decimal64"));
+ YangType<YangDecimal64> decimal64Type = (YangType<YangDecimal64>) type;
+ YangDecimal64 decimal64 = decimal64Type.getDataTypeExtendedInfo();
+ assertThat(decimal64.getFractionDigit(), is(4));
+
+ // Check range restriction
+ rangeRestriction = (YangRangeRestriction) decimal64.getRangeRestrictedExtendedInfo();
+ rangeListIterator = rangeRestriction.getAscendingRangeIntervals().listIterator();
+ rangeInterval = rangeListIterator.next();
+ assertThat(((YangDecimal64) rangeInterval.getStartValue()).getValue().doubleValue(), is(1.0));
+ assertThat(((YangDecimal64) rangeInterval.getEndValue()).getValue().doubleValue(), is(12.0));
+ }
+
+ /**
+ * Checks decimal64 with multiple typedef with single range statement.
+ * Range value in leaf statement.
+ */
+ @Test
+ public void processDecimal64MultiTypedefRangeInLeafStatement() throws IOException, ParserException {
+
+ YangNode node = manager
+ .getDataModel("src/test/resources/decimal64/Decimal64MultiTypedefRangeInLeafStatement.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ // check leaf type
+ assertThat(leafInfo.getName(), is("lowerDecimal"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("midDecimal"));
+ YangType<YangDerivedInfo> derivedInfoType = (YangType<YangDerivedInfo>) leafInfo.getDataType();
+ assertThat(derivedInfoType.getDataType(), is(YangDataTypes.DERIVED));
+ YangDerivedInfo derivedInfo = (YangDerivedInfo) derivedInfoType.getDataTypeExtendedInfo();
+
+ // Check range restriction
+ YangRangeRestriction rangeRestriction = (YangRangeRestriction) derivedInfo.getResolvedExtendedInfo();
+ ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
+ .listIterator();
+ YangRangeInterval rangeInterval = rangeListIterator.next();
+ assertThat(((YangDecimal64) rangeInterval.getStartValue()).getValue().doubleValue(), is(1.0));
+ assertThat(((YangDecimal64) rangeInterval.getEndValue()).getValue().doubleValue(), is(12.0));
+
+ // check previous typedef
+ YangTypeDef prevTypedef = (YangTypeDef) derivedInfo.getReferredTypeDef();
+ assertThat(prevTypedef.getName(), is("midDecimal"));
+ YangType type = prevTypedef.getTypeList().iterator().next();
+ assertThat(type.getDataType(), is(YangDataTypes.DERIVED));
+ derivedInfo = (YangDerivedInfo) type.getDataTypeExtendedInfo();
+
+ // check top typedef
+ YangTypeDef topTypedef = (YangTypeDef) derivedInfo.getReferredTypeDef();
+ assertThat(topTypedef.getName(), is("topDecimal"));
+ type = topTypedef.getTypeList().iterator().next();
+ assertThat(type.getDataType(), is(YangDataTypes.DECIMAL64));
+ assertThat(type.getDataTypeName(), is("decimal64"));
+ YangType<YangDecimal64> decimal64Type = (YangType<YangDecimal64>) type;
+ YangDecimal64 decimal64 = decimal64Type.getDataTypeExtendedInfo();
+ assertThat(decimal64.getFractionDigit(), is(4));
+ }
+
+ /**
+ * Checks decimal64 with multiple typedef with multiple range statement.
+ * Having more restricted range at leaf.
+ */
+ @Test
+ public void processDecimal64MultiTypedefMultipleRangeStatement() throws IOException, ParserException {
+
+ YangNode node = manager
+ .getDataModel("src/test/resources/decimal64/Decimal64MultiTypedefMultiRangeStatement.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ // check leaf type
+ assertThat(leafInfo.getName(), is("lowerDecimal"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("midDecimal"));
+ YangType<YangDerivedInfo> derivedInfoType = (YangType<YangDerivedInfo>) leafInfo.getDataType();
+ assertThat(derivedInfoType.getDataType(), is(YangDataTypes.DERIVED));
+ YangDerivedInfo derivedInfo = (YangDerivedInfo) derivedInfoType.getDataTypeExtendedInfo();
+
+ // Check range restriction
+ YangRangeRestriction rangeRestriction = (YangRangeRestriction) derivedInfo.getResolvedExtendedInfo();
+
+ ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
+ .listIterator();
+ YangRangeInterval rangeInterval = rangeListIterator.next();
+ assertThat(((YangDecimal64) rangeInterval.getStartValue()).getValue().doubleValue(), is(4.0));
+ assertThat(((YangDecimal64) rangeInterval.getEndValue()).getValue().doubleValue(), is(11.0));
+
+ // check previous typedef
+ YangTypeDef prevTypedef = (YangTypeDef) derivedInfo.getReferredTypeDef();
+ assertThat(prevTypedef.getName(), is("midDecimal"));
+ YangType type = prevTypedef.getTypeList().iterator().next();
+ assertThat(type.getDataType(), is(YangDataTypes.DERIVED));
+ derivedInfo = (YangDerivedInfo) type.getDataTypeExtendedInfo();
+
+ // check top typedef
+ YangTypeDef topTypedef = (YangTypeDef) derivedInfo.getReferredTypeDef();
+ assertThat(topTypedef.getName(), is("topDecimal"));
+ type = topTypedef.getTypeList().iterator().next();
+ assertThat(type.getDataType(), is(YangDataTypes.DECIMAL64));
+ assertThat(type.getDataTypeName(), is("decimal64"));
+ YangType<YangDecimal64> decimal64Type = (YangType<YangDecimal64>) type;
+ YangDecimal64 decimal64 = decimal64Type.getDataTypeExtendedInfo();
+ assertThat(decimal64.getFractionDigit(), is(4));
+
+ // Check range restriction
+ rangeRestriction = (YangRangeRestriction) decimal64.getRangeRestrictedExtendedInfo();
+ rangeListIterator = rangeRestriction.getAscendingRangeIntervals().listIterator();
+ rangeInterval = rangeListIterator.next();
+ assertThat(((YangDecimal64) rangeInterval.getStartValue()).getValue().doubleValue(), is(1.0));
+ assertThat(((YangDecimal64) rangeInterval.getEndValue()).getValue().doubleValue(), is(12.0));
+ }
+
+ /**
+ * Checks decimal64 with multiple typedef with multiple range statement.
+ * But having more restricted range at top of typedef.
+ */
+ @Test
+ public void processDecimal64MultiTypedefMultiInvalidRangeStatement() throws IOException, LinkerException {
+ thrown.expect(LinkerException.class);
+ thrown.expectMessage(
+ "Range interval doesn't fall within the referred restriction ranges" +
+ " restriction ranges. in 0 at 0 in src/test/resources/decimal64/" +
+ "Decimal64MultiTypedefMultiInvalidRangeStatement.yang\"type." +
+ " in 19 at 12 in src/test/resources/decimal64/Decimal64MultiTypedef" +
+ "MultiInvalidRangeStatement.yang");
+
+ manager.getDataModel("src/test/resources/decimal64/Decimal64MultiTypedefMultiInvalidRangeStatement.yang");
+ }
+
+ /**
+ * Checks decimal64 with multiple typedef with max range statement.
+ */
+ @Test
+ public void processDecimal64MultiTypedefWithMaxRange() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/decimal64/Decimal64MultiTypedefWithMaxRange.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ // check leaf type
+ assertThat(leafInfo.getName(), is("lowerDecimal"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("midDecimal"));
+ YangType<YangDerivedInfo> derivedInfoType = (YangType<YangDerivedInfo>) leafInfo.getDataType();
+ assertThat(derivedInfoType.getDataType(), is(YangDataTypes.DERIVED));
+ YangDerivedInfo derivedInfo = (YangDerivedInfo) derivedInfoType.getDataTypeExtendedInfo();
+
+ // Check range restriction
+ YangRangeRestriction rangeRestriction = (YangRangeRestriction) derivedInfo.getResolvedExtendedInfo();
+
+ ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
+ .listIterator();
+ YangRangeInterval rangeInterval = rangeListIterator.next();
+ assertThat(((YangDecimal64) rangeInterval.getStartValue()).getValue().doubleValue(), is(4.0));
+ assertThat(((YangDecimal64) rangeInterval.getEndValue()).getValue().doubleValue(), is(12.0));
+
+ // check previous typedef
+ YangTypeDef prevTypedef = (YangTypeDef) derivedInfo.getReferredTypeDef();
+ assertThat(prevTypedef.getName(), is("midDecimal"));
+ YangType type = prevTypedef.getTypeList().iterator().next();
+ assertThat(type.getDataType(), is(YangDataTypes.DERIVED));
+ derivedInfo = (YangDerivedInfo) type.getDataTypeExtendedInfo();
+
+ // check top typedef
+ YangTypeDef topTypedef = (YangTypeDef) derivedInfo.getReferredTypeDef();
+ assertThat(topTypedef.getName(), is("topDecimal"));
+ type = topTypedef.getTypeList().iterator().next();
+ assertThat(type.getDataType(), is(YangDataTypes.DECIMAL64));
+ assertThat(type.getDataTypeName(), is("decimal64"));
+ YangType<YangDecimal64> decimal64Type = (YangType<YangDecimal64>) type;
+ YangDecimal64 decimal64 = decimal64Type.getDataTypeExtendedInfo();
+ assertThat(decimal64.getFractionDigit(), is(4));
+
+ // Check range restriction
+ rangeRestriction = (YangRangeRestriction) decimal64.getRangeRestrictedExtendedInfo();
+ rangeListIterator = rangeRestriction.getAscendingRangeIntervals().listIterator();
+ rangeInterval = rangeListIterator.next();
+ assertThat(((YangDecimal64) rangeInterval.getStartValue()).getValue().doubleValue(), is(1.0));
+ assertThat(((YangDecimal64) rangeInterval.getEndValue()).getValue().doubleValue(), is(12.0));
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/DefaultListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/DefaultListenerTest.java
new file mode 100644
index 0000000..b2c0ef0
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/DefaultListenerTest.java
@@ -0,0 +1,525 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangChoice;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangDerivedInfo;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.YangTypeDef;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.DataTypeException;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangInt64;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.ListIterator;
+
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Test cases for testing default listener functionality.
+ */
+public class DefaultListenerTest {
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks if default value is set correctly.
+ */
+ @Test
+ public void processDefaultValueInLeafSubStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/default/DefaultValueInLeafSubStatement.yang");
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ 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.getDefaultValueInString(), is("1"));
+ }
+
+ /**
+ * Validates default invalid value in leaf.
+ */
+ @Test
+ public void processDefaultInalueInLeafSubStatement() throws IOException, ParserException {
+
+ thrown.expect(DataTypeException.class);
+ thrown.expectMessage("YANG file error : Input value \"x\" is not a valid uint16.");
+
+ manager.getDataModel("src/test/resources/default/DefaultInvalidValueInLeafSubStatement.yang");
+ }
+
+ /**
+ * Validates default case value in choice statement.
+ */
+ @Test
+ public void processDefaultCaseInChoiceSubStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/default/DefaultCaseInChoiceSubStatement.yang");
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangContainer yangContainer = (YangContainer) yangNode.getChild();
+ assertThat(yangContainer.getName(), is("food"));
+
+ YangChoice yangChoice = (YangChoice) yangContainer.getChild();
+ assertThat(yangChoice.getName(), is("snack"));
+ assertThat(yangChoice.getDefaultValueInString(), is("sports-arena"));
+ }
+
+ /**
+ * Validates default invalide case in choice statement.
+ */
+ @Test
+ public void processDefaultInvalidCaseInChoiceSubStatement() throws IOException, ParserException {
+
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("Internal parser error detected: Invalid content in choice \"snack\" after processing.");
+
+ manager.getDataModel("src/test/resources/default/DefaultInvalidValueInChoiceSubStmt.yang");
+ }
+
+ /**
+ * Validates default value in typedef.
+ */
+ @Test
+ public void processDefaultInTypedef() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/default/DefaultValueInTypeDef.yang");
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // check typedef
+ YangTypeDef typedef = (YangTypeDef) yangNode.getChild();
+ assertThat(typedef.getName(), is("topInt"));
+ assertThat(typedef.getDefaultValueInString(), is("10"));
+
+ YangType type = typedef.getTypeList().iterator().next();
+ assertThat(type.getDataType(), is(YangDataTypes.INT64));
+ assertThat(type.getDataTypeName(), is("int64"));
+
+ // check leaf
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+ assertThat(leafInfo.getName(), is("myValue"));
+
+ // Check leaf reffered typedef
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("topInt"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.DERIVED));
+ YangType<YangDerivedInfo> typeDerived = (YangType<YangDerivedInfo>) leafInfo.getDataType();
+ YangDerivedInfo derivedInfo = (YangDerivedInfo) typeDerived.getDataTypeExtendedInfo();
+ YangTypeDef prevTypedef = (YangTypeDef) derivedInfo.getReferredTypeDef();
+ assertThat(prevTypedef.getName(), is("topInt"));
+ assertThat(prevTypedef.getDefaultValueInString(), is("10"));
+ YangType topType = prevTypedef.getTypeList().iterator().next();
+ assertThat(topType.getDataType(), is(YangDataTypes.INT64));
+ assertThat(topType.getDataTypeName(), is("int64"));
+ YangType<YangInt64> typeInt64 = (YangType<YangInt64>) topType;
+ YangInt64 int64Obj = typeInt64.getDataTypeExtendedInfo();
+ }
+
+ /**
+ * Validates invalid default value in typedef.
+ */
+ @Test
+ public void processInvalidDefaultValueInTypdeDef() throws IOException, ParserException {
+ thrown.expect(DataTypeException.class);
+ thrown.expectMessage("YANG file error : Input value \"x\" is not a valid int64.");
+
+ manager.getDataModel("src/test/resources/default/DefaultInvalidValueInTypeDef.yang");
+ }
+
+ /**
+ * Validates default invalid value in typedef.
+ */
+ @Test
+ public void processDefaultInvalidValueInTypedef() throws IOException, ParserException {
+ thrown.expect(DataTypeException.class);
+ thrown.expectMessage("YANG file error : Input value \"0\" is not a valid INT32");
+
+ manager.getDataModel("src/test/resources/default/DefaultInvalidValueWithRangeInTypedef.yang");
+ }
+
+ /**
+ * Validates default value decimal64 in leaf.
+ */
+ @Test
+ public void processDefaultValueDecimal64InLeaf() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/default/DefaultValueDecimal64InLeaf.yang");
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // check leaf
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ // check the default value
+ // This default value is verified by YangType.isValidValue() called from LeafListener.processLeafExit()
+ assertThat(leafInfo.getName(), is("mydecimal"));
+ assertThat(leafInfo.getDefaultValueInString(), is("5"));
+ }
+
+ /**
+ * Validates default invalid value decimal64 in leaf.
+ */
+ @Test
+ public void processDefaultInvalidValueDecimal64InLeaf() throws IOException, ParserException {
+ thrown.expect(DataTypeException.class);
+ thrown.expectMessage("YANG file error : Input value \"x\" is not a valid decimal64.");
+
+ manager.getDataModel("src/test/resources/default/DefaultInvalidValueDecimal64InLeaf.yang");
+ }
+
+ /**
+ * Validates default value string in leaf.
+ */
+ @Test
+ public void processDefaultValueStringInLeaf() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/default/DefaultValueStringInLeaf.yang");
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // check leaf
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ // check the default value
+ // This default value is verified by YangType.isValidValue() called from LeafListener.processLeafExit()
+ assertThat(leafInfo.getName(), is("MyString"));
+ assertThat(leafInfo.getDefaultValueInString(), is("2bB"));
+ }
+
+ /**
+ * Validates default invalid value string in leaf.
+ */
+ @Test
+ public void processDefaultInvalidValueStringInLeaf() throws IOException, ParserException {
+ thrown.expect(DataTypeException.class);
+ thrown.expectMessage("YANG file error : Input value \"2bB2bB\" is not a valid STRING");
+
+ manager.getDataModel("src/test/resources/default/DefaultInvalidValueStringInLeaf.yang");
+ }
+
+ /**
+ * Validates default value boolean in leaf.
+ */
+ @Test
+ public void processDefaultValueBooleanInLeaf() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/default/DefaultValueBooleanInLeaf.yang");
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // check leaf
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ // check the default value
+ // This default value is verified by YangType.isValidValue() called from LeafListener.processLeafExit()
+ assertThat(leafInfo.getName(), is("myboolean"));
+ assertThat(leafInfo.getDefaultValueInString(), is("true"));
+ }
+
+ /**
+ * Validates default invalid value boolean in leaf.
+ */
+ @Test
+ public void processDefaultInvalidValueBooleanInLeaf() throws IOException, ParserException {
+ thrown.expect(DataTypeException.class);
+ thrown.expectMessage("YANG file error : Input value \"yes\" is not a valid BOOLEAN");
+
+ manager.getDataModel("src/test/resources/default/DefaultInvalidValueBooleanInLeaf.yang");
+ }
+
+ /**
+ * Validates default value enumeration in leaf.
+ */
+ @Test
+ public void processDefaultValueEnumberationInLeaf() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/default/DefaultValueEnumerationInLeaf.yang");
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // check leaf
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ // check the default value
+ // This default value is verified by YangType.isValidValue() called from LeafListener.processLeafExit()
+ assertThat(leafInfo.getName(), is("myenum"));
+ assertThat(leafInfo.getDefaultValueInString(), is("one"));
+ }
+
+ /**
+ * Validates default invalid value enumeration in leaf.
+ */
+ @Test
+ public void processDefaultInvalidValueEnumberationInLeaf() throws IOException, ParserException {
+ thrown.expect(DataTypeException.class);
+ thrown.expectMessage("YANG file error : Input value \"xyz\" is not a valid ENUMERATION");
+
+ manager.getDataModel("src/test/resources/default/DefaultInvalidValueEnumerationInLeaf.yang");
+ }
+
+ /**
+ * Validates default value bits in leaf.
+ */
+ @Test
+ public void processDefaultValueBitsInLeaf() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/default/DefaultValueBitsInLeaf.yang");
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // check leaf
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ // check the default value
+ // This default value is verified by YangType.isValidValue() called from LeafListener.processLeafExit()
+ assertThat(leafInfo.getName(), is("mybits"));
+ assertThat(leafInfo.getDefaultValueInString(), is("auto-sense-speed"));
+ }
+
+ /**
+ * Validates default invalid value bits in leaf.
+ */
+ @Test
+ public void processDefaultInvalidValueBitsInLeaf() throws IOException, ParserException {
+ thrown.expect(DataTypeException.class);
+ thrown.expectMessage("YANG file error : Input value \"xyz\" is not a valid BITS");
+
+ manager.getDataModel("src/test/resources/default/DefaultInvalidValueBitsInLeaf.yang");
+ }
+
+ /**
+ * Validates default value binary in leaf.
+ */
+ @Test
+ public void processDefaultValueBinaryInLeaf() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/default/DefaultValueBinaryInLeaf.yang");
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // check leaf
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ // check the default value
+ // This default value is verified by YangType.isValidValue() called from LeafListener.processLeafExit()
+ assertThat(leafInfo.getName(), is("message"));
+ assertThat(leafInfo.getDefaultValueInString(), is("10010010"));
+ }
+
+ /**
+ * Validates default invalid value binary in leaf.
+ */
+ @Test
+ public void processDefaultInvlaidValueBinaryInLeaf() throws IOException, ParserException {
+ thrown.expect(DataTypeException.class);
+ thrown.expectMessage("YANG file error : Input value \"000\" is not a valid BINARY");
+
+ manager.getDataModel("src/test/resources/default/DefaultInvalidValueBinaryInLeaf.yang");
+ }
+
+ /**
+ * Validates default value empty in leaf.
+ */
+ @Test
+ public void processDefaultValueEmptyInLeaf() throws IOException, ParserException {
+ thrown.expect(DataTypeException.class);
+ thrown.expectMessage("YANG file error : Input value \"something\" is not allowed for a data type EMPTY");
+
+ manager.getDataModel("src/test/resources/default/DefaultValueEmptyInLeaf.yang");
+ }
+
+ /**
+ * Validates default value union in leaf.
+ */
+ @Test
+ public void processDefaultValueUnionInLeaf() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/default/DefaultValueUnionInLeaf.yang");
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // check leaf
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ // check the default value
+ // This default value is verified by YangType.isValidValue() called from LeafListener.processLeafExit()
+ assertThat(leafInfo.getName(), is("message"));
+ assertThat(leafInfo.getDefaultValueInString(), is("unbounded"));
+ }
+
+ /**
+ * Validates default invalid value union in leaf.
+ */
+ @Test
+ public void processDefaultInvalidValueUnionInLeaf() throws IOException, ParserException {
+ thrown.expect(DataTypeException.class);
+ thrown.expectMessage("YANG file error : Input value \"xyz\" is not a valid UNION");
+
+ manager.getDataModel("src/test/resources/default/DefaultInvalidValueUnionInLeaf.yang");
+ }
+
+ /**
+ * Validates default value in multiple typedef.
+ */
+ @Test
+ public void processDefaultInMultiTypedef() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/default/DefaultValueInMultiTypeDef.yang");
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // check typedef
+ YangTypeDef typedef = (YangTypeDef) yangNode.getChild();
+ assertThat(typedef.getName(), is("topInt"));
+ assertThat(typedef.getDefaultValueInString(), is("10"));
+
+ YangType type = typedef.getTypeList().iterator().next();
+ assertThat(type.getDataType(), is(YangDataTypes.INT64));
+ assertThat(type.getDataTypeName(), is("int64"));
+
+ // check leaf
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+ assertThat(leafInfo.getName(), is("lowInt"));
+
+ // check leaf type
+ assertThat(leafInfo.getName(), is("lowInt"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("midInt"));
+ YangType<YangDerivedInfo> derivedInfoType = (YangType<YangDerivedInfo>) leafInfo.getDataType();
+ assertThat(derivedInfoType.getDataType(), is(YangDataTypes.DERIVED));
+ YangDerivedInfo derivedInfo = (YangDerivedInfo) derivedInfoType.getDataTypeExtendedInfo();
+
+ // check previous typedef
+ YangTypeDef prevTypedef = (YangTypeDef) derivedInfo.getReferredTypeDef();
+ assertThat(prevTypedef.getName(), is("midInt"));
+ type = prevTypedef.getTypeList().iterator().next();
+ assertThat(type.getDataType(), is(YangDataTypes.DERIVED));
+ derivedInfo = (YangDerivedInfo) type.getDataTypeExtendedInfo();
+
+ // check top typedef
+ YangTypeDef topTypedef = (YangTypeDef) derivedInfo.getReferredTypeDef();
+ assertThat(topTypedef.getName(), is("topInt"));
+ assertThat(topTypedef.getDefaultValueInString(), is("10"));
+ YangType topType = topTypedef.getTypeList().iterator().next();
+ assertThat(topType.getDataType(), is(YangDataTypes.INT64));
+ assertThat(topType.getDataTypeName(), is("int64"));
+ YangType<YangInt64> typeInt64 = (YangType<YangInt64>) topType;
+ YangInt64 int64Obj = typeInt64.getDataTypeExtendedInfo();
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/DescriptionListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/DescriptionListenerTest.java
new file mode 100644
index 0000000..43b73d4
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/DescriptionListenerTest.java
@@ -0,0 +1,252 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.YangStatusType;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.ListIterator;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for description listener.
+ */
+public class DescriptionListenerTest {
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks valid description statement.
+ */
+ @Test
+ public void processDescriptionValidStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/DescriptionValidStatement.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ // Check whether the description is set correctly.
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
+ }
+
+ /**
+ * Checks whether exception is thrown for invalid description statement.
+ */
+ @Test
+ public void processDescriptionWithoutStatementEnd() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("extraneous input '}' expecting {';', '+'}");
+ YangNode node = manager.getDataModel("src/test/resources/DescriptionWithoutStatementEnd.yang");
+ }
+
+ /**
+ * Checks valid description statement as sub-statement of module.
+ */
+ @Test
+ public void processModuleSubStatementDescription() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ModuleSubStatementDescription.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the description is set correctly.
+ assertThat(yangNode.getDescription(), is("\"Interval before a route is declared invalid\""));
+ }
+
+ /**
+ * Checks valid description statement as sub-statement of module.
+ */
+ @Test
+ public void processDescriptionEmptyStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/DescriptionEmptyStatement.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the description is set correctly.
+ assertThat(yangNode.getDescription(), is("\"\""));
+ }
+
+ /**
+ * Checks valid description statement as sub-statement of revision.
+ */
+ @Test
+ public void processRevisionSubStatementRevision() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/RevisionSubStatementRevision.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the description is set correctly.
+ assertThat(yangNode.getDescription(), is("\"module description\""));
+ assertThat(yangNode.getRevision().getDescription(), is("\"revision description\""));
+ }
+
+ /**
+ * Checks description statement as sub-statement of container.
+ */
+ @Test
+ public void processContainerSubStatementDescription() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ContainerSubStatementDescription.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the description value is set correctly.
+ YangContainer container = (YangContainer) yangNode.getChild();
+ assertThat(container.getName(), is("valid"));
+ assertThat(container.getDescription(), is("\"container description\""));
+
+ // Check whether leaf properties as set correctly.
+ ListIterator<YangLeaf> leafIterator = container.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
+ assertThat(leafInfo.getUnits(), is("\"seconds\""));
+ assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
+ assertThat(leafInfo.isMandatory(), is(true));
+ assertThat(leafInfo.getStatus(), is(YangStatusType.CURRENT));
+ assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
+ }
+
+ /**
+ * Checks description statement as sub-statement of list.
+ */
+ @Test
+ public void processListSubStatementDescription() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ListSubStatementDescription.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the list is child of module and description value is set correctly.
+ YangList yangList = (YangList) yangNode.getChild();
+ assertThat(yangList.getName(), is("valid"));
+ assertThat(yangList.isConfig(), is(true));
+ assertThat(yangList.getDescription(), is("\"list description\""));
+
+ // Check whether leaf properties as set correctly.
+ ListIterator<YangLeaf> leafIterator = yangList.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
+ assertThat(leafInfo.getUnits(), is("\"seconds\""));
+ assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
+ assertThat(leafInfo.isMandatory(), is(true));
+ assertThat(leafInfo.getStatus(), is(YangStatusType.CURRENT));
+ assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
+ }
+
+ /**
+ * Checks valid description statement as sub-statement of leaf-list.
+ */
+ @Test
+ public void processLeafListSubStatementDescription() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/LeafListSubStatementDescription.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ // Check whether description value is set correctly.
+ assertThat(leafListInfo.getName(), is("invalid-interval"));
+ assertThat(leafListInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/EnumListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/EnumListenerTest.java
new file mode 100644
index 0000000..4f56ef8
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/EnumListenerTest.java
@@ -0,0 +1,148 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangEnum;
+import org.onosproject.yang.compiler.datamodel.YangEnumeration;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.ListIterator;
+import java.util.SortedSet;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for enum listener.
+ */
+public class EnumListenerTest {
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks enum statement without value.
+ */
+ @Test
+ public void processEnumTypeStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/EnumTypeStatement.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("speed"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("enumeration"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.ENUMERATION));
+ assertThat(((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getName(),
+ is("speed_enum"));
+
+ SortedSet<YangEnum> enumSet = ((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getEnumSet();
+ for (YangEnum tmp : enumSet) {
+ if (tmp.getNamedValue().equals("10m")) {
+ assertThat(tmp.getValue(), is(0));
+ } else if (tmp.getNamedValue().equals("100m")) {
+ assertThat(tmp.getValue(), is(1));
+ } else if (tmp.getNamedValue().equals("auto")) {
+ assertThat(tmp.getValue(), is(2));
+ }
+ }
+ }
+
+ /**
+ * Checks if enum with same name is not allowed.
+ */
+ @Test(expected = ParserException.class)
+ public void processEnumWithDuplicateName() throws IOException, ParserException {
+ YangNode node = manager.getDataModel("src/test/resources/EnumWithDuplicateName.yang");
+ }
+
+ /**
+ * Checks enum boundary value.
+ */
+ @Test
+ public void processEnumBoundaryValue() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("YANG file error : value value 21474836472147483647 is not valid.");
+ YangNode node = manager.getDataModel("src/test/resources/EnumBoundaryValue.yang");
+ }
+
+ /**
+ * Checks whether exception is thrown if value is not specified following max enum value.
+ */
+ @Test
+ public void processEnumMaxNextValue() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("YANG file error : "
+ + "An enum value MUST be specified for enum substatements following the one"
+ + "with the current highest value");
+ YangNode node = manager.getDataModel("src/test/resources/EnumMaxNextValue.yang");
+ }
+
+ /**
+ * Checks enum values stored are sorted.
+ */
+ @Test
+ public void processEnumSorted() throws IOException, ParserException {
+ YangNode node = manager.getDataModel("src/test/resources/EnumSorted.yang");
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("ifType"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("enumeration"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.ENUMERATION));
+ assertThat(((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getName(),
+ is("ifType_enum"));
+
+ SortedSet<YangEnum> enumSet = ((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getEnumSet();
+ Iterator<YangEnum> enumIterator = enumSet.iterator();
+ assertThat(enumIterator.next().getNamedValue(), is("five"));
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ErrorAppTagListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ErrorAppTagListenerTest.java
new file mode 100644
index 0000000..8bd140c
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ErrorAppTagListenerTest.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangAppErrorInfo;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangMust;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.List;
+
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Test-cases for testing error app tag message listener functionality.
+ */
+public class ErrorAppTagListenerTest {
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks if error app tag message is default updated in the data model.
+ */
+ @Test
+ public void processContainerSubStatementErrorDefaultAppTag() throws IOException, ParserException {
+ YangNode node = manager.getDataModel("src/test/resources/ContainerSubStatementErrorDefaultAppTag.yang");
+
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("ErrorAppTag"));
+
+ YangContainer yangContainer = (YangContainer) yangNode.getChild();
+ assertThat(yangContainer.getName(), is("interface"));
+
+ String expectedConstraint = "ifType != 'ethernet' or (ifType = 'ethernet' and ifMTU = 1500)";
+ List<YangMust> mustConstraintList = yangContainer.getListOfMust();
+ assertThat(mustConstraintList.iterator().next().getConstraint(), is(expectedConstraint));
+
+ YangAppErrorInfo yangAppErrorInfo = mustConstraintList.iterator().next().getAppErrorInfo();
+ assertThat(yangAppErrorInfo.getGetErrorAppTag(), is("must-violation"));
+ assertThat(yangAppErrorInfo.getGetErrorTag(), is("operation-failed"));
+ }
+
+ /**
+ * Checks if error app tag message listener updates the data model.
+ */
+ @Test
+ public void processContainerSubStatementErrorAppTag() throws IOException, ParserException {
+ YangNode node = manager.getDataModel("src/test/resources/ContainerSubStatementErrorAppTag.yang");
+
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("ErrorAppTag"));
+
+ YangContainer yangContainer = (YangContainer) yangNode.getChild();
+ assertThat(yangContainer.getName(), is("interface"));
+
+ String expectedConstraint = "ifType != 'ethernet' or (ifType = 'ethernet' and ifMTU = 1500)";
+ List<YangMust> mustConstraintList = yangContainer.getListOfMust();
+ assertThat(mustConstraintList.iterator().next().getConstraint(), is(expectedConstraint));
+
+ YangAppErrorInfo yangAppErrorInfo = mustConstraintList.iterator().next().getAppErrorInfo();
+ assertThat(yangAppErrorInfo.getGetErrorAppTag(), is("An ethernet MTU must be 1500"));
+ assertThat(yangAppErrorInfo.getGetErrorTag(), is("operation-failed"));
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ErrorMessageListnerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ErrorMessageListnerTest.java
new file mode 100644
index 0000000..7080ef4
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ErrorMessageListnerTest.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangAppErrorInfo;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangMust;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.List;
+
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Test-cases for testing error message listener functionality.
+ */
+public class ErrorMessageListnerTest {
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks if error message listener updates the data model.
+ */
+ @Test
+ public void processContainerSubStatementErrorMessage() throws IOException, ParserException {
+ YangNode node = manager.getDataModel("src/test/resources/ContainerSubStatementErrorMessage.yang");
+
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("ErrorMessage"));
+
+ YangContainer yangContainer = (YangContainer) yangNode.getChild();
+ assertThat(yangContainer.getName(), is("interface"));
+
+ String expectedConstraint = "ifType != 'ethernet' or (ifType = 'ethernet' and ifMTU = 1500)";
+ List<YangMust> mustConstraintList = yangContainer.getListOfMust();
+ assertThat(mustConstraintList.iterator().next().getConstraint(), is(expectedConstraint));
+
+ YangAppErrorInfo yangAppErrorInfo = mustConstraintList.iterator().next().getAppErrorInfo();
+ assertThat(yangAppErrorInfo.getGetErrorMessage(), is("An ethernet MTU must be 1500"));
+ assertThat(yangAppErrorInfo.getGetErrorTag(), is("operation-failed"));
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ExtensionListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ExtensionListenerTest.java
new file mode 100644
index 0000000..9fcc24d
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ExtensionListenerTest.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangExtension;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for testing extension listener.
+ */
+public class ExtensionListenerTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks extension statement as sub-statement of module.
+ */
+ @Test
+ public void processValidExtensionStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ValidExtensionStatement.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("ietf-yang-compiler-annotation"));
+
+ YangExtension extension = yangNode.getExtensionList().iterator().next();
+ assertThat(extension.getName(), is("compiler-annotation"));
+ assertThat(extension.getArgumentName(), is("target"));
+ assertThat(extension.getDescription(), is("\"This extension allows for defining compiler annotations\""));
+ }
+}
+
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/GroupingListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/GroupingListenerTest.java
new file mode 100644
index 0000000..a017265
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/GroupingListenerTest.java
@@ -0,0 +1,190 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangGrouping;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.YangStatusType;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.ListIterator;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for testing grouping listener.
+ */
+public class GroupingListenerTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks grouping statement inside module.
+ */
+ @Test
+ public void processGroupingInModule() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/GroupingInModule.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangGrouping yangGrouping = (YangGrouping) yangNode.getChild();
+ assertThat(yangGrouping.getName(), is("endpoint"));
+
+ ListIterator<YangLeaf> leafIterator = yangGrouping.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("address"));
+ }
+
+ /**
+ * Checks grouping statement inside container.
+ */
+ @Test
+ public void processGroupingInContainer() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/GroupingInContainer.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangContainer yangContainer = (YangContainer) yangNode.getChild();
+ assertThat(yangContainer.getName(), is("valid"));
+
+ YangGrouping yangGrouping = (YangGrouping) yangContainer.getChild();
+ assertThat(yangGrouping.getName(), is("endpoint"));
+
+ ListIterator<YangLeaf> leafIterator = yangGrouping.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("address"));
+ }
+
+ /**
+ * Checks grouping statement inside list.
+ */
+ @Test
+ public void processGroupingInList() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/GroupingInList.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangList yangList = (YangList) yangNode.getChild();
+ assertThat(yangList.getName(), is("valid"));
+
+ YangGrouping yangGrouping = (YangGrouping) yangList.getChild();
+ assertThat(yangGrouping.getName(), is("endpoint"));
+
+ ListIterator<YangLeaf> leafIterator = yangGrouping.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("address"));
+ }
+
+ /**
+ * Checks grouping with attributes.
+ */
+ @Test
+ public void processGroupingAttributes() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/GroupingAttributes.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangList yangList = (YangList) yangNode.getChild();
+ assertThat(yangList.getName(), is("valid"));
+
+ YangGrouping yangGrouping = (YangGrouping) yangList.getChild();
+ assertThat(yangGrouping.getName(), is("endpoint"));
+ assertThat(yangGrouping.getStatus(), is(YangStatusType.CURRENT));
+ assertThat(yangGrouping.getReference(), is("\"RFC 6020\""));
+ assertThat(yangGrouping.getDescription(), is("\"grouping under test\""));
+
+ ListIterator<YangLeaf> leafIterator = yangGrouping.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("address"));
+ }
+
+ /**
+ * Checks duplicate grouping in list.
+ */
+ @Test(expected = ParserException.class)
+ public void processDuplicateGroupingInList() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/DuplicateGroupingInList.yang");
+ }
+
+ /**
+ * Checks duplicate grouping in container.
+ */
+ @Test (expected = ParserException.class)
+ public void processDuplicateGroupingInContainer() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/DuplicateGroupingInContainer.yang");
+ }
+
+ /**
+ * Checks duplicate grouping in module.
+ */
+ @Test (expected = ParserException.class)
+ public void processDuplicateGroupingInModule() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/DuplicateGroupingInModule.yang");
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/IdentityListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/IdentityListenerTest.java
new file mode 100644
index 0000000..f657ded
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/IdentityListenerTest.java
@@ -0,0 +1,231 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.hamcrest.core.Is;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangDerivedInfo;
+import org.onosproject.yang.compiler.datamodel.YangIdentity;
+import org.onosproject.yang.compiler.datamodel.YangIdentityRef;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.YangTypeDef;
+import org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.ListIterator;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.IDENTITYREF;
+
+/**
+ * Test case for identity listener.
+ */
+public class IdentityListenerTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ /**
+ * Checks for updating datamodel for identity/identityref.
+ */
+ @Test
+ public void processIdentityrefType() throws IOException, ParserException {
+
+ YangNode node = manager
+ .getDataModel("src/test/resources/IdentityListener.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("IdentityListener"));
+
+ YangIdentity yangIdentity = (YangIdentity) yangNode.getChild();
+ assertThat(yangIdentity.getName(), is("tunnel"));
+
+ yangIdentity = (YangIdentity) yangNode.getChild().getNextSibling();
+ assertThat(yangIdentity.getName(), is("tunnel-type"));
+
+ yangIdentity = (YangIdentity) yangNode.getChild().getNextSibling().getNextSibling();
+ assertThat(yangIdentity.getName(), is("ref-address-family"));
+
+ yangIdentity = (YangIdentity) yangNode.getChild().getNextSibling().getNextSibling()
+ .getNextSibling();
+ assertThat(yangIdentity.getName(), is("ipv4-address-family"));
+ assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
+ assertThat(yangIdentity.getBaseNode().getReferredIdentity().getName(), is("ref-address-family"));
+
+ yangIdentity = (YangIdentity) yangNode.getChild().getNextSibling().getNextSibling()
+ .getNextSibling().getNextSibling();
+ assertThat(yangIdentity.getName(), is("ipv6-address-family"));
+ assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
+ assertThat(yangIdentity.getBaseNode().getReferredIdentity().getName(), is("ref-address-family"));
+ assertThat(yangIdentity.getBaseNode().getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("tunnel"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("identityref"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.IDENTITYREF));
+ YangIdentityRef yangIdentityRef = (YangIdentityRef) leafInfo.getDataType().getDataTypeExtendedInfo();
+ assertThat(yangIdentityRef.getName(), is("ref-address-family"));
+ assertThat(yangIdentityRef.getBaseIdentity().getName(), is("ref-address-family"));
+ assertThat(yangIdentityRef.getReferredIdentity().getName(), is("ref-address-family"));
+ assertThat(yangIdentityRef.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ // Check whether the information in the leaf is correct.
+ assertThat(leafListInfo.getName(), is("network-ref"));
+ assertThat(leafListInfo.getDataType().getDataTypeName(), is("identityref"));
+ assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.IDENTITYREF));
+ yangIdentityRef = (YangIdentityRef) (leafListInfo.getDataType().getDataTypeExtendedInfo());
+
+ // Check whether identityref type got resolved.
+ assertThat(yangIdentityRef.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+ }
+
+ /**
+ * Checks for updating datamodel for intrafile resolution identity/identityref.
+ */
+ @Test
+ public void processIntraIdentityrefType() throws IOException, ParserException {
+
+ YangNode node = manager
+ .getDataModel("src/test/resources/IdentityIntraFile.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("IdentityIntraFile"));
+
+ YangIdentity yangIdentity = (YangIdentity) yangNode.getChild();
+ assertThat(yangIdentity.getName(), is("ipv4-address-family"));
+ assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
+ assertThat(yangIdentity.getBaseNode().getResolvableStatus(), is(ResolvableStatus.INTRA_FILE_RESOLVED));
+ }
+
+ /**
+ * Checks for updating datamodel for identityref used in tydedef.
+ */
+ @Test
+ public void processIdentityTypedefStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/IdentityTypedef.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangIdentity yangIdentity = (YangIdentity) yangNode.getChild();
+ assertThat(yangIdentity.getName(), is("tunnel"));
+
+ YangTypeDef typedef = (YangTypeDef) yangNode.getChild().getNextSibling();
+ assertThat(typedef.getName(), is("type15"));
+
+ YangType type = typedef.getTypeList().iterator().next();
+ assertThat(type.getDataType(), is(YangDataTypes.IDENTITYREF));
+ assertThat(type.getDataTypeName(), is("identityref"));
+
+ YangIdentityRef identityRef = (YangIdentityRef) type.getDataTypeExtendedInfo();
+ assertThat(identityRef.getName(), is("tunnel"));
+ assertThat(identityRef.getBaseIdentity().getName(), is("tunnel"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("tunnel-value"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("type15"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.DERIVED));
+
+ YangDerivedInfo info = (YangDerivedInfo) leafInfo.getDataType()
+ .getDataTypeExtendedInfo();
+ assertThat(info.getEffectiveBuiltInType(), is(IDENTITYREF));
+ YangType type1 = info.getReferredTypeDef().getTypeList().get(0);
+ YangIdentityRef idRef1 =
+ (YangIdentityRef) type1.getDataTypeExtendedInfo();
+ assertThat(idRef1.getName(), is("tunnel"));
+ assertThat(idRef1.getBaseIdentity().getName(), is("tunnel"));
+ assertThat(idRef1.getReferredIdentity().getName(), is("tunnel"));
+ assertThat(idRef1.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+ }
+
+ /**
+ * Checks for updating datamodel for unresolved status of identityref used in tydedef.
+ */
+ @Test
+ public void processIdentityUnresolvedTypedefStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/IdentityTypedefUnresolved.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangIdentity yangIdentity = (YangIdentity) yangNode.getChild();
+ assertThat(yangIdentity.getName(), is("tunnel"));
+
+ YangTypeDef typedef = (YangTypeDef) yangNode.getChild().getNextSibling();
+ assertThat(typedef.getName(), is("type15"));
+
+ YangType type = typedef.getTypeList().iterator().next();
+ assertThat(type.getDataType(), is(YangDataTypes.IDENTITYREF));
+ assertThat(type.getDataTypeName(), is("identityref"));
+
+ YangIdentityRef idRef =
+ (YangIdentityRef) type.getDataTypeExtendedInfo();
+ assertThat(idRef.getName(), is("tunnel"));
+ assertThat(idRef.getBaseIdentity().getName(), is("tunnel"));
+ assertThat(idRef.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ImportListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ImportListenerTest.java
new file mode 100644
index 0000000..0f92904
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ImportListenerTest.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Test cases for testing import listener functionality.
+ */
+public class ImportListenerTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+ private static final String DATE_FORMAT = "yyyy-MM-dd";
+ private final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATE_FORMAT);
+
+ /**
+ * Checks if mandatory parameter prefix is present in import.
+ */
+ @Test(expected = ParserException.class)
+ public void processImportWithoutPrefix() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ImportWithoutPrefix.yang");
+ }
+
+ /**
+ * Checks that prefix must be present only once in import.
+ */
+ @Test(expected = ParserException.class)
+ public void processImportWithDualPrefix() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ImportWithDualPrefix.yang");
+ }
+
+ /**
+ * Checks for the correct order of prefix in import.
+ */
+ @Test(expected = ParserException.class)
+ public void processImportInvalidOrder() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ImportInvalidOrder.yang");
+ }
+
+ /**
+ * Checks if import listener updates the data model tree.
+ */
+ @Test
+ public void processImportValidEntry() throws IOException, ParserException, ParseException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ImportValidEntry.yang");
+
+ // Checks for the revision value in data model tree.
+ assertThat(((YangModule) node).getImportList().get(0).getRevision(), is(simpleDateFormat.parse("2015-02-03")));
+ // Checks for the prefix id in data model tree.
+ assertThat(((YangModule) node).getImportList().get(0).getPrefixId(), is("On2"));
+ // Checks for the module name in data model tree.
+ assertThat(((YangModule) node).getImportList().get(0).getModuleName(), is("ietf"));
+ }
+
+ /**
+ * Checks if optional parameter revision is not mandatory in import.
+ */
+ @Test
+ public void processImportWithoutRevision() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ImportWithoutRevision.yang");
+
+ // Checks for the prefix id in data model tree.
+ assertThat(((YangModule) node).getImportList().get(0).getPrefixId(), is("On2"));
+ // Checks for the module name in data model tree.
+ assertThat(((YangModule) node).getImportList().get(0).getModuleName(), is("ietf"));
+ }
+
+ /**
+ * Checks if multiple imports are allowed.
+ */
+ @Test()
+ public void processImportMultipleInstance() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ImportMultipleInstance.yang");
+
+ // Checks for the prefix id in data model tree.
+ assertThat(((YangModule) node).getImportList().get(0).getPrefixId(), is("On2"));
+ // Checks for the module name in data model tree.
+ assertThat(((YangModule) node).getImportList().get(0).getModuleName(), is("ietf"));
+
+ // Checks for the prefix id in data model tree.
+ assertThat(((YangModule) node).getImportList().get(1).getPrefixId(), is("On3"));
+ // Checks for the module name in data model tree.
+ assertThat(((YangModule) node).getImportList().get(1).getModuleName(), is("itut"));
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/IncludeListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/IncludeListenerTest.java
new file mode 100644
index 0000000..6dabbae
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/IncludeListenerTest.java
@@ -0,0 +1,128 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Test cases for testing include listener functionality.
+ */
+public class IncludeListenerTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+ private static final String DATE_FORMAT = "yyyy-MM-dd";
+ private final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATE_FORMAT);
+
+ /**
+ * Checks if include listener with ; is valid and updates the data
+ * model tree.
+ */
+ @Test
+ public void processIncludeWithStmtend() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/IncludeWithStmtend.yang");
+
+ // Checks for the sub module name in data model tree.
+ assertThat(((YangModule) node).getIncludeList().get(0).getSubModuleName(), is("itut"));
+ }
+
+ /**
+ * Checks if include listener with braces and without revision date is valid
+ * and updates the data model tree.
+ */
+ @Test
+ public void processIncludeWithEmptyBody() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/IncludeWithEmptyBody.yang");
+
+ // Checks for the sub module name in data model tree.
+ assertThat(((YangModule) node).getIncludeList().get(0).getSubModuleName(), is("itut"));
+ }
+
+ /**
+ * Checks if include listener with braces and with revision date is valid
+ * and updates the data model tree.
+ */
+ @Test
+ public void processIncludeWithDate() throws IOException, ParserException, ParseException {
+
+ YangNode node = manager.getDataModel("src/test/resources/IncludeWithDate.yang");
+
+ // Checks for the sub module name in data model tree.
+ assertThat(((YangModule) node).getIncludeList().get(0).getSubModuleName(), is("itut"));
+ assertThat(((YangModule) node).getIncludeList().get(0).getRevision(), is(simpleDateFormat.parse("2016-02-03")));
+ }
+
+ /**
+ * Checks if include has more than one occurrence.
+ */
+ @Test
+ public void processIncludeMultiInstance() throws IOException, ParserException, ParseException {
+
+ YangNode node = manager.getDataModel("src/test/resources/IncludeMultiInstance.yang");
+
+ // Checks for the sub module name in data model tree.
+ assertThat(((YangModule) node).getIncludeList().get(0).getSubModuleName(), is("itut"));
+ assertThat(((YangModule) node).getIncludeList().get(0).getRevision(), is(simpleDateFormat.parse("2016-02-03")));
+ assertThat(((YangModule) node).getIncludeList().get(1).getSubModuleName(), is("sdn"));
+ assertThat(((YangModule) node).getIncludeList().get(1).getRevision(), is(simpleDateFormat.parse("2014-02-03")));
+ }
+
+ /**
+ * Checks if include and import can come in any order.
+ */
+ @Test
+ public void processIncludeImportAnyOrder() throws IOException, ParserException, ParseException {
+
+ YangNode node = manager.getDataModel("src/test/resources/IncludeImportAnyOrder.yang");
+
+ // Checks for the sub module name in data model tree.
+ assertThat(((YangModule) node).getIncludeList().get(0).getSubModuleName(), is("itut"));
+ assertThat(((YangModule) node).getIncludeList().get(0).getRevision(), is(simpleDateFormat.parse("2016-02-03")));
+ assertThat(((YangModule) node).getIncludeList().get(1).getSubModuleName(), is("sdn"));
+ assertThat(((YangModule) node).getIncludeList().get(1).getRevision(), is(simpleDateFormat.parse("2014-02-03")));
+ }
+
+ /**
+ * Checks if syntax of Include is not correct.
+ */
+ @Test(expected = ParserException.class)
+ public void processIncludeInvalidSyntax() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/IncludeInvalidSyntax.yang");
+ }
+
+ /**
+ * Checks if syntax of revision date in Include is not correct.
+ */
+ @Test(expected = ParserException.class)
+ public void processIncludeInvalidDateSyntax() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/IncludeInvalidDateSyntax.yang");
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/InputListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/InputListenerTest.java
new file mode 100644
index 0000000..e0841a9
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/InputListenerTest.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangInput;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.YangRpc;
+import org.onosproject.yang.compiler.datamodel.YangStatusType;
+import org.onosproject.yang.compiler.datamodel.YangTypeDef;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.ListIterator;
+
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Test cases for testing Input listener functionality.
+ */
+public class InputListenerTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks input statements with data definition statements as sub-statements.
+ */
+ @Test
+ public void processInputStatementWithDataDefinition() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/InputStatementWithDataDefinition.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("rock"));
+
+ YangRpc yangRpc = (YangRpc) yangNode.getChild();
+ assertThat(yangRpc.getName(), is("activate-software-image"));
+
+ YangInput yangInput = (YangInput) yangRpc.getChild();
+ assertThat(yangInput.getName(), is("input"));
+ ListIterator<YangLeaf> leafIterator = yangInput.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("image-name"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
+
+ YangList yangList = (YangList) yangInput.getChild();
+ assertThat(yangList.getName(), is("ospf"));
+ assertThat(yangList.getKeyList().contains("invalid-interval"), is(true));
+ assertThat(yangList.isConfig(), is(true));
+ assertThat(yangList.getMaxElements().getMaxElement(), is(10));
+ assertThat(yangList.getMinElements().getMinElement(), is(3));
+ leafIterator = yangList.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
+
+ YangContainer yangContainer = (YangContainer) yangList.getNextSibling();
+ assertThat(yangContainer.getName(), is("isis"));
+
+ leafIterator = yangContainer.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
+ }
+
+ /**
+ * Checks input statements with type-def statement as sub-statements.
+ */
+ @Test
+ public void processInputStatementWithTypedef() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/InputStatementWithTypedef.yang");
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("rock"));
+
+ YangRpc yangRpc = (YangRpc) yangNode.getChild();
+ assertThat(yangRpc.getName(), is("activate-software-image"));
+
+ YangInput yangInput = (YangInput) yangRpc.getChild();
+ assertThat(yangInput.getName(), is("input"));
+ YangTypeDef typeDef = (YangTypeDef) yangInput.getChild();
+ assertThat(typeDef.getName(), is("my-type"));
+ assertThat(typeDef.getStatus(), is(YangStatusType.DEPRECATED));
+ assertThat(typeDef.getTypeDefBaseType().getDataType(), is(YangDataTypes.INT32));
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/KeyListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/KeyListenerTest.java
new file mode 100644
index 0000000..b526d40
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/KeyListenerTest.java
@@ -0,0 +1,224 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.hamcrest.core.Is;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.ListIterator;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for key listener.
+ */
+public class KeyListenerTest {
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks key statement as sub-statement of list.
+ */
+ @Test
+ public void processListSubStatementKey() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ListSubStatementKey.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), Is.is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the list is child of module
+ YangList yangList = (YangList) yangNode.getChild();
+ assertThat(yangList.getName(), is("valid"));
+
+ ListIterator<String> keyList = yangList.getKeyList().listIterator();
+ assertThat(keyList.next(), is("invalid-interval"));
+ }
+
+ /**
+ * Check multiple key values.
+ */
+ @Test
+ public void processMultipleKeyValues() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/MultipleKeyValues.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the list is child of module
+ YangList yangList = (YangList) yangNode.getChild();
+ assertThat(yangList.getName(), is("valid"));
+
+ List<String> keyList = yangList.getKeyList();
+ assertThat(keyList.contains("ospf"), is(true));
+ assertThat(keyList.contains("isis"), is(true));
+ }
+
+ /**
+ * Checks key statement without statement end.
+ */
+ @Test
+ public void processKeyWithoutStatementEnd() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("mismatched input 'leaf' expecting {';', '+'}");
+ YangNode node = manager.getDataModel("src/test/resources/KeyWithoutStatementEnd.yang");
+ }
+
+ /**
+ * Checks key values are set correctly.
+ */
+ @Test
+ public void processConfigFalseNoKey() throws IOException, ParserException {
+ YangNode node = manager.getDataModel("src/test/resources/ConfigFalseNoKey.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the list is child of module
+ YangList yangList = (YangList) yangNode.getChild();
+ assertThat(yangList.getName(), is("valid"));
+ }
+
+ /**
+ * Checks key values are set correctly.
+ */
+ @Test
+ public void processConfigFalseValidKeyValidLeaf() throws IOException, ParserException {
+ YangNode node = manager.getDataModel("src/test/resources/ConfigFalseValidKeyValidLeaf.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the list is child of module
+ YangList yangList = (YangList) yangNode.getChild();
+ assertThat(yangList.getName(), is("valid"));
+
+ ListIterator<String> keyList = yangList.getKeyList().listIterator();
+ assertThat(keyList.next(), is("invalid-interval"));
+ }
+
+ /**
+ * Checks whether exception is thrown when list's config is set to true and there is no key.
+ */
+ @Test
+ public void processConfigTrueNoKey() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("A list must have atleast one key leaf if config is true");
+ YangNode node = manager.getDataModel("src/test/resources/ConfigTrueNoKey.yang");
+ }
+
+ /**
+ * Checks whether exception is thrown when list's config is set to true and there is no leaf.
+ */
+ @Test
+ public void processConfigTrueNoleafNoLeafList() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("A list must have atleast one key leaf if config is true");
+ YangNode node = manager.getDataModel("src/test/resources/ConfigTrueNoleafNoLeafList.yang");
+ }
+
+ /**
+ * Checks key values are set correctly.
+ */
+ @Test
+ public void processConfigTrueValidKeyValidLeaf() throws IOException, ParserException {
+ YangNode node = manager.getDataModel("src/test/resources/ConfigTrueValidKeyValidLeaf.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the list is child of module
+ YangList yangList = (YangList) yangNode.getChild();
+ assertThat(yangList.getName(), is("valid"));
+
+ ListIterator<String> keyList = yangList.getKeyList().listIterator();
+ assertThat(keyList.next(), is("invalid-interval"));
+ }
+
+ /**
+ * Checks key values are set correctly.
+ */
+ @Test
+ public void processKeyWithUsesInList() throws IOException, ParserException {
+ YangNode node = manager.getDataModel("src/test/resources/KeyWithUsesInList.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the list is child of module
+ YangList yangList = (YangList) yangNode.getChild().getNextSibling();
+ assertThat(yangList.getName(), is("valid"));
+
+ ListIterator<String> keyList = yangList.getKeyList().listIterator();
+ assertThat(keyList.next(), is("invalid-interval"));
+ }
+
+ /**
+ * Checks whether exception is thrown when key leaf identifier is not found in list.
+ */
+ @Test
+ public void processInvalidLeafIdentifier() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("An identifier, in key, must refer to a child leaf of the list");
+ YangNode node = manager.getDataModel("src/test/resources/InvalidLeafIdentifier.yang");
+ }
+
+ /**
+ * Checks whether exception is thrown when key leaf is of type empty.
+ */
+ @Test
+ public void processKeyLeafTypeEmpty() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("A leaf that is part of the key must not be the built-in type \"empty\".");
+ YangNode node = manager.getDataModel("src/test/resources/KeyLeafTypeEmpty.yang");
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/LeafListListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/LeafListListenerTest.java
new file mode 100644
index 0000000..8a5711f
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/LeafListListenerTest.java
@@ -0,0 +1,208 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.hamcrest.core.Is;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.YangStatusType;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.ListIterator;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for testing leaf-list listener.
+ */
+public class LeafListListenerTest {
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks all the values of leaf-list sub-statements are set correctly.
+ */
+ @Test
+ public void processLeafListSubStatements() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/LeafListSubStatements.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ assertThat(leafListInfo.getName(), is("invalid-interval"));
+ assertThat(leafListInfo.getDataType().getDataTypeName(), is("uint16"));
+ assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
+ assertThat(leafListInfo.getUnits(), is("\"seconds\""));
+ assertThat(leafListInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
+ assertThat(leafListInfo.isConfig(), is(true));
+ assertThat(leafListInfo.getMaxElements().getMaxElement(), is(3));
+ assertThat(leafListInfo.getStatus(), Is.is(YangStatusType.CURRENT));
+ assertThat(leafListInfo.getReference(), is("\"RFC 6020\""));
+ }
+
+ /**
+ * Checks whether exception is thrown when leaf-list identifier starts with
+ * digit.
+ */
+ @Test
+ public void processLeafListInvalidIdentifier() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("YANG file error : leaf-list name 1invalid-interval is not valid.");
+ YangNode node = manager.getDataModel("src/test/resources/LeafListInvalidIdentifier.yang");
+ }
+
+ /**
+ * Checks whether exception is thrown when leaf-list keyword is incorrect.
+ */
+ @Test(expected = ParserException.class)
+ public void processLeafListInvalidStatement() throws IOException, ParserException {
+ YangNode node = manager.getDataModel("src/test/resources/LeafListInvalidStatement.yang");
+ }
+
+ /**
+ * Checks whether exception is thrown when leaf-list keyword without Left
+ * brace as per grammar.
+ */
+ @Test
+ public void processLeafListWithoutLeftBrace() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("missing '{' at 'type'");
+ YangNode node = manager.getDataModel("src/test/resources/LeafListWithoutLeftBrace.yang");
+ }
+
+ /**
+ * Checks whether exception is thrown when config statement cardinality is
+ * not as per grammar.
+ */
+ @Test
+ public void processLeafListConfigInvalidCardinality() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("YANG file error: \"config\" is defined more than once in \"leaf-list " +
+ "invalid-interval\".");
+ YangNode node = manager.getDataModel("src/test/resources/LeafListConfigInvalidCardinality.yang");
+ }
+
+ /**
+ * Checks whether exception is thrown when units statement cardinality is
+ * not as per grammar.
+ */
+ @Test
+ public void processLeafListUnitsInvalidCardinality() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("YANG file error: \"units\" is defined more than once in \"leaf-list invalid-interval\"");
+ YangNode node = manager.getDataModel("src/test/resources/LeafListUnitsInvalidCardinality.yang");
+ }
+
+ /**
+ * Checks leaf-list statement as sub-statement of container.
+ */
+ @Test
+ public void processContainerSubStatementLeafList() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ContainerSubStatementLeafList.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ //Check whether the container is child of module.
+ YangContainer container = (YangContainer) yangNode.getChild();
+ assertThat(container.getName(), is("valid"));
+
+ // Check whether leaf-list properties as set correctly.
+ ListIterator<YangLeafList> leafListIterator = container.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ assertThat(leafListInfo.getName(), is("invalid-interval"));
+ assertThat(leafListInfo.getDataType().getDataTypeName(), is("uint16"));
+ assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
+ assertThat(leafListInfo.getUnits(), is("\"seconds\""));
+ assertThat(leafListInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
+ assertThat(leafListInfo.isConfig(), is(true));
+ assertThat(leafListInfo.getMinElements().getMinElement(), is(1));
+ assertThat(leafListInfo.getMaxElements().getMaxElement(), is(2147483647));
+ assertThat(leafListInfo.getStatus(), is(YangStatusType.CURRENT));
+ assertThat(leafListInfo.getReference(), is("\"RFC 6020\""));
+ }
+
+ /**
+ * Checks leaf-list statement as sub-statement of list.
+ */
+ @Test
+ public void processListSubStatementLeafList() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ListSubStatementLeafList.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the list is child of module
+ YangList yangList = (YangList) yangNode.getChild();
+ assertThat(yangList.getName(), is("valid"));
+
+ // Check whether leaf-list properties as set correctly.
+ ListIterator<YangLeafList> leafListIterator = yangList.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ assertThat(leafListInfo.getName(), is("invalid-interval"));
+ assertThat(leafListInfo.getDataType().getDataTypeName(), is("uint16"));
+ assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
+ assertThat(leafListInfo.getUnits(), is("\"seconds\""));
+ assertThat(leafListInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
+ assertThat(leafListInfo.isConfig(), is(true));
+
+ assertThat(leafListInfo.getStatus(), is(YangStatusType.CURRENT));
+ assertThat(leafListInfo.getReference(), is("\"RFC 6020\""));
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/LeafListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/LeafListenerTest.java
new file mode 100644
index 0000000..216033c
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/LeafListenerTest.java
@@ -0,0 +1,224 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.YangStatusType;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.ListIterator;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for testing leaf listener.
+ */
+public class LeafListenerTest {
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks all the values of leaf sub-statements are set correctly.
+ */
+ @Test
+ public void processLeafSubStatements() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/LeafSubStatements.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ 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("uint16"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
+ assertThat(leafInfo.getUnits(), is("\"seconds\""));
+ assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
+ assertThat(leafInfo.isConfig(), is(true));
+ assertThat(leafInfo.isMandatory(), is(true));
+ assertThat(leafInfo.getStatus(), is(YangStatusType.CURRENT));
+ assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
+ }
+
+ /**
+ * Checks whether exception is thrown when leaf identifier starts with
+ * digit.
+ */
+ @Test
+ public void processLeafInvalidIdentifier() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("YANG file error : leaf name 1invalid-interval is not valid.");
+ YangNode node = manager.getDataModel("src/test/resources/LeafInvalidIdentifier.yang");
+ }
+
+ /**
+ * Checks whether exception is thrown when leaf keyword without Left brace
+ * as per grammar.
+ */
+ @Test
+ public void processLeafWithoutLeftBrace() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("missing '{' at 'type'");
+ YangNode node = manager.getDataModel("src/test/resources/LeafWithoutLeftBrace.yang");
+ }
+
+ /**
+ * Checks whether exception is thrown when config statement cardinality is
+ * not as per grammar.
+ */
+ @Test
+ public void processLeafConfigInvalidCardinality() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("YANG file error: \"config\" is defined more than once in \"leaf invalid-interval\".");
+ YangNode node = manager.getDataModel("src/test/resources/LeafConfigInvalidCardinality.yang");
+ }
+
+ /**
+ * Checks whether exception is thrown when mandatory statement cardinality
+ * is not as per grammar.
+ */
+ @Test
+ public void processLeafMandatoryInvalidCardinality() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("YANG file error: \"mandatory\" is defined more than once in \"leaf invalid-interval\".");
+ YangNode node = manager.getDataModel("src/test/resources/LeafMandatoryInvalidCardinality.yang");
+ }
+
+ /**
+ * Checks leaf statement as sub-statement of container.
+ */
+ @Test
+ public void processContainerSubStatementLeaf() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ContainerSubStatementLeaf.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ //Check whether the container is child of module.
+ YangContainer container = (YangContainer) yangNode.getChild();
+ assertThat(container.getName(), is("valid"));
+
+ // Check whether leaf properties as set correctly.
+ ListIterator<YangLeaf> leafIterator = container.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
+ assertThat(leafInfo.getUnits(), is("\"seconds\""));
+ assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
+ assertThat(leafInfo.isConfig(), is(true));
+ assertThat(leafInfo.isMandatory(), is(true));
+ assertThat(leafInfo.getStatus(), is(YangStatusType.CURRENT));
+ assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
+ }
+
+ /**
+ * Checks duplicate leaf statement as sub-statement of module.
+ */
+ @Test(expected = ParserException.class)
+ public void processModuleWithDuplicateLeaf() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ModuleWithDuplicateLeaf.yang");
+ }
+
+ /**
+ * Checks duplicate leaf statement as sub-statement of container.
+ */
+ @Test(expected = ParserException.class)
+ public void processContainerWithDuplicateLeaf() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ContainerWithDuplicateLeaf.yang");
+ }
+
+ /**
+ * Checks duplicate leaf statement as sub-statement of list.
+ */
+ @Test(expected = ParserException.class)
+ public void processListWithDuplicateLeaf() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ListWithDuplicateLeaf.yang");
+ }
+
+ /**
+ * Checks leaf statement as sub-statement of list.
+ */
+ @Test
+ public void processListSubStatementLeaf() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ListSubStatementLeaf.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the list is child of module
+ YangList yangList = (YangList) yangNode.getChild();
+ assertThat(yangList.getName(), is("valid"));
+
+ // Check whether leaf properties as set correctly.
+ ListIterator<YangLeaf> leafIterator = yangList.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
+ assertThat(leafInfo.getUnits(), is("\"seconds\""));
+ assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
+ assertThat(leafInfo.isConfig(), is(true));
+ assertThat(leafInfo.isMandatory(), is(true));
+ assertThat(leafInfo.getStatus(), is(YangStatusType.CURRENT));
+ assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/LengthRestrictionListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/LengthRestrictionListenerTest.java
new file mode 100644
index 0000000..af9572f
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/LengthRestrictionListenerTest.java
@@ -0,0 +1,334 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.YangRangeInterval;
+import org.onosproject.yang.compiler.datamodel.YangRangeRestriction;
+import org.onosproject.yang.compiler.datamodel.YangStringRestriction;
+import org.onosproject.yang.compiler.datamodel.YangTypeDef;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangUint64;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.math.BigInteger;
+import java.util.ListIterator;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for length restriction listener.
+ */
+public class LengthRestrictionListenerTest {
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks valid length statement as sub-statement of leaf statement.
+ */
+ @Test
+ public void processValidLengthStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ValidLengthStatement.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)));
+ }
+
+ /**
+ * Checks valid length statement as sub-statement of leaf-list.
+ */
+ @Test
+ public void processLengthStatementInsideLeafList() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/LengthStatementInsideLeafList.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ assertThat(leafListInfo.getName(), is("invalid-interval"));
+ assertThat(leafListInfo.getDataType().getDataTypeName(), is("string"));
+ assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
+ YangStringRestriction stringRestriction = (YangStringRestriction) leafListInfo
+ .getDataType().getDataTypeExtendedInfo();
+ YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
+
+ ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
+ .listIterator();
+
+ YangRangeInterval rangeInterval = lengthListIterator.next();
+ assertThat(((YangUint64) rangeInterval.getStartValue()).getValue(), is(BigInteger.valueOf(1)));
+ assertThat(((YangUint64) rangeInterval.getEndValue()).getValue(), is(BigInteger.valueOf(100)));
+ }
+
+ /**
+ * Checks valid length statement as sub-statement of typedef.
+ */
+ @Test
+ public void processLengthStatementInsideTypeDef() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/LengthStatementInsideTypeDef.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangTypeDef typedef = (YangTypeDef) yangNode.getChild();
+ YangStringRestriction stringRestriction = (YangStringRestriction) typedef.getTypeDefBaseType()
+ .getDataTypeExtendedInfo();
+
+ YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
+ ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
+ .listIterator();
+ YangRangeInterval rangeInterval = lengthListIterator.next();
+ assertThat(((YangUint64) rangeInterval.getStartValue()).getValue(), is(BigInteger.valueOf(1)));
+ assertThat(((YangUint64) rangeInterval.getEndValue()).getValue(), is(BigInteger.valueOf(100)));
+ }
+
+ /**
+ * Checks valid length statement as sub-statement of binary statement.
+ */
+ @Test
+ public void processValidBinaryLengthStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ValidBinaryLengthStatement.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("message"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("binary"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.BINARY));
+ YangRangeRestriction lengthRestriction = (YangRangeRestriction) leafInfo
+ .getDataType().getDataTypeExtendedInfo();
+
+ ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
+ .listIterator();
+
+ YangRangeInterval rangeInterval = lengthListIterator.next();
+
+ assertThat(((YangUint64) rangeInterval.getStartValue()).getValue(), is(BigInteger.valueOf(4)));
+ assertThat(((YangUint64) rangeInterval.getEndValue()).getValue(), is(BigInteger.valueOf(4)));
+ }
+
+ /**
+ * Checks length statement with invalid type.
+ */
+ @Test
+ public void processLengthWithInvalidType() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("YANG file error : length name \"1..100\" can be used to restrict the built-in type" +
+ " string/binary or types derived from string/binary.");
+ YangNode node = manager.getDataModel("src/test/resources/LengthWithInvalidType.yang");
+ }
+
+ /**
+ * Checks length statement with only start interval.
+ */
+ @Test
+ public void processLengthWithOneInterval() throws IOException, ParserException {
+
+
+ YangNode node = manager.getDataModel("src/test/resources/LengthWithOneInterval.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ assertThat(leafListInfo.getName(), is("invalid-interval"));
+ assertThat(leafListInfo.getDataType().getDataTypeName(), is("string"));
+ assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
+ YangStringRestriction stringRestriction = (YangStringRestriction) leafListInfo
+ .getDataType().getDataTypeExtendedInfo();
+ YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
+
+ ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
+ .listIterator();
+
+ YangRangeInterval rangeInterval = lengthListIterator.next();
+ assertThat(((YangUint64) rangeInterval.getStartValue()).getValue(), is(BigInteger.valueOf(1)));
+ assertThat(((YangUint64) rangeInterval.getEndValue()).getValue(), is(BigInteger.valueOf(1)));
+ }
+
+ /**
+ * Checks length statement with min and max.
+ */
+ @Test
+ public void processLengthWithMinMax() throws IOException, ParserException {
+
+
+ YangNode node = manager.getDataModel("src/test/resources/LengthWithMinMax.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ assertThat(leafListInfo.getName(), is("invalid-interval"));
+ assertThat(leafListInfo.getDataType().getDataTypeName(), is("string"));
+ assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
+ YangStringRestriction stringRestriction = (YangStringRestriction) leafListInfo
+ .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(new BigInteger("18446744073709551615")));
+ }
+
+ /**
+ * Checks length statement with invalid integer pattern.
+ */
+ @Test
+ public void processLengthWithInvalidIntegerPattern() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("YANG file error : Input value \"a\" is not a valid uint64.");
+ YangNode node = manager.getDataModel("src/test/resources/LengthWithInvalidIntegerPattern.yang");
+ }
+
+ /**
+ * Checks length statement with invalid interval.
+ */
+ @Test
+ public void processLengthWithInvalidInterval() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("YANG file error : 18446744073709551617 is greater than maximum value" +
+ " 18446744073709551615.");
+ YangNode node = manager.getDataModel("src/test/resources/LengthWithInvalidInterval.yang");
+ }
+
+ /**
+ * Checks valid length substatements.
+ */
+ @Test
+ public void processLengthSubStatements() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/LengthSubStatements.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();
+
+ assertThat(lengthRestriction.getDescription(), is("\"length description\""));
+ assertThat(lengthRestriction.getReference(), is("\"length reference\""));
+
+ 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)));
+ }
+
+ /**
+ * 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/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ListListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ListListenerTest.java
new file mode 100644
index 0000000..a8d1524
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ListListenerTest.java
@@ -0,0 +1,237 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.YangStatusType;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.ListIterator;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for testing list listener.
+ */
+public class ListListenerTest {
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks list statement as sub-statement of module.
+ */
+ @Test
+ public void processModuleSubStatementList() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ModuleSubStatementList.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the list is child of module
+ YangList yangList = (YangList) yangNode.getChild();
+ assertThat(yangList.getName(), is("valid"));
+
+ ListIterator<String> keyList = yangList.getKeyList().listIterator();
+ assertThat(keyList.next(), is("invalid-interval"));
+ }
+
+ /**
+ * Checks list statement as sub-statement of container.
+ */
+ @Test
+ public void processContainerSubStatementList() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ContainerSubStatementList.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the container is child of module
+ YangContainer yangContainer = (YangContainer) yangNode.getChild();
+ assertThat(yangContainer.getName(), is("ospf"));
+
+ // Check whether the list is child of container
+ YangList yangList = (YangList) yangContainer.getChild();
+ assertThat(yangList.getName(), is("valid"));
+ assertThat(yangList.getKeyList().contains("invalid-interval"), is(true));
+ }
+
+ /**
+ * Checks list statement as sub-statement of list.
+ */
+ @Test
+ public void processListSubStatementList() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ListSubStatementList.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the list is child of module
+ YangList yangList1 = (YangList) yangNode.getChild();
+ assertThat(yangList1.getName(), is("ospf"));
+ assertThat(yangList1.getKeyList().contains("process-id"), is(true));
+
+ // Check whether the list is child of list
+ YangList yangList = (YangList) yangList1.getChild();
+ assertThat(yangList.getName(), is("valid"));
+ assertThat(yangList.getKeyList().contains("invalid-interval"), is(true));
+ }
+
+ /**
+ * Checks list with all its sub-statements.
+ */
+ @Test
+ public void processListSubStatements() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ListSubStatements.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the list is child of module
+ YangList yangList = (YangList) yangNode.getChild();
+
+ // Check whether list properties as set correctly.
+ assertThat(yangList.getName(), is("ospf"));
+ assertThat(yangList.getKeyList().contains("invalid-interval"), is(true));
+
+ assertThat(yangList.isConfig(), is(true));
+ assertThat(yangList.getMaxElements().getMaxElement(), is(10));
+ assertThat(yangList.getMinElements().getMinElement(), is(3));
+ assertThat(yangList.getDescription(), is("\"list description\""));
+ assertThat(yangList.getStatus(), is(YangStatusType.CURRENT));
+ assertThat(yangList.getReference(), is("\"list reference\""));
+
+ // Check whether leaf properties as set correctly.
+ ListIterator<YangLeaf> leafIterator = yangList.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
+ assertThat(leafInfo.getUnits(), is("\"seconds\""));
+ assertThat(leafInfo.getStatus(), is(YangStatusType.CURRENT));
+ assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
+ }
+
+ /**
+ * Checks cardinality of sub-statements of list.
+ */
+ @Test
+ public void processListSubStatementsCardinality() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("YANG file error: \"reference\" is defined more than once in \"list valid\".");
+ YangNode node = manager.getDataModel("src/test/resources/ListSubStatementsCardinality.yang");
+ }
+
+ /**
+ * Checks list statement without child.
+ */
+ @Test
+ public void processListStatementWithoutChild() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("YANG file error: Missing \"data-def-substatements\" in \"list valid\".");
+ YangNode node = manager.getDataModel("src/test/resources/ListStatementWithoutChild.yang");
+ }
+
+ /**
+ * Checks list as root node.
+ */
+ @Test
+ public void processListAsRootNode() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("no viable alternative at input 'list'");
+ YangNode node = manager.getDataModel("src/test/resources/ListAsRootNode.yang");
+ }
+
+ /**
+ * Checks invalid identifier for list statement.
+ */
+ @Test
+ public void processListInvalidIdentifier() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("YANG file error : list name 1valid is not valid.");
+ YangNode node = manager.getDataModel("src/test/resources/ListInvalidIdentifier.yang");
+ }
+
+ /**
+ * Checks list with identifier name as enum.
+ */
+ @Test
+ public void processListWithIdentifierNameEnum() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ListWithIdentifierNameEnum.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the list is child of module
+ YangList yangList = (YangList) yangNode.getChild();
+ assertThat(yangList.getName(), is("enumList"));
+ assertThat(yangList.getKeyList().contains("enum"), is(true));
+ YangLeaf leaf = yangList.getListOfLeaf().iterator().next();
+ assertThat(leaf.getName(), is("enum"));
+ assertThat(leaf.getDataType().getDataType(), is(YangDataTypes.ENUMERATION));
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/MandatoryListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/MandatoryListenerTest.java
new file mode 100644
index 0000000..31f0995
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/MandatoryListenerTest.java
@@ -0,0 +1,143 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.ListIterator;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test case for mandatory listener.
+ */
+public class MandatoryListenerTest {
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks valid mandatory with value true statement.
+ */
+ @Test
+ public void processMandatoryTrue() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/MandatoryTrue.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ // Check whether the mandatory value is set correctly.
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.isMandatory(), is(true));
+ }
+
+ /**
+ * Checks valid mandatory with value false statement.
+ */
+ @Test
+ public void processMandatoryFalse() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/MandatoryFalse.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ // Check whether the mandatory value is set correctly.
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.isMandatory(), is(false));
+ }
+
+ /**
+ * Checks default value of mandatory statement.
+ */
+ @Test
+ public void processMandatoryDefaultValue() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/MandatoryDefaultValue.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ // Check whether the mandatory value is set correctly.
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.isMandatory(), is(false));
+ }
+
+ /**
+ * Checks invalid of mandatory statement and expects exception.
+ */
+ @Test
+ public void processMandatoryEmptyStatement() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("no viable alternative at input ';'");
+ YangNode node = manager.getDataModel("src/test/resources/MandatoryEmptyStatement.yang");
+ }
+
+ /**
+ * Checks invalid mandatory statement(without statement end) and expects
+ * exception.
+ */
+ @Test
+ public void processMandatoryWithoutStatementEnd() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("missing ';' at '}'");
+ YangNode node = manager.getDataModel("src/test/resources/MandatoryWithoutStatementEnd.yang");
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/MaxElementsListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/MaxElementsListenerTest.java
new file mode 100644
index 0000000..7691acb
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/MaxElementsListenerTest.java
@@ -0,0 +1,177 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.ListIterator;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for testing max-elements listener.
+ */
+public class MaxElementsListenerTest {
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks max-elements as sub-statements of leaf-list.
+ */
+ @Test
+ public void processLeafListSubStatementMaxElements() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/LeafListSubStatementMaxElements.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ assertThat(leafListInfo.getName(), is("invalid-interval"));
+ assertThat(leafListInfo.getMaxElements().getMaxElement(), is(3));
+ }
+
+ /**
+ * Checks max-elements as sub-statements of list.
+ */
+ @Test
+ public void processListSubStatementMaxElements() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ListSubStatementMaxElements.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the list is child of module
+ YangList yangList = (YangList) yangNode.getChild();
+ assertThat(yangList.getName(), is("valid"));
+ assertThat(yangList.getMaxElements().getMaxElement(), is(3));
+ }
+
+ /**
+ * Checks whether exception is thrown when max-elements statement without
+ * statement end is given as input.
+ */
+ @Test
+ public void processMaxElementsWithoutStatementEnd() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("missing ';' at 'description'");
+ YangNode node = manager.getDataModel("src/test/resources/MaxElementsWithoutStatementEnd.yang");
+ }
+
+ /**
+ * Checks whether exception is thrown when max-elements cardinality is not
+ * as per the grammar.
+ */
+ @Test
+ public void processMaxElementsCardinality() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("YANG file error: \"max-elements\" is defined more than once in \"leaf-list " +
+ "invalid-interval\".");
+ YangNode node = manager.getDataModel("src/test/resources/MaxElementsCardinality.yang");
+ }
+
+ /**
+ * Checks unbounded value of max-elements statement.
+ */
+ @Test
+ public void processMaxElementsUnbounded() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/MaxElementsUnbounded.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ assertThat(leafListInfo.getName(), is("invalid-interval"));
+ assertThat(leafListInfo.getMaxElements().getMaxElement(), is(2147483647));
+ }
+
+ /**
+ * Checks default value of max-elements statement.
+ */
+ @Test
+ public void processMaxElementsDefaultValue() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/MaxElementsDefaultValue.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ assertThat(leafListInfo.getName(), is("invalid-interval"));
+ assertThat(leafListInfo.getMaxElements().getMaxElement(), is(2147483647));
+ }
+
+ /**
+ * Checks whether exception is thrown when invalid min-elements value is
+ * given as input.
+ */
+ @Test
+ public void processMaxElementsMaxValue() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("YANG file error : max-elements value 77777777777777777777777 is not valid.");
+ YangNode node = manager.getDataModel("src/test/resources/MaxElementsMaxValue.yang");
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/MinElementsListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/MinElementsListenerTest.java
new file mode 100644
index 0000000..e43c4e0
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/MinElementsListenerTest.java
@@ -0,0 +1,163 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.ListIterator;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for testing min-elements listener.
+ */
+public class MinElementsListenerTest {
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks min-elements as sub-statements of leaf-list.
+ */
+ @Test
+ public void processLeafListSubStatementMinElements() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/LeafListSubStatementMinElements.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ assertThat(leafListInfo.getName(), is("invalid-interval"));
+ assertThat(leafListInfo.getMinElements().getMinElement(), is(3));
+ }
+
+ /**
+ * Checks min-elements as sub-statements of list.
+ */
+ @Test
+ public void processListSubStatementMinElements() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ListSubStatementMinElements.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the list is child of module
+ YangList yangList = (YangList) yangNode.getChild();
+ assertThat(yangList.getName(), is("valid"));
+ assertThat(yangList.getMinElements().getMinElement(), is(3));
+ }
+
+ /**
+ * Checks whether exception is thrown when invalid min-elements value is
+ * given as input.
+ */
+ @Test
+ public void processMinElementsInvalidValue() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("YANG file error : min-elements value asd is not valid.");
+ YangNode node = manager.getDataModel("src/test/resources/MinElementsInvalidValue.yang");
+ }
+
+ /**
+ * Checks whether exception is thrown when invalid min-elements value is
+ * given as input.
+ */
+ @Test
+ public void processMinElementsMaxValue() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("YANG file error : min-elements value 77777777777777777777777 is not valid.");
+ YangNode node = manager.getDataModel("src/test/resources/MinElementsMaxValue.yang");
+ }
+
+ /**
+ * Checks whether exception is thrown when min-elements statement without
+ * statement end is given as input.
+ */
+ @Test
+ public void processMinElementsWithoutStatementEnd() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("missing ';' at 'description'");
+ YangNode node = manager.getDataModel("src/test/resources/MinElementsWithoutStatementEnd.yang");
+ }
+
+ /**
+ * Checks whether exception is thrown when min-elements cardinality is not
+ * as per the grammar.
+ */
+ @Test
+ public void processMinElementsInvalidCardinality() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("YANG file error: \"min-elements\" is defined more than once in \"leaf-list " +
+ "invalid-interval\".");
+ YangNode node = manager.getDataModel("src/test/resources/MinElementsInvalidCardinality.yang");
+ }
+
+ /**
+ * Checks min-element's default value.
+ */
+ @Test
+ public void processMinElementsDefaultValue() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/MinElementsDefaultValue.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ assertThat(leafListInfo.getName(), is("invalid-interval"));
+ assertThat(leafListInfo.getMinElements().getMinElement(), is(0));
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ModuleListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ModuleListenerTest.java
new file mode 100644
index 0000000..5483ea6
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ModuleListenerTest.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Test cases for testing module listener functionality.
+ */
+public class ModuleListenerTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ /**
+ * Checks if module listener updates the data model root node.
+ */
+ @Test
+ public void processModuleValidEntry() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ModuleValidEntry.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+ }
+
+ /**
+ * Checks if module name is set correctly.
+ */
+ @Test(expected = ParserException.class)
+ public void processModuleInvalidEntryTest() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ModuleWithInvalidIdentifier.yang");
+ }
+
+ /**
+ * Checks whether exception is thrown when module length is greater than 64 characters.
+ */
+ @Test
+ public void processModuleInvalidIdentifierLength() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("YANG file error : module name Testttttttttttttttttttttttttttttttttttttttttttttttttttt" +
+ "tttttttttt is greater than 64 characters.");
+ YangNode node = manager.getDataModel("src/test/resources/ModuleInvalidIdentifierLength.yang");
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/MustListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/MustListenerTest.java
new file mode 100644
index 0000000..2793420
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/MustListenerTest.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangMust;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.ListIterator;
+
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Test cases for testing must listener functionality.
+ */
+public class MustListenerTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks if must listener updates the data model.
+ */
+ @Test
+ public void processContainerSubStatementMust() throws IOException, ParserException {
+ YangNode node = manager.getDataModel("src/test/resources/ContainerSubStatementMust.yang");
+
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangContainer yangContainer = (YangContainer) yangNode.getChild();
+ assertThat(yangContainer.getName(), is("interface"));
+
+ String expectedConstraint = "ifType != 'ethernet' or (ifType = 'ethernet' and ifMTU = 1500)";
+ List<YangMust> mustConstraintList = yangContainer.getListOfMust();
+ assertThat(mustConstraintList.iterator().next().getConstraint(), is(expectedConstraint));
+ }
+
+ /**
+ * Checks if must listener updates the data model.
+ */
+ @Test
+ public void processLeafSubStatementMust() throws IOException, ParserException {
+ YangNode node = manager.getDataModel("src/test/resources/LeafSubStatementMust.yang");
+
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getListOfMust().iterator().next().getConstraint(), is("ifType != 'ethernet'"));
+ }
+
+ /**
+ * Checks whether there is no parser exception when must statement is sub-statement of
+ * unsupported yang construct.
+ */
+ @Test
+ public void processUnsupportedSubStatementMust() throws IOException, ParserException {
+ YangNode node = manager.getDataModel("src/test/resources/UnsupportedYangConstructSubStatementMust.yang");
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/NamespaceListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/NamespaceListenerTest.java
new file mode 100644
index 0000000..745b882
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/NamespaceListenerTest.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Test cases for testing namespace listener functionality.
+ */
+public class NamespaceListenerTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks that value of namespace shouldn't have invalid spaces.
+ */
+ @Test(expected = ParserException.class)
+ public void processNamespaceWithInvalidSpaces() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/NamespaceWithInvalidSpaces.yang");
+ }
+
+ /**
+ * Checks if namespace with double quotes is allowed.
+ */
+ @Test()
+ public void processNamespaceInDoubleQuotes() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/NamespaceInDoubleQuotes.yang");
+
+ // Checks for the version value in data model tree.
+ assertThat(((YangModule) node).getModuleNamespace(), is
+ ("urn:ietf:params:xml:ns:yang:ietf-ospf"));
+ }
+
+ /**
+ * Checks if namespace without double quotes is allowed.
+ */
+ @Test()
+ public void processNamespaceWithoutQuotes() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/NamespaceWithoutQuotes.yang");
+
+ // Checks for the version value in data model tree.
+ assertThat(((YangModule) node).getModuleNamespace(), is("urn:ietf:params:xml:ns:yang:ietf-ospf"));
+ }
+
+ /**
+ * Checks if namespace is present only once.
+ */
+ @Test(expected = ParserException.class)
+ public void processNamespaceDualEntry() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/NamespaceDualEntry.yang");
+ }
+
+ /**
+ * Checks if mandatory parameter namespace is present.
+ */
+ @Test(expected = ParserException.class)
+ public void processNamespaceNoEntryTest() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/NamespaceNoEntryTest.yang");
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/NotificationListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/NotificationListenerTest.java
new file mode 100644
index 0000000..2741786
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/NotificationListenerTest.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.YangNotification;
+import org.onosproject.yang.compiler.datamodel.YangStatusType;
+import org.onosproject.yang.compiler.datamodel.YangTypeDef;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.ListIterator;
+
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Test cases for testing notification listener functionality.
+ */
+public class NotificationListenerTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks valid notification statement.
+ */
+ @Test
+ public void processValidNotificationStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ValidNotificationStatement.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("rock"));
+
+ YangNotification yangNotification = (YangNotification) yangNode.getChild();
+ assertThat(yangNotification.getName(), is("link-failure"));
+ assertThat(yangNotification.getDescription(), is("\"A link failure has been detected\""));
+ assertThat(yangNotification.getStatus(), is(YangStatusType.DEPRECATED));
+ assertThat(yangNotification.getReference(), is("\"reference\""));
+
+ YangTypeDef typeDef = (YangTypeDef) yangNotification.getChild();
+ assertThat(typeDef.getName(), is("my-type"));
+ assertThat(typeDef.getStatus(), is(YangStatusType.DEPRECATED));
+
+ ListIterator<YangLeaf> leafIterator = yangNotification.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("if-name"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/OrganizationListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/OrganizationListenerTest.java
new file mode 100644
index 0000000..b0b7fb0
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/OrganizationListenerTest.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Test cases for testing organization listener functionality.
+ */
+public class OrganizationListenerTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks if organization listener updates the data model tree.
+ */
+ @Test
+ public void processOrganizationValidEntry() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/OrganizationValidEntry.yang");
+
+ // Checks for the version value in data model tree.
+ assertThat(((YangModule) node).getOrganization(), is("\"IETF SPRING Working Group\""));
+ }
+
+ /**
+ * Checks that organization must be present only once.
+ */
+ @Test(expected = ParserException.class)
+ public void processOrganizationDualEntry() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/OrganizationDualEntry.yang");
+ }
+
+ /**
+ * Checks if organization entry syntax is correct.
+ */
+ @Test(expected = ParserException.class)
+ public void processOrganizationMissingValue() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/OrganizationMissingValue.yang");
+ }
+
+ /**
+ * Checks if organization and namespace is present in correct order.
+ */
+ @Test(expected = ParserException.class)
+ public void processOrganizationInvalidOrder() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/OrganizationInvalidOrder.yang");
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/OutputListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/OutputListenerTest.java
new file mode 100644
index 0000000..4a73a99
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/OutputListenerTest.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.YangOutput;
+import org.onosproject.yang.compiler.datamodel.YangRpc;
+import org.onosproject.yang.compiler.datamodel.YangStatusType;
+import org.onosproject.yang.compiler.datamodel.YangTypeDef;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.ListIterator;
+
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Test cases for testing output listener functionality.
+ */
+public class OutputListenerTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks output statements with data definition statements as sub-statements.
+ */
+ @Test
+ public void processOutputStatementWithDataDefinition() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/OutputStatementWithDataDefinition.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("rock"));
+
+ YangRpc yangRpc = (YangRpc) yangNode.getChild();
+ assertThat(yangRpc.getName(), is("activate-software-image"));
+
+ YangOutput yangOutput = (YangOutput) yangRpc.getChild();
+ assertThat(yangOutput.getName(), is("output"));
+
+ ListIterator<YangLeaf> leafIterator = yangOutput.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("image-name"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
+
+ YangList yangList = (YangList) yangOutput.getChild();
+ assertThat(yangList.getName(), is("ospf"));
+ assertThat(yangList.getKeyList().contains("invalid-interval"), is(true));
+ assertThat(yangList.isConfig(), is(true));
+ assertThat(yangList.getMaxElements().getMaxElement(), is(10));
+ assertThat(yangList.getMinElements().getMinElement(), is(3));
+ leafIterator = yangList.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
+
+ YangContainer yangContainer = (YangContainer) yangList.getNextSibling();
+ assertThat(yangContainer.getName(), is("isis"));
+
+ leafIterator = yangContainer.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
+ }
+
+ /**
+ * Checks output statements with type-def statement as sub-statements.
+ */
+ @Test
+ public void processOutputStatementWithTypedef() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/OutputStatementWithTypedef.yang");
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("rock"));
+
+ YangRpc yangRpc = (YangRpc) yangNode.getChild();
+ assertThat(yangRpc.getName(), is("activate-software-image"));
+
+ YangOutput yangOutput = (YangOutput) yangRpc.getChild();
+ assertThat(yangOutput.getName(), is("output"));
+
+ YangTypeDef typeDef = (YangTypeDef) yangOutput.getChild();
+ assertThat(typeDef.getName(), is("my-type"));
+ assertThat(typeDef.getStatus(), is(YangStatusType.DEPRECATED));
+ assertThat(typeDef.getName(), is("my-type"));
+ assertThat(typeDef.getStatus(), is(YangStatusType.DEPRECATED));
+ assertThat(typeDef.getTypeDefBaseType().getDataType(), is(YangDataTypes.INT32));
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/PatternRestrictionListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/PatternRestrictionListenerTest.java
new file mode 100644
index 0000000..ce63ef2
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/PatternRestrictionListenerTest.java
@@ -0,0 +1,221 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.hamcrest.core.Is;
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.YangPatternRestriction;
+import org.onosproject.yang.compiler.datamodel.YangStringRestriction;
+import org.onosproject.yang.compiler.datamodel.YangTypeDef;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.ListIterator;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for pattern restriction listener.
+ */
+public class PatternRestrictionListenerTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks valid pattern statement as sub-statement of leaf statement.
+ */
+ @Test
+ public void processValidPatternStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ValidPatternStatement.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), Is.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();
+ ListIterator<String> patternListIterator = stringRestriction.getPatternRestriction()
+ .getPatternList().listIterator();
+ assertThat(patternListIterator.next(), is("[a-zA-Z]"));
+
+ leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("ipv4-address"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
+ stringRestriction = (YangStringRestriction) leafInfo
+ .getDataType().getDataTypeExtendedInfo();
+ patternListIterator = stringRestriction.getPatternRestriction()
+ .getPatternList().listIterator();
+ assertThat(patternListIterator.next(), is(
+ "(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.){3}" +
+ "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])" +
+ "(%[\\p{N}\\p{L}]+)?"));
+ }
+
+ /**
+ * Checks valid pattern statement as sub-statement of leaf-list.
+ */
+ @Test
+ public void processPatternStatementInsideLeafList() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/PatternStatementInsideLeafList.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ assertThat(leafListInfo.getName(), is("invalid-interval"));
+ assertThat(leafListInfo.getDataType().getDataTypeName(), is("string"));
+ assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
+ YangStringRestriction stringRestriction = (YangStringRestriction) leafListInfo
+ .getDataType().getDataTypeExtendedInfo();
+ ListIterator<String> patternListIterator = stringRestriction.getPatternRestriction()
+ .getPatternList().listIterator();
+ assertThat(patternListIterator.next(), is("[a-zA-Z]"));
+ }
+
+ /**
+ * Checks valid pattern statement as sub-statement of typedef.
+ */
+ @Test
+ public void processPatternStatementInsideTypeDef() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/PatternStatementInsideTypeDef.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangTypeDef typedef = (YangTypeDef) yangNode.getChild();
+ YangStringRestriction stringRestriction = (YangStringRestriction) typedef.getTypeDefBaseType()
+ .getDataTypeExtendedInfo();
+
+ YangPatternRestriction yangPatternRestriction = stringRestriction.getPatternRestriction();
+ assertThat(yangPatternRestriction.getPatternList().listIterator().next(), is("[a-zA-Z]"));
+ }
+
+ /**
+ * Checks valid multiple pattern statements.
+ */
+ @Test
+ public void processMultiplePatternStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/MultiplePatternStatement.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ assertThat(leafListInfo.getName(), is("invalid-interval"));
+ assertThat(leafListInfo.getDataType().getDataTypeName(), is("string"));
+ assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
+ YangStringRestriction stringRestriction = (YangStringRestriction) leafListInfo
+ .getDataType().getDataTypeExtendedInfo();
+ ListIterator<String> patternListIterator = stringRestriction.getPatternRestriction()
+ .getPatternList().listIterator();
+ assertThat(patternListIterator.next(), is("[a-zA-Z]"));
+ }
+
+ /**
+ * Checks valid pattern statement with plus symbol in pattern.
+ */
+ @Test
+ public void processPatternStatementWithPlus() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/PatternStatementWithPlus.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ assertThat(leafListInfo.getName(), is("invalid-interval"));
+ assertThat(leafListInfo.getDataType().getDataTypeName(), is("string"));
+ assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
+ YangStringRestriction stringRestriction = (YangStringRestriction) leafListInfo
+ .getDataType().getDataTypeExtendedInfo();
+ ListIterator<String> patternListIterator = stringRestriction.getPatternRestriction()
+ .getPatternList().listIterator();
+ //FIXME: + should not be remove from the end.
+ //assertThat(patternListIterator.next(), is("-[0-9]+|[0-9]+"));
+ }
+
+ /**
+ * Checks valid pattern substatement.
+ */
+ @Test
+ public void processPatternSubStatements() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/PatternSubStatements.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();
+ assertThat(stringRestriction.getDescription(), is("\"pattern description\""));
+ assertThat(stringRestriction.getReference(), is("\"pattern reference\""));
+ ListIterator<String> patternListIterator = stringRestriction.getPatternRestriction()
+ .getPatternList().listIterator();
+ assertThat(patternListIterator.next(), is("[a-zA-Z]"));
+ }
+
+ /**
+ * Checks invalid pattern sub-statement.
+ */
+ @Test(expected = ParserException.class)
+ public void processInvalidPatternSubStatements() throws IOException, ParserException {
+ YangNode node = manager.getDataModel("src/test/resources/InvalidPatternSubStatements.yang");
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/PositionListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/PositionListenerTest.java
new file mode 100644
index 0000000..ec9d0fc
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/PositionListenerTest.java
@@ -0,0 +1,260 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.hamcrest.core.Is;
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangBit;
+import org.onosproject.yang.compiler.datamodel.YangBits;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.ListIterator;
+import java.util.Map;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for position listener.
+ */
+public class PositionListenerTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks explicitly configured value.
+ */
+ @Test
+ public void processPositionStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/PositionStatement.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), Is.is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("mybits"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("bits"));
+ assertThat(leafInfo.getDataType().getDataType(), Is.is(YangDataTypes.BITS));
+ assertThat(((YangBits) leafInfo.getDataType().getDataTypeExtendedInfo()).getBitsName(),
+ is("mybits"));
+
+ // Check bit name map
+ Map<String, YangBit> bitNameMap = ((YangBits) leafInfo.getDataType().getDataTypeExtendedInfo()).getBitNameMap();
+ assertThat(bitNameMap.size(), is(3));
+ for (Map.Entry<String, YangBit> element : bitNameMap.entrySet()) {
+ String bitName = element.getKey();
+ YangBit yangBit = element.getValue();
+ if (bitName.equals("disable-nagle")) {
+ assertThat(yangBit.getPosition(), is(0));
+ } else if (bitName.equals("auto-sense-speed")) {
+ assertThat(yangBit.getPosition(), is(1));
+ } else if (bitName.equals("Ten-Mb-only")) {
+ assertThat(yangBit.getPosition(), is(2));
+ } else {
+ throw new IOException("Invalid bit name: " + bitName);
+ }
+ }
+
+ // Check bit position map
+ Map<Integer, YangBit> bitPositionMap = ((YangBits) leafInfo.getDataType().getDataTypeExtendedInfo())
+ .getBitPositionMap();
+ assertThat(bitPositionMap.size(), is(3));
+ for (Map.Entry<Integer, YangBit> element : bitPositionMap.entrySet()) {
+ int position = element.getKey();
+ YangBit yangBit = element.getValue();
+ if (position == 0) {
+ assertThat(yangBit.getBitName(), is("disable-nagle"));
+ } else if (position == 1) {
+ assertThat(yangBit.getBitName(), is("auto-sense-speed"));
+ } else if (position == 2) {
+ assertThat(yangBit.getBitName(), is("Ten-Mb-only"));
+ } else {
+ throw new IOException("Invalid bit position: " + position);
+ }
+ }
+ }
+
+ /**
+ * Checks position value with double quotes.
+ */
+ @Test
+ public void processPositionWithDoubleQuotes() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/PositionWithDoubleQuotes.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("mybits"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("bits"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.BITS));
+ assertThat(((YangBits) leafInfo.getDataType().getDataTypeExtendedInfo()).getBitsName(),
+ is("mybits"));
+
+ // Check bit name map
+ Map<String, YangBit> bitNameMap = ((YangBits) leafInfo.getDataType().getDataTypeExtendedInfo()).getBitNameMap();
+ assertThat(bitNameMap.size(), is(3));
+ for (Map.Entry<String, YangBit> element : bitNameMap.entrySet()) {
+ String bitName = element.getKey();
+ YangBit yangBit = element.getValue();
+ if (bitName.equals("disable-nagle")) {
+ assertThat(yangBit.getPosition(), is(0));
+ } else if (bitName.equals("auto-sense-speed")) {
+ assertThat(yangBit.getPosition(), is(1));
+ } else if (bitName.equals("Ten-Mb-only")) {
+ assertThat(yangBit.getPosition(), is(2));
+ } else {
+ throw new IOException("Invalid bit name: " + bitName);
+ }
+ }
+
+ // Check bit position map
+ Map<Integer, YangBit> bitPositionMap = ((YangBits) leafInfo.getDataType().getDataTypeExtendedInfo())
+ .getBitPositionMap();
+ assertThat(bitPositionMap.size(), is(3));
+ for (Map.Entry<Integer, YangBit> element : bitPositionMap.entrySet()) {
+ int position = element.getKey();
+ YangBit yangBit = element.getValue();
+ if (position == 0) {
+ assertThat(yangBit.getBitName(), is("disable-nagle"));
+ } else if (position == 1) {
+ assertThat(yangBit.getBitName(), is("auto-sense-speed"));
+ } else if (position == 2) {
+ assertThat(yangBit.getBitName(), is("Ten-Mb-only"));
+ } else {
+ throw new IOException("Invalid bit position: " + position);
+ }
+ }
+ }
+
+ /**
+ * Checks explicit value and auto generated value.
+ */
+ @Test
+ public void processPositionImplicitAndExplicit() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/PositionImplicitAndExplicit.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("mybits"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("bits"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.BITS));
+ assertThat(((YangBits) leafInfo.getDataType().getDataTypeExtendedInfo()).getBitsName(),
+ is("mybits"));
+
+ // Check bit name map
+ Map<String, YangBit> bitNameMap = ((YangBits) leafInfo.getDataType().getDataTypeExtendedInfo()).getBitNameMap();
+ assertThat(bitNameMap.size(), is(3));
+ for (Map.Entry<String, YangBit> element : bitNameMap.entrySet()) {
+ String bitName = element.getKey();
+ YangBit yangBit = element.getValue();
+ if (bitName.equals("disable-nagle")) {
+ assertThat(yangBit.getPosition(), is(0));
+ } else if (bitName.equals("auto-sense-speed")) {
+ assertThat(yangBit.getPosition(), is(1));
+ } else if (bitName.equals("Ten-Mb-only")) {
+ assertThat(yangBit.getPosition(), is(2));
+ } else {
+ throw new IOException("Invalid bit name: " + bitName);
+ }
+ }
+
+ // Check bit position map
+ Map<Integer, YangBit> bitPositionMap = ((YangBits) leafInfo.getDataType().getDataTypeExtendedInfo())
+ .getBitPositionMap();
+ assertThat(bitPositionMap.size(), is(3));
+ for (Map.Entry<Integer, YangBit> element : bitPositionMap.entrySet()) {
+ int position = element.getKey();
+ YangBit yangBit = element.getValue();
+ if (position == 0) {
+ assertThat(yangBit.getBitName(), is("disable-nagle"));
+ } else if (position == 1) {
+ assertThat(yangBit.getBitName(), is("auto-sense-speed"));
+ } else if (position == 2) {
+ assertThat(yangBit.getBitName(), is("Ten-Mb-only"));
+ } else {
+ throw new IOException("Invalid bit position: " + position);
+ }
+ }
+ }
+
+ /**
+ * Checks explicit value should not be repeated.
+ */
+ @Test(expected = ParserException.class)
+ public void processPositionDuplication() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/PositionDuplication.yang");
+ }
+
+ /**
+ * Checks explicit or auto generated value should not be repeated.
+ */
+ @Test(expected = ParserException.class)
+ public void processPositionImplicitAndExplicitDuplication() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/PositionImplicitAndExplicitDuplication.yang");
+ }
+
+ /**
+ * Checks if negative value of position is not allowed.
+ */
+ @Test(expected = ParserException.class)
+ public void processPositionNegativeValue() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/PositionNegativeValue.yang");
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/PrefixListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/PrefixListenerTest.java
new file mode 100644
index 0000000..7de221d
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/PrefixListenerTest.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Test cases for testing prefix listener functionality.
+ */
+public class PrefixListenerTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks if value of prefix is correct.
+ */
+ @Test(expected = ParserException.class)
+ public void processPrefixInvalidValue() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/PrefixInvalidValue.yang");
+ }
+
+ /**
+ * Checks if prefix listener updates the data model tree.
+ */
+ @Test
+ public void processPrefixValidEntry() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/PrefixValidEntry.yang");
+
+ // Checks for the version value in data model tree.
+ assertThat(((YangModule) node).getPrefix(), is("On"));
+ }
+
+ /**
+ * Checks prefix value with double quotes.
+ */
+ @Test
+ public void processPrefixWithDoubleQuotes() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/PrefixWithDoubleQuotes.yang");
+ assertThat(((YangModule) node).getPrefix(), is("On"));
+ }
+
+ /**
+ * Checks that prefix should be present just once.
+ */
+ @Test(expected = ParserException.class)
+ public void processPrefixDualEntry() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/PrefixDualEntry.yang");
+ }
+
+ /**
+ * Checks if prefix syntax is followed.
+ */
+ @Test(expected = ParserException.class)
+ public void processPrefixMissingValue() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/PrefixMissingValue.yang");
+ }
+
+ /**
+ * Checks that exception should be reported if prefix is missing.
+ */
+ @Test(expected = ParserException.class)
+ public void processPrefixOrder() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/PrefixOrder.yang");
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/PresenceListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/PresenceListenerTest.java
new file mode 100644
index 0000000..1a1da94
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/PresenceListenerTest.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.nullValue;
+
+/**
+ * Test cases for presence listener.
+ */
+public class PresenceListenerTest {
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks presence statement as sub-statement of container.
+ */
+ @Test
+ public void processContainerSubStatementPresence() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ContainerSubStatementPresence.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the list is child of module
+ YangContainer yangContainer = (YangContainer) yangNode.getChild();
+ assertThat(yangContainer.getName(), is("valid"));
+ assertThat(yangContainer.getPresence(), is("\"invalid\""));
+ }
+
+ /**
+ * checks default value of presence statement.
+ */
+ @Test
+ public void processPresenceDefaultValue() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/PresenceDefaultValue.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the list is child of module
+ YangContainer yangContainer = (YangContainer) yangNode.getChild();
+ assertThat(yangContainer.getName(), is("valid"));
+ assertThat(yangContainer.getPresence(), is(nullValue()));
+ }
+
+ /**
+ * Checks presence statement without statement end.
+ */
+ @Test
+ public void processPresenceWithoutStatementEnd() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("mismatched input 'leaf' expecting {';', '+'}");
+ YangNode node = manager.getDataModel("src/test/resources/PresenceWithoutStatementEnd.yang");
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/RangeRestrictionListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/RangeRestrictionListenerTest.java
new file mode 100644
index 0000000..ab3cc4c
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/RangeRestrictionListenerTest.java
@@ -0,0 +1,240 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.YangRangeInterval;
+import org.onosproject.yang.compiler.datamodel.YangRangeRestriction;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangInt32;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.ListIterator;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for range restriction listener.
+ */
+public class RangeRestrictionListenerTest {
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks valid range statement as sub-statement of leaf statement.
+ */
+ @Test
+ public void processValidRangeStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ValidRangeStatement.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));
+ }
+
+ /**
+ * Checks valid range statement as sub-statement of leaf-list.
+ */
+ @Test
+ public void processRangeStatementInsideLeafList() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/RangeStatementInsideLeafList.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ assertThat(leafListInfo.getName(), is("invalid-interval"));
+ assertThat(leafListInfo.getDataType().getDataTypeName(), is("int32"));
+ assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.INT32));
+ YangRangeRestriction rangeRestriction = (YangRangeRestriction) leafListInfo
+ .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));
+ }
+
+ /**
+ * Checks valid range statement with one interval.
+ */
+ @Test
+ public void processRangeWithOneInterval() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/RangeWithOneInterval.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ assertThat(leafListInfo.getName(), is("invalid-interval"));
+ assertThat(leafListInfo.getDataType().getDataTypeName(), is("int32"));
+ assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.INT32));
+ YangRangeRestriction rangeRestriction = (YangRangeRestriction) leafListInfo
+ .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(1));
+ }
+
+ /**
+ * Checks valid range statement with min and max.
+ */
+ @Test
+ public void processRangeWithMinMax() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/RangeWithMinMax.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ assertThat(leafListInfo.getName(), is("invalid-interval"));
+ assertThat(leafListInfo.getDataType().getDataTypeName(), is("int32"));
+ assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.INT32));
+ YangRangeRestriction rangeRestriction = (YangRangeRestriction) leafListInfo
+ .getDataType().getDataTypeExtendedInfo();
+
+ ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
+ .listIterator();
+ YangRangeInterval rangeInterval = rangeListIterator.next();
+
+ assertThat(((YangInt32) rangeInterval.getStartValue()).getValue(), is(-2147483648));
+ assertThat(((YangInt32) rangeInterval.getEndValue()).getValue(), is(2147483647));
+ }
+
+ /**
+ * Checks valid range statement with invalid integer pattern.
+ */
+ @Test
+ public void processRangeWithInvalidIntegerPattern() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("YANG file error : Input value \"a\" is not a valid int32.");
+ YangNode node = manager.getDataModel("src/test/resources/RangeWithInvalidIntegerPattern.yang");
+ }
+
+ /**
+ * Checks valid range statement with description.
+ */
+ @Test
+ public void processRangeSubStatements() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/RangeSubStatements.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();
+
+ assertThat(rangeRestriction.getDescription(), is("\"range description\""));
+ assertThat(rangeRestriction.getReference(), is("\"range reference\""));
+
+ ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
+ .listIterator();
+ YangRangeInterval rangeInterval = rangeListIterator.next();
+ assertThat(((YangInt32) rangeInterval.getStartValue()).getValue(), is(1));
+ 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/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ReferenceListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ReferenceListenerTest.java
new file mode 100644
index 0000000..f55bf42
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ReferenceListenerTest.java
@@ -0,0 +1,251 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.YangStatusType;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.ListIterator;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test case for reference listener.
+ */
+public class ReferenceListenerTest {
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks valid reference statement.
+ */
+ @Test
+ public void processReferenceStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ReferenceStatement.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ // Check whether the reference is set correctly.
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
+ }
+
+ /**
+ * Checks whether exception is thrown for invalid reference statement.
+ */
+ @Test
+ public void processReferenceWithoutStatementEnd() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("mismatched input '}' expecting {';', '+'}");
+ YangNode node = manager.getDataModel("src/test/resources/ReferenceWithoutStatementEnd.yang");
+ }
+
+ /**
+ * Checks valid reference statement under module.
+ */
+ @Test
+ public void processModuleSubStatementReference() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ModuleSubStatementReference.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the reference is set correctly.
+ assertThat(yangNode.getReference(), is("\"RFC 6020\""));
+ }
+
+ /**
+ * Checks valid reference statement under module.
+ */
+ @Test
+ public void processReferenceEmptyStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ReferenceEmptyStatement.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the reference is set correctly.
+ assertThat(yangNode.getReference(), is("\"\""));
+ }
+
+ /**
+ * Checks valid reference statement as sub-statement of revision.
+ */
+ @Test
+ public void processRevisionSubStatementReference() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/RevisionSubStatementReference.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the reference is set correctly.
+ assertThat(yangNode.getRevision().getReference(), is("\"revision reference\""));
+ }
+
+ /**
+ * Checks reference statement as sub-statement of container.
+ */
+ @Test
+ public void processContainerSubStatementReference() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ContainerSubStatementReference.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the reference value is set correctly.
+ YangContainer container = (YangContainer) yangNode.getChild();
+ assertThat(container.getName(), is("valid"));
+ assertThat(container.getReference(), is("\"container reference\""));
+
+ // Check whether leaf properties as set correctly.
+ ListIterator<YangLeaf> leafIterator = container.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
+ assertThat(leafInfo.getUnits(), is("\"seconds\""));
+ assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
+ assertThat(leafInfo.isMandatory(), is(true));
+ assertThat(leafInfo.getStatus(), is(YangStatusType.CURRENT));
+ assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
+ }
+
+ /**
+ * Checks reference statement as sub-statement of list.
+ */
+ @Test
+ public void processListSubStatementReference() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ListSubStatementReference.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the list is child of module and description value is set correctly.
+ YangList yangList = (YangList) yangNode.getChild();
+ assertThat(yangList.getName(), is("valid"));
+ assertThat(yangList.isConfig(), is(true));
+ assertThat(yangList.getReference(), is("\"list reference\""));
+
+ // Check whether leaf properties as set correctly.
+ ListIterator<YangLeaf> leafIterator = yangList.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
+ assertThat(leafInfo.getUnits(), is("\"seconds\""));
+ assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
+ assertThat(leafInfo.isMandatory(), is(true));
+ assertThat(leafInfo.getStatus(), is(YangStatusType.CURRENT));
+ assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
+ }
+
+ /**
+ * Checks valid reference statement as sub-statement of leaf-list.
+ */
+ @Test
+ public void processLeafListSubStatementReference() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/LeafListSubStatementReference.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ // Check whether description value is set correctly.
+ assertThat(leafListInfo.getName(), is("invalid-interval"));
+ assertThat(leafListInfo.getReference(), is("\"RFC 6020\""));
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/RequireInstanceListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/RequireInstanceListenerTest.java
new file mode 100644
index 0000000..ba578fe
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/RequireInstanceListenerTest.java
@@ -0,0 +1,168 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafRef;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.ListIterator;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for require-instance listener.
+ */
+public class RequireInstanceListenerTest {
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks require-statement with true as status.
+ */
+ @Test
+ public void processRequireInstanceTrue() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/RequireInstanceTrue.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("PathListener"));
+
+ YangContainer container = (YangContainer) yangNode.getChild().getNextSibling();
+ ListIterator<YangLeaf> leafIterator = container.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ // Check whether the require-instance value is set correctly in leafref.
+ assertThat(leafInfo.getName(), is("ifname"));
+ YangLeafRef yangLeafRef = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
+ assertThat(yangLeafRef.getRequireInstance(), is(true));
+ }
+
+ /**
+ * Checks require-statement with false as status.
+ */
+ @Test
+ public void processRequireInstanceFalse() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/RequireInstanceFalse.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("PathListener"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ // Check whether the require-instance value is set correctly in instance-identifier.
+ assertThat(leafInfo.getName(), is("admin-status"));
+
+ YangType type = leafInfo.getDataType();
+
+ assertThat(type.getDataType(), is(YangDataTypes.INSTANCE_IDENTIFIER));
+ boolean status = ((YangType<Boolean>) type).getDataTypeExtendedInfo();
+
+ assertThat(status, is(false));
+ }
+
+ /**
+ * Checks require-statement default value when its not there in YANG under instance-identifier.
+ */
+ @Test
+ public void processRequireInstanceDefaultValueInInstanceIdentifier() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/RequireInstanceDefaultValueInInstanceIdentifier.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("PathListener"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ // Check whether the require-instance value is set correctly in instance-identifier.
+ assertThat(leafInfo.getName(), is("admin-status"));
+
+ YangType type = leafInfo.getDataType();
+
+ assertThat(type.getDataType(), is(YangDataTypes.INSTANCE_IDENTIFIER));
+
+ boolean status = ((YangType<Boolean>) type).getDataTypeExtendedInfo();
+ assertThat(status, is(true));
+ }
+
+ /**
+ * Checks require-statement default value when its not there in YANG under leafref.
+ */
+ @Test
+ public void processRequireInstanceDefaultValueForLeafref() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/RequireInstanceDefaultValueForLeafref.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("PathListener"));
+
+ YangContainer container = (YangContainer) yangNode.getChild().getNextSibling();
+ ListIterator<YangLeaf> leafIterator = container.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ // Check whether the require-instance value is set correctly in leafref.
+ assertThat(leafInfo.getName(), is("ifname"));
+ YangLeafRef yangLeafRef = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
+ assertThat(yangLeafRef.getRequireInstance(), is(true));
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/RevisionDateListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/RevisionDateListenerTest.java
new file mode 100644
index 0000000..bdcf28c
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/RevisionDateListenerTest.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Test cases for testing revision date listener functionality.
+ */
+public class RevisionDateListenerTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+ private static final String DATE_FORMAT = "yyyy-MM-dd";
+ private final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATE_FORMAT);
+
+ /**
+ * Checks if revision date syntax is correct in include.
+ */
+ @Test(expected = ParserException.class)
+ public void processRevisionDateInvalidSyntaxAtInclude() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/RevisionDateInvalidSyntaxAtInclude.yang");
+ }
+
+ /**
+ * Checks if revision date syntax is correct in import.
+ */
+ @Test(expected = ParserException.class)
+ public void processRevisionDateInvalidSyntaxAtImport() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/RevisionDateInvalidSyntaxAtImport.yang");
+ }
+
+ /**
+ * Checks revision date in quotes inside include.
+ */
+ @Test
+ public void processRevisionDateInQuotesAtInclude() throws IOException, ParserException, ParseException {
+
+ YangNode node = manager.getDataModel("src/test/resources/RevisionDateInQuotesAtInclude.yang");
+ // Checks for the version value in data model tree.
+ assertThat(((YangModule) node).getImportList().get(0).getRevision(), is(simpleDateFormat.parse("2015-02-03")));
+ assertThat(((YangModule) node).getIncludeList().get(0).getRevision(), is(simpleDateFormat.parse("2016-02-03")));
+ assertThat(((YangModule) node).getIncludeList().get(1).getRevision(), is(simpleDateFormat.parse("2014-02-03")));
+ }
+
+ /**
+ * Checks revision date in quotes inside import.
+ */
+ @Test
+ public void processRevisionDateInQuotesAtImport() throws IOException, ParserException, ParseException {
+
+ YangNode node = manager.getDataModel("src/test/resources/RevisionDateInQuotesAtImport.yang");
+ // Checks for the version value in data model tree.
+ assertThat(((YangModule) node).getImportList().get(0).getRevision(), is(simpleDateFormat.parse("2015-02-03")));
+ assertThat(((YangModule) node).getIncludeList().get(0).getRevision(), is(simpleDateFormat.parse("2016-02-03")));
+ assertThat(((YangModule) node).getIncludeList().get(1).getRevision(), is(simpleDateFormat.parse("2014-02-03")));
+ }
+
+ /**
+ * Checks if revision date follows YYYY-MM-DD format.
+ */
+ @Test(expected = ParserException.class)
+ public void processRevisionDateInvalidFormat() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/RevisionDateInvalidFormat.yang");
+ }
+
+ /**
+ * Checks if revision date is correct.
+ */
+ @Test(expected = ParserException.class)
+ public void processRevisionDateInvalid() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/RevisionDateInvalid.yang");
+ }
+
+ /**
+ * Checks if revision date listener updates the data model tree.
+ */
+ @Test
+ public void processRevisionDateValidEntry() throws IOException, ParserException, ParseException {
+
+ YangNode node = manager.getDataModel("src/test/resources/RevisionDateValidEntry.yang");
+
+ // Checks for the version value in data model tree.
+ assertThat(((YangModule) node).getImportList().get(0).getRevision(), is(simpleDateFormat.parse("2015-02-03")));
+ assertThat(((YangModule) node).getIncludeList().get(0).getRevision(), is(simpleDateFormat.parse("2016-02-03")));
+ assertThat(((YangModule) node).getIncludeList().get(1).getRevision(), is(simpleDateFormat.parse("2014-02-03")));
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/RevisionListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/RevisionListenerTest.java
new file mode 100644
index 0000000..d8bedbe
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/RevisionListenerTest.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Test cases for testing revision listener functionality.
+ */
+public class RevisionListenerTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+ private static final String DATE_FORMAT = "yyyy-MM-dd";
+ private final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATE_FORMAT);
+
+ /**
+ * Checks if revision doesn't have optional parameters "revision and
+ * description".
+ */
+ @Test
+ public void processRevisionNoOptionalParameter() throws IOException, ParserException, ParseException {
+
+ YangNode node = manager.getDataModel("src/test/resources/RevisionNoOptionalParameter.yang");
+ // Checks for the version value in data model tree.
+ assertThat(((YangModule) node).getRevision().getRevDate(), is(simpleDateFormat.parse("2016-02-03")));
+ }
+
+ /**
+ * Checks if the syntax of revision is correct.
+ */
+ @Test(expected = ParserException.class)
+ public void processRevisionInValidSyntax() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/RevisionInValidSyntax.yang");
+ }
+
+ /**
+ * Checks if the correct order is followed.
+ */
+ @Test(expected = ParserException.class)
+ public void processRevisionInValidOrder() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/RevisionInValidOrder.yang");
+ }
+
+ /**
+ * Checks the revision with current date is created for empty revision statement.
+ */
+ @Test
+ public void processWithoutRevision() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/RevisionAbsence.yang");
+ assertThat(true, is((node).getRevision() == null));
+ }
+
+ /**
+ * Checks latest date is stored when there are multiple revisions.
+ */
+ @Test
+ public void processWithMultipleRevision() throws IOException, ParserException, ParseException {
+
+ YangNode node = manager.getDataModel("src/test/resources/MultipleRevision.yang");
+ assertThat((node).getRevision().getRevDate(), is(simpleDateFormat.parse("2013-07-15")));
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/RpcListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/RpcListenerTest.java
new file mode 100644
index 0000000..902a324
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/RpcListenerTest.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.YangRpc;
+import org.onosproject.yang.compiler.datamodel.YangStatusType;
+import org.onosproject.yang.compiler.datamodel.YangTypeDef;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Test cases for testing Rpc listener functionality.
+ */
+public class RpcListenerTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks valid rpc statements.
+ */
+ @Test
+ public void processValidRpcStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ValidRpcStatement.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("rock"));
+
+ YangRpc yangRpc = (YangRpc) yangNode.getChild();
+ assertThat(yangRpc.getName(), is("rock-the-house"));
+ assertThat(yangRpc.getDescription(), is("\"description\""));
+ assertThat(yangRpc.getReference(), is("\"reference\""));
+ assertThat(yangRpc.getStatus(), is(YangStatusType.CURRENT));
+
+ YangTypeDef typeDef = (YangTypeDef) yangRpc.getChild();
+ assertThat(typeDef.getName(), is("my-type"));
+ assertThat(typeDef.getStatus(), is(YangStatusType.DEPRECATED));
+ assertThat(typeDef.getTypeDefBaseType().getDataType(), is(YangDataTypes.INT32));
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ShortCaseListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ShortCaseListenerTest.java
new file mode 100644
index 0000000..f809be2
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ShortCaseListenerTest.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangCase;
+import org.onosproject.yang.compiler.datamodel.YangChoice;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for short case listener.
+ */
+public class ShortCaseListenerTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks short case listener with container.
+ */
+ @Test
+ public void processShortCaseListenerWithContainer() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ShortCaseListenerWithContainer.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangContainer yangContainer = (YangContainer) yangNode.getChild();
+ assertThat(yangContainer.getName(), is("food"));
+
+ YangChoice yangChoice = (YangChoice) yangContainer.getChild();
+ assertThat(yangChoice.getName(), is("snack"));
+
+ YangCase yangCase = (YangCase) yangChoice.getChild();
+ assertThat(yangCase.getName(), is("sports-arena"));
+
+ YangContainer yangContainer1 = (YangContainer) yangCase.getChild();
+ assertThat(yangContainer1.getName(), is("sports-arena"));
+ }
+
+ /**
+ * Checks short case listener with list.
+ */
+ @Test
+ public void processShortCaseListenerWithList() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ShortCaseListenerWithList.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangContainer yangContainer = (YangContainer) yangNode.getChild();
+ assertThat(yangContainer.getName(), is("food"));
+
+ YangChoice yangChoice = (YangChoice) yangContainer.getChild();
+ assertThat(yangChoice.getName(), is("snack"));
+
+ YangCase yangCase = (YangCase) yangChoice.getChild();
+ assertThat(yangCase.getName(), is("sports-arena"));
+
+ YangList yangList = (YangList) yangCase.getChild();
+ assertThat(yangList.getName(), is("sports-arena"));
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/StatusListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/StatusListenerTest.java
new file mode 100644
index 0000000..57a0b2c
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/StatusListenerTest.java
@@ -0,0 +1,276 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.YangStatusType;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.ListIterator;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for status listener.
+ */
+public class StatusListenerTest {
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks valid status statement.
+ */
+ @Test
+ public void processStatusStatementCurrent() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/StatusStatementCurrent.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ // Check whether the status is set correctly.
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getStatus(), is(YangStatusType.CURRENT));
+ }
+
+ /**
+ * Checks valid status statement.
+ */
+ @Test
+ public void processStatusStatementDeprecated() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/StatusStatementDeprecated.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ // Check whether the status is set correctly.
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getStatus(), is(YangStatusType.DEPRECATED));
+ }
+
+ /**
+ * Checks valid status statement.
+ */
+ @Test
+ public void processStatusStatementObsolete() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/StatusStatementObsolete.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ // Check whether the status is set correctly.
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getStatus(), is(YangStatusType.OBSOLETE));
+ }
+
+ /**
+ * Checks whether exception is thrown for invalid status statement.
+ */
+ @Test
+ public void processStatusWithoutStatementEnd() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("missing ';' at '}'");
+ YangNode node = manager.getDataModel("src/test/resources/StatusWithoutStatementEnd.yang");
+ }
+
+ /**
+ * Checks whether exception is thrown for invalid status statement.
+ */
+ @Test
+ public void processStatusInvalidValue() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("YANG file error : status invalid is not valid.");
+ YangNode node = manager.getDataModel("src/test/resources/StatusInvalidValue.yang");
+ }
+
+ /**
+ * Checks status statement as sub-statement of container.
+ */
+ @Test
+ public void processContainerSubStatementStatus() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ContainerSubStatementStatus.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether status is set correctly.
+ YangContainer container = (YangContainer) yangNode.getChild();
+ assertThat(container.getName(), is("valid"));
+ assertThat(container.isConfig(), is(true));
+ assertThat(container.getStatus(), is(YangStatusType.OBSOLETE));
+
+ // Check whether leaf properties as set correctly.
+ ListIterator<YangLeaf> leafIterator = container.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
+ assertThat(leafInfo.getUnits(), is("\"seconds\""));
+ assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
+ assertThat(leafInfo.isMandatory(), is(true));
+ assertThat(leafInfo.getStatus(), is(YangStatusType.CURRENT));
+ assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
+ }
+
+ /**
+ * Checks status statement as sub-statement of list.
+ */
+ @Test
+ public void processListSubStatementStatus() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ListSubStatementStatus.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the list is child of module and status is set.
+ YangList yangList = (YangList) yangNode.getChild();
+ assertThat(yangList.getName(), is("valid"));
+ assertThat(yangList.isConfig(), is(true));
+ assertThat(yangList.getStatus(), is(YangStatusType.CURRENT));
+
+ // Check whether leaf properties as set correctly.
+ ListIterator<YangLeaf> leafIterator = yangList.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
+ assertThat(leafInfo.getUnits(), is("\"seconds\""));
+ assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
+ assertThat(leafInfo.isMandatory(), is(true));
+ assertThat(leafInfo.getStatus(), is(YangStatusType.CURRENT));
+ assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
+ }
+
+ /**
+ * Checks valid status statement as sub-statement of leaf-list.
+ */
+ @Test
+ public void processLeafListSubStatementStatus() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/LeafListSubStatementStatus.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ // Check whether status is set correctly.
+ assertThat(leafListInfo.getName(), is("invalid-interval"));
+ assertThat(leafListInfo.isConfig(), is(true));
+ assertThat(leafListInfo.getStatus(), is(YangStatusType.CURRENT));
+ }
+
+ /**
+ * Checks default value of status statement.
+ */
+ @Test
+ public void processStatusDefaultValue() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/StatusDefaultValue.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ // Check whether status is set correctly.
+ assertThat(leafListInfo.getName(), is("invalid-interval"));
+ assertThat(leafListInfo.isConfig(), is(true));
+ assertThat(leafListInfo.getStatus(), is(YangStatusType.CURRENT));
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/SubModuleListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/SubModuleListenerTest.java
new file mode 100644
index 0000000..7adf00f
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/SubModuleListenerTest.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.YangSubModule;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Test cases for testing submodule listener functionality.
+ */
+public class SubModuleListenerTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks if the sub module listeners updates the data model tree.
+ */
+ @Test
+ public void processSubModuleValidEntry() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/SubModuleValidEntry.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangSubModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.SUB_MODULE_NODE));
+
+ YangSubModule yangNode = (YangSubModule) node;
+ // Check whether the module name is set correctly.
+ assertThat(yangNode.getName(), is("Test"));
+ // Checks for the version value in data model tree.
+ assertThat(yangNode.getVersion(), is((byte) 1));
+ // Checks identifier of belongsto in data model tree.
+ assertThat(yangNode.getBelongsTo().getBelongsToModuleName(), is("ONOS"));
+ // Checks for the version value in data model tree.
+ assertThat(yangNode.getBelongsTo().getPrefix(), is("On1"));
+ }
+
+ /**
+ * Checks if the yang version and belongs to can come in any order in sub
+ * module.
+ */
+ @Test
+ public void processSubModuleOrder() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/SubModuleOrder.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangSubModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.SUB_MODULE_NODE));
+
+ YangSubModule yangNode = (YangSubModule) node;
+ // Check whether the module name is set correctly.
+ assertThat(yangNode.getName(), is("Test"));
+ // Checks for the version value in data model tree.
+ assertThat(yangNode.getVersion(), is((byte) 1));
+ // Checks identifier of belongsto in data model tree.
+ assertThat(yangNode.getBelongsTo().getBelongsToModuleName(), is("ONOS"));
+ // Checks for the version value in data model tree.
+ assertThat(yangNode.getBelongsTo().getPrefix(), is("On1"));
+ }
+
+ /**
+ * Checks if yang version is optional.
+ */
+ @Test
+ public void processSubModuleWithoutVersion() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/SubModuleWithoutVersion.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangSubModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.SUB_MODULE_NODE));
+
+ YangSubModule yangNode = (YangSubModule) node;
+ // Check whether the module name is set correctly.
+ assertThat(yangNode.getName(), is("Test"));
+ // Checks identifier of belongsto in data model tree.
+ assertThat(yangNode.getBelongsTo().getBelongsToModuleName(), is("ONOS"));
+ // Checks for the version value in data model tree.
+ assertThat(yangNode.getBelongsTo().getPrefix(), is("On1"));
+ //Checks the revision with current date is created for empty revision statement.
+ assertThat(true, is(node.getRevision() == null));
+ }
+
+ /**
+ * Checks if sub module name is correct.
+ */
+ @Test(expected = ParserException.class)
+ public void processSubModuleInvalidName() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/SubModuleInvalidName.yang");
+ }
+
+ /**
+ * Checks if sub module has invalid modules construct eg namespace.
+ */
+ @Test(expected = ParserException.class)
+ public void processSubModuleWithNamespace() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/SubModuleWithNamespace.yang");
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/TypeListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/TypeListenerTest.java
new file mode 100644
index 0000000..e95bf50
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/TypeListenerTest.java
@@ -0,0 +1,175 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.hamcrest.core.Is;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangLeafRef;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.YangTypeDef;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.ListIterator;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test case for type listener.
+ */
+public class TypeListenerTest {
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks derived statement without contraints.
+ */
+ @Test
+ public void processDerivedTypeStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/DerivedTypeStatement.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), Is.is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ 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("hello"));
+ assertThat(leafInfo.getDataType().getDataType(), Is.is(YangDataTypes.DERIVED));
+ }
+
+ /**
+ * Checks valid yang data type.
+ */
+ @Test
+ public void processIntegerTypeStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/IntegerTypeStatement.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ 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("uint16"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
+ }
+
+ /**
+ * Checks type for leaf-list.
+ */
+ @Test
+ public void processLeafListSubStatementType() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/LeafListSubStatementType.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ assertThat(leafListInfo.getName(), is("invalid-interval"));
+ assertThat(leafListInfo.getDataType().getDataTypeName(), is("uint16"));
+ assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
+ }
+
+ /**
+ * Checks for type instance-identifier.
+ */
+ @Test
+ public void processInstanceIdentifierType() throws IOException, ParserException {
+
+ YangNode node = manager
+ .getDataModel("src/test/resources/InstanceIdentifierListener.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+ YangContainer container = (YangContainer) yangNode.getChild();
+ ListIterator<YangLeaf> leafIterator = container.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("instance-identifier"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.INSTANCE_IDENTIFIER));
+ }
+
+ /**
+ * Checks for leaf ref path concatenation.
+ */
+ @Test
+ public void processLeafRefPathConcatenation() throws IOException, ParserException {
+
+ YangNode node = manager
+ .getDataModel("src/test/resources/leafRefPathConcatenation.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("test"));
+
+ YangTypeDef typeDef = (YangTypeDef) yangNode.getChild();
+ assertThat(typeDef.getName(), is("isis-instance-state-ref"));
+ assertThat(typeDef.getTypeDefBaseType().getDataType(), is(YangDataTypes.LEAFREF));
+ YangLeafRef leafRef = ((YangLeafRef) typeDef.getTypeDefBaseType().getDataTypeExtendedInfo());
+ assertThat(leafRef.getPath(), is("/isis-prefix-ipv4-std/default-metric"));
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/UnionListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/UnionListenerTest.java
new file mode 100644
index 0000000..545624a
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/UnionListenerTest.java
@@ -0,0 +1,150 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.YangUnion;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.ListIterator;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for testing union listener.
+ */
+public class UnionListenerTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks union when type is in leaf.
+ */
+ @Test
+ public void processUnionWhenTypeInLeaf() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/UnionWhenTypeInLeaf.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangList yangList = (YangList) yangNode.getChild();
+ assertThat(yangList.getName(), is("valid"));
+
+ ListIterator<YangLeaf> leafIterator = yangList.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UNION));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("union"));
+
+ YangUnion yangUnion = (YangUnion) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ List<YangType<?>> typeList = yangUnion.getTypeList();
+ ListIterator<YangType<?>> typeListIterator = typeList.listIterator();
+ YangType<?> yangType = typeListIterator.next();
+
+ assertThat(yangType.getDataTypeName(), is("int32"));
+ assertThat(yangType.getDataType(), is(YangDataTypes.INT32));
+
+ YangType<?> yangTypeEnum = typeListIterator.next();
+
+ assertThat(yangTypeEnum.getDataTypeName(), is("enumeration"));
+ assertThat(yangTypeEnum.getDataType(), is(YangDataTypes.ENUMERATION));
+ }
+
+ /**
+ * Checks union when type is in leaflist.
+ */
+ @Test
+ public void processUnionWhenTypeInLeafList() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/UnionWhenTypeInLeafList.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangList yangList = (YangList) yangNode.getChild();
+ assertThat(yangList.getName(), is("valid"));
+
+ ListIterator<YangLeafList> leafListIterator = yangList.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ assertThat(leafListInfo.getName(), is("invalid-interval"));
+
+ assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.UNION));
+ assertThat(leafListInfo.getDataType().getDataTypeName(), is("union"));
+
+ YangUnion yangUnion = (YangUnion) leafListInfo.getDataType().getDataTypeExtendedInfo();
+
+ List<YangType<?>> typeList = yangUnion.getTypeList();
+ ListIterator<YangType<?>> typeListIterator = typeList.listIterator();
+ YangType<?> yangType = typeListIterator.next();
+
+ assertThat(yangType.getDataTypeName(), is("int32"));
+ assertThat(yangType.getDataType(), is(YangDataTypes.INT32));
+
+ YangType<?> yangTypeEnum = typeListIterator.next();
+
+ assertThat(yangTypeEnum.getDataTypeName(), is("enumeration"));
+ assertThat(yangTypeEnum.getDataType(), is(YangDataTypes.ENUMERATION));
+ }
+
+ /**
+ * Checks union with empty type.
+ */
+ @Test (expected = ParserException.class)
+ public void processUnionWithEmptyType() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/UnionWithEmptyType.yang");
+ }
+
+ /**
+ * Checks whether type union has atleast one type statement.
+ */
+ @Test (expected = ParserException.class)
+ public void processUnionWithoutChild() throws IOException, ParserException {
+ manager.getDataModel("src/test/resources/UnionWithoutChild.yang");
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/UniqueListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/UniqueListenerTest.java
new file mode 100644
index 0000000..ababd08
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/UniqueListenerTest.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.ListIterator;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for unique listener.
+ */
+public class UniqueListenerTest {
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks unique statement as sub-statement of list.
+ */
+ @Test
+ public void processListSubStatementUnique() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ListSubStatementUnique.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the list is child of module
+ YangList yangList = (YangList) yangNode.getChild();
+ assertThat(yangList.getName(), is("valid"));
+ assertThat(yangList.getUniqueList().listIterator().next(), is("invalid-interval"));
+ }
+
+ /**
+ * Check multiple unique values.
+ */
+ @Test
+ public void processMultipleUniqueValues() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/MultipleUniqueValues.yang");
+
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether the list is child of module
+ YangList yangList = (YangList) yangNode.getChild();
+ assertThat(yangList.getName(), is("valid"));
+ ListIterator<String> listIterator;
+ String list;
+ listIterator = yangList.getUniqueList().listIterator();
+ list = listIterator.next();
+ assertThat(list, is("ospf"));
+ list = listIterator.next();
+ assertThat(list, is("isis"));
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/UnitsListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/UnitsListenerTest.java
new file mode 100644
index 0000000..41e6660
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/UnitsListenerTest.java
@@ -0,0 +1,177 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.hamcrest.core.Is;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.YangStatusType;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.ListIterator;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.nullValue;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for units listener.
+ */
+public class UnitsListenerTest {
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks valid units statement.
+ */
+ @Test
+ public void processUnitsStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/UnitsStatement.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(node instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ // Check whether units value is set correctly.
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getUnits(), is("\"seconds\""));
+ }
+
+ /**
+ * Checks invalid units statement(without statement end).
+ */
+ @Test
+ public void processUnitsWithoutStatementEnd() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("mismatched input '}' expecting {';', '+'}");
+ YangNode node = manager.getDataModel("src/test/resources/UnitsWithoutStatementEnd.yang");
+ }
+
+ /**
+ * Checks order of units statement in leaf.
+ */
+ @Test
+ public void processUnitsStatementOrder() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/UnitsStatementOrder.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(node instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ // Check whether leaf properties is set correctly.
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
+ assertThat(leafInfo.getUnits(), is("\"seconds\""));
+ assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
+ assertThat(leafInfo.isConfig(), is(true));
+ assertThat(leafInfo.isMandatory(), is(true));
+ assertThat(leafInfo.getStatus(), Is.is(YangStatusType.CURRENT));
+ assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
+ }
+
+ /**
+ * Checks the default value of unit statement.
+ */
+ @Test
+ public void processUnitsDefaultValue() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/UnitsDefaultValue.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(node instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ 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.getUnits(), is(nullValue()));
+ }
+
+ /**
+ * Checks invalid occurance of units statement as sub-statement of leaf.
+ */
+ @Test
+ public void processUnitsStatementCardinality() throws IOException, ParserException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("YANG file error: \"units\" is defined more than once in \"leaf invalid-interval\".");
+ YangNode node = manager.getDataModel("src/test/resources/UnitsStatementCardinality.yang");
+ }
+
+ /**
+ * Checks valid units statement as sub-statement of leaf-list.
+ */
+ @Test
+ public void processLeafListSubStatementUnits() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/LeafListSubStatementUnits.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(node instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ // Check whether units value is set correctly.
+ assertThat(leafListInfo.getName(), is("invalid-interval"));
+ assertThat(leafListInfo.getUnits(), is("\"seconds\""));
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/UsesListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/UsesListenerTest.java
new file mode 100644
index 0000000..01412b2
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/UsesListenerTest.java
@@ -0,0 +1,133 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangGrouping;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.YangStatusType;
+import org.onosproject.yang.compiler.datamodel.YangUses;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for testing uses listener.
+ */
+public class UsesListenerTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks uses statement inside module.
+ */
+ @Test
+ public void processUsesInModule() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/UsesInModule.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangGrouping yangGrouping = (YangGrouping) yangNode.getChild();
+ assertThat(yangGrouping.getName(), is("endpoint"));
+
+ YangUses yangUses = (YangUses) yangGrouping.getNextSibling();
+ assertThat(yangUses.getName(), is("endpoint"));
+ }
+
+ /**
+ * Checks uses statement inside container.
+ */
+ @Test
+ public void processUsesInContainer() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/UsesInContainer.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangGrouping yangGrouping = (YangGrouping) yangNode.getChild();
+ assertThat(yangGrouping.getName(), is("endpoint"));
+
+ YangContainer yangContainer = (YangContainer) yangGrouping.getNextSibling();
+ assertThat(yangContainer.getName(), is("valid"));
+
+ YangUses yangUses = (YangUses) yangContainer.getChild();
+ assertThat(yangUses.getName(), is("endpoint"));
+
+ // Check attributes associated with uses.
+ assertThat(yangUses.getStatus(), is(YangStatusType.CURRENT));
+ assertThat(yangUses.getReference(), is("\"RFC 6020\""));
+ assertThat(yangUses.getDescription(), is("\"grouping under test\""));
+ }
+
+ /**
+ * Checks uses statement inside list.
+ */
+ @Test
+ public void processUsesInList() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/UsesInList.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangGrouping yangGrouping = (YangGrouping) yangNode.getChild();
+ assertThat(yangGrouping.getName(), is("endpoint"));
+
+ YangList yangList = (YangList) yangGrouping.getNextSibling();
+ assertThat(yangList.getName(), is("valid"));
+
+ YangUses yangUses = (YangUses) yangList.getChild();
+ assertThat(yangUses.getName(), is("endpoint"));
+
+ // Check attributes associated with uses.
+ assertThat(yangUses.getStatus(), is(YangStatusType.CURRENT));
+ assertThat(yangUses.getReference(), is("\"RFC 6020\""));
+ assertThat(yangUses.getDescription(), is("\"grouping under test\""));
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ValueListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ValueListenerTest.java
new file mode 100644
index 0000000..4d14406
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/ValueListenerTest.java
@@ -0,0 +1,218 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.hamcrest.core.Is;
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangEnum;
+import org.onosproject.yang.compiler.datamodel.YangEnumeration;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.ListIterator;
+import java.util.Set;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for value listener.
+ */
+public class ValueListenerTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks explicitly configured value.
+ */
+ @Test
+ public void processValueStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ValueStatement.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), Is.is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("speed"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("enumeration"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.ENUMERATION));
+ assertThat(((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getName(),
+ is("speed_enum"));
+
+ Set<YangEnum> enumSet = ((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getEnumSet();
+ for (YangEnum tmp : enumSet) {
+ if (tmp.getNamedValue().equals("10m")) {
+ assertThat(tmp.getValue(), is(10));
+ } else if (tmp.getNamedValue().equals("100m")) {
+ assertThat(tmp.getValue(), is(100));
+ } else if (tmp.getNamedValue().equals("auto")) {
+ assertThat(tmp.getValue(), is(1000));
+ }
+ }
+ }
+
+ /**
+ * Checks explicitly configured negative value.
+ */
+ @Test
+ public void processValueStatementWithNegativeValue() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ValueStatementWithNegativeValue.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("speed"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("enumeration"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.ENUMERATION));
+ assertThat(((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getName(),
+ is("speed_enum"));
+
+ Set<YangEnum> enumSet = ((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getEnumSet();
+ for (YangEnum tmp : enumSet) {
+ if (tmp.getNamedValue().equals("10m")) {
+ assertThat(tmp.getValue(), is(-2));
+ } else if (tmp.getNamedValue().equals("100m")) {
+ assertThat(tmp.getValue(), is(-1));
+ } else if (tmp.getNamedValue().equals("auto")) {
+ assertThat(tmp.getValue(), is(0));
+ }
+ }
+ }
+
+ /**
+ * Checks explicitly configured value with double quotes.
+ */
+ @Test
+ public void processValueStatementWithQuotes() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ValueStatementWithQuotes.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("speed"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("enumeration"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.ENUMERATION));
+ assertThat(((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getName(),
+ is("speed_enum"));
+
+ Set<YangEnum> enumSet = ((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getEnumSet();
+ for (YangEnum tmp : enumSet) {
+ if (tmp.getNamedValue().equals("10m")) {
+ assertThat(tmp.getValue(), is(10));
+ } else if (tmp.getNamedValue().equals("100m")) {
+ assertThat(tmp.getValue(), is(100));
+ } else if (tmp.getNamedValue().equals("auto")) {
+ assertThat(tmp.getValue(), is(1000));
+ }
+ }
+ }
+
+ /**
+ * Checks explicit value and auto generated value.
+ */
+ @Test
+ public void processValueAndAutoStatement() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ValueAndAutoStatement.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("speed"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("enumeration"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.ENUMERATION));
+ assertThat(((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getName(),
+ is("speed_enum"));
+
+ Set<YangEnum> enumSet = ((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getEnumSet();
+ for (YangEnum tmp : enumSet) {
+ if (tmp.getNamedValue().equals("10m")) {
+ assertThat(tmp.getValue(), is(10));
+ } else if (tmp.getNamedValue().equals("100m")) {
+ assertThat(tmp.getValue(), is(11));
+ } else if (tmp.getNamedValue().equals("auto")) {
+ assertThat(tmp.getValue(), is(1000));
+ }
+ }
+ }
+
+ /**
+ * Checks explicit value should not be repeated.
+ */
+ @Test(expected = ParserException.class)
+ public void processValueDuplication() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ValueDuplication.yang");
+ }
+
+ /**
+ * Checks explicit or auto generated value should not be repeated.
+ */
+ @Test(expected = ParserException.class)
+ public void processValueExplicitAndAutoDuplication() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ValueExplicitAndAutoDuplication.yang");
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/VersionListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/VersionListenerTest.java
new file mode 100644
index 0000000..219201a
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/VersionListenerTest.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Test cases for testing version listener functionality.
+ */
+public class VersionListenerTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks if value of version is correct.
+ */
+ @Test(expected = ParserException.class)
+ public void processVersionInvalidValue() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/VersionInvalidValue.yang");
+ }
+
+ /**
+ * Checks if version listener updates the data model tree.
+ */
+ @Test
+ public void processVersionValidEntry() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/VersionValidEntry.yang");
+
+ // Checks for the version value in data model tree.
+ assertThat(((YangModule) node).getVersion(), is((byte) 1));
+ }
+
+ /**
+ * Checks version in double quotes.
+ */
+ @Test
+ public void processValidVersionWithDoubleQuotes() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/ValidVersionWithDoubleQuotes.yang");
+
+ // Checks for the version value in data model tree.
+ assertThat(((YangModule) node).getVersion(), is((byte) 1));
+ }
+
+ /**
+ * Checks if version which is optional paramater is not present.
+ */
+ @Test
+ public void processVersionNotPresent() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/VersionNotPresent.yang");
+
+ // Checks for the version value in data model tree.
+ assertThat(((YangModule) node).getVersion(), is((byte) 1));
+ }
+
+ /**
+ * Checks that version should be present only once.
+ */
+ @Test(expected = ParserException.class)
+ public void processVersionDualEntry() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/VersionDualEntry.yang");
+ }
+
+ /**
+ * Checks if version can appear in any order in module header.
+ */
+ @Test
+ public void processVersionOrder() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/VersionOrder.yang");
+
+ // Checks for the version value in data model tree.
+ assertThat(((YangModule) node).getVersion(), is((byte) 1));
+ }
+
+ /**
+ * Checks if sytax of version entry is not correct.
+ */
+ @Test(expected = ParserException.class)
+ public void processVersionInvalidSyntax() throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/VersionInvalidSyntax.yang");
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/WhenListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/WhenListenerTest.java
new file mode 100644
index 0000000..c673b1a
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/listeners/WhenListenerTest.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.listeners;
+
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.ListIterator;
+
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Test cases for testing when listener functionality.
+ */
+public class WhenListenerTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks if when listener updates the data model.
+ */
+ @Test
+ public void processContainerSubStatementWhen() throws IOException, ParserException {
+ YangNode node = manager.getDataModel("src/test/resources/ContainerSubStatementWhen.yang");
+
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangList yangList = (YangList) yangNode.getChild();
+ String expectedConstraint = "../switching-capability = 'TDM'";
+ assertThat(yangList.getName(), is("interface-switching-capability"));
+ assertThat(yangList.getWhen().getCondition(), is(expectedConstraint));
+
+ YangContainer container = (YangContainer) yangList.getNextSibling();
+ assertThat(container.getName(), is("time-division-multiplex-capable"));
+ assertThat(container.getWhen().getCondition(), is(expectedConstraint));
+ }
+
+ /**
+ * Checks if when listener updates the data model.
+ */
+ @Test
+ public void processLeafSubStatementWhen() throws IOException, ParserException {
+ YangNode node = manager.getDataModel("src/test/resources/LeafSubStatementWhen.yang");
+
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getWhen().getCondition(), is("ifType != 'ethernet'"));
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/parserutils/ListenerErrorMessageConstructionTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/parserutils/ListenerErrorMessageConstructionTest.java
new file mode 100644
index 0000000..1301c8b
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/parserutils/ListenerErrorMessageConstructionTest.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.parserutils;
+
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Test case for testing listener error message construction util.
+ */
+public class ListenerErrorMessageConstructionTest {
+
+ /**
+ * Checks for error message construction with parsable data type name.
+ */
+ @Test
+ public void checkErrorMsgConstructionWithName() {
+
+ // Create an test error message
+ String testErrorMessage = ListenerErrorMessageConstruction.constructListenerErrorMessage(ListenerErrorType.INVALID_HOLDER, YangConstructType.CONTACT_DATA, "Test Instance", ListenerErrorLocation.ENTRY);
+
+ // Check message.
+ assertThat(testErrorMessage, is("Internal parser error detected: Invalid holder for contact "
+ + "\"Test Instance\" before processing."));
+ }
+
+ /**
+ * Checks for error message construction without parsable data type name.
+ */
+ @Test
+ public void checkErrorMsgConstructionWithoutName() {
+
+ // Create an test error message
+ String testErrorMessage = ListenerErrorMessageConstruction.constructListenerErrorMessage(ListenerErrorType.INVALID_HOLDER, YangConstructType.CONTACT_DATA, "Test Instance", ListenerErrorLocation.ENTRY);
+
+ // Check message.
+ assertThat(testErrorMessage,
+ is("Internal parser error detected: Invalid holder for contact \"Test Instance\""
+ + " before processing."));
+ }
+
+ /**
+ * Checks for extended error message construction with parsable data type
+ * name.
+ */
+ @Test
+ public void checkExtendedErrorMsgConstructionWithName() {
+
+ // Create an test error message
+ String testErrorMessage = ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage(ListenerErrorType.INVALID_HOLDER, YangConstructType.CONTACT_DATA,
+ "Test Instance", ListenerErrorLocation.ENTRY,
+ "Extended Information");
+
+ // Check message.
+ assertThat(testErrorMessage,
+ is("Internal parser error detected: Invalid holder for contact \"Test Instance\""
+ + " before processing.\n" + "Error Information: Extended Information"));
+ }
+
+ /**
+ * Checks for extended error message construction without parsable data type
+ * name.
+ */
+ @Test
+ public void checkExtendedErrorMsgConstructionWithoutName() {
+
+ // Create an test error message
+ String testErrorMessage = ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage(ListenerErrorType.INVALID_HOLDER, YangConstructType.CONTACT_DATA, "", ListenerErrorLocation.ENTRY,
+ "Extended Information");
+
+ // Check message.
+ assertThat(testErrorMessage, is("Internal parser error detected: Invalid holder for contact"
+ + " before processing.\n" + "Error Information: Extended Information"));
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/parserutils/ListenerUtilTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/parserutils/ListenerUtilTest.java
new file mode 100644
index 0000000..b58cb33
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/parserutils/ListenerUtilTest.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.parserutils;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+
+/**
+ * Test case for testing listener util.
+ */
+public class ListenerUtilTest {
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks whether exception is thrown when identifier starts with xml.
+ */
+ @Test
+ public void validateIdentifierStartsWithXml() throws IOException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("YANG file error : module identifier xMlTest must not start" +
+ " with (('X'|'x') ('M'|'m') ('L'|'l'))");
+ manager.getDataModel("src/test/resources/InValidIdentifierXML.yang");
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/parserutils/ListenerValidationTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/parserutils/ListenerValidationTest.java
new file mode 100644
index 0000000..6ed3d3b
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/parserutils/ListenerValidationTest.java
@@ -0,0 +1,106 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.parserutils;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangRevision;
+import org.onosproject.yang.compiler.datamodel.utils.YangConstructType;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.TreeWalkListener;
+
+/**
+ * Test case for testing listener validation util.
+ */
+public class ListenerValidationTest {
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ /**
+ * Checks for exception in case parsable stack is empty while validating for
+ * not empty scenario.
+ */
+ @Test
+ public void validateStackIsNotEmptyForEmptyStack() {
+
+ String expectedError = ListenerErrorMessageConstruction.constructListenerErrorMessage(ListenerErrorType.MISSING_HOLDER, YangConstructType.YANGBASE_DATA, "", ListenerErrorLocation.EXIT);
+
+ // Get the exception occurred during parsing.
+ thrown.expect(ParserException.class);
+ thrown.expectMessage(expectedError);
+
+ // Create test walker and assign test error to it.
+ TreeWalkListener testWalker = new TreeWalkListener();
+
+ ListenerValidation.checkStackIsNotEmpty(testWalker, ListenerErrorType.MISSING_HOLDER, YangConstructType.YANGBASE_DATA, "", ListenerErrorLocation.EXIT);
+ }
+
+ /**
+ * Checks if there is no exception in case parsable stack is not empty while
+ * validating for not empty scenario.
+ */
+ @Test
+ public void validateStackIsNotEmptyForNonEmptyStack() {
+
+ // Create test walker and assign test error to it.
+ TreeWalkListener testWalker = new TreeWalkListener();
+
+ // Create a temporary node of parsable.
+ YangRevision tmpNode = new YangRevision();
+ testWalker.getParsedDataStack().push(tmpNode);
+
+ ListenerValidation.checkStackIsNotEmpty(testWalker, ListenerErrorType.MISSING_HOLDER, YangConstructType.YANGBASE_DATA, "", ListenerErrorLocation.EXIT);
+ }
+
+ /**
+ * Checks for exception in case parsable stack is not empty while validating
+ * for empty scenario.
+ */
+ @Test
+ public void validateStackIsEmptyForNonEmptyStack() {
+
+ String expectedError = ListenerErrorMessageConstruction.constructListenerErrorMessage(ListenerErrorType.MISSING_HOLDER, YangConstructType.YANGBASE_DATA, "", ListenerErrorLocation.EXIT);
+
+ // Get the exception occurred during parsing.
+ thrown.expect(ParserException.class);
+ thrown.expectMessage(expectedError);
+
+ // Create test walker and assign test error to it.
+ TreeWalkListener testWalker = new TreeWalkListener();
+
+ // Create a temporary node of parsable.
+ YangRevision tmpNode = new YangRevision();
+ testWalker.getParsedDataStack().push(tmpNode);
+
+ ListenerValidation.checkStackIsEmpty(testWalker, ListenerErrorType.MISSING_HOLDER, YangConstructType.YANGBASE_DATA, "", ListenerErrorLocation.EXIT);
+ }
+
+ /**
+ * Checks if there is no exception in case parsable stack is empty while
+ * validating for empty scenario.
+ */
+ @Test
+ public void validateStackIsEmptyForEmptyStack() {
+
+ // Create test walker and assign test error to it.
+ TreeWalkListener testWalker = new TreeWalkListener();
+
+ ListenerValidation.checkStackIsEmpty(testWalker, ListenerErrorType.MISSING_HOLDER, YangConstructType.YANGBASE_DATA, "", ListenerErrorLocation.EXIT);
+ }
+}
diff --git a/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/parserutils/ParseTreeErrorListenerTest.java b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/parserutils/ParseTreeErrorListenerTest.java
new file mode 100644
index 0000000..da0c399
--- /dev/null
+++ b/compiler/base/parser/src/test/java/org/onosproject/yang/compiler/parser/impl/parserutils/ParseTreeErrorListenerTest.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.parser.impl.parserutils;
+
+import org.antlr.v4.runtime.ANTLRFileStream;
+import org.antlr.v4.runtime.ANTLRInputStream;
+import org.antlr.v4.runtime.CommonTokenStream;
+import org.antlr.v4.runtime.tree.ParseTree;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangLexer;
+import org.onosproject.yang.compiler.parser.antlrgencode.GeneratedYangParser;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.CustomExceptionMatcher;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * Test case for testing parse tree error listener.
+ */
+public class ParseTreeErrorListenerTest {
+
+ YangUtilsParserManager manager = new YangUtilsParserManager();
+ File file;
+ BufferedWriter out;
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ /**
+ * Checks that no exception is generated for YANG file with valid syntax.
+ */
+ @Test
+ public void checkValidYangFileForNoSyntaxError() throws IOException {
+
+ ANTLRInputStream input = new ANTLRFileStream("src/test/resources/YangFileWithoutSyntaxError.yang");
+
+ // Create a lexer that feeds off of input char stream.
+ GeneratedYangLexer lexer = new GeneratedYangLexer(input);
+ // Create a buffer of tokens pulled from the lexer.
+ CommonTokenStream tokens = new CommonTokenStream(lexer);
+ // Create a parser that feeds off the tokens buffer.
+ GeneratedYangParser parser = new GeneratedYangParser(tokens);
+ // Remove console error listener.
+ parser.removeErrorListeners();
+ // Create instance of customized error listener.
+ ParseTreeErrorListener parseTreeErrorListener = new ParseTreeErrorListener();
+ // Add customized error listener to catch errors during parsing.
+ parser.addErrorListener(parseTreeErrorListener);
+ // Begin parsing YANG file and generate parse tree.
+ ParseTree tree = parser.yangfile();
+ }
+
+ /**
+ * Checks that exception is generated for YANG file with invalid syntax.
+ */
+ @Test
+ public void checkInvalidYangFileForSyntaxError() throws IOException {
+
+ // Get the exception occurred during parsing.
+ thrown.expect(ParserException.class);
+ thrown.expect(CustomExceptionMatcher.errorLocation(3, 0));
+ thrown.expectMessage("no viable alternative at input 'yang-version 1\\nnamespace'");
+
+ ANTLRInputStream input = new ANTLRFileStream("src/test/resources/YangFileWithSyntaxError.yang");
+
+ // Create a lexer that feeds off of input char stream.
+ GeneratedYangLexer lexer = new GeneratedYangLexer(input);
+ // Create a buffer of tokens pulled from the lexer.
+ CommonTokenStream tokens = new CommonTokenStream(lexer);
+ // Create a parser that feeds off the tokens buffer.
+ GeneratedYangParser parser = new GeneratedYangParser(tokens);
+ // Remove console error listener.
+ parser.removeErrorListeners();
+ // Create instance of customized error listener.
+ ParseTreeErrorListener parseTreeErrorListener = new ParseTreeErrorListener();
+ // Add customized error listener to catch errors during parsing.
+ parser.addErrorListener(parseTreeErrorListener);
+ // Begin parsing YANG file and generate parse tree.
+ ParseTree tree = parser.yangfile();
+ }
+}
\ No newline at end of file
diff --git a/plugin/maven/src/test/resources/AnyxmlStatement.yang b/compiler/base/parser/src/test/resources/AnyxmlStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/AnyxmlStatement.yang
rename to compiler/base/parser/src/test/resources/AnyxmlStatement.yang
diff --git a/plugin/maven/src/test/resources/BelongsToDualPrefix.yang b/compiler/base/parser/src/test/resources/BelongsToDualPrefix.yang
similarity index 100%
rename from plugin/maven/src/test/resources/BelongsToDualPrefix.yang
rename to compiler/base/parser/src/test/resources/BelongsToDualPrefix.yang
diff --git a/plugin/maven/src/test/resources/BelongsToWithPrefix.yang b/compiler/base/parser/src/test/resources/BelongsToWithPrefix.yang
similarity index 100%
rename from plugin/maven/src/test/resources/BelongsToWithPrefix.yang
rename to compiler/base/parser/src/test/resources/BelongsToWithPrefix.yang
diff --git a/plugin/maven/src/test/resources/BelongsToWithoutPrefix.yang b/compiler/base/parser/src/test/resources/BelongsToWithoutPrefix.yang
similarity index 100%
rename from plugin/maven/src/test/resources/BelongsToWithoutPrefix.yang
rename to compiler/base/parser/src/test/resources/BelongsToWithoutPrefix.yang
diff --git a/plugin/maven/src/test/resources/BitTypeStatement.yang b/compiler/base/parser/src/test/resources/BitTypeStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/BitTypeStatement.yang
rename to compiler/base/parser/src/test/resources/BitTypeStatement.yang
diff --git a/plugin/maven/src/test/resources/BitTypedefReferredLeafStatement.yang b/compiler/base/parser/src/test/resources/BitTypedefReferredLeafStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/BitTypedefReferredLeafStatement.yang
rename to compiler/base/parser/src/test/resources/BitTypedefReferredLeafStatement.yang
diff --git a/plugin/maven/src/test/resources/BitTypedefStatement.yang b/compiler/base/parser/src/test/resources/BitTypedefStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/BitTypedefStatement.yang
rename to compiler/base/parser/src/test/resources/BitTypedefStatement.yang
diff --git a/plugin/maven/src/test/resources/BitUnionStatement.yang b/compiler/base/parser/src/test/resources/BitUnionStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/BitUnionStatement.yang
rename to compiler/base/parser/src/test/resources/BitUnionStatement.yang
diff --git a/plugin/maven/src/test/resources/BitWithDuplicateName.yang b/compiler/base/parser/src/test/resources/BitWithDuplicateName.yang
similarity index 100%
rename from plugin/maven/src/test/resources/BitWithDuplicateName.yang
rename to compiler/base/parser/src/test/resources/BitWithDuplicateName.yang
diff --git a/plugin/maven/src/test/resources/CaseChoiceHierarchy.yang b/compiler/base/parser/src/test/resources/CaseChoiceHierarchy.yang
similarity index 100%
rename from plugin/maven/src/test/resources/CaseChoiceHierarchy.yang
rename to compiler/base/parser/src/test/resources/CaseChoiceHierarchy.yang
diff --git a/plugin/maven/src/test/resources/CaseStatement.yang b/compiler/base/parser/src/test/resources/CaseStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/CaseStatement.yang
rename to compiler/base/parser/src/test/resources/CaseStatement.yang
diff --git a/plugin/maven/src/test/resources/CaseStatementSameEntryDifferentChoice.yang b/compiler/base/parser/src/test/resources/CaseStatementSameEntryDifferentChoice.yang
similarity index 100%
rename from plugin/maven/src/test/resources/CaseStatementSameEntryDifferentChoice.yang
rename to compiler/base/parser/src/test/resources/CaseStatementSameEntryDifferentChoice.yang
diff --git a/plugin/maven/src/test/resources/CaseSubStatementOfAugment.yang b/compiler/base/parser/src/test/resources/CaseSubStatementOfAugment.yang
similarity index 100%
rename from plugin/maven/src/test/resources/CaseSubStatementOfAugment.yang
rename to compiler/base/parser/src/test/resources/CaseSubStatementOfAugment.yang
diff --git a/plugin/maven/src/test/resources/ChoiceStatementDuplicateEntry.yang b/compiler/base/parser/src/test/resources/ChoiceStatementDuplicateEntry.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ChoiceStatementDuplicateEntry.yang
rename to compiler/base/parser/src/test/resources/ChoiceStatementDuplicateEntry.yang
diff --git a/plugin/maven/src/test/resources/ChoiceStatementSameEntryDifferentContainer.yang b/compiler/base/parser/src/test/resources/ChoiceStatementSameEntryDifferentContainer.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ChoiceStatementSameEntryDifferentContainer.yang
rename to compiler/base/parser/src/test/resources/ChoiceStatementSameEntryDifferentContainer.yang
diff --git a/plugin/maven/src/test/resources/ChoiceStatementWithStmtend.yang b/compiler/base/parser/src/test/resources/ChoiceStatementWithStmtend.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ChoiceStatementWithStmtend.yang
rename to compiler/base/parser/src/test/resources/ChoiceStatementWithStmtend.yang
diff --git a/plugin/maven/src/test/resources/ChoiceStatementWithoutBody.yang b/compiler/base/parser/src/test/resources/ChoiceStatementWithoutBody.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ChoiceStatementWithoutBody.yang
rename to compiler/base/parser/src/test/resources/ChoiceStatementWithoutBody.yang
diff --git a/plugin/maven/src/test/resources/ChoiceSubStatementDefault.yang b/compiler/base/parser/src/test/resources/ChoiceSubStatementDefault.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ChoiceSubStatementDefault.yang
rename to compiler/base/parser/src/test/resources/ChoiceSubStatementDefault.yang
diff --git a/plugin/maven/src/test/resources/ConfigDefaultValue.yang b/compiler/base/parser/src/test/resources/ConfigDefaultValue.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ConfigDefaultValue.yang
rename to compiler/base/parser/src/test/resources/ConfigDefaultValue.yang
diff --git a/plugin/maven/src/test/resources/ConfigEmptyValue.yang b/compiler/base/parser/src/test/resources/ConfigEmptyValue.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ConfigEmptyValue.yang
rename to compiler/base/parser/src/test/resources/ConfigEmptyValue.yang
diff --git a/plugin/maven/src/test/resources/ConfigFalse.yang b/compiler/base/parser/src/test/resources/ConfigFalse.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ConfigFalse.yang
rename to compiler/base/parser/src/test/resources/ConfigFalse.yang
diff --git a/plugin/maven/src/test/resources/ConfigFalseNoKey.yang b/compiler/base/parser/src/test/resources/ConfigFalseNoKey.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ConfigFalseNoKey.yang
rename to compiler/base/parser/src/test/resources/ConfigFalseNoKey.yang
diff --git a/plugin/maven/src/test/resources/ConfigFalseParentContainerChildLeaf.yang b/compiler/base/parser/src/test/resources/ConfigFalseParentContainerChildLeaf.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ConfigFalseParentContainerChildLeaf.yang
rename to compiler/base/parser/src/test/resources/ConfigFalseParentContainerChildLeaf.yang
diff --git a/plugin/maven/src/test/resources/ConfigFalseParentContainerChildLeafList.yang b/compiler/base/parser/src/test/resources/ConfigFalseParentContainerChildLeafList.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ConfigFalseParentContainerChildLeafList.yang
rename to compiler/base/parser/src/test/resources/ConfigFalseParentContainerChildLeafList.yang
diff --git a/plugin/maven/src/test/resources/ConfigFalseParentContainerChildList.yang b/compiler/base/parser/src/test/resources/ConfigFalseParentContainerChildList.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ConfigFalseParentContainerChildList.yang
rename to compiler/base/parser/src/test/resources/ConfigFalseParentContainerChildList.yang
diff --git a/plugin/maven/src/test/resources/ConfigFalseParentListChildContainer.yang b/compiler/base/parser/src/test/resources/ConfigFalseParentListChildContainer.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ConfigFalseParentListChildContainer.yang
rename to compiler/base/parser/src/test/resources/ConfigFalseParentListChildContainer.yang
diff --git a/plugin/maven/src/test/resources/ConfigFalseParentListChildLeaf.yang b/compiler/base/parser/src/test/resources/ConfigFalseParentListChildLeaf.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ConfigFalseParentListChildLeaf.yang
rename to compiler/base/parser/src/test/resources/ConfigFalseParentListChildLeaf.yang
diff --git a/plugin/maven/src/test/resources/ConfigFalseParentListChildLeafList.yang b/compiler/base/parser/src/test/resources/ConfigFalseParentListChildLeafList.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ConfigFalseParentListChildLeafList.yang
rename to compiler/base/parser/src/test/resources/ConfigFalseParentListChildLeafList.yang
diff --git a/plugin/maven/src/test/resources/ConfigFalseValidKeyValidLeaf.yang b/compiler/base/parser/src/test/resources/ConfigFalseValidKeyValidLeaf.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ConfigFalseValidKeyValidLeaf.yang
rename to compiler/base/parser/src/test/resources/ConfigFalseValidKeyValidLeaf.yang
diff --git a/plugin/maven/src/test/resources/ConfigInvalidValue.yang b/compiler/base/parser/src/test/resources/ConfigInvalidValue.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ConfigInvalidValue.yang
rename to compiler/base/parser/src/test/resources/ConfigInvalidValue.yang
diff --git a/plugin/maven/src/test/resources/ConfigTrue.yang b/compiler/base/parser/src/test/resources/ConfigTrue.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ConfigTrue.yang
rename to compiler/base/parser/src/test/resources/ConfigTrue.yang
diff --git a/plugin/maven/src/test/resources/ConfigTrueNoKey.yang b/compiler/base/parser/src/test/resources/ConfigTrueNoKey.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ConfigTrueNoKey.yang
rename to compiler/base/parser/src/test/resources/ConfigTrueNoKey.yang
diff --git a/plugin/maven/src/test/resources/ConfigTrueNoleafNoLeafList.yang b/compiler/base/parser/src/test/resources/ConfigTrueNoleafNoLeafList.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ConfigTrueNoleafNoLeafList.yang
rename to compiler/base/parser/src/test/resources/ConfigTrueNoleafNoLeafList.yang
diff --git a/plugin/maven/src/test/resources/ConfigTrueValidKeyValidLeaf.yang b/compiler/base/parser/src/test/resources/ConfigTrueValidKeyValidLeaf.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ConfigTrueValidKeyValidLeaf.yang
rename to compiler/base/parser/src/test/resources/ConfigTrueValidKeyValidLeaf.yang
diff --git a/plugin/maven/src/test/resources/ConfigTrueValidKeyValidLeafList.yang b/compiler/base/parser/src/test/resources/ConfigTrueValidKeyValidLeafList.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ConfigTrueValidKeyValidLeafList.yang
rename to compiler/base/parser/src/test/resources/ConfigTrueValidKeyValidLeafList.yang
diff --git a/plugin/maven/src/test/resources/ConfigWithoutStatementEnd.yang b/compiler/base/parser/src/test/resources/ConfigWithoutStatementEnd.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ConfigWithoutStatementEnd.yang
rename to compiler/base/parser/src/test/resources/ConfigWithoutStatementEnd.yang
diff --git a/plugin/maven/src/test/resources/ContactDualEntryTest.yang b/compiler/base/parser/src/test/resources/ContactDualEntryTest.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ContactDualEntryTest.yang
rename to compiler/base/parser/src/test/resources/ContactDualEntryTest.yang
diff --git a/plugin/maven/src/test/resources/ContactIncorrectOrder.yang b/compiler/base/parser/src/test/resources/ContactIncorrectOrder.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ContactIncorrectOrder.yang
rename to compiler/base/parser/src/test/resources/ContactIncorrectOrder.yang
diff --git a/plugin/maven/src/test/resources/ContactValidEntry.yang b/compiler/base/parser/src/test/resources/ContactValidEntry.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ContactValidEntry.yang
rename to compiler/base/parser/src/test/resources/ContactValidEntry.yang
diff --git a/plugin/maven/src/test/resources/ContactWithEmptyString.yang b/compiler/base/parser/src/test/resources/ContactWithEmptyString.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ContactWithEmptyString.yang
rename to compiler/base/parser/src/test/resources/ContactWithEmptyString.yang
diff --git a/plugin/maven/src/test/resources/ContactWithoutQuotes.yang b/compiler/base/parser/src/test/resources/ContactWithoutQuotes.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ContactWithoutQuotes.yang
rename to compiler/base/parser/src/test/resources/ContactWithoutQuotes.yang
diff --git a/plugin/maven/src/test/resources/ContainerDuplicateContainer.yang b/compiler/base/parser/src/test/resources/ContainerDuplicateContainer.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ContainerDuplicateContainer.yang
rename to compiler/base/parser/src/test/resources/ContainerDuplicateContainer.yang
diff --git a/plugin/maven/src/test/resources/ContainerInvalidIdentifier.yang b/compiler/base/parser/src/test/resources/ContainerInvalidIdentifier.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ContainerInvalidIdentifier.yang
rename to compiler/base/parser/src/test/resources/ContainerInvalidIdentifier.yang
diff --git a/plugin/maven/src/test/resources/ContainerRootNode.yang b/compiler/base/parser/src/test/resources/ContainerRootNode.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ContainerRootNode.yang
rename to compiler/base/parser/src/test/resources/ContainerRootNode.yang
diff --git a/plugin/maven/src/test/resources/ContainerSubStatementCardinality.yang b/compiler/base/parser/src/test/resources/ContainerSubStatementCardinality.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ContainerSubStatementCardinality.yang
rename to compiler/base/parser/src/test/resources/ContainerSubStatementCardinality.yang
diff --git a/plugin/maven/src/test/resources/ContainerSubStatementConfig.yang b/compiler/base/parser/src/test/resources/ContainerSubStatementConfig.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ContainerSubStatementConfig.yang
rename to compiler/base/parser/src/test/resources/ContainerSubStatementConfig.yang
diff --git a/plugin/maven/src/test/resources/ContainerSubStatementContainer.yang b/compiler/base/parser/src/test/resources/ContainerSubStatementContainer.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ContainerSubStatementContainer.yang
rename to compiler/base/parser/src/test/resources/ContainerSubStatementContainer.yang
diff --git a/plugin/maven/src/test/resources/ContainerSubStatementDescription.yang b/compiler/base/parser/src/test/resources/ContainerSubStatementDescription.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ContainerSubStatementDescription.yang
rename to compiler/base/parser/src/test/resources/ContainerSubStatementDescription.yang
diff --git a/plugin/maven/src/test/resources/ContainerSubStatementErrorAppTag.yang b/compiler/base/parser/src/test/resources/ContainerSubStatementErrorAppTag.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ContainerSubStatementErrorAppTag.yang
rename to compiler/base/parser/src/test/resources/ContainerSubStatementErrorAppTag.yang
diff --git a/plugin/maven/src/test/resources/ContainerSubStatementErrorDefaultAppTag.yang b/compiler/base/parser/src/test/resources/ContainerSubStatementErrorDefaultAppTag.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ContainerSubStatementErrorDefaultAppTag.yang
rename to compiler/base/parser/src/test/resources/ContainerSubStatementErrorDefaultAppTag.yang
diff --git a/plugin/maven/src/test/resources/ContainerSubStatementErrorMessage.yang b/compiler/base/parser/src/test/resources/ContainerSubStatementErrorMessage.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ContainerSubStatementErrorMessage.yang
rename to compiler/base/parser/src/test/resources/ContainerSubStatementErrorMessage.yang
diff --git a/plugin/maven/src/test/resources/ContainerSubStatementLeaf.yang b/compiler/base/parser/src/test/resources/ContainerSubStatementLeaf.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ContainerSubStatementLeaf.yang
rename to compiler/base/parser/src/test/resources/ContainerSubStatementLeaf.yang
diff --git a/plugin/maven/src/test/resources/ContainerSubStatementLeafList.yang b/compiler/base/parser/src/test/resources/ContainerSubStatementLeafList.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ContainerSubStatementLeafList.yang
rename to compiler/base/parser/src/test/resources/ContainerSubStatementLeafList.yang
diff --git a/plugin/maven/src/test/resources/ContainerSubStatementList.yang b/compiler/base/parser/src/test/resources/ContainerSubStatementList.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ContainerSubStatementList.yang
rename to compiler/base/parser/src/test/resources/ContainerSubStatementList.yang
diff --git a/plugin/maven/src/test/resources/ContainerSubStatementMust.yang b/compiler/base/parser/src/test/resources/ContainerSubStatementMust.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ContainerSubStatementMust.yang
rename to compiler/base/parser/src/test/resources/ContainerSubStatementMust.yang
diff --git a/plugin/maven/src/test/resources/ContainerSubStatementPresence.yang b/compiler/base/parser/src/test/resources/ContainerSubStatementPresence.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ContainerSubStatementPresence.yang
rename to compiler/base/parser/src/test/resources/ContainerSubStatementPresence.yang
diff --git a/plugin/maven/src/test/resources/ContainerSubStatementReference.yang b/compiler/base/parser/src/test/resources/ContainerSubStatementReference.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ContainerSubStatementReference.yang
rename to compiler/base/parser/src/test/resources/ContainerSubStatementReference.yang
diff --git a/plugin/maven/src/test/resources/ContainerSubStatementStatus.yang b/compiler/base/parser/src/test/resources/ContainerSubStatementStatus.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ContainerSubStatementStatus.yang
rename to compiler/base/parser/src/test/resources/ContainerSubStatementStatus.yang
diff --git a/plugin/maven/src/test/resources/ContainerSubStatementWhen.yang b/compiler/base/parser/src/test/resources/ContainerSubStatementWhen.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ContainerSubStatementWhen.yang
rename to compiler/base/parser/src/test/resources/ContainerSubStatementWhen.yang
diff --git a/plugin/maven/src/test/resources/ContainerSubStatements.yang b/compiler/base/parser/src/test/resources/ContainerSubStatements.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ContainerSubStatements.yang
rename to compiler/base/parser/src/test/resources/ContainerSubStatements.yang
diff --git a/plugin/maven/src/test/resources/ContainerWithDuplicateLeaf.yang b/compiler/base/parser/src/test/resources/ContainerWithDuplicateLeaf.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ContainerWithDuplicateLeaf.yang
rename to compiler/base/parser/src/test/resources/ContainerWithDuplicateLeaf.yang
diff --git a/plugin/maven/src/test/resources/DerivedTypeStatement.yang b/compiler/base/parser/src/test/resources/DerivedTypeStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/DerivedTypeStatement.yang
rename to compiler/base/parser/src/test/resources/DerivedTypeStatement.yang
diff --git a/plugin/maven/src/test/resources/DescriptionEmptyStatement.yang b/compiler/base/parser/src/test/resources/DescriptionEmptyStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/DescriptionEmptyStatement.yang
rename to compiler/base/parser/src/test/resources/DescriptionEmptyStatement.yang
diff --git a/plugin/maven/src/test/resources/DescriptionStringConcat.yang b/compiler/base/parser/src/test/resources/DescriptionStringConcat.yang
similarity index 100%
rename from plugin/maven/src/test/resources/DescriptionStringConcat.yang
rename to compiler/base/parser/src/test/resources/DescriptionStringConcat.yang
diff --git a/plugin/maven/src/test/resources/DescriptionValidStatement.yang b/compiler/base/parser/src/test/resources/DescriptionValidStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/DescriptionValidStatement.yang
rename to compiler/base/parser/src/test/resources/DescriptionValidStatement.yang
diff --git a/plugin/maven/src/test/resources/DescriptionWithoutStatementEnd.yang b/compiler/base/parser/src/test/resources/DescriptionWithoutStatementEnd.yang
similarity index 100%
rename from plugin/maven/src/test/resources/DescriptionWithoutStatementEnd.yang
rename to compiler/base/parser/src/test/resources/DescriptionWithoutStatementEnd.yang
diff --git a/plugin/maven/src/test/resources/DuplicateCaseInChoice.yang b/compiler/base/parser/src/test/resources/DuplicateCaseInChoice.yang
similarity index 100%
rename from plugin/maven/src/test/resources/DuplicateCaseInChoice.yang
rename to compiler/base/parser/src/test/resources/DuplicateCaseInChoice.yang
diff --git a/plugin/maven/src/test/resources/DuplicateContainerAndList.yang b/compiler/base/parser/src/test/resources/DuplicateContainerAndList.yang
similarity index 100%
rename from plugin/maven/src/test/resources/DuplicateContainerAndList.yang
rename to compiler/base/parser/src/test/resources/DuplicateContainerAndList.yang
diff --git a/plugin/maven/src/test/resources/DuplicateGroupingInContainer.yang b/compiler/base/parser/src/test/resources/DuplicateGroupingInContainer.yang
similarity index 100%
rename from plugin/maven/src/test/resources/DuplicateGroupingInContainer.yang
rename to compiler/base/parser/src/test/resources/DuplicateGroupingInContainer.yang
diff --git a/plugin/maven/src/test/resources/DuplicateGroupingInList.yang b/compiler/base/parser/src/test/resources/DuplicateGroupingInList.yang
similarity index 100%
rename from plugin/maven/src/test/resources/DuplicateGroupingInList.yang
rename to compiler/base/parser/src/test/resources/DuplicateGroupingInList.yang
diff --git a/plugin/maven/src/test/resources/DuplicateGroupingInModule.yang b/compiler/base/parser/src/test/resources/DuplicateGroupingInModule.yang
similarity index 100%
rename from plugin/maven/src/test/resources/DuplicateGroupingInModule.yang
rename to compiler/base/parser/src/test/resources/DuplicateGroupingInModule.yang
diff --git a/plugin/maven/src/test/resources/DuplicateLeafInChoice.yang b/compiler/base/parser/src/test/resources/DuplicateLeafInChoice.yang
similarity index 100%
rename from plugin/maven/src/test/resources/DuplicateLeafInChoice.yang
rename to compiler/base/parser/src/test/resources/DuplicateLeafInChoice.yang
diff --git a/plugin/maven/src/test/resources/DuplicateLeafInHierarchy.yang b/compiler/base/parser/src/test/resources/DuplicateLeafInHierarchy.yang
similarity index 100%
rename from plugin/maven/src/test/resources/DuplicateLeafInHierarchy.yang
rename to compiler/base/parser/src/test/resources/DuplicateLeafInHierarchy.yang
diff --git a/plugin/maven/src/test/resources/EnumBoundaryValue.yang b/compiler/base/parser/src/test/resources/EnumBoundaryValue.yang
similarity index 100%
rename from plugin/maven/src/test/resources/EnumBoundaryValue.yang
rename to compiler/base/parser/src/test/resources/EnumBoundaryValue.yang
diff --git a/plugin/maven/src/test/resources/EnumMaxNextValue.yang b/compiler/base/parser/src/test/resources/EnumMaxNextValue.yang
similarity index 100%
rename from plugin/maven/src/test/resources/EnumMaxNextValue.yang
rename to compiler/base/parser/src/test/resources/EnumMaxNextValue.yang
diff --git a/plugin/maven/src/test/resources/EnumSorted.yang b/compiler/base/parser/src/test/resources/EnumSorted.yang
similarity index 100%
rename from plugin/maven/src/test/resources/EnumSorted.yang
rename to compiler/base/parser/src/test/resources/EnumSorted.yang
diff --git a/plugin/maven/src/test/resources/EnumTypeStatement.yang b/compiler/base/parser/src/test/resources/EnumTypeStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/EnumTypeStatement.yang
rename to compiler/base/parser/src/test/resources/EnumTypeStatement.yang
diff --git a/plugin/maven/src/test/resources/EnumWithDuplicateName.yang b/compiler/base/parser/src/test/resources/EnumWithDuplicateName.yang
similarity index 100%
rename from plugin/maven/src/test/resources/EnumWithDuplicateName.yang
rename to compiler/base/parser/src/test/resources/EnumWithDuplicateName.yang
diff --git a/plugin/maven/src/test/resources/GroupingAttributes.yang b/compiler/base/parser/src/test/resources/GroupingAttributes.yang
similarity index 100%
rename from plugin/maven/src/test/resources/GroupingAttributes.yang
rename to compiler/base/parser/src/test/resources/GroupingAttributes.yang
diff --git a/plugin/maven/src/test/resources/GroupingInContainer.yang b/compiler/base/parser/src/test/resources/GroupingInContainer.yang
similarity index 100%
rename from plugin/maven/src/test/resources/GroupingInContainer.yang
rename to compiler/base/parser/src/test/resources/GroupingInContainer.yang
diff --git a/plugin/maven/src/test/resources/GroupingInList.yang b/compiler/base/parser/src/test/resources/GroupingInList.yang
similarity index 100%
rename from plugin/maven/src/test/resources/GroupingInList.yang
rename to compiler/base/parser/src/test/resources/GroupingInList.yang
diff --git a/plugin/maven/src/test/resources/GroupingInModule.yang b/compiler/base/parser/src/test/resources/GroupingInModule.yang
similarity index 100%
rename from plugin/maven/src/test/resources/GroupingInModule.yang
rename to compiler/base/parser/src/test/resources/GroupingInModule.yang
diff --git a/plugin/maven/src/test/resources/IdentityInModule.yang b/compiler/base/parser/src/test/resources/IdentityInModule.yang
similarity index 100%
rename from plugin/maven/src/test/resources/IdentityInModule.yang
rename to compiler/base/parser/src/test/resources/IdentityInModule.yang
diff --git a/plugin/maven/src/test/resources/IdentityIntraFile.yang b/compiler/base/parser/src/test/resources/IdentityIntraFile.yang
similarity index 100%
rename from plugin/maven/src/test/resources/IdentityIntraFile.yang
rename to compiler/base/parser/src/test/resources/IdentityIntraFile.yang
diff --git a/plugin/maven/src/test/resources/IdentityListener.yang b/compiler/base/parser/src/test/resources/IdentityListener.yang
similarity index 100%
rename from plugin/maven/src/test/resources/IdentityListener.yang
rename to compiler/base/parser/src/test/resources/IdentityListener.yang
diff --git a/plugin/maven/src/test/resources/IdentityTypedef.yang b/compiler/base/parser/src/test/resources/IdentityTypedef.yang
similarity index 100%
rename from plugin/maven/src/test/resources/IdentityTypedef.yang
rename to compiler/base/parser/src/test/resources/IdentityTypedef.yang
diff --git a/plugin/maven/src/test/resources/IdentityTypedefUnresolved.yang b/compiler/base/parser/src/test/resources/IdentityTypedefUnresolved.yang
similarity index 100%
rename from plugin/maven/src/test/resources/IdentityTypedefUnresolved.yang
rename to compiler/base/parser/src/test/resources/IdentityTypedefUnresolved.yang
diff --git a/plugin/maven/src/test/resources/ImportInvalidOrder.yang b/compiler/base/parser/src/test/resources/ImportInvalidOrder.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ImportInvalidOrder.yang
rename to compiler/base/parser/src/test/resources/ImportInvalidOrder.yang
diff --git a/plugin/maven/src/test/resources/ImportMultipleInstance.yang b/compiler/base/parser/src/test/resources/ImportMultipleInstance.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ImportMultipleInstance.yang
rename to compiler/base/parser/src/test/resources/ImportMultipleInstance.yang
diff --git a/plugin/maven/src/test/resources/ImportValidEntry.yang b/compiler/base/parser/src/test/resources/ImportValidEntry.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ImportValidEntry.yang
rename to compiler/base/parser/src/test/resources/ImportValidEntry.yang
diff --git a/plugin/maven/src/test/resources/ImportWithDualPrefix.yang b/compiler/base/parser/src/test/resources/ImportWithDualPrefix.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ImportWithDualPrefix.yang
rename to compiler/base/parser/src/test/resources/ImportWithDualPrefix.yang
diff --git a/plugin/maven/src/test/resources/ImportWithoutPrefix.yang b/compiler/base/parser/src/test/resources/ImportWithoutPrefix.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ImportWithoutPrefix.yang
rename to compiler/base/parser/src/test/resources/ImportWithoutPrefix.yang
diff --git a/plugin/maven/src/test/resources/ImportWithoutRevision.yang b/compiler/base/parser/src/test/resources/ImportWithoutRevision.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ImportWithoutRevision.yang
rename to compiler/base/parser/src/test/resources/ImportWithoutRevision.yang
diff --git a/plugin/maven/src/test/resources/InValidIdentifierXML.yang b/compiler/base/parser/src/test/resources/InValidIdentifierXML.yang
similarity index 100%
rename from plugin/maven/src/test/resources/InValidIdentifierXML.yang
rename to compiler/base/parser/src/test/resources/InValidIdentifierXML.yang
diff --git a/plugin/maven/src/test/resources/IncludeImportAnyOrder.yang b/compiler/base/parser/src/test/resources/IncludeImportAnyOrder.yang
similarity index 100%
rename from plugin/maven/src/test/resources/IncludeImportAnyOrder.yang
rename to compiler/base/parser/src/test/resources/IncludeImportAnyOrder.yang
diff --git a/plugin/maven/src/test/resources/IncludeInvalidDateSyntax.yang b/compiler/base/parser/src/test/resources/IncludeInvalidDateSyntax.yang
similarity index 100%
rename from plugin/maven/src/test/resources/IncludeInvalidDateSyntax.yang
rename to compiler/base/parser/src/test/resources/IncludeInvalidDateSyntax.yang
diff --git a/plugin/maven/src/test/resources/IncludeInvalidSyntax.yang b/compiler/base/parser/src/test/resources/IncludeInvalidSyntax.yang
similarity index 100%
rename from plugin/maven/src/test/resources/IncludeInvalidSyntax.yang
rename to compiler/base/parser/src/test/resources/IncludeInvalidSyntax.yang
diff --git a/plugin/maven/src/test/resources/IncludeMultiInstance.yang b/compiler/base/parser/src/test/resources/IncludeMultiInstance.yang
similarity index 100%
rename from plugin/maven/src/test/resources/IncludeMultiInstance.yang
rename to compiler/base/parser/src/test/resources/IncludeMultiInstance.yang
diff --git a/plugin/maven/src/test/resources/IncludeWithDate.yang b/compiler/base/parser/src/test/resources/IncludeWithDate.yang
similarity index 100%
rename from plugin/maven/src/test/resources/IncludeWithDate.yang
rename to compiler/base/parser/src/test/resources/IncludeWithDate.yang
diff --git a/plugin/maven/src/test/resources/IncludeWithEmptyBody.yang b/compiler/base/parser/src/test/resources/IncludeWithEmptyBody.yang
similarity index 100%
rename from plugin/maven/src/test/resources/IncludeWithEmptyBody.yang
rename to compiler/base/parser/src/test/resources/IncludeWithEmptyBody.yang
diff --git a/plugin/maven/src/test/resources/IncludeWithStmtend.yang b/compiler/base/parser/src/test/resources/IncludeWithStmtend.yang
similarity index 100%
rename from plugin/maven/src/test/resources/IncludeWithStmtend.yang
rename to compiler/base/parser/src/test/resources/IncludeWithStmtend.yang
diff --git a/plugin/maven/src/test/resources/InputStatementWithDataDefinition.yang b/compiler/base/parser/src/test/resources/InputStatementWithDataDefinition.yang
similarity index 100%
rename from plugin/maven/src/test/resources/InputStatementWithDataDefinition.yang
rename to compiler/base/parser/src/test/resources/InputStatementWithDataDefinition.yang
diff --git a/plugin/maven/src/test/resources/InputStatementWithTypedef.yang b/compiler/base/parser/src/test/resources/InputStatementWithTypedef.yang
similarity index 100%
rename from plugin/maven/src/test/resources/InputStatementWithTypedef.yang
rename to compiler/base/parser/src/test/resources/InputStatementWithTypedef.yang
diff --git a/plugin/maven/src/test/resources/InstanceIdentifierListener.yang b/compiler/base/parser/src/test/resources/InstanceIdentifierListener.yang
similarity index 100%
rename from plugin/maven/src/test/resources/InstanceIdentifierListener.yang
rename to compiler/base/parser/src/test/resources/InstanceIdentifierListener.yang
diff --git a/plugin/maven/src/test/resources/IntegerTypeStatement.yang b/compiler/base/parser/src/test/resources/IntegerTypeStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/IntegerTypeStatement.yang
rename to compiler/base/parser/src/test/resources/IntegerTypeStatement.yang
diff --git a/plugin/maven/src/test/resources/InvalidLeafIdentifier.yang b/compiler/base/parser/src/test/resources/InvalidLeafIdentifier.yang
similarity index 100%
rename from plugin/maven/src/test/resources/InvalidLeafIdentifier.yang
rename to compiler/base/parser/src/test/resources/InvalidLeafIdentifier.yang
diff --git a/plugin/maven/src/test/resources/InvalidPatternSubStatements.yang b/compiler/base/parser/src/test/resources/InvalidPatternSubStatements.yang
similarity index 100%
rename from plugin/maven/src/test/resources/InvalidPatternSubStatements.yang
rename to compiler/base/parser/src/test/resources/InvalidPatternSubStatements.yang
diff --git a/plugin/maven/src/test/resources/KeyLeafTypeEmpty.yang b/compiler/base/parser/src/test/resources/KeyLeafTypeEmpty.yang
similarity index 100%
rename from plugin/maven/src/test/resources/KeyLeafTypeEmpty.yang
rename to compiler/base/parser/src/test/resources/KeyLeafTypeEmpty.yang
diff --git a/plugin/maven/src/test/resources/KeyWithUsesInList.yang b/compiler/base/parser/src/test/resources/KeyWithUsesInList.yang
similarity index 100%
rename from plugin/maven/src/test/resources/KeyWithUsesInList.yang
rename to compiler/base/parser/src/test/resources/KeyWithUsesInList.yang
diff --git a/plugin/maven/src/test/resources/KeyWithoutStatementEnd.yang b/compiler/base/parser/src/test/resources/KeyWithoutStatementEnd.yang
similarity index 100%
rename from plugin/maven/src/test/resources/KeyWithoutStatementEnd.yang
rename to compiler/base/parser/src/test/resources/KeyWithoutStatementEnd.yang
diff --git a/plugin/maven/src/test/resources/LeafConfigInvalidCardinality.yang b/compiler/base/parser/src/test/resources/LeafConfigInvalidCardinality.yang
similarity index 100%
rename from plugin/maven/src/test/resources/LeafConfigInvalidCardinality.yang
rename to compiler/base/parser/src/test/resources/LeafConfigInvalidCardinality.yang
diff --git a/plugin/maven/src/test/resources/LeafInvalidIdentifier.yang b/compiler/base/parser/src/test/resources/LeafInvalidIdentifier.yang
similarity index 100%
rename from plugin/maven/src/test/resources/LeafInvalidIdentifier.yang
rename to compiler/base/parser/src/test/resources/LeafInvalidIdentifier.yang
diff --git a/plugin/maven/src/test/resources/LeafListConfigInvalidCardinality.yang b/compiler/base/parser/src/test/resources/LeafListConfigInvalidCardinality.yang
similarity index 100%
rename from plugin/maven/src/test/resources/LeafListConfigInvalidCardinality.yang
rename to compiler/base/parser/src/test/resources/LeafListConfigInvalidCardinality.yang
diff --git a/plugin/maven/src/test/resources/LeafListInvalidIdentifier.yang b/compiler/base/parser/src/test/resources/LeafListInvalidIdentifier.yang
similarity index 100%
rename from plugin/maven/src/test/resources/LeafListInvalidIdentifier.yang
rename to compiler/base/parser/src/test/resources/LeafListInvalidIdentifier.yang
diff --git a/plugin/maven/src/test/resources/LeafListInvalidStatement.yang b/compiler/base/parser/src/test/resources/LeafListInvalidStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/LeafListInvalidStatement.yang
rename to compiler/base/parser/src/test/resources/LeafListInvalidStatement.yang
diff --git a/plugin/maven/src/test/resources/LeafListSubStatementConfig.yang b/compiler/base/parser/src/test/resources/LeafListSubStatementConfig.yang
similarity index 100%
rename from plugin/maven/src/test/resources/LeafListSubStatementConfig.yang
rename to compiler/base/parser/src/test/resources/LeafListSubStatementConfig.yang
diff --git a/plugin/maven/src/test/resources/LeafListSubStatementDescription.yang b/compiler/base/parser/src/test/resources/LeafListSubStatementDescription.yang
similarity index 100%
rename from plugin/maven/src/test/resources/LeafListSubStatementDescription.yang
rename to compiler/base/parser/src/test/resources/LeafListSubStatementDescription.yang
diff --git a/plugin/maven/src/test/resources/LeafListSubStatementMaxElements.yang b/compiler/base/parser/src/test/resources/LeafListSubStatementMaxElements.yang
similarity index 100%
rename from plugin/maven/src/test/resources/LeafListSubStatementMaxElements.yang
rename to compiler/base/parser/src/test/resources/LeafListSubStatementMaxElements.yang
diff --git a/plugin/maven/src/test/resources/LeafListSubStatementMinElements.yang b/compiler/base/parser/src/test/resources/LeafListSubStatementMinElements.yang
similarity index 100%
rename from plugin/maven/src/test/resources/LeafListSubStatementMinElements.yang
rename to compiler/base/parser/src/test/resources/LeafListSubStatementMinElements.yang
diff --git a/plugin/maven/src/test/resources/LeafListSubStatementReference.yang b/compiler/base/parser/src/test/resources/LeafListSubStatementReference.yang
similarity index 100%
rename from plugin/maven/src/test/resources/LeafListSubStatementReference.yang
rename to compiler/base/parser/src/test/resources/LeafListSubStatementReference.yang
diff --git a/plugin/maven/src/test/resources/LeafListSubStatementStatus.yang b/compiler/base/parser/src/test/resources/LeafListSubStatementStatus.yang
similarity index 100%
rename from plugin/maven/src/test/resources/LeafListSubStatementStatus.yang
rename to compiler/base/parser/src/test/resources/LeafListSubStatementStatus.yang
diff --git a/plugin/maven/src/test/resources/LeafListSubStatementType.yang b/compiler/base/parser/src/test/resources/LeafListSubStatementType.yang
similarity index 100%
rename from plugin/maven/src/test/resources/LeafListSubStatementType.yang
rename to compiler/base/parser/src/test/resources/LeafListSubStatementType.yang
diff --git a/plugin/maven/src/test/resources/LeafListSubStatementUnits.yang b/compiler/base/parser/src/test/resources/LeafListSubStatementUnits.yang
similarity index 100%
rename from plugin/maven/src/test/resources/LeafListSubStatementUnits.yang
rename to compiler/base/parser/src/test/resources/LeafListSubStatementUnits.yang
diff --git a/plugin/maven/src/test/resources/LeafListSubStatements.yang b/compiler/base/parser/src/test/resources/LeafListSubStatements.yang
similarity index 100%
rename from plugin/maven/src/test/resources/LeafListSubStatements.yang
rename to compiler/base/parser/src/test/resources/LeafListSubStatements.yang
diff --git a/plugin/maven/src/test/resources/LeafListUnitsInvalidCardinality.yang b/compiler/base/parser/src/test/resources/LeafListUnitsInvalidCardinality.yang
similarity index 100%
rename from plugin/maven/src/test/resources/LeafListUnitsInvalidCardinality.yang
rename to compiler/base/parser/src/test/resources/LeafListUnitsInvalidCardinality.yang
diff --git a/plugin/maven/src/test/resources/LeafListWithoutLeftBrace.yang b/compiler/base/parser/src/test/resources/LeafListWithoutLeftBrace.yang
similarity index 100%
rename from plugin/maven/src/test/resources/LeafListWithoutLeftBrace.yang
rename to compiler/base/parser/src/test/resources/LeafListWithoutLeftBrace.yang
diff --git a/plugin/maven/src/test/resources/LeafMandatoryInvalidCardinality.yang b/compiler/base/parser/src/test/resources/LeafMandatoryInvalidCardinality.yang
similarity index 100%
rename from plugin/maven/src/test/resources/LeafMandatoryInvalidCardinality.yang
rename to compiler/base/parser/src/test/resources/LeafMandatoryInvalidCardinality.yang
diff --git a/plugin/maven/src/test/resources/LeafSubStatementDefault.yang b/compiler/base/parser/src/test/resources/LeafSubStatementDefault.yang
similarity index 100%
rename from plugin/maven/src/test/resources/LeafSubStatementDefault.yang
rename to compiler/base/parser/src/test/resources/LeafSubStatementDefault.yang
diff --git a/plugin/maven/src/test/resources/LeafSubStatementMust.yang b/compiler/base/parser/src/test/resources/LeafSubStatementMust.yang
similarity index 100%
rename from plugin/maven/src/test/resources/LeafSubStatementMust.yang
rename to compiler/base/parser/src/test/resources/LeafSubStatementMust.yang
diff --git a/plugin/maven/src/test/resources/LeafSubStatementWhen.yang b/compiler/base/parser/src/test/resources/LeafSubStatementWhen.yang
similarity index 100%
rename from plugin/maven/src/test/resources/LeafSubStatementWhen.yang
rename to compiler/base/parser/src/test/resources/LeafSubStatementWhen.yang
diff --git a/plugin/maven/src/test/resources/LeafSubStatements.yang b/compiler/base/parser/src/test/resources/LeafSubStatements.yang
similarity index 100%
rename from plugin/maven/src/test/resources/LeafSubStatements.yang
rename to compiler/base/parser/src/test/resources/LeafSubStatements.yang
diff --git a/plugin/maven/src/test/resources/LeafWithoutLeftBrace.yang b/compiler/base/parser/src/test/resources/LeafWithoutLeftBrace.yang
similarity index 100%
rename from plugin/maven/src/test/resources/LeafWithoutLeftBrace.yang
rename to compiler/base/parser/src/test/resources/LeafWithoutLeftBrace.yang
diff --git a/plugin/maven/src/test/resources/LengthStatementInsideLeafList.yang b/compiler/base/parser/src/test/resources/LengthStatementInsideLeafList.yang
similarity index 100%
rename from plugin/maven/src/test/resources/LengthStatementInsideLeafList.yang
rename to compiler/base/parser/src/test/resources/LengthStatementInsideLeafList.yang
diff --git a/plugin/maven/src/test/resources/LengthStatementInsideTypeDef.yang b/compiler/base/parser/src/test/resources/LengthStatementInsideTypeDef.yang
similarity index 100%
rename from plugin/maven/src/test/resources/LengthStatementInsideTypeDef.yang
rename to compiler/base/parser/src/test/resources/LengthStatementInsideTypeDef.yang
diff --git a/plugin/maven/src/test/resources/LengthStatementWithSpace.yang b/compiler/base/parser/src/test/resources/LengthStatementWithSpace.yang
similarity index 100%
rename from plugin/maven/src/test/resources/LengthStatementWithSpace.yang
rename to compiler/base/parser/src/test/resources/LengthStatementWithSpace.yang
diff --git a/plugin/maven/src/test/resources/LengthSubStatements.yang b/compiler/base/parser/src/test/resources/LengthSubStatements.yang
similarity index 100%
rename from plugin/maven/src/test/resources/LengthSubStatements.yang
rename to compiler/base/parser/src/test/resources/LengthSubStatements.yang
diff --git a/plugin/maven/src/test/resources/LengthWithInvalidIntegerPattern.yang b/compiler/base/parser/src/test/resources/LengthWithInvalidIntegerPattern.yang
similarity index 100%
rename from plugin/maven/src/test/resources/LengthWithInvalidIntegerPattern.yang
rename to compiler/base/parser/src/test/resources/LengthWithInvalidIntegerPattern.yang
diff --git a/plugin/maven/src/test/resources/LengthWithInvalidInterval.yang b/compiler/base/parser/src/test/resources/LengthWithInvalidInterval.yang
similarity index 100%
rename from plugin/maven/src/test/resources/LengthWithInvalidInterval.yang
rename to compiler/base/parser/src/test/resources/LengthWithInvalidInterval.yang
diff --git a/plugin/maven/src/test/resources/LengthWithInvalidType.yang b/compiler/base/parser/src/test/resources/LengthWithInvalidType.yang
similarity index 100%
rename from plugin/maven/src/test/resources/LengthWithInvalidType.yang
rename to compiler/base/parser/src/test/resources/LengthWithInvalidType.yang
diff --git a/plugin/maven/src/test/resources/LengthWithMinMax.yang b/compiler/base/parser/src/test/resources/LengthWithMinMax.yang
similarity index 100%
rename from plugin/maven/src/test/resources/LengthWithMinMax.yang
rename to compiler/base/parser/src/test/resources/LengthWithMinMax.yang
diff --git a/plugin/maven/src/test/resources/LengthWithOneInterval.yang b/compiler/base/parser/src/test/resources/LengthWithOneInterval.yang
similarity index 100%
rename from plugin/maven/src/test/resources/LengthWithOneInterval.yang
rename to compiler/base/parser/src/test/resources/LengthWithOneInterval.yang
diff --git a/plugin/maven/src/test/resources/ListAsRootNode.yang b/compiler/base/parser/src/test/resources/ListAsRootNode.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ListAsRootNode.yang
rename to compiler/base/parser/src/test/resources/ListAsRootNode.yang
diff --git a/plugin/maven/src/test/resources/ListDuplicateContainer.yang b/compiler/base/parser/src/test/resources/ListDuplicateContainer.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ListDuplicateContainer.yang
rename to compiler/base/parser/src/test/resources/ListDuplicateContainer.yang
diff --git a/plugin/maven/src/test/resources/ListInvalidIdentifier.yang b/compiler/base/parser/src/test/resources/ListInvalidIdentifier.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ListInvalidIdentifier.yang
rename to compiler/base/parser/src/test/resources/ListInvalidIdentifier.yang
diff --git a/plugin/maven/src/test/resources/ListStatementWithoutChild.yang b/compiler/base/parser/src/test/resources/ListStatementWithoutChild.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ListStatementWithoutChild.yang
rename to compiler/base/parser/src/test/resources/ListStatementWithoutChild.yang
diff --git a/plugin/maven/src/test/resources/ListSubStatementConfig.yang b/compiler/base/parser/src/test/resources/ListSubStatementConfig.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ListSubStatementConfig.yang
rename to compiler/base/parser/src/test/resources/ListSubStatementConfig.yang
diff --git a/plugin/maven/src/test/resources/ListSubStatementContainer.yang b/compiler/base/parser/src/test/resources/ListSubStatementContainer.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ListSubStatementContainer.yang
rename to compiler/base/parser/src/test/resources/ListSubStatementContainer.yang
diff --git a/plugin/maven/src/test/resources/ListSubStatementDescription.yang b/compiler/base/parser/src/test/resources/ListSubStatementDescription.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ListSubStatementDescription.yang
rename to compiler/base/parser/src/test/resources/ListSubStatementDescription.yang
diff --git a/plugin/maven/src/test/resources/ListSubStatementKey.yang b/compiler/base/parser/src/test/resources/ListSubStatementKey.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ListSubStatementKey.yang
rename to compiler/base/parser/src/test/resources/ListSubStatementKey.yang
diff --git a/plugin/maven/src/test/resources/ListSubStatementLeaf.yang b/compiler/base/parser/src/test/resources/ListSubStatementLeaf.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ListSubStatementLeaf.yang
rename to compiler/base/parser/src/test/resources/ListSubStatementLeaf.yang
diff --git a/plugin/maven/src/test/resources/ListSubStatementLeafList.yang b/compiler/base/parser/src/test/resources/ListSubStatementLeafList.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ListSubStatementLeafList.yang
rename to compiler/base/parser/src/test/resources/ListSubStatementLeafList.yang
diff --git a/plugin/maven/src/test/resources/ListSubStatementList.yang b/compiler/base/parser/src/test/resources/ListSubStatementList.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ListSubStatementList.yang
rename to compiler/base/parser/src/test/resources/ListSubStatementList.yang
diff --git a/plugin/maven/src/test/resources/ListSubStatementMaxElements.yang b/compiler/base/parser/src/test/resources/ListSubStatementMaxElements.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ListSubStatementMaxElements.yang
rename to compiler/base/parser/src/test/resources/ListSubStatementMaxElements.yang
diff --git a/plugin/maven/src/test/resources/ListSubStatementMinElements.yang b/compiler/base/parser/src/test/resources/ListSubStatementMinElements.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ListSubStatementMinElements.yang
rename to compiler/base/parser/src/test/resources/ListSubStatementMinElements.yang
diff --git a/plugin/maven/src/test/resources/ListSubStatementReference.yang b/compiler/base/parser/src/test/resources/ListSubStatementReference.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ListSubStatementReference.yang
rename to compiler/base/parser/src/test/resources/ListSubStatementReference.yang
diff --git a/plugin/maven/src/test/resources/ListSubStatementStatus.yang b/compiler/base/parser/src/test/resources/ListSubStatementStatus.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ListSubStatementStatus.yang
rename to compiler/base/parser/src/test/resources/ListSubStatementStatus.yang
diff --git a/plugin/maven/src/test/resources/ListSubStatementUnique.yang b/compiler/base/parser/src/test/resources/ListSubStatementUnique.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ListSubStatementUnique.yang
rename to compiler/base/parser/src/test/resources/ListSubStatementUnique.yang
diff --git a/plugin/maven/src/test/resources/ListSubStatements.yang b/compiler/base/parser/src/test/resources/ListSubStatements.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ListSubStatements.yang
rename to compiler/base/parser/src/test/resources/ListSubStatements.yang
diff --git a/plugin/maven/src/test/resources/ListSubStatementsCardinality.yang b/compiler/base/parser/src/test/resources/ListSubStatementsCardinality.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ListSubStatementsCardinality.yang
rename to compiler/base/parser/src/test/resources/ListSubStatementsCardinality.yang
diff --git a/plugin/maven/src/test/resources/ListWithDuplicateLeaf.yang b/compiler/base/parser/src/test/resources/ListWithDuplicateLeaf.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ListWithDuplicateLeaf.yang
rename to compiler/base/parser/src/test/resources/ListWithDuplicateLeaf.yang
diff --git a/plugin/maven/src/test/resources/ListWithIdentifierNameEnum.yang b/compiler/base/parser/src/test/resources/ListWithIdentifierNameEnum.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ListWithIdentifierNameEnum.yang
rename to compiler/base/parser/src/test/resources/ListWithIdentifierNameEnum.yang
diff --git a/plugin/maven/src/test/resources/MandatoryDefaultValue.yang b/compiler/base/parser/src/test/resources/MandatoryDefaultValue.yang
similarity index 100%
rename from plugin/maven/src/test/resources/MandatoryDefaultValue.yang
rename to compiler/base/parser/src/test/resources/MandatoryDefaultValue.yang
diff --git a/plugin/maven/src/test/resources/MandatoryEmptyStatement.yang b/compiler/base/parser/src/test/resources/MandatoryEmptyStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/MandatoryEmptyStatement.yang
rename to compiler/base/parser/src/test/resources/MandatoryEmptyStatement.yang
diff --git a/plugin/maven/src/test/resources/MandatoryFalse.yang b/compiler/base/parser/src/test/resources/MandatoryFalse.yang
similarity index 100%
rename from plugin/maven/src/test/resources/MandatoryFalse.yang
rename to compiler/base/parser/src/test/resources/MandatoryFalse.yang
diff --git a/plugin/maven/src/test/resources/MandatoryTrue.yang b/compiler/base/parser/src/test/resources/MandatoryTrue.yang
similarity index 100%
rename from plugin/maven/src/test/resources/MandatoryTrue.yang
rename to compiler/base/parser/src/test/resources/MandatoryTrue.yang
diff --git a/plugin/maven/src/test/resources/MandatoryWithoutStatementEnd.yang b/compiler/base/parser/src/test/resources/MandatoryWithoutStatementEnd.yang
similarity index 100%
rename from plugin/maven/src/test/resources/MandatoryWithoutStatementEnd.yang
rename to compiler/base/parser/src/test/resources/MandatoryWithoutStatementEnd.yang
diff --git a/plugin/maven/src/test/resources/MaxElementsCardinality.yang b/compiler/base/parser/src/test/resources/MaxElementsCardinality.yang
similarity index 100%
rename from plugin/maven/src/test/resources/MaxElementsCardinality.yang
rename to compiler/base/parser/src/test/resources/MaxElementsCardinality.yang
diff --git a/plugin/maven/src/test/resources/MaxElementsDefaultValue.yang b/compiler/base/parser/src/test/resources/MaxElementsDefaultValue.yang
similarity index 100%
rename from plugin/maven/src/test/resources/MaxElementsDefaultValue.yang
rename to compiler/base/parser/src/test/resources/MaxElementsDefaultValue.yang
diff --git a/plugin/maven/src/test/resources/MaxElementsMaxValue.yang b/compiler/base/parser/src/test/resources/MaxElementsMaxValue.yang
similarity index 100%
rename from plugin/maven/src/test/resources/MaxElementsMaxValue.yang
rename to compiler/base/parser/src/test/resources/MaxElementsMaxValue.yang
diff --git a/plugin/maven/src/test/resources/MaxElementsUnbounded.yang b/compiler/base/parser/src/test/resources/MaxElementsUnbounded.yang
similarity index 100%
rename from plugin/maven/src/test/resources/MaxElementsUnbounded.yang
rename to compiler/base/parser/src/test/resources/MaxElementsUnbounded.yang
diff --git a/plugin/maven/src/test/resources/MaxElementsWithoutStatementEnd.yang b/compiler/base/parser/src/test/resources/MaxElementsWithoutStatementEnd.yang
similarity index 100%
rename from plugin/maven/src/test/resources/MaxElementsWithoutStatementEnd.yang
rename to compiler/base/parser/src/test/resources/MaxElementsWithoutStatementEnd.yang
diff --git a/plugin/maven/src/test/resources/MinElementsDefaultValue.yang b/compiler/base/parser/src/test/resources/MinElementsDefaultValue.yang
similarity index 100%
rename from plugin/maven/src/test/resources/MinElementsDefaultValue.yang
rename to compiler/base/parser/src/test/resources/MinElementsDefaultValue.yang
diff --git a/plugin/maven/src/test/resources/MinElementsInvalidCardinality.yang b/compiler/base/parser/src/test/resources/MinElementsInvalidCardinality.yang
similarity index 100%
rename from plugin/maven/src/test/resources/MinElementsInvalidCardinality.yang
rename to compiler/base/parser/src/test/resources/MinElementsInvalidCardinality.yang
diff --git a/plugin/maven/src/test/resources/MinElementsInvalidValue.yang b/compiler/base/parser/src/test/resources/MinElementsInvalidValue.yang
similarity index 100%
rename from plugin/maven/src/test/resources/MinElementsInvalidValue.yang
rename to compiler/base/parser/src/test/resources/MinElementsInvalidValue.yang
diff --git a/plugin/maven/src/test/resources/MinElementsMaxValue.yang b/compiler/base/parser/src/test/resources/MinElementsMaxValue.yang
similarity index 100%
rename from plugin/maven/src/test/resources/MinElementsMaxValue.yang
rename to compiler/base/parser/src/test/resources/MinElementsMaxValue.yang
diff --git a/plugin/maven/src/test/resources/MinElementsWithoutStatementEnd.yang b/compiler/base/parser/src/test/resources/MinElementsWithoutStatementEnd.yang
similarity index 100%
rename from plugin/maven/src/test/resources/MinElementsWithoutStatementEnd.yang
rename to compiler/base/parser/src/test/resources/MinElementsWithoutStatementEnd.yang
diff --git a/plugin/maven/src/test/resources/ModuleDuplicateContainer.yang b/compiler/base/parser/src/test/resources/ModuleDuplicateContainer.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ModuleDuplicateContainer.yang
rename to compiler/base/parser/src/test/resources/ModuleDuplicateContainer.yang
diff --git a/plugin/maven/src/test/resources/ModuleInvalidIdentifierLength.yang b/compiler/base/parser/src/test/resources/ModuleInvalidIdentifierLength.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ModuleInvalidIdentifierLength.yang
rename to compiler/base/parser/src/test/resources/ModuleInvalidIdentifierLength.yang
diff --git a/plugin/maven/src/test/resources/ModuleSubStatementContainer.yang b/compiler/base/parser/src/test/resources/ModuleSubStatementContainer.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ModuleSubStatementContainer.yang
rename to compiler/base/parser/src/test/resources/ModuleSubStatementContainer.yang
diff --git a/plugin/maven/src/test/resources/ModuleSubStatementDescription.yang b/compiler/base/parser/src/test/resources/ModuleSubStatementDescription.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ModuleSubStatementDescription.yang
rename to compiler/base/parser/src/test/resources/ModuleSubStatementDescription.yang
diff --git a/plugin/maven/src/test/resources/ModuleSubStatementList.yang b/compiler/base/parser/src/test/resources/ModuleSubStatementList.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ModuleSubStatementList.yang
rename to compiler/base/parser/src/test/resources/ModuleSubStatementList.yang
diff --git a/plugin/maven/src/test/resources/ModuleSubStatementReference.yang b/compiler/base/parser/src/test/resources/ModuleSubStatementReference.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ModuleSubStatementReference.yang
rename to compiler/base/parser/src/test/resources/ModuleSubStatementReference.yang
diff --git a/plugin/maven/src/test/resources/ModuleValidEntry.yang b/compiler/base/parser/src/test/resources/ModuleValidEntry.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ModuleValidEntry.yang
rename to compiler/base/parser/src/test/resources/ModuleValidEntry.yang
diff --git a/plugin/maven/src/test/resources/ModuleWithDuplicateLeaf.yang b/compiler/base/parser/src/test/resources/ModuleWithDuplicateLeaf.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ModuleWithDuplicateLeaf.yang
rename to compiler/base/parser/src/test/resources/ModuleWithDuplicateLeaf.yang
diff --git a/plugin/maven/src/test/resources/ModuleWithInvalidIdentifier.yang b/compiler/base/parser/src/test/resources/ModuleWithInvalidIdentifier.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ModuleWithInvalidIdentifier.yang
rename to compiler/base/parser/src/test/resources/ModuleWithInvalidIdentifier.yang
diff --git a/plugin/maven/src/test/resources/MultipleKeyValues.yang b/compiler/base/parser/src/test/resources/MultipleKeyValues.yang
similarity index 100%
rename from plugin/maven/src/test/resources/MultipleKeyValues.yang
rename to compiler/base/parser/src/test/resources/MultipleKeyValues.yang
diff --git a/plugin/maven/src/test/resources/MultiplePatternStatement.yang b/compiler/base/parser/src/test/resources/MultiplePatternStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/MultiplePatternStatement.yang
rename to compiler/base/parser/src/test/resources/MultiplePatternStatement.yang
diff --git a/plugin/maven/src/test/resources/MultipleRevision.yang b/compiler/base/parser/src/test/resources/MultipleRevision.yang
similarity index 100%
rename from plugin/maven/src/test/resources/MultipleRevision.yang
rename to compiler/base/parser/src/test/resources/MultipleRevision.yang
diff --git a/plugin/maven/src/test/resources/MultipleUniqueValues.yang b/compiler/base/parser/src/test/resources/MultipleUniqueValues.yang
similarity index 100%
rename from plugin/maven/src/test/resources/MultipleUniqueValues.yang
rename to compiler/base/parser/src/test/resources/MultipleUniqueValues.yang
diff --git a/plugin/maven/src/test/resources/NamespaceDualEntry.yang b/compiler/base/parser/src/test/resources/NamespaceDualEntry.yang
similarity index 100%
rename from plugin/maven/src/test/resources/NamespaceDualEntry.yang
rename to compiler/base/parser/src/test/resources/NamespaceDualEntry.yang
diff --git a/plugin/maven/src/test/resources/NamespaceInDoubleQuotes.yang b/compiler/base/parser/src/test/resources/NamespaceInDoubleQuotes.yang
similarity index 100%
rename from plugin/maven/src/test/resources/NamespaceInDoubleQuotes.yang
rename to compiler/base/parser/src/test/resources/NamespaceInDoubleQuotes.yang
diff --git a/plugin/maven/src/test/resources/NamespaceNoEntryTest.yang b/compiler/base/parser/src/test/resources/NamespaceNoEntryTest.yang
similarity index 100%
rename from plugin/maven/src/test/resources/NamespaceNoEntryTest.yang
rename to compiler/base/parser/src/test/resources/NamespaceNoEntryTest.yang
diff --git a/plugin/maven/src/test/resources/NamespaceWithConcatenationTest.yang b/compiler/base/parser/src/test/resources/NamespaceWithConcatenationTest.yang
similarity index 100%
rename from plugin/maven/src/test/resources/NamespaceWithConcatenationTest.yang
rename to compiler/base/parser/src/test/resources/NamespaceWithConcatenationTest.yang
diff --git a/plugin/maven/src/test/resources/NamespaceWithInvalidSpaces.yang b/compiler/base/parser/src/test/resources/NamespaceWithInvalidSpaces.yang
similarity index 100%
rename from plugin/maven/src/test/resources/NamespaceWithInvalidSpaces.yang
rename to compiler/base/parser/src/test/resources/NamespaceWithInvalidSpaces.yang
diff --git a/plugin/maven/src/test/resources/NamespaceWithoutQuotes.yang b/compiler/base/parser/src/test/resources/NamespaceWithoutQuotes.yang
similarity index 100%
rename from plugin/maven/src/test/resources/NamespaceWithoutQuotes.yang
rename to compiler/base/parser/src/test/resources/NamespaceWithoutQuotes.yang
diff --git a/plugin/maven/src/test/resources/NoConfigContainerSubStatementContainer.yang b/compiler/base/parser/src/test/resources/NoConfigContainerSubStatementContainer.yang
similarity index 100%
rename from plugin/maven/src/test/resources/NoConfigContainerSubStatementContainer.yang
rename to compiler/base/parser/src/test/resources/NoConfigContainerSubStatementContainer.yang
diff --git a/plugin/maven/src/test/resources/NoConfigContainerSubStatementLeaf.yang b/compiler/base/parser/src/test/resources/NoConfigContainerSubStatementLeaf.yang
similarity index 100%
rename from plugin/maven/src/test/resources/NoConfigContainerSubStatementLeaf.yang
rename to compiler/base/parser/src/test/resources/NoConfigContainerSubStatementLeaf.yang
diff --git a/plugin/maven/src/test/resources/NoConfigContainerSubStatementLeafList.yang b/compiler/base/parser/src/test/resources/NoConfigContainerSubStatementLeafList.yang
similarity index 100%
rename from plugin/maven/src/test/resources/NoConfigContainerSubStatementLeafList.yang
rename to compiler/base/parser/src/test/resources/NoConfigContainerSubStatementLeafList.yang
diff --git a/plugin/maven/src/test/resources/NoConfigContainerSubStatementList.yang b/compiler/base/parser/src/test/resources/NoConfigContainerSubStatementList.yang
similarity index 100%
rename from plugin/maven/src/test/resources/NoConfigContainerSubStatementList.yang
rename to compiler/base/parser/src/test/resources/NoConfigContainerSubStatementList.yang
diff --git a/plugin/maven/src/test/resources/NoConfigListSubStatementContainer.yang b/compiler/base/parser/src/test/resources/NoConfigListSubStatementContainer.yang
similarity index 100%
rename from plugin/maven/src/test/resources/NoConfigListSubStatementContainer.yang
rename to compiler/base/parser/src/test/resources/NoConfigListSubStatementContainer.yang
diff --git a/plugin/maven/src/test/resources/NoConfigListSubStatementLeaf.yang b/compiler/base/parser/src/test/resources/NoConfigListSubStatementLeaf.yang
similarity index 100%
rename from plugin/maven/src/test/resources/NoConfigListSubStatementLeaf.yang
rename to compiler/base/parser/src/test/resources/NoConfigListSubStatementLeaf.yang
diff --git a/plugin/maven/src/test/resources/NoConfigListSubStatementList.yang b/compiler/base/parser/src/test/resources/NoConfigListSubStatementList.yang
similarity index 100%
rename from plugin/maven/src/test/resources/NoConfigListSubStatementList.yang
rename to compiler/base/parser/src/test/resources/NoConfigListSubStatementList.yang
diff --git a/plugin/maven/src/test/resources/OrderedByStatement.yang b/compiler/base/parser/src/test/resources/OrderedByStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/OrderedByStatement.yang
rename to compiler/base/parser/src/test/resources/OrderedByStatement.yang
diff --git a/plugin/maven/src/test/resources/OrganizationDualEntry.yang b/compiler/base/parser/src/test/resources/OrganizationDualEntry.yang
similarity index 100%
rename from plugin/maven/src/test/resources/OrganizationDualEntry.yang
rename to compiler/base/parser/src/test/resources/OrganizationDualEntry.yang
diff --git a/plugin/maven/src/test/resources/OrganizationInvalidOrder.yang b/compiler/base/parser/src/test/resources/OrganizationInvalidOrder.yang
similarity index 100%
rename from plugin/maven/src/test/resources/OrganizationInvalidOrder.yang
rename to compiler/base/parser/src/test/resources/OrganizationInvalidOrder.yang
diff --git a/plugin/maven/src/test/resources/OrganizationMissingValue.yang b/compiler/base/parser/src/test/resources/OrganizationMissingValue.yang
similarity index 100%
rename from plugin/maven/src/test/resources/OrganizationMissingValue.yang
rename to compiler/base/parser/src/test/resources/OrganizationMissingValue.yang
diff --git a/plugin/maven/src/test/resources/OrganizationValidEntry.yang b/compiler/base/parser/src/test/resources/OrganizationValidEntry.yang
similarity index 100%
rename from plugin/maven/src/test/resources/OrganizationValidEntry.yang
rename to compiler/base/parser/src/test/resources/OrganizationValidEntry.yang
diff --git a/plugin/maven/src/test/resources/OutputStatementWithDataDefinition.yang b/compiler/base/parser/src/test/resources/OutputStatementWithDataDefinition.yang
similarity index 100%
rename from plugin/maven/src/test/resources/OutputStatementWithDataDefinition.yang
rename to compiler/base/parser/src/test/resources/OutputStatementWithDataDefinition.yang
diff --git a/plugin/maven/src/test/resources/OutputStatementWithTypedef.yang b/compiler/base/parser/src/test/resources/OutputStatementWithTypedef.yang
similarity index 100%
rename from plugin/maven/src/test/resources/OutputStatementWithTypedef.yang
rename to compiler/base/parser/src/test/resources/OutputStatementWithTypedef.yang
diff --git a/plugin/maven/src/test/resources/PatternStatementInsideLeafList.yang b/compiler/base/parser/src/test/resources/PatternStatementInsideLeafList.yang
similarity index 100%
rename from plugin/maven/src/test/resources/PatternStatementInsideLeafList.yang
rename to compiler/base/parser/src/test/resources/PatternStatementInsideLeafList.yang
diff --git a/plugin/maven/src/test/resources/PatternStatementInsideTypeDef.yang b/compiler/base/parser/src/test/resources/PatternStatementInsideTypeDef.yang
similarity index 100%
rename from plugin/maven/src/test/resources/PatternStatementInsideTypeDef.yang
rename to compiler/base/parser/src/test/resources/PatternStatementInsideTypeDef.yang
diff --git a/plugin/maven/src/test/resources/PatternStatementWithPlus.yang b/compiler/base/parser/src/test/resources/PatternStatementWithPlus.yang
similarity index 100%
rename from plugin/maven/src/test/resources/PatternStatementWithPlus.yang
rename to compiler/base/parser/src/test/resources/PatternStatementWithPlus.yang
diff --git a/plugin/maven/src/test/resources/PatternSubStatements.yang b/compiler/base/parser/src/test/resources/PatternSubStatements.yang
similarity index 100%
rename from plugin/maven/src/test/resources/PatternSubStatements.yang
rename to compiler/base/parser/src/test/resources/PatternSubStatements.yang
diff --git a/plugin/maven/src/test/resources/PositionDuplication.yang b/compiler/base/parser/src/test/resources/PositionDuplication.yang
similarity index 100%
rename from plugin/maven/src/test/resources/PositionDuplication.yang
rename to compiler/base/parser/src/test/resources/PositionDuplication.yang
diff --git a/plugin/maven/src/test/resources/PositionImplicitAndExplicit.yang b/compiler/base/parser/src/test/resources/PositionImplicitAndExplicit.yang
similarity index 100%
rename from plugin/maven/src/test/resources/PositionImplicitAndExplicit.yang
rename to compiler/base/parser/src/test/resources/PositionImplicitAndExplicit.yang
diff --git a/plugin/maven/src/test/resources/PositionImplicitAndExplicitDuplication.yang b/compiler/base/parser/src/test/resources/PositionImplicitAndExplicitDuplication.yang
similarity index 100%
rename from plugin/maven/src/test/resources/PositionImplicitAndExplicitDuplication.yang
rename to compiler/base/parser/src/test/resources/PositionImplicitAndExplicitDuplication.yang
diff --git a/plugin/maven/src/test/resources/PositionNegativeValue.yang b/compiler/base/parser/src/test/resources/PositionNegativeValue.yang
similarity index 100%
rename from plugin/maven/src/test/resources/PositionNegativeValue.yang
rename to compiler/base/parser/src/test/resources/PositionNegativeValue.yang
diff --git a/plugin/maven/src/test/resources/PositionStatement.yang b/compiler/base/parser/src/test/resources/PositionStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/PositionStatement.yang
rename to compiler/base/parser/src/test/resources/PositionStatement.yang
diff --git a/plugin/maven/src/test/resources/PositionWithDoubleQuotes.yang b/compiler/base/parser/src/test/resources/PositionWithDoubleQuotes.yang
similarity index 100%
rename from plugin/maven/src/test/resources/PositionWithDoubleQuotes.yang
rename to compiler/base/parser/src/test/resources/PositionWithDoubleQuotes.yang
diff --git a/plugin/maven/src/test/resources/PrefixDualEntry.yang b/compiler/base/parser/src/test/resources/PrefixDualEntry.yang
similarity index 100%
rename from plugin/maven/src/test/resources/PrefixDualEntry.yang
rename to compiler/base/parser/src/test/resources/PrefixDualEntry.yang
diff --git a/plugin/maven/src/test/resources/PrefixInvalidValue.yang b/compiler/base/parser/src/test/resources/PrefixInvalidValue.yang
similarity index 100%
rename from plugin/maven/src/test/resources/PrefixInvalidValue.yang
rename to compiler/base/parser/src/test/resources/PrefixInvalidValue.yang
diff --git a/plugin/maven/src/test/resources/PrefixMissingValue.yang b/compiler/base/parser/src/test/resources/PrefixMissingValue.yang
similarity index 100%
rename from plugin/maven/src/test/resources/PrefixMissingValue.yang
rename to compiler/base/parser/src/test/resources/PrefixMissingValue.yang
diff --git a/plugin/maven/src/test/resources/PrefixOrder.yang b/compiler/base/parser/src/test/resources/PrefixOrder.yang
similarity index 100%
rename from plugin/maven/src/test/resources/PrefixOrder.yang
rename to compiler/base/parser/src/test/resources/PrefixOrder.yang
diff --git a/plugin/maven/src/test/resources/PrefixValidEntry.yang b/compiler/base/parser/src/test/resources/PrefixValidEntry.yang
similarity index 100%
rename from plugin/maven/src/test/resources/PrefixValidEntry.yang
rename to compiler/base/parser/src/test/resources/PrefixValidEntry.yang
diff --git a/plugin/maven/src/test/resources/PrefixWithDoubleQuotes.yang b/compiler/base/parser/src/test/resources/PrefixWithDoubleQuotes.yang
similarity index 100%
rename from plugin/maven/src/test/resources/PrefixWithDoubleQuotes.yang
rename to compiler/base/parser/src/test/resources/PrefixWithDoubleQuotes.yang
diff --git a/plugin/maven/src/test/resources/PresenceDefaultValue.yang b/compiler/base/parser/src/test/resources/PresenceDefaultValue.yang
similarity index 100%
rename from plugin/maven/src/test/resources/PresenceDefaultValue.yang
rename to compiler/base/parser/src/test/resources/PresenceDefaultValue.yang
diff --git a/plugin/maven/src/test/resources/PresenceWithoutStatementEnd.yang b/compiler/base/parser/src/test/resources/PresenceWithoutStatementEnd.yang
similarity index 100%
rename from plugin/maven/src/test/resources/PresenceWithoutStatementEnd.yang
rename to compiler/base/parser/src/test/resources/PresenceWithoutStatementEnd.yang
diff --git a/plugin/maven/src/test/resources/ProcessFileWithExtraBrace.yang b/compiler/base/parser/src/test/resources/ProcessFileWithExtraBrace.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ProcessFileWithExtraBrace.yang
rename to compiler/base/parser/src/test/resources/ProcessFileWithExtraBrace.yang
diff --git a/plugin/maven/src/test/resources/ProcessFileWithExtraBraceInBetween.yang b/compiler/base/parser/src/test/resources/ProcessFileWithExtraBraceInBetween.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ProcessFileWithExtraBraceInBetween.yang
rename to compiler/base/parser/src/test/resources/ProcessFileWithExtraBraceInBetween.yang
diff --git a/plugin/maven/src/test/resources/ProcessFileWithExtraLeaf.yang b/compiler/base/parser/src/test/resources/ProcessFileWithExtraLeaf.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ProcessFileWithExtraLeaf.yang
rename to compiler/base/parser/src/test/resources/ProcessFileWithExtraLeaf.yang
diff --git a/plugin/maven/src/test/resources/RangeStatementInsideLeafList.yang b/compiler/base/parser/src/test/resources/RangeStatementInsideLeafList.yang
similarity index 100%
rename from plugin/maven/src/test/resources/RangeStatementInsideLeafList.yang
rename to compiler/base/parser/src/test/resources/RangeStatementInsideLeafList.yang
diff --git a/plugin/maven/src/test/resources/RangeStatementWithSpace.yang b/compiler/base/parser/src/test/resources/RangeStatementWithSpace.yang
similarity index 100%
rename from plugin/maven/src/test/resources/RangeStatementWithSpace.yang
rename to compiler/base/parser/src/test/resources/RangeStatementWithSpace.yang
diff --git a/plugin/maven/src/test/resources/RangeSubStatements.yang b/compiler/base/parser/src/test/resources/RangeSubStatements.yang
similarity index 100%
rename from plugin/maven/src/test/resources/RangeSubStatements.yang
rename to compiler/base/parser/src/test/resources/RangeSubStatements.yang
diff --git a/plugin/maven/src/test/resources/RangeWithInvalidIntegerPattern.yang b/compiler/base/parser/src/test/resources/RangeWithInvalidIntegerPattern.yang
similarity index 100%
rename from plugin/maven/src/test/resources/RangeWithInvalidIntegerPattern.yang
rename to compiler/base/parser/src/test/resources/RangeWithInvalidIntegerPattern.yang
diff --git a/plugin/maven/src/test/resources/RangeWithMinMax.yang b/compiler/base/parser/src/test/resources/RangeWithMinMax.yang
similarity index 100%
rename from plugin/maven/src/test/resources/RangeWithMinMax.yang
rename to compiler/base/parser/src/test/resources/RangeWithMinMax.yang
diff --git a/plugin/maven/src/test/resources/RangeWithOneInterval.yang b/compiler/base/parser/src/test/resources/RangeWithOneInterval.yang
similarity index 100%
rename from plugin/maven/src/test/resources/RangeWithOneInterval.yang
rename to compiler/base/parser/src/test/resources/RangeWithOneInterval.yang
diff --git a/plugin/maven/src/test/resources/ReferenceEmptyStatement.yang b/compiler/base/parser/src/test/resources/ReferenceEmptyStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ReferenceEmptyStatement.yang
rename to compiler/base/parser/src/test/resources/ReferenceEmptyStatement.yang
diff --git a/plugin/maven/src/test/resources/ReferenceStatement.yang b/compiler/base/parser/src/test/resources/ReferenceStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ReferenceStatement.yang
rename to compiler/base/parser/src/test/resources/ReferenceStatement.yang
diff --git a/plugin/maven/src/test/resources/ReferenceWithoutStatementEnd.yang b/compiler/base/parser/src/test/resources/ReferenceWithoutStatementEnd.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ReferenceWithoutStatementEnd.yang
rename to compiler/base/parser/src/test/resources/ReferenceWithoutStatementEnd.yang
diff --git a/plugin/maven/src/test/resources/RequireInstanceDefaultValueForLeafref.yang b/compiler/base/parser/src/test/resources/RequireInstanceDefaultValueForLeafref.yang
similarity index 100%
rename from plugin/maven/src/test/resources/RequireInstanceDefaultValueForLeafref.yang
rename to compiler/base/parser/src/test/resources/RequireInstanceDefaultValueForLeafref.yang
diff --git a/plugin/maven/src/test/resources/RequireInstanceDefaultValueInInstanceIdentifier.yang b/compiler/base/parser/src/test/resources/RequireInstanceDefaultValueInInstanceIdentifier.yang
similarity index 100%
rename from plugin/maven/src/test/resources/RequireInstanceDefaultValueInInstanceIdentifier.yang
rename to compiler/base/parser/src/test/resources/RequireInstanceDefaultValueInInstanceIdentifier.yang
diff --git a/plugin/maven/src/test/resources/RequireInstanceFalse.yang b/compiler/base/parser/src/test/resources/RequireInstanceFalse.yang
similarity index 100%
rename from plugin/maven/src/test/resources/RequireInstanceFalse.yang
rename to compiler/base/parser/src/test/resources/RequireInstanceFalse.yang
diff --git a/plugin/maven/src/test/resources/RequireInstanceTrue.yang b/compiler/base/parser/src/test/resources/RequireInstanceTrue.yang
similarity index 100%
rename from plugin/maven/src/test/resources/RequireInstanceTrue.yang
rename to compiler/base/parser/src/test/resources/RequireInstanceTrue.yang
diff --git a/plugin/maven/src/test/resources/RevisionAbsence.yang b/compiler/base/parser/src/test/resources/RevisionAbsence.yang
similarity index 100%
rename from plugin/maven/src/test/resources/RevisionAbsence.yang
rename to compiler/base/parser/src/test/resources/RevisionAbsence.yang
diff --git a/plugin/maven/src/test/resources/RevisionDateInQuotesAtImport.yang b/compiler/base/parser/src/test/resources/RevisionDateInQuotesAtImport.yang
similarity index 100%
rename from plugin/maven/src/test/resources/RevisionDateInQuotesAtImport.yang
rename to compiler/base/parser/src/test/resources/RevisionDateInQuotesAtImport.yang
diff --git a/plugin/maven/src/test/resources/RevisionDateInQuotesAtInclude.yang b/compiler/base/parser/src/test/resources/RevisionDateInQuotesAtInclude.yang
similarity index 100%
rename from plugin/maven/src/test/resources/RevisionDateInQuotesAtInclude.yang
rename to compiler/base/parser/src/test/resources/RevisionDateInQuotesAtInclude.yang
diff --git a/plugin/maven/src/test/resources/RevisionDateInvalid.yang b/compiler/base/parser/src/test/resources/RevisionDateInvalid.yang
similarity index 100%
rename from plugin/maven/src/test/resources/RevisionDateInvalid.yang
rename to compiler/base/parser/src/test/resources/RevisionDateInvalid.yang
diff --git a/plugin/maven/src/test/resources/RevisionDateInvalidFormat.yang b/compiler/base/parser/src/test/resources/RevisionDateInvalidFormat.yang
similarity index 100%
rename from plugin/maven/src/test/resources/RevisionDateInvalidFormat.yang
rename to compiler/base/parser/src/test/resources/RevisionDateInvalidFormat.yang
diff --git a/plugin/maven/src/test/resources/RevisionDateInvalidSyntaxAtImport.yang b/compiler/base/parser/src/test/resources/RevisionDateInvalidSyntaxAtImport.yang
similarity index 100%
rename from plugin/maven/src/test/resources/RevisionDateInvalidSyntaxAtImport.yang
rename to compiler/base/parser/src/test/resources/RevisionDateInvalidSyntaxAtImport.yang
diff --git a/plugin/maven/src/test/resources/RevisionDateInvalidSyntaxAtInclude.yang b/compiler/base/parser/src/test/resources/RevisionDateInvalidSyntaxAtInclude.yang
similarity index 100%
rename from plugin/maven/src/test/resources/RevisionDateInvalidSyntaxAtInclude.yang
rename to compiler/base/parser/src/test/resources/RevisionDateInvalidSyntaxAtInclude.yang
diff --git a/plugin/maven/src/test/resources/RevisionDateValidEntry.yang b/compiler/base/parser/src/test/resources/RevisionDateValidEntry.yang
similarity index 100%
rename from plugin/maven/src/test/resources/RevisionDateValidEntry.yang
rename to compiler/base/parser/src/test/resources/RevisionDateValidEntry.yang
diff --git a/plugin/maven/src/test/resources/RevisionInValidOrder.yang b/compiler/base/parser/src/test/resources/RevisionInValidOrder.yang
similarity index 100%
rename from plugin/maven/src/test/resources/RevisionInValidOrder.yang
rename to compiler/base/parser/src/test/resources/RevisionInValidOrder.yang
diff --git a/plugin/maven/src/test/resources/RevisionInValidSyntax.yang b/compiler/base/parser/src/test/resources/RevisionInValidSyntax.yang
similarity index 100%
rename from plugin/maven/src/test/resources/RevisionInValidSyntax.yang
rename to compiler/base/parser/src/test/resources/RevisionInValidSyntax.yang
diff --git a/plugin/maven/src/test/resources/RevisionNoOptionalParameter.yang b/compiler/base/parser/src/test/resources/RevisionNoOptionalParameter.yang
similarity index 100%
rename from plugin/maven/src/test/resources/RevisionNoOptionalParameter.yang
rename to compiler/base/parser/src/test/resources/RevisionNoOptionalParameter.yang
diff --git a/plugin/maven/src/test/resources/RevisionSubStatementReference.yang b/compiler/base/parser/src/test/resources/RevisionSubStatementReference.yang
similarity index 100%
rename from plugin/maven/src/test/resources/RevisionSubStatementReference.yang
rename to compiler/base/parser/src/test/resources/RevisionSubStatementReference.yang
diff --git a/plugin/maven/src/test/resources/RevisionSubStatementRevision.yang b/compiler/base/parser/src/test/resources/RevisionSubStatementRevision.yang
similarity index 100%
rename from plugin/maven/src/test/resources/RevisionSubStatementRevision.yang
rename to compiler/base/parser/src/test/resources/RevisionSubStatementRevision.yang
diff --git a/plugin/maven/src/test/resources/ShortCaseListenerWithContainer.yang b/compiler/base/parser/src/test/resources/ShortCaseListenerWithContainer.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ShortCaseListenerWithContainer.yang
rename to compiler/base/parser/src/test/resources/ShortCaseListenerWithContainer.yang
diff --git a/plugin/maven/src/test/resources/ShortCaseListenerWithList.yang b/compiler/base/parser/src/test/resources/ShortCaseListenerWithList.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ShortCaseListenerWithList.yang
rename to compiler/base/parser/src/test/resources/ShortCaseListenerWithList.yang
diff --git a/plugin/maven/src/test/resources/StatusDefaultValue.yang b/compiler/base/parser/src/test/resources/StatusDefaultValue.yang
similarity index 100%
rename from plugin/maven/src/test/resources/StatusDefaultValue.yang
rename to compiler/base/parser/src/test/resources/StatusDefaultValue.yang
diff --git a/plugin/maven/src/test/resources/StatusInvalidValue.yang b/compiler/base/parser/src/test/resources/StatusInvalidValue.yang
similarity index 100%
rename from plugin/maven/src/test/resources/StatusInvalidValue.yang
rename to compiler/base/parser/src/test/resources/StatusInvalidValue.yang
diff --git a/plugin/maven/src/test/resources/StatusStatementCurrent.yang b/compiler/base/parser/src/test/resources/StatusStatementCurrent.yang
similarity index 100%
rename from plugin/maven/src/test/resources/StatusStatementCurrent.yang
rename to compiler/base/parser/src/test/resources/StatusStatementCurrent.yang
diff --git a/plugin/maven/src/test/resources/StatusStatementDeprecated.yang b/compiler/base/parser/src/test/resources/StatusStatementDeprecated.yang
similarity index 100%
rename from plugin/maven/src/test/resources/StatusStatementDeprecated.yang
rename to compiler/base/parser/src/test/resources/StatusStatementDeprecated.yang
diff --git a/plugin/maven/src/test/resources/StatusStatementObsolete.yang b/compiler/base/parser/src/test/resources/StatusStatementObsolete.yang
similarity index 100%
rename from plugin/maven/src/test/resources/StatusStatementObsolete.yang
rename to compiler/base/parser/src/test/resources/StatusStatementObsolete.yang
diff --git a/plugin/maven/src/test/resources/StatusWithoutStatementEnd.yang b/compiler/base/parser/src/test/resources/StatusWithoutStatementEnd.yang
similarity index 100%
rename from plugin/maven/src/test/resources/StatusWithoutStatementEnd.yang
rename to compiler/base/parser/src/test/resources/StatusWithoutStatementEnd.yang
diff --git a/plugin/maven/src/test/resources/SubModuleInvalidName.yang b/compiler/base/parser/src/test/resources/SubModuleInvalidName.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SubModuleInvalidName.yang
rename to compiler/base/parser/src/test/resources/SubModuleInvalidName.yang
diff --git a/plugin/maven/src/test/resources/SubModuleOrder.yang b/compiler/base/parser/src/test/resources/SubModuleOrder.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SubModuleOrder.yang
rename to compiler/base/parser/src/test/resources/SubModuleOrder.yang
diff --git a/plugin/maven/src/test/resources/SubModuleValidEntry.yang b/compiler/base/parser/src/test/resources/SubModuleValidEntry.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SubModuleValidEntry.yang
rename to compiler/base/parser/src/test/resources/SubModuleValidEntry.yang
diff --git a/plugin/maven/src/test/resources/SubModuleWithNamespace.yang b/compiler/base/parser/src/test/resources/SubModuleWithNamespace.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SubModuleWithNamespace.yang
rename to compiler/base/parser/src/test/resources/SubModuleWithNamespace.yang
diff --git a/plugin/maven/src/test/resources/SubModuleWithoutBelongsTo.yang b/compiler/base/parser/src/test/resources/SubModuleWithoutBelongsTo.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SubModuleWithoutBelongsTo.yang
rename to compiler/base/parser/src/test/resources/SubModuleWithoutBelongsTo.yang
diff --git a/plugin/maven/src/test/resources/SubModuleWithoutVersion.yang b/compiler/base/parser/src/test/resources/SubModuleWithoutVersion.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SubModuleWithoutVersion.yang
rename to compiler/base/parser/src/test/resources/SubModuleWithoutVersion.yang
diff --git a/plugin/maven/src/test/resources/UnionWhenTypeInLeaf.yang b/compiler/base/parser/src/test/resources/UnionWhenTypeInLeaf.yang
similarity index 100%
rename from plugin/maven/src/test/resources/UnionWhenTypeInLeaf.yang
rename to compiler/base/parser/src/test/resources/UnionWhenTypeInLeaf.yang
diff --git a/plugin/maven/src/test/resources/UnionWhenTypeInLeafList.yang b/compiler/base/parser/src/test/resources/UnionWhenTypeInLeafList.yang
similarity index 100%
rename from plugin/maven/src/test/resources/UnionWhenTypeInLeafList.yang
rename to compiler/base/parser/src/test/resources/UnionWhenTypeInLeafList.yang
diff --git a/plugin/maven/src/test/resources/UnionWithEmptyType.yang b/compiler/base/parser/src/test/resources/UnionWithEmptyType.yang
similarity index 100%
rename from plugin/maven/src/test/resources/UnionWithEmptyType.yang
rename to compiler/base/parser/src/test/resources/UnionWithEmptyType.yang
diff --git a/plugin/maven/src/test/resources/UnionWithoutChild.yang b/compiler/base/parser/src/test/resources/UnionWithoutChild.yang
similarity index 100%
rename from plugin/maven/src/test/resources/UnionWithoutChild.yang
rename to compiler/base/parser/src/test/resources/UnionWithoutChild.yang
diff --git a/plugin/maven/src/test/resources/UnitsDefaultValue.yang b/compiler/base/parser/src/test/resources/UnitsDefaultValue.yang
similarity index 100%
rename from plugin/maven/src/test/resources/UnitsDefaultValue.yang
rename to compiler/base/parser/src/test/resources/UnitsDefaultValue.yang
diff --git a/plugin/maven/src/test/resources/UnitsStatement.yang b/compiler/base/parser/src/test/resources/UnitsStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/UnitsStatement.yang
rename to compiler/base/parser/src/test/resources/UnitsStatement.yang
diff --git a/plugin/maven/src/test/resources/UnitsStatementCardinality.yang b/compiler/base/parser/src/test/resources/UnitsStatementCardinality.yang
similarity index 100%
rename from plugin/maven/src/test/resources/UnitsStatementCardinality.yang
rename to compiler/base/parser/src/test/resources/UnitsStatementCardinality.yang
diff --git a/plugin/maven/src/test/resources/UnitsStatementOrder.yang b/compiler/base/parser/src/test/resources/UnitsStatementOrder.yang
similarity index 100%
rename from plugin/maven/src/test/resources/UnitsStatementOrder.yang
rename to compiler/base/parser/src/test/resources/UnitsStatementOrder.yang
diff --git a/plugin/maven/src/test/resources/UnitsWithoutStatementEnd.yang b/compiler/base/parser/src/test/resources/UnitsWithoutStatementEnd.yang
similarity index 100%
rename from plugin/maven/src/test/resources/UnitsWithoutStatementEnd.yang
rename to compiler/base/parser/src/test/resources/UnitsWithoutStatementEnd.yang
diff --git a/plugin/maven/src/test/resources/UnsupportedYangConstructSubStatementMust.yang b/compiler/base/parser/src/test/resources/UnsupportedYangConstructSubStatementMust.yang
similarity index 100%
rename from plugin/maven/src/test/resources/UnsupportedYangConstructSubStatementMust.yang
rename to compiler/base/parser/src/test/resources/UnsupportedYangConstructSubStatementMust.yang
diff --git a/plugin/maven/src/test/resources/UsesInContainer.yang b/compiler/base/parser/src/test/resources/UsesInContainer.yang
similarity index 100%
rename from plugin/maven/src/test/resources/UsesInContainer.yang
rename to compiler/base/parser/src/test/resources/UsesInContainer.yang
diff --git a/plugin/maven/src/test/resources/UsesInList.yang b/compiler/base/parser/src/test/resources/UsesInList.yang
similarity index 100%
rename from plugin/maven/src/test/resources/UsesInList.yang
rename to compiler/base/parser/src/test/resources/UsesInList.yang
diff --git a/plugin/maven/src/test/resources/UsesInModule.yang b/compiler/base/parser/src/test/resources/UsesInModule.yang
similarity index 100%
rename from plugin/maven/src/test/resources/UsesInModule.yang
rename to compiler/base/parser/src/test/resources/UsesInModule.yang
diff --git a/plugin/maven/src/test/resources/ValidAugmentStatement.yang b/compiler/base/parser/src/test/resources/ValidAugmentStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ValidAugmentStatement.yang
rename to compiler/base/parser/src/test/resources/ValidAugmentStatement.yang
diff --git a/plugin/maven/src/test/resources/ValidBinaryLengthStatement.yang b/compiler/base/parser/src/test/resources/ValidBinaryLengthStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ValidBinaryLengthStatement.yang
rename to compiler/base/parser/src/test/resources/ValidBinaryLengthStatement.yang
diff --git a/plugin/maven/src/test/resources/ValidExtensionStatement.yang b/compiler/base/parser/src/test/resources/ValidExtensionStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ValidExtensionStatement.yang
rename to compiler/base/parser/src/test/resources/ValidExtensionStatement.yang
diff --git a/plugin/maven/src/test/resources/ValidLengthStatement.yang b/compiler/base/parser/src/test/resources/ValidLengthStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ValidLengthStatement.yang
rename to compiler/base/parser/src/test/resources/ValidLengthStatement.yang
diff --git a/plugin/maven/src/test/resources/ValidLengthStatementInsideBinary.yang b/compiler/base/parser/src/test/resources/ValidLengthStatementInsideBinary.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ValidLengthStatementInsideBinary.yang
rename to compiler/base/parser/src/test/resources/ValidLengthStatementInsideBinary.yang
diff --git a/plugin/maven/src/test/resources/ValidNotificationStatement.yang b/compiler/base/parser/src/test/resources/ValidNotificationStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ValidNotificationStatement.yang
rename to compiler/base/parser/src/test/resources/ValidNotificationStatement.yang
diff --git a/plugin/maven/src/test/resources/ValidPatternStatement.yang b/compiler/base/parser/src/test/resources/ValidPatternStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ValidPatternStatement.yang
rename to compiler/base/parser/src/test/resources/ValidPatternStatement.yang
diff --git a/plugin/maven/src/test/resources/ValidRangeStatement.yang b/compiler/base/parser/src/test/resources/ValidRangeStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ValidRangeStatement.yang
rename to compiler/base/parser/src/test/resources/ValidRangeStatement.yang
diff --git a/plugin/maven/src/test/resources/ValidRpcStatement.yang b/compiler/base/parser/src/test/resources/ValidRpcStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ValidRpcStatement.yang
rename to compiler/base/parser/src/test/resources/ValidRpcStatement.yang
diff --git a/plugin/maven/src/test/resources/ValidSameGroupingEntryInModuleAndContainer.yang b/compiler/base/parser/src/test/resources/ValidSameGroupingEntryInModuleAndContainer.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ValidSameGroupingEntryInModuleAndContainer.yang
rename to compiler/base/parser/src/test/resources/ValidSameGroupingEntryInModuleAndContainer.yang
diff --git a/plugin/maven/src/test/resources/ValidVersionWithDoubleQuotes.yang b/compiler/base/parser/src/test/resources/ValidVersionWithDoubleQuotes.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ValidVersionWithDoubleQuotes.yang
rename to compiler/base/parser/src/test/resources/ValidVersionWithDoubleQuotes.yang
diff --git a/plugin/maven/src/test/resources/ValueAndAutoStatement.yang b/compiler/base/parser/src/test/resources/ValueAndAutoStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ValueAndAutoStatement.yang
rename to compiler/base/parser/src/test/resources/ValueAndAutoStatement.yang
diff --git a/plugin/maven/src/test/resources/ValueDuplication.yang b/compiler/base/parser/src/test/resources/ValueDuplication.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ValueDuplication.yang
rename to compiler/base/parser/src/test/resources/ValueDuplication.yang
diff --git a/plugin/maven/src/test/resources/ValueExplicitAndAutoDuplication.yang b/compiler/base/parser/src/test/resources/ValueExplicitAndAutoDuplication.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ValueExplicitAndAutoDuplication.yang
rename to compiler/base/parser/src/test/resources/ValueExplicitAndAutoDuplication.yang
diff --git a/plugin/maven/src/test/resources/ValueStatement.yang b/compiler/base/parser/src/test/resources/ValueStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ValueStatement.yang
rename to compiler/base/parser/src/test/resources/ValueStatement.yang
diff --git a/plugin/maven/src/test/resources/ValueStatementWithNegativeValue.yang b/compiler/base/parser/src/test/resources/ValueStatementWithNegativeValue.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ValueStatementWithNegativeValue.yang
rename to compiler/base/parser/src/test/resources/ValueStatementWithNegativeValue.yang
diff --git a/plugin/maven/src/test/resources/ValueStatementWithQuotes.yang b/compiler/base/parser/src/test/resources/ValueStatementWithQuotes.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ValueStatementWithQuotes.yang
rename to compiler/base/parser/src/test/resources/ValueStatementWithQuotes.yang
diff --git a/plugin/maven/src/test/resources/VersionDualEntry.yang b/compiler/base/parser/src/test/resources/VersionDualEntry.yang
similarity index 100%
rename from plugin/maven/src/test/resources/VersionDualEntry.yang
rename to compiler/base/parser/src/test/resources/VersionDualEntry.yang
diff --git a/plugin/maven/src/test/resources/VersionInvalidSyntax.yang b/compiler/base/parser/src/test/resources/VersionInvalidSyntax.yang
similarity index 100%
rename from plugin/maven/src/test/resources/VersionInvalidSyntax.yang
rename to compiler/base/parser/src/test/resources/VersionInvalidSyntax.yang
diff --git a/plugin/maven/src/test/resources/VersionInvalidValue.yang b/compiler/base/parser/src/test/resources/VersionInvalidValue.yang
similarity index 100%
rename from plugin/maven/src/test/resources/VersionInvalidValue.yang
rename to compiler/base/parser/src/test/resources/VersionInvalidValue.yang
diff --git a/plugin/maven/src/test/resources/VersionNotPresent.yang b/compiler/base/parser/src/test/resources/VersionNotPresent.yang
similarity index 100%
rename from plugin/maven/src/test/resources/VersionNotPresent.yang
rename to compiler/base/parser/src/test/resources/VersionNotPresent.yang
diff --git a/plugin/maven/src/test/resources/VersionOrder.yang b/compiler/base/parser/src/test/resources/VersionOrder.yang
similarity index 100%
rename from plugin/maven/src/test/resources/VersionOrder.yang
rename to compiler/base/parser/src/test/resources/VersionOrder.yang
diff --git a/plugin/maven/src/test/resources/VersionValidEntry.yang b/compiler/base/parser/src/test/resources/VersionValidEntry.yang
similarity index 100%
rename from plugin/maven/src/test/resources/VersionValidEntry.yang
rename to compiler/base/parser/src/test/resources/VersionValidEntry.yang
diff --git a/plugin/maven/src/test/resources/YangFileWithSyntaxError.yang b/compiler/base/parser/src/test/resources/YangFileWithSyntaxError.yang
similarity index 100%
rename from plugin/maven/src/test/resources/YangFileWithSyntaxError.yang
rename to compiler/base/parser/src/test/resources/YangFileWithSyntaxError.yang
diff --git a/plugin/maven/src/test/resources/YangFileWithoutSyntaxError.yang b/compiler/base/parser/src/test/resources/YangFileWithoutSyntaxError.yang
similarity index 100%
rename from plugin/maven/src/test/resources/YangFileWithoutSyntaxError.yang
rename to compiler/base/parser/src/test/resources/YangFileWithoutSyntaxError.yang
diff --git a/plugin/maven/src/test/resources/decimal64/Decimal64MultiTypedefMultiInvalidRangeStatement.yang b/compiler/base/parser/src/test/resources/decimal64/Decimal64MultiTypedefMultiInvalidRangeStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/decimal64/Decimal64MultiTypedefMultiInvalidRangeStatement.yang
rename to compiler/base/parser/src/test/resources/decimal64/Decimal64MultiTypedefMultiInvalidRangeStatement.yang
diff --git a/plugin/maven/src/test/resources/decimal64/Decimal64MultiTypedefMultiRangeStatement.yang b/compiler/base/parser/src/test/resources/decimal64/Decimal64MultiTypedefMultiRangeStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/decimal64/Decimal64MultiTypedefMultiRangeStatement.yang
rename to compiler/base/parser/src/test/resources/decimal64/Decimal64MultiTypedefMultiRangeStatement.yang
diff --git a/plugin/maven/src/test/resources/decimal64/Decimal64MultiTypedefRangeInLeafStatement.yang b/compiler/base/parser/src/test/resources/decimal64/Decimal64MultiTypedefRangeInLeafStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/decimal64/Decimal64MultiTypedefRangeInLeafStatement.yang
rename to compiler/base/parser/src/test/resources/decimal64/Decimal64MultiTypedefRangeInLeafStatement.yang
diff --git a/plugin/maven/src/test/resources/decimal64/Decimal64MultiTypedefRangeStatement.yang b/compiler/base/parser/src/test/resources/decimal64/Decimal64MultiTypedefRangeStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/decimal64/Decimal64MultiTypedefRangeStatement.yang
rename to compiler/base/parser/src/test/resources/decimal64/Decimal64MultiTypedefRangeStatement.yang
diff --git a/plugin/maven/src/test/resources/decimal64/Decimal64MultiTypedefStatement.yang b/compiler/base/parser/src/test/resources/decimal64/Decimal64MultiTypedefStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/decimal64/Decimal64MultiTypedefStatement.yang
rename to compiler/base/parser/src/test/resources/decimal64/Decimal64MultiTypedefStatement.yang
diff --git a/plugin/maven/src/test/resources/decimal64/Decimal64MultiTypedefWithMaxRange.yang b/compiler/base/parser/src/test/resources/decimal64/Decimal64MultiTypedefWithMaxRange.yang
similarity index 100%
rename from plugin/maven/src/test/resources/decimal64/Decimal64MultiTypedefWithMaxRange.yang
rename to compiler/base/parser/src/test/resources/decimal64/Decimal64MultiTypedefWithMaxRange.yang
diff --git a/plugin/maven/src/test/resources/decimal64/Decimal64TypeInvalidMaxValueFraction.yang b/compiler/base/parser/src/test/resources/decimal64/Decimal64TypeInvalidMaxValueFraction.yang
similarity index 100%
rename from plugin/maven/src/test/resources/decimal64/Decimal64TypeInvalidMaxValueFraction.yang
rename to compiler/base/parser/src/test/resources/decimal64/Decimal64TypeInvalidMaxValueFraction.yang
diff --git a/plugin/maven/src/test/resources/decimal64/Decimal64TypeInvalidMinValueFraction1.yang b/compiler/base/parser/src/test/resources/decimal64/Decimal64TypeInvalidMinValueFraction1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/decimal64/Decimal64TypeInvalidMinValueFraction1.yang
rename to compiler/base/parser/src/test/resources/decimal64/Decimal64TypeInvalidMinValueFraction1.yang
diff --git a/plugin/maven/src/test/resources/decimal64/Decimal64TypeInvalidMinValueFraction2.yang b/compiler/base/parser/src/test/resources/decimal64/Decimal64TypeInvalidMinValueFraction2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/decimal64/Decimal64TypeInvalidMinValueFraction2.yang
rename to compiler/base/parser/src/test/resources/decimal64/Decimal64TypeInvalidMinValueFraction2.yang
diff --git a/plugin/maven/src/test/resources/decimal64/Decimal64TypeInvalidRangeStmnt.yang b/compiler/base/parser/src/test/resources/decimal64/Decimal64TypeInvalidRangeStmnt.yang
similarity index 100%
rename from plugin/maven/src/test/resources/decimal64/Decimal64TypeInvalidRangeStmnt.yang
rename to compiler/base/parser/src/test/resources/decimal64/Decimal64TypeInvalidRangeStmnt.yang
diff --git a/plugin/maven/src/test/resources/decimal64/Decimal64TypeStatement.yang b/compiler/base/parser/src/test/resources/decimal64/Decimal64TypeStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/decimal64/Decimal64TypeStatement.yang
rename to compiler/base/parser/src/test/resources/decimal64/Decimal64TypeStatement.yang
diff --git a/plugin/maven/src/test/resources/decimal64/Decimal64TypeValidation.yang b/compiler/base/parser/src/test/resources/decimal64/Decimal64TypeValidation.yang
similarity index 100%
rename from plugin/maven/src/test/resources/decimal64/Decimal64TypeValidation.yang
rename to compiler/base/parser/src/test/resources/decimal64/Decimal64TypeValidation.yang
diff --git a/plugin/maven/src/test/resources/decimal64/Decimal64TypeWithMultiValueRangeStmnt.yang b/compiler/base/parser/src/test/resources/decimal64/Decimal64TypeWithMultiValueRangeStmnt.yang
similarity index 100%
rename from plugin/maven/src/test/resources/decimal64/Decimal64TypeWithMultiValueRangeStmnt.yang
rename to compiler/base/parser/src/test/resources/decimal64/Decimal64TypeWithMultiValueRangeStmnt.yang
diff --git a/plugin/maven/src/test/resources/decimal64/Decimal64TypeWithRangeStatement.yang b/compiler/base/parser/src/test/resources/decimal64/Decimal64TypeWithRangeStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/decimal64/Decimal64TypeWithRangeStatement.yang
rename to compiler/base/parser/src/test/resources/decimal64/Decimal64TypeWithRangeStatement.yang
diff --git a/plugin/maven/src/test/resources/decimal64/Decimal64TypeWithoutFraction.yang b/compiler/base/parser/src/test/resources/decimal64/Decimal64TypeWithoutFraction.yang
similarity index 100%
rename from plugin/maven/src/test/resources/decimal64/Decimal64TypeWithoutFraction.yang
rename to compiler/base/parser/src/test/resources/decimal64/Decimal64TypeWithoutFraction.yang
diff --git a/plugin/maven/src/test/resources/decimal64/Decimal64TypedefStatement.yang b/compiler/base/parser/src/test/resources/decimal64/Decimal64TypedefStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/decimal64/Decimal64TypedefStatement.yang
rename to compiler/base/parser/src/test/resources/decimal64/Decimal64TypedefStatement.yang
diff --git a/plugin/maven/src/test/resources/default/DefaultCaseInChoiceSubStatement.yang b/compiler/base/parser/src/test/resources/default/DefaultCaseInChoiceSubStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/default/DefaultCaseInChoiceSubStatement.yang
rename to compiler/base/parser/src/test/resources/default/DefaultCaseInChoiceSubStatement.yang
diff --git a/plugin/maven/src/test/resources/default/DefaultInvalidValueBinaryInLeaf.yang b/compiler/base/parser/src/test/resources/default/DefaultInvalidValueBinaryInLeaf.yang
similarity index 100%
rename from plugin/maven/src/test/resources/default/DefaultInvalidValueBinaryInLeaf.yang
rename to compiler/base/parser/src/test/resources/default/DefaultInvalidValueBinaryInLeaf.yang
diff --git a/plugin/maven/src/test/resources/default/DefaultInvalidValueBitsInLeaf.yang b/compiler/base/parser/src/test/resources/default/DefaultInvalidValueBitsInLeaf.yang
similarity index 100%
rename from plugin/maven/src/test/resources/default/DefaultInvalidValueBitsInLeaf.yang
rename to compiler/base/parser/src/test/resources/default/DefaultInvalidValueBitsInLeaf.yang
diff --git a/plugin/maven/src/test/resources/default/DefaultInvalidValueBooleanInLeaf.yang b/compiler/base/parser/src/test/resources/default/DefaultInvalidValueBooleanInLeaf.yang
similarity index 100%
rename from plugin/maven/src/test/resources/default/DefaultInvalidValueBooleanInLeaf.yang
rename to compiler/base/parser/src/test/resources/default/DefaultInvalidValueBooleanInLeaf.yang
diff --git a/plugin/maven/src/test/resources/default/DefaultInvalidValueDecimal64InLeaf.yang b/compiler/base/parser/src/test/resources/default/DefaultInvalidValueDecimal64InLeaf.yang
similarity index 100%
rename from plugin/maven/src/test/resources/default/DefaultInvalidValueDecimal64InLeaf.yang
rename to compiler/base/parser/src/test/resources/default/DefaultInvalidValueDecimal64InLeaf.yang
diff --git a/plugin/maven/src/test/resources/default/DefaultInvalidValueEnumerationInLeaf.yang b/compiler/base/parser/src/test/resources/default/DefaultInvalidValueEnumerationInLeaf.yang
similarity index 100%
rename from plugin/maven/src/test/resources/default/DefaultInvalidValueEnumerationInLeaf.yang
rename to compiler/base/parser/src/test/resources/default/DefaultInvalidValueEnumerationInLeaf.yang
diff --git a/plugin/maven/src/test/resources/default/DefaultInvalidValueInChoiceSubStmt.yang b/compiler/base/parser/src/test/resources/default/DefaultInvalidValueInChoiceSubStmt.yang
similarity index 100%
rename from plugin/maven/src/test/resources/default/DefaultInvalidValueInChoiceSubStmt.yang
rename to compiler/base/parser/src/test/resources/default/DefaultInvalidValueInChoiceSubStmt.yang
diff --git a/plugin/maven/src/test/resources/default/DefaultInvalidValueInLeafSubStatement.yang b/compiler/base/parser/src/test/resources/default/DefaultInvalidValueInLeafSubStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/default/DefaultInvalidValueInLeafSubStatement.yang
rename to compiler/base/parser/src/test/resources/default/DefaultInvalidValueInLeafSubStatement.yang
diff --git a/plugin/maven/src/test/resources/default/DefaultInvalidValueInTypeDef.yang b/compiler/base/parser/src/test/resources/default/DefaultInvalidValueInTypeDef.yang
similarity index 100%
rename from plugin/maven/src/test/resources/default/DefaultInvalidValueInTypeDef.yang
rename to compiler/base/parser/src/test/resources/default/DefaultInvalidValueInTypeDef.yang
diff --git a/plugin/maven/src/test/resources/default/DefaultInvalidValueStringInLeaf.yang b/compiler/base/parser/src/test/resources/default/DefaultInvalidValueStringInLeaf.yang
similarity index 100%
rename from plugin/maven/src/test/resources/default/DefaultInvalidValueStringInLeaf.yang
rename to compiler/base/parser/src/test/resources/default/DefaultInvalidValueStringInLeaf.yang
diff --git a/plugin/maven/src/test/resources/default/DefaultInvalidValueUnionInLeaf.yang b/compiler/base/parser/src/test/resources/default/DefaultInvalidValueUnionInLeaf.yang
similarity index 100%
rename from plugin/maven/src/test/resources/default/DefaultInvalidValueUnionInLeaf.yang
rename to compiler/base/parser/src/test/resources/default/DefaultInvalidValueUnionInLeaf.yang
diff --git a/plugin/maven/src/test/resources/default/DefaultInvalidValueWithRangeInTypedef.yang b/compiler/base/parser/src/test/resources/default/DefaultInvalidValueWithRangeInTypedef.yang
similarity index 100%
rename from plugin/maven/src/test/resources/default/DefaultInvalidValueWithRangeInTypedef.yang
rename to compiler/base/parser/src/test/resources/default/DefaultInvalidValueWithRangeInTypedef.yang
diff --git a/plugin/maven/src/test/resources/default/DefaultValueBinaryInLeaf.yang b/compiler/base/parser/src/test/resources/default/DefaultValueBinaryInLeaf.yang
similarity index 100%
rename from plugin/maven/src/test/resources/default/DefaultValueBinaryInLeaf.yang
rename to compiler/base/parser/src/test/resources/default/DefaultValueBinaryInLeaf.yang
diff --git a/plugin/maven/src/test/resources/default/DefaultValueBitsInLeaf.yang b/compiler/base/parser/src/test/resources/default/DefaultValueBitsInLeaf.yang
similarity index 100%
rename from plugin/maven/src/test/resources/default/DefaultValueBitsInLeaf.yang
rename to compiler/base/parser/src/test/resources/default/DefaultValueBitsInLeaf.yang
diff --git a/plugin/maven/src/test/resources/default/DefaultValueBooleanInLeaf.yang b/compiler/base/parser/src/test/resources/default/DefaultValueBooleanInLeaf.yang
similarity index 100%
rename from plugin/maven/src/test/resources/default/DefaultValueBooleanInLeaf.yang
rename to compiler/base/parser/src/test/resources/default/DefaultValueBooleanInLeaf.yang
diff --git a/plugin/maven/src/test/resources/default/DefaultValueDecimal64InLeaf.yang b/compiler/base/parser/src/test/resources/default/DefaultValueDecimal64InLeaf.yang
similarity index 100%
rename from plugin/maven/src/test/resources/default/DefaultValueDecimal64InLeaf.yang
rename to compiler/base/parser/src/test/resources/default/DefaultValueDecimal64InLeaf.yang
diff --git a/plugin/maven/src/test/resources/default/DefaultValueDerivedInTypedef.yang b/compiler/base/parser/src/test/resources/default/DefaultValueDerivedInTypedef.yang
similarity index 100%
rename from plugin/maven/src/test/resources/default/DefaultValueDerivedInTypedef.yang
rename to compiler/base/parser/src/test/resources/default/DefaultValueDerivedInTypedef.yang
diff --git a/plugin/maven/src/test/resources/default/DefaultValueEmptyInLeaf.yang b/compiler/base/parser/src/test/resources/default/DefaultValueEmptyInLeaf.yang
similarity index 100%
rename from plugin/maven/src/test/resources/default/DefaultValueEmptyInLeaf.yang
rename to compiler/base/parser/src/test/resources/default/DefaultValueEmptyInLeaf.yang
diff --git a/plugin/maven/src/test/resources/default/DefaultValueEnumerationInLeaf.yang b/compiler/base/parser/src/test/resources/default/DefaultValueEnumerationInLeaf.yang
similarity index 100%
rename from plugin/maven/src/test/resources/default/DefaultValueEnumerationInLeaf.yang
rename to compiler/base/parser/src/test/resources/default/DefaultValueEnumerationInLeaf.yang
diff --git a/plugin/maven/src/test/resources/default/DefaultValueInLeafSubStatement.yang b/compiler/base/parser/src/test/resources/default/DefaultValueInLeafSubStatement.yang
similarity index 100%
rename from plugin/maven/src/test/resources/default/DefaultValueInLeafSubStatement.yang
rename to compiler/base/parser/src/test/resources/default/DefaultValueInLeafSubStatement.yang
diff --git a/plugin/maven/src/test/resources/default/DefaultValueInMultiTypeDef.yang b/compiler/base/parser/src/test/resources/default/DefaultValueInMultiTypeDef.yang
similarity index 100%
rename from plugin/maven/src/test/resources/default/DefaultValueInMultiTypeDef.yang
rename to compiler/base/parser/src/test/resources/default/DefaultValueInMultiTypeDef.yang
diff --git a/plugin/maven/src/test/resources/default/DefaultValueInTypeDef.yang b/compiler/base/parser/src/test/resources/default/DefaultValueInTypeDef.yang
similarity index 100%
rename from plugin/maven/src/test/resources/default/DefaultValueInTypeDef.yang
rename to compiler/base/parser/src/test/resources/default/DefaultValueInTypeDef.yang
diff --git a/plugin/maven/src/test/resources/default/DefaultValueStringInLeaf.yang b/compiler/base/parser/src/test/resources/default/DefaultValueStringInLeaf.yang
similarity index 100%
rename from plugin/maven/src/test/resources/default/DefaultValueStringInLeaf.yang
rename to compiler/base/parser/src/test/resources/default/DefaultValueStringInLeaf.yang
diff --git a/plugin/maven/src/test/resources/default/DefaultValueUnionInLeaf.yang b/compiler/base/parser/src/test/resources/default/DefaultValueUnionInLeaf.yang
similarity index 100%
rename from plugin/maven/src/test/resources/default/DefaultValueUnionInLeaf.yang
rename to compiler/base/parser/src/test/resources/default/DefaultValueUnionInLeaf.yang
diff --git a/plugin/maven/src/test/resources/leafRefPathConcatenation.yang b/compiler/base/parser/src/test/resources/leafRefPathConcatenation.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafRefPathConcatenation.yang
rename to compiler/base/parser/src/test/resources/leafRefPathConcatenation.yang
diff --git a/plugin/maven/src/test/resources/processTypeDef.yang b/compiler/base/parser/src/test/resources/processTypeDef.yang
similarity index 100%
rename from plugin/maven/src/test/resources/processTypeDef.yang
rename to compiler/base/parser/src/test/resources/processTypeDef.yang
diff --git a/compiler/base/pom.xml b/compiler/base/pom.xml
new file mode 100644
index 0000000..d29c6a3
--- /dev/null
+++ b/compiler/base/pom.xml
@@ -0,0 +1,59 @@
+<!--
+ ~ Copyright 2016-present Open Networking Laboratory
+ ~
+ ~ Licensed 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
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License 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.
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-compiler</artifactId>
+ <version>1.12-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>onos-yang-compiler-base</artifactId>
+ <packaging>pom</packaging>
+
+ <modules>
+ <module>datamodel</module>
+ <module>translator</module>
+ <module>linker</module>
+ <module>utils</module>
+ <module>parser</module>
+ <module>tool</module>
+ </modules>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>3.0.2</version>
+ <configuration>
+ <skipIfEmpty>true</skipIfEmpty>
+ </configuration>
+ <executions>
+ <execution>
+ <id>default</id>
+ <goals>
+ <goal>test-jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/compiler/base/tool/pom.xml b/compiler/base/tool/pom.xml
new file mode 100644
index 0000000..005b2a7
--- /dev/null
+++ b/compiler/base/tool/pom.xml
@@ -0,0 +1,86 @@
+<!--
+ ~ Copyright 2016-present Open Networking Laboratory
+ ~
+ ~ Licensed 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
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License 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.
+ -->
+
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-compiler-base</artifactId>
+ <version>1.12-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>onos-yang-compiler-tool</artifactId>
+ <version>1.12-SNAPSHOT</version>
+ <packaging>jar</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>1.7.21</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-compiler-datamodel</artifactId>
+ <version>1.12-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-compiler-translator</artifactId>
+ <version>1.12-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-compiler-linker</artifactId>
+ <version>1.12-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-compiler-utils</artifactId>
+ <version>1.12-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-compiler-parser</artifactId>
+ <version>1.12-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>3.0.2</version>
+ <configuration>
+ <skipIfEmpty>true</skipIfEmpty>
+ </configuration>
+ <executions>
+ <execution>
+ <id>default</id>
+ <goals>
+ <goal>test-jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/compiler/base/tool/src/main/java/org/onosproject/yang/compiler/base/tool/CallablePlugin.java b/compiler/base/tool/src/main/java/org/onosproject/yang/compiler/base/tool/CallablePlugin.java
new file mode 100644
index 0000000..46cc1c1
--- /dev/null
+++ b/compiler/base/tool/src/main/java/org/onosproject/yang/compiler/base/tool/CallablePlugin.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.base.tool;
+
+import java.io.IOException;
+
+/**
+ * Abstractions of the hooks that needs to be supported by plugins, which
+ * will be used in by tool to be plugin agnostic.
+ */
+public interface CallablePlugin {
+
+ /**
+ * Adds generated source directory to the compilation root.
+ */
+ void addGeneratedCodeToBundle();
+
+ /**
+ * serialize the compiled schema and place it in the appropriate location
+ * so that it will be part of the generated OSGi bundle.
+ *
+ * @throws IOException when fails to do IO operations
+ */
+ void addCompiledSchemaToBundle()
+ throws IOException;
+
+
+ /**
+ * Add the YANG files in the bundle, to support YANG display in protocols
+ * like RESTCONF.
+ *
+ * @throws IOException when fails to do IO operations
+ */
+ void addYangFilesToBundle() throws IOException;
+}
diff --git a/compiler/base/tool/src/main/java/org/onosproject/yang/compiler/base/tool/ToolConstants.java b/compiler/base/tool/src/main/java/org/onosproject/yang/compiler/base/tool/ToolConstants.java
new file mode 100644
index 0000000..b5640b6
--- /dev/null
+++ b/compiler/base/tool/src/main/java/org/onosproject/yang/compiler/base/tool/ToolConstants.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.base.tool;
+
+/**
+ * Represents common constant utility for YANG tool.
+ */
+final class ToolConstants {
+ private ToolConstants() {
+
+ }
+
+ static final String E_MISSING_INPUT = "Missing extected input ";
+ static final String E_CODE_GEN_PATH = "Missing plugin code gen directory";
+}
diff --git a/compiler/base/tool/src/main/java/org/onosproject/yang/compiler/base/tool/YangFileInfo.java b/compiler/base/tool/src/main/java/org/onosproject/yang/compiler/base/tool/YangFileInfo.java
new file mode 100644
index 0000000..84b201e
--- /dev/null
+++ b/compiler/base/tool/src/main/java/org/onosproject/yang/compiler/base/tool/YangFileInfo.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.base.tool;
+
+
+import org.onosproject.yang.compiler.datamodel.YangNode;
+
+import java.util.Objects;
+
+/**
+ * Represents YANG file information.
+ */
+public class YangFileInfo {
+
+ /**
+ * YANG file name.
+ */
+ private String yangFileName;
+
+ /**
+ * Data model node after parsing YANG file.
+ */
+ private YangNode rootNode;
+
+ /**
+ * Flag to know if the root node require to be translated.
+ */
+ private boolean isForTranslator = true;
+
+ /**
+ * Returns data model node for YANG file.
+ *
+ * @return data model node for YANG file
+ */
+ public YangNode getRootNode() {
+ return rootNode;
+ }
+
+ /**
+ * Sets data model node for YANG file.
+ *
+ * @param rootNode of the Yang file
+ */
+ public void setRootNode(YangNode rootNode) {
+ this.rootNode = rootNode;
+ }
+
+ /**
+ * Returns YANG file name.
+ *
+ * @return yangFileName YANG file name
+ */
+ public String getYangFileName() {
+ return yangFileName;
+ }
+
+ /**
+ * Sets YANG file name.
+ *
+ * @param yangFileName YANG file name
+ */
+ public void setYangFileName(String yangFileName) {
+ this.yangFileName = yangFileName;
+ }
+
+ /**
+ * Returns true if node need to be translated.
+ *
+ * @return isForTranslator true if node need to be translated
+ */
+ public boolean isForTranslator() {
+ return isForTranslator;
+ }
+
+ /**
+ * Sets true if node need to be translated.
+ *
+ * @param isForTranslator true if node need to be translated
+ */
+ public void setForTranslator(boolean isForTranslator) {
+ this.isForTranslator = isForTranslator;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+
+ if (this == obj) {
+ return true;
+ }
+ if (obj instanceof YangFileInfo) {
+ final YangFileInfo other = (YangFileInfo) obj;
+ return Objects.equals(yangFileName, other.yangFileName);
+ }
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(yangFileName);
+ }
+}
diff --git a/compiler/base/tool/src/main/java/org/onosproject/yang/compiler/base/tool/YangToolManager.java b/compiler/base/tool/src/main/java/org/onosproject/yang/compiler/base/tool/YangToolManager.java
new file mode 100644
index 0000000..7378728
--- /dev/null
+++ b/compiler/base/tool/src/main/java/org/onosproject/yang/compiler/base/tool/YangToolManager.java
@@ -0,0 +1,332 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.base.tool;
+
+import org.onosproject.yang.compiler.parser.YangUtilsParser;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+import org.onosproject.yang.compiler.base.tool.exception.YangToolException;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangReferenceResolver;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.linker.YangLinker;
+import org.onosproject.yang.compiler.linker.exceptions.LinkerException;
+import org.onosproject.yang.compiler.linker.impl.YangLinkerManager;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+import org.slf4j.Logger;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+import java.nio.file.Files;
+import java.nio.file.StandardCopyOption;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
+import static java.util.Collections.sort;
+import static org.onosproject.yang.compiler.base.tool.ToolConstants.E_CODE_GEN_PATH;
+import static org.onosproject.yang.compiler.base.tool.ToolConstants.E_MISSING_INPUT;
+import static org.onosproject.yang.compiler.datamodel.ResolvableType.YANG_DERIVED_DATA_TYPE;
+import static org.onosproject.yang.compiler.datamodel.ResolvableType.YANG_IDENTITYREF;
+import static org.onosproject.yang.compiler.linker.impl.YangLinkerUtils.resolveGroupingInDefinationScope;
+import static org.onosproject.yang.compiler.translator.tojava.JavaCodeGeneratorUtil.generateJavaCode;
+import static org.onosproject.yang.compiler.translator.tojava.JavaCodeGeneratorUtil.translatorErrorHandler;
+import static org.onosproject.yang.compiler.utils.UtilConstants.NEW_LINE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SLASH;
+import static org.onosproject.yang.compiler.utils.UtilConstants.TEMP;
+import static org.onosproject.yang.compiler.utils.UtilConstants.YANG_RESOURCES;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.createDirectories;
+import static org.slf4j.LoggerFactory.getLogger;
+
+/**
+ * Represents ONOS YANG tool manager.
+ */
+public class YangToolManager {
+
+ public static final String DEFAULT_JAR_RES_PATH = SLASH + TEMP + SLASH +
+ YANG_RESOURCES + SLASH;
+ public static final String YANG_META_DATA = "YangMetaData";
+ public static final String SERIALIZED_FILE_EXTENSION = ".ser";
+ private static final Logger log = getLogger(YangToolManager.class);
+ private final YangUtilsParser yangUtilsParser = new YangUtilsParserManager();
+ private final YangLinker yangLinker = new YangLinkerManager();
+ private final Set<YangNode> yangNodeSet = new HashSet<>();
+ // YANG file information set.
+ private Set<YangFileInfo> yangFileInfoSet; //initialize in tool invocation;
+ private YangFileInfo curYangFileInfo = new YangFileInfo();
+
+ /**
+ * Provides a list of files from list of strings.
+ *
+ * @param yangFileInfo set of yang file information
+ * @return list of files
+ */
+ private static List<File> getListOfFile(Set<YangFileInfo> yangFileInfo) {
+ List<File> files = new ArrayList<>();
+ Iterator<YangFileInfo> yangFileIterator = yangFileInfo.iterator();
+ while (yangFileIterator.hasNext()) {
+ YangFileInfo yangFile = yangFileIterator.next();
+ if (yangFile.isForTranslator()) {
+ files.add(new File(yangFile.getYangFileName()));
+ }
+ }
+ return files;
+ }
+
+ /**
+ * Creates a YANG file info set.
+ *
+ * @param yangFileList YANG files list
+ * @return yang file info set
+ */
+ public Set<YangFileInfo> createYangFileInfoSet(List<String> yangFileList) {
+ if (yangFileInfoSet == null) {
+ yangFileInfoSet = new HashSet<>();
+ }
+ for (String yangFile : yangFileList) {
+ YangFileInfo yangFileInfo = new YangFileInfo();
+ yangFileInfo.setYangFileName(yangFile);
+ yangFileInfoSet.add(yangFileInfo);
+ }
+ return yangFileInfoSet;
+ }
+
+ /**
+ * Compile te YANG files and generate the corresponding Java files.
+ * Update the generated bundle with the schema metadata.
+ *
+ * @param yangFiles Application YANG files
+ * @param dependentSchema inter jar linked schema nodes
+ * @param config tool configuration
+ * @param plugin invoking plugin
+ * @throws IOException when fails to do IO operations
+ */
+ public void compileYangFiles(Set<YangFileInfo> yangFiles,
+ List<YangNode> dependentSchema,
+ YangPluginConfig config,
+ CallablePlugin plugin) throws IOException {
+
+ synchronized (yangFiles) {
+ try {
+
+ if (config == null) {
+ throw new YangToolException(E_MISSING_INPUT);
+ }
+ yangFileInfoSet = yangFiles;
+
+ if (config.getCodeGenDir() == null) {
+ throw new YangToolException(E_CODE_GEN_PATH);
+ }
+
+ // Check if there are any file to translate, if not return.
+ if (yangFileInfoSet == null || yangFileInfoSet.isEmpty()) {
+ // No files to translate
+ return;
+ }
+
+ createDirectories(config.resourceGenDir());
+
+ // Resolve inter jar dependency.
+ addSchemaToFileSet(dependentSchema);
+
+ // Carry out the parsing for all the YANG files.
+ parseYangFileInfoSet();
+
+ // Resolve dependencies using linker.
+ resolveDependenciesUsingLinker();
+
+ // Perform translation to JAVA.
+ translateToJava(config);
+
+ // Serialize data model.
+ Set<YangNode> compiledSchemas = new HashSet<>();
+ for (YangFileInfo fileInfo : yangFileInfoSet) {
+ compiledSchemas.add(fileInfo.getRootNode());
+ }
+
+ String serFileName = config.resourceGenDir() + YANG_META_DATA + SERIALIZED_FILE_EXTENSION;
+ FileOutputStream fileOutputStream = new FileOutputStream(serFileName);
+ ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
+ objectOutputStream.writeObject(compiledSchemas);
+ objectOutputStream.close();
+ fileOutputStream.close();
+
+ //add YANG files to JAR
+ List<File> files = getListOfFile(yangFileInfoSet);
+ String path = config.resourceGenDir();
+ File targetDir = new File(path);
+ targetDir.mkdirs();
+
+ for (File file : files) {
+ Files.copy(file.toPath(),
+ new File(path + file.getName()).toPath(),
+ StandardCopyOption.REPLACE_EXISTING);
+ }
+
+ if (plugin != null) {
+ plugin.addCompiledSchemaToBundle();
+ plugin.addGeneratedCodeToBundle();
+ plugin.addYangFilesToBundle();
+ }
+ } catch (IOException | ParserException e) {
+ YangToolException exception =
+ new YangToolException(e.getMessage(), e);
+ exception.setCurYangFile(curYangFileInfo);
+
+ if (curYangFileInfo != null &&
+ curYangFileInfo.getRootNode() != null) {
+ try {
+ translatorErrorHandler(curYangFileInfo.getRootNode(),
+ config);
+ } catch (IOException ex) {
+ e.printStackTrace();
+ throw ex;
+ }
+ }
+
+ throw exception;
+ }
+ }
+ }
+
+ /**
+ * Resolved inter-jar dependencies.
+ *
+ * @param dependentSchema dependent schema list
+ * @throws IOException when fails to do IO operations
+ */
+ private void addSchemaToFileSet(List<YangNode> dependentSchema)
+ throws IOException {
+ if (dependentSchema == null || dependentSchema.isEmpty()) {
+ return;
+ }
+
+ for (YangNode node : dependentSchema) {
+ YangFileInfo dependentFileInfo = new YangFileInfo();
+ node.setToTranslate(false);
+ dependentFileInfo.setRootNode(node);
+ dependentFileInfo.setForTranslator(false);
+ dependentFileInfo.setYangFileName(node.getName());
+ yangFileInfoSet.add(dependentFileInfo);
+ }
+ }
+
+ /**
+ * Links all the provided schema in the YANG file info set.
+ *
+ * @throws YangToolException failed to link schema
+ */
+ public void resolveDependenciesUsingLinker() {
+ createYangNodeSet();
+ try {
+ yangLinker.resolveDependencies(yangNodeSet);
+ } catch (LinkerException e) {
+ printLog(e.getFileName(), e.getLineNumber(), e.getCharPositionInLine(),
+ e.getMessage(), e.getLocalizedMessage());
+ throw new YangToolException(e.getMessage());
+ }
+ }
+
+ /**
+ * Creates YANG nodes set.
+ */
+ public void createYangNodeSet() {
+ for (YangFileInfo yangFileInfo : yangFileInfoSet) {
+ yangNodeSet.add(yangFileInfo.getRootNode());
+ }
+ }
+
+ /**
+ * Parses all the provided YANG files and generates YANG data model tree.
+ *
+ * @throws IOException a violation in IO
+ */
+ public void parseYangFileInfoSet()
+ throws IOException {
+ for (YangFileInfo yangFileInfo : yangFileInfoSet) {
+ curYangFileInfo = yangFileInfo;
+ if (yangFileInfo.isForTranslator()) {
+ try {
+ YangNode yangNode = yangUtilsParser.getDataModel(
+ yangFileInfo.getYangFileName());
+ yangFileInfo.setRootNode(yangNode);
+ resolveGroupingInDefinationScope((YangReferenceResolver) yangNode);
+ try {
+ ((YangReferenceResolver) yangNode)
+ .resolveSelfFileLinking(YANG_DERIVED_DATA_TYPE);
+ ((YangReferenceResolver) yangNode)
+ .resolveSelfFileLinking(YANG_IDENTITYREF);
+ } catch (DataModelException e) {
+ printLog(e.getFileName(), e.getLineNumber(), e
+ .getCharPositionInLine(), e.getMessage(), e
+ .getLocalizedMessage());
+ }
+ } catch (ParserException e) {
+ printLog(e.getFileName(), e.getLineNumber(), e
+ .getCharPositionInLine(), e.getMessage(), e
+ .getLocalizedMessage());
+ throw e;
+ }
+ }
+ }
+ }
+
+ /**
+ * Translates to java code corresponding to the YANG schema.
+ *
+ * @param pluginConfig YANG plugin config
+ * @throws IOException when fails to generate java code file the current node
+ */
+ public void translateToJava(YangPluginConfig pluginConfig)
+ throws IOException {
+ List<YangNode> yangNodeSortedList = new LinkedList<>();
+ yangNodeSortedList.addAll(yangNodeSet);
+ sort(yangNodeSortedList);
+ for (YangNode node : yangNodeSortedList) {
+ if (node.isToTranslate()) {
+ generateJavaCode(node, pluginConfig);
+ }
+ }
+ }
+
+ /**
+ * Adds log info for exception.
+ *
+ * @param fileName file name
+ * @param line line number
+ * @param position character position
+ * @param msg error message
+ * @param localMsg local message
+ */
+ private void printLog(String fileName, int line, int position, String
+ msg, String localMsg) {
+ String logInfo = "Error in file: " + fileName;
+ if (line != 0) {
+ logInfo = logInfo + " at line: " + line + " at position: "
+ + position;
+ }
+ if (msg != null) {
+ logInfo = logInfo + NEW_LINE + localMsg;
+ }
+ log.info(logInfo);
+ }
+}
diff --git a/compiler/base/tool/src/main/java/org/onosproject/yang/compiler/base/tool/exception/YangToolException.java b/compiler/base/tool/src/main/java/org/onosproject/yang/compiler/base/tool/exception/YangToolException.java
new file mode 100644
index 0000000..39bee83
--- /dev/null
+++ b/compiler/base/tool/src/main/java/org/onosproject/yang/compiler/base/tool/exception/YangToolException.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.base.tool.exception;
+
+import org.onosproject.yang.compiler.base.tool.YangFileInfo;
+
+/**
+ * Represents base class for exceptions in YANG tool operations.
+ */
+public class YangToolException extends RuntimeException {
+
+ private static final long serialVersionUID = 20161028L;
+
+ private YangFileInfo curYangFile;
+
+ /**
+ * Creates a new YANG tool exception with given message.
+ *
+ * @param message the detail of exception in string
+ */
+ public YangToolException(String message) {
+ super(message);
+ }
+
+ /**
+ * Creates a new tool exception from given message and cause.
+ *
+ * @param message the detail of exception in string
+ * @param cause underlying cause of the error
+ */
+ public YangToolException(final String message, final Throwable cause) {
+ super(message, cause);
+ }
+
+ /**
+ * Creates a new tool exception from cause.
+ *
+ * @param cause underlying cause of the error
+ */
+ public YangToolException(final Throwable cause) {
+ super(cause);
+ }
+
+ /**
+ * Retrieves the current YANG files for which exception has occured.
+ *
+ * @return current YANG file
+ */
+ public YangFileInfo getCurYangFile() {
+ return curYangFile;
+ }
+
+
+ /**
+ * Update the YANG file which caused the exception.
+ *
+ * @param curYangFile YANG files being processed
+ */
+ public void setCurYangFile(YangFileInfo curYangFile) {
+ this.curYangFile = curYangFile;
+ }
+}
diff --git a/compiler/base/translator/pom.xml b/compiler/base/translator/pom.xml
new file mode 100644
index 0000000..907c084
--- /dev/null
+++ b/compiler/base/translator/pom.xml
@@ -0,0 +1,69 @@
+<!--
+ ~ Copyright 2016-present Open Networking Laboratory
+ ~
+ ~ Licensed 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
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License 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.
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-compiler-base</artifactId>
+ <version>1.12-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>onos-yang-compiler-translator</artifactId>
+ <packaging>jar</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-compiler-datamodel</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-compiler-utils</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.8.2</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>3.0.2</version>
+ <configuration>
+ <skipIfEmpty>true</skipIfEmpty>
+ </configuration>
+ <executions>
+ <execution>
+ <id>default</id>
+ <goals>
+ <goal>test-jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/exception/InvalidNodeForTranslatorException.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/exception/InvalidNodeForTranslatorException.java
new file mode 100644
index 0000000..b3bde15
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/exception/InvalidNodeForTranslatorException.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.exception;
+
+/**
+ * Represents custom translator exception for translator's operations.
+ */
+public class InvalidNodeForTranslatorException extends RuntimeException {
+
+ private static final long serialVersionUID = 20160311L;
+ private transient String fileName;
+ private transient int lineNumber;
+ private transient int charPosition;
+
+ /**
+ * Creates a new exception.
+ */
+ public InvalidNodeForTranslatorException() {
+ super();
+ }
+
+ /**
+ * Creates a new exception with given message.
+ *
+ * @param message the detail of exception in string
+ */
+ public InvalidNodeForTranslatorException(String message) {
+ super(message);
+ }
+
+ /**
+ * Creates a new exception from given message and cause.
+ *
+ * @param message the detail of exception in string
+ * @param cause underlying cause of the error
+ */
+ public InvalidNodeForTranslatorException(final String message, final Throwable cause) {
+ super(message, cause);
+ }
+
+ /**
+ * Creates a new exception from cause.
+ *
+ * @param cause underlying cause of the error
+ */
+ public InvalidNodeForTranslatorException(final Throwable cause) {
+ super(cause);
+ }
+
+ /**
+ * Returns generated file name for the exception.
+ *
+ * @return generated file name for the exception
+ */
+ public String getFileName() {
+ return this.fileName;
+ }
+
+ /**
+ * Returns line number of the exception.
+ *
+ * @return line number of the exception
+ */
+ public int getLineNumber() {
+ return this.lineNumber;
+ }
+
+ /**
+ * Returns position of the exception.
+ *
+ * @return position of the exception
+ */
+ public int getCharPositionInLine() {
+ return this.charPosition;
+ }
+
+ /**
+ * Sets line number of YANG file.
+ *
+ * @param line line number of YANG file
+ */
+ public void setLine(int line) {
+ this.lineNumber = line;
+ }
+
+ /**
+ * Sets position of exception.
+ *
+ * @param charPosition position of exception
+ */
+ public void setCharPosition(int charPosition) {
+ this.charPosition = charPosition;
+ }
+
+ /**
+ * Sets file name in exception.
+ *
+ * @param fileName YANG file name
+ */
+ public void setFileName(String fileName) {
+ this.fileName = fileName;
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/exception/TranslatorException.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/exception/TranslatorException.java
new file mode 100644
index 0000000..4664977
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/exception/TranslatorException.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.exception;
+
+/**
+ * Represents custom translator exception for translator's operations.
+ */
+public class TranslatorException extends RuntimeException {
+
+ private static final long serialVersionUID = 20160311L;
+ private transient String fileName;
+ private transient int lineNumber;
+ private transient int charPosition;
+
+ /**
+ * Create a new translator exception.
+ */
+ public TranslatorException() {
+ super();
+ }
+
+ /**
+ * Creates a new translator exception with given message.
+ *
+ * @param message the detail of exception in string
+ */
+ public TranslatorException(String message) {
+ super(message);
+ }
+
+ /**
+ * Creates a new translator exception from given message and cause.
+ *
+ * @param message the detail of exception in string
+ * @param cause underlying cause of the error
+ */
+ public TranslatorException(final String message, final Throwable cause) {
+ super(message, cause);
+ }
+
+ /**
+ * Creates a new translator exception from cause.
+ *
+ * @param cause underlying cause of the error
+ */
+ public TranslatorException(final Throwable cause) {
+ super(cause);
+ }
+
+ /**
+ * Returns line number of the exception.
+ *
+ * @return line number of the exception
+ */
+ public int getLineNumber() {
+ return this.lineNumber;
+ }
+
+ /**
+ * Returns YANG file name of the exception.
+ *
+ * @return YANG file name of the exception
+ */
+ public String getFileName() {
+ return this.fileName;
+ }
+
+ /**
+ * Returns position of the exception.
+ *
+ * @return position of the exception
+ */
+ public int getCharPositionInLine() {
+ return this.charPosition;
+ }
+
+ /**
+ * Sets line number of YANG file.
+ *
+ * @param line line number of YANG file
+ */
+ public void setLine(int line) {
+ this.lineNumber = line;
+ }
+
+ /**
+ * Sets position of exception.
+ *
+ * @param charPosition position of exception
+ */
+ public void setCharPosition(int charPosition) {
+ this.charPosition = charPosition;
+ }
+
+ /**
+ * Sets file name in translator exception.
+ *
+ * @param fileName YANG file name
+ */
+ public void setFileName(String fileName) {
+ this.fileName = fileName;
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/exception/package-info.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/exception/package-info.java
new file mode 100644
index 0000000..57e11dc
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/exception/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+/**
+ * Custom exception for translator.
+ */
+package org.onosproject.yang.compiler.translator.exception;
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/package-info.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/package-info.java
new file mode 100644
index 0000000..8589edb
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+/**
+ * Translator to generate class definition corresponding to YANG definition.
+ */
+package org.onosproject.yang.compiler.translator;
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/GeneratedJavaFileType.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/GeneratedJavaFileType.java
new file mode 100644
index 0000000..d0ac3b6
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/GeneratedJavaFileType.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava;
+
+/**
+ * Represents type of java files generated.
+ */
+public final class GeneratedJavaFileType {
+
+ /**
+ * Interface file.
+ */
+ public static final int INTERFACE_MASK = 1;
+
+ /**
+ * Builder interface file.
+ */
+ public static final int BUILDER_INTERFACE_MASK = 2;
+
+ /**
+ * Builder class file.
+ */
+ public static final int BUILDER_CLASS_MASK = 4;
+
+ /**
+ * Impl class file.
+ */
+ public static final int DEFAULT_CLASS_MASK = 8;
+
+ /**
+ * Interface and class file.
+ */
+ public static final int GENERATE_INTERFACE_WITH_BUILDER = 8207;
+
+ /**
+ * Java interface corresponding to rpc.
+ */
+ public static final int GENERATE_SERVICE_AND_MANAGER = 16;
+
+ /**
+ * Java class corresponding to YANG enumeration.
+ */
+ public static final int GENERATE_ENUM_CLASS = 32;
+
+ /**
+ * Java class corresponding to typedef.
+ */
+ public static final int GENERATE_TYPEDEF_CLASS = 64;
+
+ /**
+ * Java class corresponding to union.
+ */
+ public static final int GENERATE_UNION_CLASS = 128;
+
+ /**
+ * Java class corresponding to typedef.
+ */
+ static final int GENERATE_TYPE_CLASS = GENERATE_TYPEDEF_CLASS
+ | GENERATE_UNION_CLASS;
+
+ /**
+ * Event class.
+ */
+ public static final int GENERATE_EVENT_CLASS = 256;
+
+ /**
+ * Event listener class.
+ */
+ public static final int GENERATE_EVENT_LISTENER_INTERFACE = 512;
+
+ /**
+ * Event listener class.
+ */
+ public static final int GENERATE_EVENT_SUBJECT_CLASS = 1024;
+
+ /**
+ * Java classes for events.
+ */
+ public static final int GENERATE_ALL_EVENT_CLASS_MASK = GENERATE_EVENT_CLASS | GENERATE_EVENT_LISTENER_INTERFACE
+ | GENERATE_EVENT_SUBJECT_CLASS;
+
+ /**
+ * Identity listener class.
+ */
+ public static final int GENERATE_IDENTITY_CLASS = 2048;
+
+ /**
+ * Identity key class.
+ */
+ public static final int GENERATE_KEY_CLASS = 4096;
+
+ /**
+ * Creates an instance of generate java file type.
+ */
+ private GeneratedJavaFileType() {
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/GeneratedTempFileType.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/GeneratedTempFileType.java
new file mode 100644
index 0000000..ad410a1
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/GeneratedTempFileType.java
@@ -0,0 +1,162 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava;
+
+/**
+ * Represents type of temporary files generated.
+ */
+public final class GeneratedTempFileType {
+
+ /**
+ * Attributes definition temporary file.
+ */
+ public static final int ATTRIBUTES_MASK = 1; // 1 << 0
+
+ /**
+ * Getter methods for interface.
+ */
+ public static final int GETTER_FOR_INTERFACE_MASK = 1 << 1;
+
+ /**
+ * Getter methods for class.
+ */
+ public static final int GETTER_FOR_CLASS_MASK = 1 << 2;
+
+ /**
+ * Setter methods for interface.
+ */
+ public static final int SETTER_FOR_INTERFACE_MASK = 1 << 3;
+
+ /**
+ * Setter methods for class.
+ */
+ public static final int SETTER_FOR_CLASS_MASK = 1 << 4;
+
+ /**
+ * Constructor method of class.
+ */
+ public static final int CONSTRUCTOR_IMPL_MASK = 1 << 5;
+
+ /**
+ * Hash code implementation of class.
+ */
+ public static final int HASH_CODE_IMPL_MASK = 1 << 6;
+
+ /**
+ * Equals implementation of class.
+ */
+ public static final int EQUALS_IMPL_MASK = 1 << 7;
+
+ /**
+ * To string implementation of class.
+ */
+ public static final int TO_STRING_IMPL_MASK = 1 << 8;
+
+ /**
+ * Of string implementation of class.
+ */
+ public static final int OF_STRING_IMPL_MASK = 1 << 9;
+
+ /**
+ * Constructor for type class like typedef, union.
+ */
+ public static final int CONSTRUCTOR_FOR_TYPE_MASK = 1 << 10;
+
+ /**
+ * From string implementation of class.
+ */
+ public static final int FROM_STRING_IMPL_MASK = 1 << 11;
+
+ /**
+ * Enum implementation of class.
+ */
+ public static final int ENUM_IMPL_MASK = 1 << 12;
+
+ /**
+ * Rpc interface of module / sub module.
+ */
+ public static final int RPC_INTERFACE_MASK = 1 << 13;
+
+ /**
+ * Rpc implementation of module / sub module.
+ */
+ public static final int RPC_IMPL_MASK = 1 << 14;
+
+ /**
+ * Event enum implementation of class.
+ */
+ public static final int EVENT_ENUM_MASK = 1 << 15;
+
+ /**
+ * Event method implementation of class.
+ */
+ public static final int EVENT_METHOD_MASK = 1 << 16;
+
+ /**
+ * Event subject attribute implementation of class.
+ */
+ public static final int EVENT_SUBJECT_ATTRIBUTE_MASK = 1 << 17;
+
+ /**
+ * Event subject getter implementation of class.
+ */
+ public static final int EVENT_SUBJECT_GETTER_MASK = 1 << 18;
+
+ /**
+ * Event subject setter implementation of class.
+ */
+ public static final int EVENT_SUBJECT_SETTER_MASK = 1 << 19;
+
+ /**
+ * Add to list method interface for class.
+ */
+ public static final int ADD_TO_LIST_INTERFACE_MASK = 1 << 20;
+
+ /**
+ * Add to list method implementation for class.
+ */
+ public static final int ADD_TO_LIST_IMPL_MASK = 1 << 21;
+
+ /**
+ * Leaf identifier enum attributes for class.
+ */
+ public static final int LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK = 1 << 22;
+
+ /**
+ * Is filter content match for leaves class.
+ */
+ public static final int FILTER_CONTENT_MATCH_FOR_LEAF_MASK = 1 << 23;
+
+ /**
+ * Is filter content match for leaf lists class.
+ */
+ public static final int FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK = 1 << 24;
+
+ /**
+ * Is filter content match for nodes class.
+ */
+ public static final int FILTER_CONTENT_MATCH_FOR_NODES_MASK = 1 << 25;
+
+ /**
+ * Edit config class content for class.
+ */
+ public static final int EDIT_CONTENT_MASK = 1 << 26;
+
+ // No instantiation.
+ private GeneratedTempFileType() {
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/JavaAttributeInfo.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/JavaAttributeInfo.java
new file mode 100644
index 0000000..ae33803
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/JavaAttributeInfo.java
@@ -0,0 +1,344 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava;
+
+import org.onosproject.yang.compiler.datamodel.YangCompilerAnnotation;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.javadatamodel.JavaQualifiedTypeInfo;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaFileGeneratorUtils.isTypeLeafref;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaFileGeneratorUtils.isTypeNameLeafref;
+
+/**
+ * Represents the attribute info corresponding to class/interface generated.
+ */
+public final class JavaAttributeInfo {
+
+ /**
+ * The data type info of attribute.
+ */
+ private YangType<?> attrType;
+
+ /**
+ * Name of the attribute.
+ */
+ private String name;
+
+ /**
+ * If the added attribute is a list of info.
+ */
+ private boolean isListAttr;
+
+ /**
+ * If the added attribute has to be accessed in a fully qualified manner.
+ */
+ private boolean isQualifiedName;
+
+ /**
+ * The class info will be used to set the attribute type and package info
+ * will be use for qualified name.
+ */
+ private JavaQualifiedTypeInfoTranslator importInfo;
+
+ /**
+ * Compiler annotation attribute info.
+ */
+ private YangCompilerAnnotation compilerAnnotation;
+
+ /**
+ * If conflict occurs.
+ */
+ private boolean isIntConflict;
+
+ /**
+ * If conflict occurs.
+ */
+ private boolean isLongConflict;
+
+ /**
+ * If conflict occurs.
+ */
+ private boolean isShortConflict;
+
+ /**
+ * current holder or count in type list of attribute for from string method.
+ */
+ private String curHolderOrCount;
+
+ /**
+ * Creates a java attribute info object.
+ */
+ private JavaAttributeInfo() {
+ }
+
+ /**
+ * Creates object of java attribute info.
+ *
+ * @param attrType YANG type
+ * @param name attribute name
+ * @param isListAttr is list attribute
+ * @param isQualifiedName is qualified name
+ */
+ public JavaAttributeInfo(YangType<?> attrType, String name, boolean isListAttr, boolean isQualifiedName) {
+ this.attrType = attrType;
+ this.name = name;
+ this.isListAttr = isListAttr;
+ this.isQualifiedName = isQualifiedName;
+ }
+
+ /**
+ * Returns the data type info of attribute.
+ *
+ * @return the data type info of attribute
+ */
+ public YangType<?> getAttributeType() {
+ return attrType;
+ }
+
+ /**
+ * Sets the data type info of attribute.
+ *
+ * @param type the data type info of attribute
+ */
+ public void setAttributeType(YangType<?> type) {
+ attrType = type;
+ }
+
+ /**
+ * Returns name of the attribute.
+ *
+ * @return name of the attribute
+ */
+ public String getAttributeName() {
+
+ if (name == null) {
+ throw new TranslatorException("Expected java attribute name is null");
+ }
+ return name;
+ }
+
+ /**
+ * Sets name of the attribute.
+ *
+ * @param attrName name of the attribute
+ */
+ public void setAttributeName(String attrName) {
+ name = attrName;
+ }
+
+ /**
+ * Returns if the added attribute is a list of info.
+ *
+ * @return the if the added attribute is a list of info
+ */
+ public boolean isListAttr() {
+ return isListAttr;
+ }
+
+ /**
+ * Sets if the added attribute is a list of info.
+ *
+ * @param isList if the added attribute is a list of info
+ */
+ private void setListAttr(boolean isList) {
+ isListAttr = isList;
+ }
+
+ /**
+ * Returns if the added attribute has to be accessed in a fully qualified
+ * manner.
+ *
+ * @return the if the added attribute has to be accessed in a fully
+ * qualified manner.
+ */
+ public boolean isQualifiedName() {
+ return isQualifiedName;
+ }
+
+ /**
+ * Sets if the added attribute has to be accessed in a fully qualified
+ * manner.
+ *
+ * @param isQualified if the added attribute has to be accessed in a fully
+ * qualified manner
+ */
+ public void setIsQualifiedAccess(boolean isQualified) {
+ isQualifiedName = isQualified;
+ }
+
+ /**
+ * Returns the import info for the attribute type. It will be null, if the type
+ * is basic built-in java type.
+ *
+ * @return import info
+ */
+ public JavaQualifiedTypeInfoTranslator getImportInfo() {
+ return importInfo;
+ }
+
+ /**
+ * Sets the import info for the attribute type.
+ *
+ * @param importInfo import info for the attribute type
+ */
+ public void setImportInfo(JavaQualifiedTypeInfoTranslator importInfo) {
+ this.importInfo = importInfo;
+ }
+
+ /**
+ * Returns the compiler annotation.
+ *
+ * @return compiler annotation info
+ */
+ public YangCompilerAnnotation getCompilerAnnotation() {
+ return compilerAnnotation;
+ }
+
+ /**
+ * Sets the compiler annotation.
+ *
+ * @param compilerAnnotation the compiler annotation to set
+ */
+ public void setCompilerAnnotation(YangCompilerAnnotation compilerAnnotation) {
+ this.compilerAnnotation = compilerAnnotation;
+ }
+
+ /**
+ * Returns true if conflict between int and uint.
+ *
+ * @return true if conflict between int and uInt
+ */
+ public boolean isIntConflict() {
+ return isIntConflict;
+ }
+
+ /**
+ * Sets true if conflict between int and uInt.
+ *
+ * @param intConflict true if conflict between int and uInt
+ */
+ void setIntConflict(boolean intConflict) {
+ isIntConflict = intConflict;
+ }
+
+ /**
+ * Returns true if conflict between long and uLong.
+ *
+ * @return true if conflict between long and uLong
+ */
+ public boolean isLongConflict() {
+ return isLongConflict;
+ }
+
+ /**
+ * Sets true if conflict between long and uLong.
+ *
+ * @param longConflict true if conflict between long and uLong
+ */
+ void setLongConflict(boolean longConflict) {
+ isLongConflict = longConflict;
+ }
+
+ /**
+ * Returns true if conflict between short and uint8.
+ *
+ * @return true if conflict between short and uint8
+ */
+ public boolean isShortConflict() {
+ return isShortConflict;
+ }
+
+ /**
+ * Sets true if conflict between short and uint8.
+ *
+ * @param shortConflict true if conflict between short and uint8
+ */
+ public void setShortConflict(boolean shortConflict) {
+ isShortConflict = shortConflict;
+ }
+
+ /**
+ * Returns java attribute info.
+ *
+ * @param importInfo java qualified type info
+ * @param attributeName attribute name
+ * @param attributeType attribute type
+ * @param isQualifiedAccess is the attribute a qualified access
+ * @param isListAttribute is list attribute
+ * @return java attribute info.
+ */
+ public static JavaAttributeInfo getAttributeInfoForTheData(JavaQualifiedTypeInfo importInfo,
+ String attributeName,
+ YangType<?> attributeType, boolean isQualifiedAccess,
+ boolean isListAttribute) {
+
+ if (attributeType != null) {
+ attributeType = isTypeLeafref(attributeType);
+ }
+ attributeName = isTypeNameLeafref(attributeName, attributeType);
+ JavaAttributeInfo newAttr = new JavaAttributeInfo();
+ newAttr.setImportInfo((JavaQualifiedTypeInfoTranslator) importInfo);
+ newAttr.setAttributeName(attributeName);
+ newAttr.setAttributeType(attributeType);
+ newAttr.setIsQualifiedAccess(isQualifiedAccess);
+ newAttr.setListAttr(isListAttribute);
+
+ return newAttr;
+ }
+
+ /**
+ * Returns java attribute info.
+ *
+ * @param importInfo java qualified type info
+ * @param attributeName attribute name
+ * @param attributeType attribute type
+ * @param isQualifiedAccess is the attribute a qualified access
+ * @param isListAttribute is list attribute
+ * @param compilerAnnotation compiler annotation
+ * @return java attribute info.
+ */
+ static JavaAttributeInfo getAttributeInfoForTheData(JavaQualifiedTypeInfoTranslator importInfo,
+ String attributeName, YangType<?> attributeType,
+ boolean isQualifiedAccess, boolean isListAttribute,
+ YangCompilerAnnotation compilerAnnotation) {
+ JavaAttributeInfo newAttr = getAttributeInfoForTheData(importInfo, attributeName, attributeType,
+ isQualifiedAccess, isListAttribute);
+
+ newAttr.setCompilerAnnotation(compilerAnnotation);
+
+ return newAttr;
+ }
+
+ /**
+ * Returns current holder or count in type list of attribute for from string method.
+ *
+ * @return current holder or count in type list of attribute for from string method
+ */
+ public String getCurHolderOrCount() {
+ return curHolderOrCount;
+ }
+
+ /**
+ * Sets current holder or count in type list of attribute for from string method.
+ *
+ * @param curHolderOrCount current holder or count in type list of attribute for from string method
+ */
+ public void setCurHolderOrCount(String curHolderOrCount) {
+ this.curHolderOrCount = curHolderOrCount;
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/JavaCodeGenerator.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/JavaCodeGenerator.java
new file mode 100644
index 0000000..d0f499e
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/JavaCodeGenerator.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava;
+
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+
+import java.io.IOException;
+
+/**
+ * Abstraction of an entity which provides Code generator functionalities.
+ */
+public interface JavaCodeGenerator {
+
+ /**
+ * Traverse the schema of application and generate corresponding code.
+ *
+ * @param yangPlugin YANG plugin config
+ * @throws TranslatorException when fails to translate the data model tree
+ */
+ void generateCodeEntry(YangPluginConfig yangPlugin)
+ throws TranslatorException;
+
+ /**
+ * Traverse the schema of application and generate corresponding code.
+ *
+ * @throws TranslatorException when fails to generate java code
+ * @throws IOException a violation in IO rule
+ */
+ void generateCodeExit()
+ throws TranslatorException, IOException;
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/JavaCodeGeneratorInfo.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/JavaCodeGeneratorInfo.java
new file mode 100644
index 0000000..4724afb
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/JavaCodeGeneratorInfo.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava;
+
+import org.onosproject.yang.compiler.datamodel.LocationInfo;
+
+/**
+ * Represents YANG java info containing interface for java code generator, java
+ * file information, java import data and temp java code fragment files. This
+ * interface serves as a generic interface and help to unify the generate code
+ * entry function.
+ */
+public interface JavaCodeGeneratorInfo
+ extends JavaFileInfoContainer, TempJavaCodeFragmentFilesContainer, LocationInfo {
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/JavaCodeGeneratorUtil.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/JavaCodeGeneratorUtil.java
new file mode 100644
index 0000000..1910d65
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/JavaCodeGeneratorUtil.java
@@ -0,0 +1,316 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava;
+
+import org.onosproject.yang.compiler.datamodel.TraversalType;
+import org.onosproject.yang.compiler.datamodel.YangInput;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.YangOutput;
+import org.onosproject.yang.compiler.translator.exception.InvalidNodeForTranslatorException;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+
+import java.io.IOException;
+
+import static org.onosproject.yang.compiler.datamodel.TraversalType.CHILD;
+import static org.onosproject.yang.compiler.datamodel.TraversalType.PARENT;
+import static org.onosproject.yang.compiler.datamodel.TraversalType.ROOT;
+import static org.onosproject.yang.compiler.datamodel.TraversalType.SIBILING;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.searchAndDeleteTempDir;
+
+/**
+ * Representation of java code generator based on application schema.
+ */
+public final class JavaCodeGeneratorUtil {
+
+ /**
+ * Creates a java code generator utility object.
+ */
+ private JavaCodeGeneratorUtil() {
+ }
+
+ /**
+ * Generates Java code files corresponding to the YANG schema.
+ *
+ * @param rootNode root node of the data model tree
+ * @param yangPlugin YANG plugin config
+ * @throws TranslatorException when fails to generate java code file the current node
+ * @throws IOException when fails to do IO operations
+ */
+ public static void generateJavaCode(YangNode rootNode, YangPluginConfig yangPlugin)
+ throws TranslatorException, IOException {
+
+ YangNode codeGenNode = rootNode;
+ TraversalType curTraversal = ROOT;
+
+ while (codeGenNode != null) {
+ if (curTraversal != PARENT) {
+ if (!(codeGenNode instanceof JavaCodeGenerator)) {
+ throw new TranslatorException("Unsupported node to generate code " +
+ codeGenNode.getName() + " in " + codeGenNode.getLineNumber() + " at "
+ + codeGenNode.getCharPosition() + " in " + codeGenNode.getFileName());
+ }
+ try {
+ generateCodeEntry(codeGenNode, yangPlugin, rootNode);
+ codeGenNode.setNameSpaceAndAddToParentSchemaMap();
+ } catch (InvalidNodeForTranslatorException e) {
+ if (codeGenNode.getNextSibling() != null) {
+ curTraversal = SIBILING;
+ codeGenNode = codeGenNode.getNextSibling();
+ } else {
+ curTraversal = PARENT;
+ codeGenNode = codeGenNode.getParent();
+ }
+ continue;
+ } catch (Exception e) {
+ e.printStackTrace();
+ close(codeGenNode, yangPlugin, rootNode);
+ throw new TranslatorException(e.getMessage());
+ }
+ }
+ if (curTraversal != PARENT && codeGenNode.getChild() != null) {
+ curTraversal = CHILD;
+ codeGenNode = codeGenNode.getChild();
+ } else if (codeGenNode.getNextSibling() != null) {
+ try {
+ generateCodeExit(codeGenNode, yangPlugin, rootNode);
+ } catch (Exception e) {
+ e.printStackTrace();
+ close(codeGenNode, yangPlugin, rootNode);
+ throw new TranslatorException(e.getMessage());
+ }
+ curTraversal = SIBILING;
+ codeGenNode = codeGenNode.getNextSibling();
+ } else {
+ try {
+ generateCodeExit(codeGenNode, yangPlugin, rootNode);
+ } catch (Exception e) {
+ e.printStackTrace();
+ close(codeGenNode, yangPlugin, rootNode);
+ throw new TranslatorException(e.getMessage());
+ }
+ curTraversal = PARENT;
+ codeGenNode = codeGenNode.getParent();
+ }
+ }
+ }
+
+ /**
+ * Generates the current nodes code snippet.
+ *
+ * @param codeGenNode current data model node for which the code needs to be generated
+ * @param yangPlugin YANG plugin config
+ * @param rootNode YANG root node
+ * @throws TranslatorException when fails to generate java code file the current node
+ * @throws IOException when fails to do IO operations
+ */
+ private static void generateCodeEntry(YangNode codeGenNode,
+ YangPluginConfig yangPlugin,
+ YangNode rootNode)
+ throws TranslatorException, IOException {
+
+ if (codeGenNode instanceof JavaCodeGenerator) {
+ ((JavaCodeGenerator) codeGenNode).generateCodeEntry(yangPlugin);
+ } else {
+ close(codeGenNode, yangPlugin, rootNode);
+ throw new TranslatorException(
+ "Generated data model node cannot be translated to target language code for " +
+ codeGenNode.getName() + " in " + codeGenNode.getLineNumber()
+ + " at " + codeGenNode.getCharPosition() + " in " + codeGenNode.getFileName());
+ }
+ }
+
+ /**
+ * Generates the current nodes code target code from the snippet.
+ *
+ * @param codeGenNode current data model node for which the code needs to be generated
+ * @param pluginConfig plugin configurations
+ * @param rootNode YANG root node
+ * @throws TranslatorException when fails to generate java code file the current node
+ * @throws IOException when fails to do IO operations
+ */
+ private static void generateCodeExit(YangNode codeGenNode,
+ YangPluginConfig pluginConfig,
+ YangNode rootNode)
+ throws TranslatorException, IOException {
+
+ if (codeGenNode instanceof JavaCodeGenerator) {
+ ((JavaCodeGenerator) codeGenNode).generateCodeExit();
+ } else {
+ close(codeGenNode, pluginConfig, rootNode);
+ throw new TranslatorException(
+ "Generated data model node cannot be translated to target language code for " +
+ codeGenNode.getName() + " in " + codeGenNode.getLineNumber()
+ + " at " + codeGenNode.getCharPosition() + " in " + codeGenNode.getFileName());
+ }
+ }
+
+ /**
+ * Free other YANG nodes of data-model tree when error occurs while file generation of current node.
+ *
+ * @param freedNode current data model node
+ */
+ private static void freeRestResources(YangNode freedNode) {
+
+ if (freedNode != null) {
+ YangNode tempNode = freedNode;
+ TraversalType curTraversal = ROOT;
+
+ while (freedNode != tempNode.getParent()) {
+
+ if (curTraversal != PARENT && freedNode.getChild() != null) {
+ curTraversal = CHILD;
+ freedNode = freedNode.getChild();
+ } else if (freedNode.getNextSibling() != null) {
+ curTraversal = SIBILING;
+ if (freedNode != tempNode) {
+ free(freedNode);
+ }
+ freedNode = freedNode.getNextSibling();
+ } else {
+ curTraversal = PARENT;
+ if (freedNode != tempNode) {
+ free(freedNode);
+ }
+ freedNode = freedNode.getParent();
+ }
+ }
+ }
+ }
+
+ /**
+ * Free the current node.
+ *
+ * @param node YANG node
+ */
+ private static void free(YangNode node) {
+
+ YangNode parent = node.getParent();
+ parent.setChild(null);
+
+ if (node.getNextSibling() != null) {
+ parent.setChild(node.getNextSibling());
+ } else if (node.getPreviousSibling() != null) {
+ parent.setChild(node.getPreviousSibling());
+ }
+ node = null;
+ }
+
+ /**
+ * Delete Java code files corresponding to the YANG schema.
+ *
+ * @param rootNode root node of data-model tree
+ * @param yangPluginConfig plugin configurations
+ * @throws IOException when fails to delete java code file the current node
+ */
+ public static void translatorErrorHandler(YangNode rootNode, YangPluginConfig yangPluginConfig)
+ throws IOException {
+
+ if (rootNode != null) {
+
+ // Start removing all open files.
+ YangNode tempNode = rootNode;
+ YangNode curNode = tempNode.getChild();
+ TraversalType curTraversal = ROOT;
+
+ while (tempNode != null) {
+
+ if (curTraversal != PARENT) {
+ close(tempNode, yangPluginConfig, rootNode);
+ }
+ if (curTraversal != PARENT && tempNode.getChild() != null) {
+ curTraversal = CHILD;
+ tempNode = tempNode.getChild();
+ } else if (tempNode.getNextSibling() != null) {
+ curTraversal = SIBILING;
+ tempNode = tempNode.getNextSibling();
+ } else {
+ curTraversal = PARENT;
+ tempNode = tempNode.getParent();
+ }
+ }
+
+ freeRestResources(curNode);
+ }
+ }
+
+ /**
+ * Closes all the current open file handles of node and delete all generated files.
+ *
+ * @param node current YANG node
+ * @param yangPlugin plugin configurations
+ * @param rootNode YANG root node
+ * @throws IOException when fails to do IO operations
+ */
+ private static void close(YangNode node, YangPluginConfig yangPlugin,
+ YangNode rootNode)
+ throws IOException {
+ if (node instanceof JavaCodeGenerator && ((TempJavaCodeFragmentFilesContainer) node)
+ .getTempJavaCodeFragmentFiles() != null) {
+ ((TempJavaCodeFragmentFilesContainer) node).getTempJavaCodeFragmentFiles().freeTemporaryResources(true);
+ }
+ if (rootNode != null) {
+ JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) rootNode).getJavaFileInfo();
+ if (javaFileInfo.getPackage() != null) {
+ searchAndDeleteTempDir(javaFileInfo.getBaseCodeGenPath() +
+ javaFileInfo.getPackageFilePath());
+ } else {
+ searchAndDeleteTempDir(yangPlugin.getCodeGenDir());
+ }
+ }
+ }
+
+ /**
+ * Searches child node in data model tree.
+ *
+ * @param parentNode parent node
+ * @param nodeType node type
+ * @param nodeName node name
+ * @return child node
+ */
+ public static YangNode searchYangNode(YangNode parentNode, YangNodeType nodeType, String nodeName) {
+ YangNode child = parentNode.getChild();
+ TraversalType curTraversal = ROOT;
+ if (child == null) {
+ throw new IllegalArgumentException("Given parent node does not contain any child nodes");
+ }
+
+ while (child != null) {
+ if (curTraversal != PARENT) {
+ if (child instanceof YangInput || child instanceof YangOutput) {
+ if (child.getNodeType().equals(nodeType)) {
+ return child;
+ }
+ } else if (child.getName().equals(nodeName) && child.getNodeType().equals(nodeType)) {
+ return child;
+ }
+ }
+ if (curTraversal != PARENT && child.getChild() != null) {
+ curTraversal = CHILD;
+ child = child.getChild();
+ } else if (child.getNextSibling() != null) {
+ curTraversal = SIBILING;
+ child = child.getNextSibling();
+ } else {
+ curTraversal = PARENT;
+ child = child.getParent();
+ }
+ }
+ return null;
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/JavaFileInfoContainer.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/JavaFileInfoContainer.java
new file mode 100644
index 0000000..f7db41b
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/JavaFileInfoContainer.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.translator.tojava;
+
+/**
+ * Represents data model nodes which are required to generate java classes, need to support
+ * java file info.
+ */
+public interface JavaFileInfoContainer {
+
+ /**
+ * Returns the generated java file information.
+ *
+ * @return generated java file information
+ */
+ JavaFileInfoTranslator getJavaFileInfo();
+
+ /**
+ * Sets the java file info object.
+ *
+ * @param javaInfo java file info object
+ */
+ void setJavaFileInfo(JavaFileInfoTranslator javaInfo);
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/JavaFileInfoTranslator.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/JavaFileInfoTranslator.java
new file mode 100644
index 0000000..053e3db
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/JavaFileInfoTranslator.java
@@ -0,0 +1,137 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava;
+
+import org.onosproject.yang.compiler.datamodel.javadatamodel.JavaFileInfo;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+
+/**
+ * Represents cached java file handle, which supports the addition of member attributes and
+ * methods.
+ */
+public class JavaFileInfoTranslator extends JavaFileInfo {
+
+ private static final long serialVersionUID = 806102633L;
+
+ /**
+ * The type(s) of java source file(s) to be generated when the cached file
+ * handle is closed.
+ */
+ private transient int genFileTypes;
+
+ /**
+ * File generation directory path.
+ */
+ private transient String relativeFilePath;
+
+ /**
+ * File generation base directory path.
+ */
+ private transient String codeGenDirFilePath;
+
+ /**
+ * Plugin configuration for naming convention.
+ */
+ private transient YangPluginConfig pluginConfig;
+
+ /**
+ * Returns the types of files being generated corresponding to the YANG
+ * definition.
+ *
+ * @return the types of files being generated corresponding to the YANG
+ * definition
+ */
+ public int getGeneratedFileTypes() {
+ return genFileTypes;
+ }
+
+ /**
+ * Sets the types of files being generated corresponding to the YANG
+ * definition.
+ *
+ * @param fileTypes the types of files being generated corresponding to the
+ * YANG definition
+ */
+ public void setGeneratedFileTypes(int fileTypes) {
+ genFileTypes = fileTypes;
+ }
+
+ /**
+ * Adds the types of files being generated corresponding to the YANG
+ * definition.
+ *
+ * @param fileTypes the types of files being generated corresponding to the
+ * YANG definition
+ */
+ public void addGeneratedFileTypes(int fileTypes) {
+ genFileTypes |= fileTypes;
+ }
+
+ /**
+ * Sets directory package path for code generation.
+ *
+ * @param path directory package path for code generation
+ */
+ public void setPackageFilePath(String path) {
+ relativeFilePath = path;
+ }
+
+ /**
+ * Returns directory package path for code generation.
+ *
+ * @return directory package path for code generation
+ */
+ public String getPackageFilePath() {
+ return relativeFilePath;
+ }
+
+ /**
+ * Returns base directory package path for code generation.
+ *
+ * @return directory package path for code generation
+ */
+ public String getBaseCodeGenPath() {
+ return codeGenDirFilePath;
+ }
+
+ /**
+ * Sets base directory package path for code generation.
+ *
+ * @param path base directory path
+ */
+ public void setBaseCodeGenPath(String path) {
+ codeGenDirFilePath = path;
+ }
+
+ /**
+ * Returns plugin configurations.
+ *
+ * @return the pluginConfig
+ */
+ public YangPluginConfig getPluginConfig() {
+ return pluginConfig;
+ }
+
+ /**
+ * Sets plugin configurations.
+ *
+ * @param pluginConfig the pluginConfig to set
+ */
+ public void setPluginConfig(YangPluginConfig pluginConfig) {
+ this.pluginConfig = pluginConfig;
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/JavaImportData.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/JavaImportData.java
new file mode 100644
index 0000000..59647f9
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/JavaImportData.java
@@ -0,0 +1,334 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.translator.tojava;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import static java.util.Collections.sort;
+import static java.util.Collections.unmodifiableSortedSet;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getImportString;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ABSTRACT_EVENT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ARRAY_LIST_IMPORT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BIG_INTEGER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BITSET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.COLLECTION_IMPORTS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EMPTY_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EVENT_LISTENER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.JAVA_LANG;
+import static org.onosproject.yang.compiler.utils.UtilConstants.JAVA_MATH;
+import static org.onosproject.yang.compiler.utils.UtilConstants.JAVA_UTIL_OBJECTS_IMPORT_CLASS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.JAVA_UTIL_PKG;
+import static org.onosproject.yang.compiler.utils.UtilConstants.JAVA_UTIL_REGEX_PKG;
+import static org.onosproject.yang.compiler.utils.UtilConstants.LIST;
+import static org.onosproject.yang.compiler.utils.UtilConstants.LISTENER_SERVICE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.MAP;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ONOS_EVENT_PKG;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PATTERN;
+import static org.onosproject.yang.compiler.utils.UtilConstants.QUEUE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SET;
+
+/**
+ * Represents that generated Java file can contain imports.
+ */
+public class JavaImportData {
+
+ /**
+ * Flag to denote if any list in imported.
+ */
+ private boolean isListToImport;
+ /**
+ * Flag to denote if any queue is imported due to compiler annotation.
+ */
+ private boolean isQueueToImport;
+ /**
+ * Flag to denote if any set is imported due to compiler annotation.
+ */
+ private boolean isSetToImport;
+ /**
+ * Flag to denote if any map is imported due to compiler annotation.
+ */
+ private boolean isMapToImport;
+
+ /**
+ * Sorted set of import info, to be used to maintain the set of classes to
+ * be imported in the generated class.
+ */
+ private final SortedSet<JavaQualifiedTypeInfoTranslator> importSet;
+
+ /**
+ * Creates java import data object.
+ */
+ public JavaImportData() {
+ importSet = new TreeSet<>();
+ }
+
+
+ /**
+ * Sets the status of importing list.
+ *
+ * @param isList status to mention list is bing imported
+ */
+ void setIfListImported(boolean isList) {
+ isListToImport = isList;
+ }
+
+
+ /**
+ * Sets the status of the queue to be imported due to compiler annotations.
+ *
+ * @param queueToImport status of queue to import
+ */
+ void setQueueToImport(boolean queueToImport) {
+ isQueueToImport = queueToImport;
+ }
+
+ /**
+ * Sets the status of the set to be imported due to compiler annotations.
+ *
+ * @param setToImport status of set to import
+ */
+ void setSetToImport(boolean setToImport) {
+ isSetToImport = setToImport;
+ }
+
+ /**
+ * Sets true if map is imported due to compiler annotations.
+ *
+ * @param mapToImport true if map is imported due to compiler annotations
+ */
+ void setMapToImport(boolean mapToImport) {
+ isMapToImport = mapToImport;
+ }
+
+ /**
+ * Returns the set containing the imported class/interface info.
+ *
+ * @return the set containing the imported class/interface info
+ */
+ public SortedSet<JavaQualifiedTypeInfoTranslator> getImportSet() {
+ return unmodifiableSortedSet(importSet);
+ }
+
+ /**
+ * Adds an imported class/interface info if it is not already part of the
+ * collection.
+ * <p>
+ * If already part of the collection, check if the packages are same, if so
+ * then return true, to denote it is already in the import collection, and
+ * it can be accessed without qualified access. If the packages do not
+ * match, then do not add to the import collection, and return false to
+ * denote, it is not added to import collection and needs to be accessed in
+ * a qualified manner.
+ *
+ * @param newImportInfo class/interface info being imported
+ * @param className name of the call being generated
+ * @param classPkg generated class package
+ * @return qualified access status of the import node being added
+ */
+ public boolean addImportInfo(JavaQualifiedTypeInfoTranslator newImportInfo,
+ String className, String classPkg) {
+
+ if (newImportInfo.getClassInfo().contentEquals(className)) {
+ /*
+ * If the current class name is same as the attribute class name,
+ * then the attribute must be accessed in a qualified manner.
+ */
+ return true;
+ } else if (newImportInfo.getPkgInfo() == null) {
+ /*
+ * If the package info is null, then it is not a candidate for import
+ * / qualified access
+ */
+ return false;
+ }
+
+ /*
+ * If the attribute type is having the package info, it is contender
+ * for import list and also need to check if it needs to be a
+ * qualified access.
+ */
+ if (newImportInfo.getPkgInfo().contentEquals(classPkg)) {
+ /*
+ * Package of the referred attribute and the generated class is same,
+ * so no need import
+ * or qualified access.
+ */
+ return false;
+ }
+
+ for (JavaQualifiedTypeInfoTranslator curImportInfo : getImportSet()) {
+ if (curImportInfo.getClassInfo()
+ .contentEquals(newImportInfo.getClassInfo())) {
+ return !curImportInfo.getPkgInfo()
+ .contentEquals(newImportInfo.getPkgInfo());
+ }
+ }
+
+ /*
+ * Import is added, so it is a member for non qualified access
+ */
+ importSet.add(newImportInfo);
+ return false;
+ }
+
+ /**
+ * Returns import for class.
+ *
+ * @param isForInterface if needs to check for interface
+ * @return imports for class
+ */
+ public List<String> getImports(boolean isForInterface) {
+
+ String importString;
+ List<String> imports = new ArrayList<>();
+ boolean check;
+ for (JavaQualifiedTypeInfoTranslator importInfo : getImportSet()) {
+ check = importInfo.isForInterface();
+ if (!isForInterface) {
+ check = true;
+ }
+ if (!importInfo.getPkgInfo().equals(EMPTY_STRING) &&
+ importInfo.getClassInfo() != null &&
+ !importInfo.getPkgInfo().equals(JAVA_LANG) &&
+ check) {
+ importString = getImportString(importInfo.getPkgInfo(), importInfo
+ .getClassInfo());
+ imports.add(importString);
+ }
+ }
+ if (isListToImport) {
+ imports.add(getImportForList());
+ if (!isForInterface) {
+ imports.add(ARRAY_LIST_IMPORT);
+ }
+ }
+ if (isQueueToImport) {
+ imports.add(getImportForQueue());
+ }
+ if (isSetToImport) {
+ imports.add(getImportForSet());
+ }
+ if (isMapToImport) {
+ imports.add(getImportForMap());
+ }
+
+ sort(imports);
+ return imports;
+ }
+
+ /**
+ * Returns import for hash and equals method.
+ *
+ * @return import for hash and equals method
+ */
+ String getImportForHashAndEquals() {
+ return getImportString(JAVA_UTIL_PKG,
+ JAVA_UTIL_OBJECTS_IMPORT_CLASS);
+ }
+
+ /**
+ * Returns import for to bitset method.
+ *
+ * @return import for to bitset method
+ */
+ public String getImportForToBitSet() {
+ return getImportString(JAVA_UTIL_PKG, BITSET);
+ }
+
+ /**
+ * Returns import for to bitset method.
+ *
+ * @return import for to bitset method
+ */
+ public String getImportForPattern() {
+ return getImportString(JAVA_UTIL_REGEX_PKG, PATTERN);
+ }
+
+ /**
+ * Returns import for list attribute.
+ *
+ * @return import for list attribute
+ */
+ private String getImportForList() {
+ return getImportString(COLLECTION_IMPORTS, LIST);
+ }
+
+ /**
+ * Returns import for map attribute.
+ *
+ * @return import for map attribute
+ */
+ private String getImportForMap() {
+ return getImportString(COLLECTION_IMPORTS, MAP);
+ }
+
+ /**
+ * Returns import for queue attribute.
+ *
+ * @return import for queue attribute
+ */
+ private String getImportForQueue() {
+ return getImportString(COLLECTION_IMPORTS, QUEUE);
+ }
+
+ /**
+ * Returns import for set attribute.
+ *
+ * @return import for set attribute
+ */
+ private String getImportForSet() {
+ return getImportString(COLLECTION_IMPORTS, SET);
+ }
+
+ /**
+ * Returns import string for ListenerService class.
+ *
+ * @return import string for ListenerService class
+ */
+ public String getListenerServiceImport() {
+ return getImportString(ONOS_EVENT_PKG, LISTENER_SERVICE);
+ }
+
+ /**
+ * Returns import string for AbstractEvent class.
+ *
+ * @return import string for AbstractEvent class
+ */
+ String getAbstractEventsImport() {
+ return getImportString(ONOS_EVENT_PKG, ABSTRACT_EVENT);
+ }
+
+ /**
+ * Returns import string for EventListener class.
+ *
+ * @return import string for EventListener class
+ */
+ String getEventListenerImport() {
+ return getImportString(ONOS_EVENT_PKG, EVENT_LISTENER);
+ }
+
+ /**
+ * Returns import for big integer.
+ *
+ * @return import for big integer
+ */
+ public String getBigIntegerImport() {
+ return getImportString(JAVA_MATH, BIG_INTEGER);
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/JavaQualifiedTypeInfoTranslator.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/JavaQualifiedTypeInfoTranslator.java
new file mode 100644
index 0000000..f6e5c28
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/JavaQualifiedTypeInfoTranslator.java
@@ -0,0 +1,310 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava;
+
+import com.google.common.base.MoreObjects;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.javadatamodel.JavaQualifiedTypeInfo;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+import org.onosproject.yang.compiler.translator.tojava.javamodel.JavaLeafInfoContainer;
+import org.onosproject.yang.compiler.utils.io.YangToJavaNamingConflictUtil;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.BINARY;
+import static org.onosproject.yang.compiler.translator.tojava.javamodel.AttributesJavaDataType.getJavaDataType;
+import static org.onosproject.yang.compiler.translator.tojava.javamodel.AttributesJavaDataType.getJavaImportClass;
+import static org.onosproject.yang.compiler.translator.tojava.javamodel.AttributesJavaDataType.getJavaImportPackage;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BASE64;
+import static org.onosproject.yang.compiler.utils.UtilConstants.COLLECTION_IMPORTS;
+
+/**
+ * Represents the information about individual imports in the generated file.
+ */
+public class JavaQualifiedTypeInfoTranslator
+ extends JavaQualifiedTypeInfo
+ implements Comparable<JavaQualifiedTypeInfoTranslator>, Serializable {
+ private static final long serialVersionUID = 806201634L;
+ private boolean isQualified;
+ private boolean isForInterface = true;
+
+ /**
+ * Creates a java qualified type info object.
+ */
+ public JavaQualifiedTypeInfoTranslator() {
+ super();
+ }
+
+ /**
+ * Returns the imported package info.
+ *
+ * @return the imported package info
+ */
+ public String getPkgInfo() {
+ return pkgInfo;
+ }
+
+ /**
+ * Sets the imported package info.
+ *
+ * @param pkgInfo the imported package info
+ */
+ public void setPkgInfo(String pkgInfo) {
+ this.pkgInfo = pkgInfo;
+ }
+
+ /**
+ * Returns the imported class/interface info.
+ *
+ * @return the imported class/interface info
+ */
+ public String getClassInfo() {
+ return classInfo;
+ }
+
+ /**
+ * Sets the imported class/interface info.
+ *
+ * @param classInfo the imported class/interface info
+ */
+ public void setClassInfo(String classInfo) {
+ this.classInfo = classInfo;
+ }
+
+ /**
+ * Updates the leaf's java information.
+ *
+ * @param leaf leaf whose java information is being updated
+ */
+ public static void updateLeavesJavaQualifiedInfo(
+ JavaLeafInfoContainer leaf) {
+
+ JavaQualifiedTypeInfoTranslator importInfo =
+ (JavaQualifiedTypeInfoTranslator) leaf.getJavaQualifiedInfo();
+
+ if (leaf.getDataType() == null) {
+ throw new TranslatorException(
+ "missing data type of leaf " + leaf.getName()
+ + " in " + leaf.getLineNumber() + " at" +
+ leaf.getCharPosition() + " in " +
+ leaf.getFileName());
+ }
+
+ /*
+ * Current leaves holder is adding a leaf info as a attribute to the
+ * current class.
+ */
+ String className =
+ getJavaImportClass(leaf.getDataType(), leaf.isLeafList(),
+ leaf.getConflictResolveConfig());
+ if (className != null) {
+ /*
+ * Corresponding to the attribute type a class needs to be imported,
+ * since it can be a derived type or a usage of wrapper classes.
+ */
+ importInfo.setClassInfo(className);
+ String classPkg = getJavaImportPackage(leaf.getDataType(),
+ leaf.isLeafList(),
+ leaf.getConflictResolveConfig());
+ if (classPkg == null) {
+ throw new TranslatorException(
+ "import package cannot be null when the class is used" +
+ " for "
+ + leaf.getName()
+ + " in " + leaf.getLineNumber() + " at" +
+ leaf.getCharPosition() + " in " +
+ leaf.getFileName());
+ }
+ importInfo.setPkgInfo(classPkg);
+ } else {
+ /*
+ * The attribute does not need a class to be imported, for example
+ * built in java types.
+ */
+ String dataTypeName =
+ getJavaDataType(leaf.getDataType());
+ if (dataTypeName == null) {
+ throw new TranslatorException("not supported data type for "
+ + leaf.getName()
+ + " in " +
+ leaf.getLineNumber() +
+ " at" +
+ leaf.getCharPosition() +
+ " in " +
+ leaf.getFileName());
+ }
+ importInfo.setClassInfo(dataTypeName);
+ }
+
+ leaf.getJavaQualifiedInfo().setJavaAttributeName(leaf.getJavaName(
+ leaf.getConflictResolveConfig()));
+ }
+
+ /**
+ * Returns the import info for an attribute, which needs to be used for code
+ * generation for import or for qualified access.
+ *
+ * @param curNode current data model node for which the java file
+ * is being
+ * generated
+ * @param attributeName name of the attribute being added, it will used in
+ * import info for child class
+ * @return return the import info for this attribute
+ */
+ public static JavaQualifiedTypeInfoTranslator getQualifiedTypeInfoOfCurNode(
+ YangNode curNode,
+ String attributeName) {
+
+ JavaQualifiedTypeInfoTranslator importInfo =
+ new JavaQualifiedTypeInfoTranslator();
+
+ if (!(curNode instanceof JavaFileInfoContainer)) {
+ throw new TranslatorException(
+ "missing java file information to get the package details "
+ + "of attribute corresponding to child node " +
+ curNode.getName() +
+ " in " + curNode.getLineNumber() + " at " +
+ curNode.getCharPosition() + " in " +
+ curNode.getFileName());
+ }
+
+ importInfo.setClassInfo(attributeName);
+ importInfo.setPkgInfo(((JavaFileInfoContainer) curNode)
+ .getJavaFileInfo().getPackage());
+
+ return importInfo;
+ }
+
+ /**
+ * Returns the java qualified type information for the wrapper classes.
+ *
+ * @param referredTypesAttrInfo attribute of referred type
+ * @param conflictResolver plugin configurations
+ * @return return the import info for this attribute
+ */
+ static JavaQualifiedTypeInfoTranslator getQualifiedInfoOfFromString(
+ JavaAttributeInfo referredTypesAttrInfo,
+ YangToJavaNamingConflictUtil conflictResolver) {
+
+ /*
+ * Get the java qualified type information for the wrapper classes and
+ * set it in new java attribute information.
+ */
+ JavaQualifiedTypeInfoTranslator qualifiedInfoOfFromString =
+ new JavaQualifiedTypeInfoTranslator();
+
+ if (referredTypesAttrInfo.getAttributeType().getDataType() == BINARY) {
+ qualifiedInfoOfFromString.setClassInfo(BASE64);
+ qualifiedInfoOfFromString.setPkgInfo(COLLECTION_IMPORTS);
+ } else {
+ qualifiedInfoOfFromString.setClassInfo(
+ getJavaImportClass(referredTypesAttrInfo.getAttributeType(),
+ true, conflictResolver));
+ qualifiedInfoOfFromString.setPkgInfo(
+ getJavaImportPackage(
+ referredTypesAttrInfo.getAttributeType(), true,
+ conflictResolver));
+ }
+ return qualifiedInfoOfFromString;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(pkgInfo, classInfo);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+
+ if (this == obj) {
+ return true;
+ }
+ if (obj instanceof JavaQualifiedTypeInfoTranslator) {
+ JavaQualifiedTypeInfoTranslator other =
+ (JavaQualifiedTypeInfoTranslator) obj;
+ return Objects.equals(pkgInfo, other.pkgInfo) &&
+ Objects.equals(classInfo, other.classInfo);
+ }
+ return false;
+ }
+
+ /**
+ * Checks if the import info matches.
+ *
+ * @param importInfo matched import
+ * @return if equal or not
+ */
+ public boolean exactMatch(JavaQualifiedTypeInfoTranslator importInfo) {
+ return equals(importInfo)
+ && Objects.equals(pkgInfo, importInfo.getPkgInfo())
+ && Objects.equals(classInfo, importInfo.getClassInfo());
+ }
+
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(getClass())
+ .add("pkgInfo", pkgInfo)
+ .add("classInfo", classInfo).toString();
+ }
+
+ /**
+ * Checks that there is no 2 objects with the same class name.
+ *
+ * @param other compared import info.
+ */
+ @Override
+ public int compareTo(JavaQualifiedTypeInfoTranslator other) {
+ return getClassInfo().compareTo(other.getClassInfo());
+ }
+
+ /**
+ * Returns true if import is qualified.
+ *
+ * @return true if import is qualified
+ */
+ public boolean isQualified() {
+ return isQualified;
+ }
+
+ /**
+ * Sets true if import is qualified.
+ *
+ * @param qualified true if import is qualified
+ */
+ public void setQualified(boolean qualified) {
+ isQualified = qualified;
+ }
+
+ /**
+ * Returns true if import should be added to interface.
+ *
+ * @return true if import should be added to interface
+ */
+ boolean isForInterface() {
+ return isForInterface;
+ }
+
+ /**
+ * Sets true if import should be added to interface.
+ *
+ * @param forInterface true if import should be added to interface
+ */
+ void setForInterface(boolean forInterface) {
+ isForInterface = forInterface;
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/TempJavaBeanFragmentFiles.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/TempJavaBeanFragmentFiles.java
new file mode 100644
index 0000000..69c29bc
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/TempJavaBeanFragmentFiles.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava;
+
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+
+import java.io.File;
+import java.io.IOException;
+
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getConstructor;
+import static org.onosproject.yang.compiler.utils.io.impl.FileSystemUtil.closeFile;
+
+/**
+ * Represents implementation of java bean code fragments temporary implementations.
+ * Maintains the temp files required specific for bean java snippet generation.
+ */
+public class TempJavaBeanFragmentFiles
+ extends TempJavaFragmentFiles {
+
+ /**
+ * File name for constructor.
+ */
+ private static final String CONSTRUCTOR_FILE_NAME = "Constructor";
+
+ /**
+ * Temporary file handle for constructor of class.
+ */
+ private final File constructorImplTempFileHandle;
+
+ /**
+ * Creates an instance of temporary java code fragment.
+ *
+ * @param javaFileInfo generated java file info
+ * @throws IOException when fails to create new file handle
+ */
+ TempJavaBeanFragmentFiles(JavaFileInfoTranslator javaFileInfo)
+ throws IOException {
+
+ super(javaFileInfo);
+
+ /*
+ * Initialize getterImpl, attributes, constructor, hash code, equals and
+ * to strings when generation file type matches to impl class mask.
+ */
+ addGeneratedTempFile(CONSTRUCTOR_IMPL_MASK);
+ constructorImplTempFileHandle = getTemporaryFileHandle(CONSTRUCTOR_FILE_NAME);
+ }
+
+ /**
+ * Returns constructor's temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ public File getConstructorImplTempFileHandle() {
+ return constructorImplTempFileHandle;
+ }
+
+ /**
+ * Adds constructor for class.
+ *
+ * @param attr attribute info
+ * @throws IOException when fails to append to temporary file
+ */
+ private void addConstructor(JavaAttributeInfo attr)
+ throws IOException {
+ appendToFile(constructorImplTempFileHandle,
+ getConstructor(attr, getGeneratedJavaFiles()));
+ }
+
+ /**
+ * Adds the new attribute info to the target generated temporary files.
+ *
+ * @param newAttrInfo the attribute info that needs to be added to temporary
+ * files
+ * @throws IOException IO operation fail
+ */
+ @Override
+ void addJavaSnippetInfoToApplicableTempFiles(JavaAttributeInfo newAttrInfo,
+ YangPluginConfig pluginConfig)
+ throws IOException {
+ super.addJavaSnippetInfoToApplicableTempFiles(newAttrInfo, pluginConfig);
+ addConstructor(newAttrInfo);
+ }
+
+ /**
+ * Removes all temporary file handles.
+ *
+ * @param isErrorOccurred flag to tell translator that error has occurred
+ * while code generation
+ * @throws IOException when failed to delete the temporary files
+ */
+ @Override
+ public void freeTemporaryResources(boolean isErrorOccurred)
+ throws IOException {
+
+ /*
+ * Close constructor temporary file handle and delete the file.
+ */
+ closeFile(constructorImplTempFileHandle, true);
+ super.freeTemporaryResources(isErrorOccurred);
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/TempJavaCodeFragmentFiles.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/TempJavaCodeFragmentFiles.java
new file mode 100644
index 0000000..766e70e
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/TempJavaCodeFragmentFiles.java
@@ -0,0 +1,283 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava;
+
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangTypeHolder;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+
+import java.io.IOException;
+
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_ALL_EVENT_CLASS_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_TYPE_CLASS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BUILDER;
+
+/**
+ * Represents implementation of java code fragments temporary implementations.
+ * Contains fragment file object of different types of java file.
+ * Uses required object(s) to generate the target java file(s).
+ */
+public class TempJavaCodeFragmentFiles {
+
+ /**
+ * Has the temporary files required for bean generated classes.
+ */
+ private TempJavaBeanFragmentFiles beanTempFiles;
+
+ /**
+ * Has the temporary files required for bean generated classes.
+ */
+ private TempJavaTypeFragmentFiles typeTempFiles;
+
+ /**
+ * Has the temporary files required for service generated classes.
+ */
+ private TempJavaServiceFragmentFiles serviceTempFiles;
+
+ /**
+ * Has the temporary files required for enumeration generated classes.
+ */
+ private TempJavaEnumerationFragmentFiles enumTempFiles;
+
+ /**
+ * Has the temporary files required for enumeration generated classes.
+ */
+ private TempJavaEventFragmentFiles eventTempFiles;
+
+ /**
+ * Creates an instance of temporary java code fragment.
+ *
+ * @param javaFileInfo generated java file info
+ * @throws IOException when fails to create new file handle
+ */
+ public TempJavaCodeFragmentFiles(JavaFileInfoTranslator javaFileInfo)
+ throws IOException {
+
+ int genType = javaFileInfo.getGeneratedFileTypes();
+ if ((genType & GENERATE_INTERFACE_WITH_BUILDER) != 0) {
+ beanTempFiles = new TempJavaBeanFragmentFiles(javaFileInfo);
+ }
+
+ if ((genType & GENERATE_TYPE_CLASS) != 0) {
+ typeTempFiles = new TempJavaTypeFragmentFiles(javaFileInfo);
+ }
+
+ if ((genType & GENERATE_ENUM_CLASS) != 0) {
+ enumTempFiles = new TempJavaEnumerationFragmentFiles(javaFileInfo);
+ }
+
+ if ((genType & GENERATE_SERVICE_AND_MANAGER) != 0) {
+ serviceTempFiles = new TempJavaServiceFragmentFiles(javaFileInfo);
+ }
+
+ if ((genType & GENERATE_ALL_EVENT_CLASS_MASK) != 0) {
+ eventTempFiles = new TempJavaEventFragmentFiles(javaFileInfo);
+ }
+ }
+
+ /**
+ * Retrieves the temp file handle for bean file generation.
+ *
+ * @return temp file handle for bean file generation
+ */
+ public TempJavaBeanFragmentFiles getBeanTempFiles() {
+ return beanTempFiles;
+ }
+
+ /**
+ * Retrieves the temp file handle for data type file generation.
+ *
+ * @return temp file handle for data type file generation
+ */
+ public TempJavaTypeFragmentFiles getTypeTempFiles() {
+ return typeTempFiles;
+ }
+
+
+ /**
+ * Retrieves the temp file handle for service file generation.
+ *
+ * @return temp file handle for service file generation
+ */
+ public TempJavaServiceFragmentFiles getServiceTempFiles() {
+ return serviceTempFiles;
+ }
+
+ /**
+ * Retrieves the temp file handle for enumeration file generation.
+ *
+ * @return temp file handle for enumeration file generation
+ */
+ public TempJavaEnumerationFragmentFiles getEnumTempFiles() {
+ return enumTempFiles;
+ }
+
+ /**
+ * Retrieves the temp file handle for event file generation.
+ *
+ * @return temp file handle for enumeration file generation
+ */
+ public TempJavaEventFragmentFiles getEventFragmentFiles() {
+ return eventTempFiles;
+ }
+
+ /**
+ * Constructs java code exit.
+ *
+ * @param fileType generated file type
+ * @param curNode current YANG node
+ * @throws IOException when fails to generate java files
+ */
+ public void generateJavaFile(int fileType, YangNode curNode)
+ throws IOException {
+
+ if ((fileType & GENERATE_INTERFACE_WITH_BUILDER) != 0) {
+ beanTempFiles.generateJavaFile(fileType, curNode);
+ }
+
+ /*
+ * Creates user defined data type class file.
+ */
+ if ((fileType & GENERATE_TYPE_CLASS) != 0) {
+ typeTempFiles.generateJavaFile(fileType, curNode);
+ }
+
+ /*
+ * Creates service and manager class file.
+ */
+ if (fileType == GENERATE_SERVICE_AND_MANAGER) {
+ serviceTempFiles.generateJavaFile(GENERATE_SERVICE_AND_MANAGER, curNode);
+ }
+
+ /*
+ * Creates event, event listener and event subject files.
+ */
+ if (fileType == GENERATE_ALL_EVENT_CLASS_MASK) {
+ eventTempFiles.generateJavaFile(GENERATE_ALL_EVENT_CLASS_MASK, curNode);
+ }
+
+ /*
+ * Creates enumeration class file.
+ */
+ if (fileType == GENERATE_ENUM_CLASS) {
+ enumTempFiles.generateJavaFile(GENERATE_ENUM_CLASS, curNode);
+ }
+ }
+
+ /**
+ * Add all the type in the current data model node as part of the
+ * generated temporary file.
+ *
+ * @param typeHolder YANG java data model node which has type info, eg union / typedef
+ * @param config plugin configurations for naming convention
+ * @throws IOException IO operation fail
+ */
+ void addTypeInfoToTempFiles(YangTypeHolder typeHolder, YangPluginConfig config)
+ throws IOException {
+ typeTempFiles.addTypeInfoToTempFiles(typeHolder, config);
+ }
+
+ /**
+ * Adds build method for interface.
+ *
+ * @return build method for interface
+ * @throws IOException when fails to append to temporary file
+ */
+ public String addBuildMethodForInterface()
+ throws IOException {
+ if (beanTempFiles != null) {
+ return beanTempFiles.addBuildMethodForInterface();
+ }
+ throw new TranslatorException("build method only supported for bean class");
+ }
+
+ /**
+ * Adds default constructor for class.
+ *
+ * @param modifier modifier for constructor.
+ * @param toAppend string which need to be appended with the class name
+ * @return default constructor for class
+ * @throws IOException when fails to append to file
+ */
+ public String addDefaultConstructor(String modifier, String toAppend)
+ throws IOException {
+ boolean isSuffix = false;
+ if (toAppend.equals(BUILDER)) {
+ isSuffix = true;
+ }
+ if (typeTempFiles != null) {
+ return typeTempFiles.addDefaultConstructor(modifier, toAppend,
+ isSuffix);
+ }
+ if (beanTempFiles != null) {
+ return beanTempFiles.addDefaultConstructor(modifier, toAppend,
+ isSuffix);
+ }
+
+ throw new TranslatorException("default constructor should not be added");
+ }
+
+ /**
+ * Adds build method's implementation for class.
+ *
+ * @return build method implementation for class
+ * @throws IOException when fails to append to temporary file
+ */
+ public String addBuildMethodImpl()
+ throws IOException {
+ if (beanTempFiles != null) {
+ return beanTempFiles.addBuildMethodImpl();
+ }
+ throw new TranslatorException("build should not be added");
+ }
+
+ /**
+ * Removes all temporary file handles.
+ * when translator fails to generate java files we need to close
+ * all open file handles include temporary files and java files
+ *
+ * @param isErrorOccurred if error occurred
+ * @throws IOException when failed to delete the temporary files
+ */
+ public void freeTemporaryResources(boolean isErrorOccurred)
+ throws IOException {
+
+ if (beanTempFiles != null) {
+ beanTempFiles.freeTemporaryResources(isErrorOccurred);
+ }
+
+ if (typeTempFiles != null) {
+ typeTempFiles.freeTemporaryResources(isErrorOccurred);
+ }
+
+ if (enumTempFiles != null) {
+ enumTempFiles.freeTemporaryResources(isErrorOccurred);
+ }
+
+ if (serviceTempFiles != null) {
+ serviceTempFiles.freeTemporaryResources(isErrorOccurred);
+ }
+
+ if (eventTempFiles != null) {
+ eventTempFiles.freeTemporaryResources(isErrorOccurred);
+ }
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/TempJavaCodeFragmentFilesContainer.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/TempJavaCodeFragmentFilesContainer.java
new file mode 100644
index 0000000..8cde603
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/TempJavaCodeFragmentFilesContainer.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.translator.tojava;
+
+/**
+ * Represents Has temporary file handle.
+ */
+public interface TempJavaCodeFragmentFilesContainer {
+
+ /**
+ * Returns the temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles();
+
+ /**
+ * Sets temporary file handle.
+ *
+ * @param fileHandle temporary file handle
+ */
+ void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle);
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/TempJavaEnumerationFragmentFiles.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/TempJavaEnumerationFragmentFiles.java
new file mode 100644
index 0000000..2443211
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/TempJavaEnumerationFragmentFiles.java
@@ -0,0 +1,216 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.translator.tojava;
+
+import org.onosproject.yang.compiler.datamodel.YangEnum;
+import org.onosproject.yang.compiler.datamodel.YangEnumeration;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+import org.onosproject.yang.compiler.translator.tojava.javamodel.YangJavaTypeTranslator;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.INT32;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.JavaAttributeInfo.getAttributeInfoForTheData;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaCodeSnippetGen.generateEnumAttributeStringWithSchemaName;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaFileGenerator.generateEnumClassFile;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaIdentifierSyntax.createPackage;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EMPTY_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.INT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.REGEX_FOR_FIRST_DIGIT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.YANG_AUTO_PREFIX;
+import static org.onosproject.yang.compiler.utils.io.impl.FileSystemUtil.closeFile;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getPrefixForIdentifier;
+
+/**
+ * Represents implementation of java code fragments temporary implementations. Maintains the temp files required
+ * specific for enumeration java snippet generation.
+ */
+public class TempJavaEnumerationFragmentFiles
+ extends TempJavaFragmentFiles {
+
+ /**
+ * File name for temporary enum class.
+ */
+ private static final String ENUM_CLASS_TEMP_FILE_NAME = "EnumClass";
+
+ /**
+ * Temporary file handle for enum class file.
+ */
+ private final File enumClassTempFileHandle;
+
+ /**
+ * Java file handle for enum class.
+ */
+ private File enumClassJavaFileHandle;
+ private boolean isEnumClass;
+
+ /**
+ * Creates an instance of temporary java code fragment.
+ *
+ * @param javaFileInfo generated java file info
+ * @throws IOException when fails to create new file handle
+ */
+ public TempJavaEnumerationFragmentFiles(JavaFileInfoTranslator javaFileInfo)
+ throws IOException {
+
+ super(javaFileInfo);
+ /*
+ * Initialize enum when generation file type matches to enum class mask.
+ */
+ addGeneratedTempFile(ENUM_IMPL_MASK);
+ enumClassTempFileHandle = getTemporaryFileHandle(ENUM_CLASS_TEMP_FILE_NAME);
+ }
+
+ /**
+ * Returns temporary file handle for enum class file.
+ *
+ * @return temporary file handle for enum class file
+ */
+ public File getEnumClassTempFileHandle() {
+ return enumClassTempFileHandle;
+ }
+
+ /**
+ * Adds enum class attributes to temporary file.
+ *
+ * @param yangEnum YANG enum
+ * @throws IOException when fails to do IO operations.
+ */
+ private void addAttributesForEnumClass(YangEnum yangEnum)
+ throws IOException {
+ appendToFile(enumClassTempFileHandle,
+ generateEnumAttributeStringWithSchemaName(yangEnum.getNamedValue(),
+ yangEnum.getValue()));
+ }
+
+ /**
+ * Adds enum attributes to temporary files.
+ *
+ * @param curNode current YANG node
+ * @param config plugin configurations
+ * @throws IOException when fails to do IO operations
+ */
+ public void addEnumAttributeToTempFiles(YangNode curNode,
+ YangPluginConfig config)
+ throws IOException {
+
+ addJavaSnippetInfoToApplicableTempFiles(getJavaAttributeForEnum(config),
+ config);
+ if (curNode instanceof YangEnumeration) {
+ YangEnumeration enumeration = (YangEnumeration) curNode;
+ for (YangEnum curEnum : enumeration.getEnumSet()) {
+ String enumName = curEnum.getNamedValue();
+ String prefix;
+ if (enumName.matches(REGEX_FOR_FIRST_DIGIT)) {
+ prefix = getPrefixForIdentifier(
+ config.getConflictResolver());
+ if (prefix != null) {
+ curEnum.setNamedValue(prefix + enumName);
+ } else {
+ curEnum.setNamedValue(YANG_AUTO_PREFIX + enumName);
+ }
+ }
+ addJavaSnippetInfoToApplicableTempFiles(curEnum);
+ }
+ } else {
+ throw new TranslatorException(
+ "current node should be of enumeration type. " +
+ curNode.getName() + " in " + curNode.getLineNumber() +
+ " at " + curNode.getCharPosition() + " in " + curNode
+ .getFileName());
+ }
+ }
+
+ /**
+ * Returns java attribute for enum class.
+ *
+ * @param config plugin configurations
+ * @return java attribute
+ */
+ private JavaAttributeInfo getJavaAttributeForEnum(YangPluginConfig config) {
+ YangJavaTypeTranslator javaType = new YangJavaTypeTranslator();
+ javaType.setDataType(INT32);
+ javaType.setDataTypeName(INT);
+ javaType.updateJavaQualifiedInfo(config.getConflictResolver());
+ return getAttributeInfoForTheData(
+ javaType.getJavaQualifiedInfo(),
+ javaType.getDataTypeName(), javaType,
+ getIsQualifiedAccessOrAddToImportList(javaType.getJavaQualifiedInfo()),
+ false);
+ }
+
+ /**
+ * Adds the new attribute info to the target generated temporary files.
+ *
+ * @param yangEnum @throws IOException IO operation fail
+ */
+ private void addJavaSnippetInfoToApplicableTempFiles(YangEnum yangEnum)
+ throws IOException {
+ addAttributesForEnumClass(yangEnum);
+ }
+
+ /**
+ * Constructs java code exit.
+ *
+ * @param fileType generated file type
+ * @param curNode current YANG node
+ * @throws IOException when fails to generate java files
+ */
+ @Override
+ public void generateJavaFile(int fileType, YangNode curNode)
+ throws IOException {
+
+ List<String> imports = this.getJavaImportData().getImports(true);
+ createPackage(curNode);
+ enumClassJavaFileHandle = getJavaFileHandle(getJavaClassName(EMPTY_STRING));
+ generateEnumClassFile(enumClassJavaFileHandle, curNode, imports);
+ freeTemporaryResources(false);
+ }
+
+ /**
+ * Removes all temporary file handles.
+ *
+ * @param isErrorOccurred flag to tell translator that error has occurred while file generation
+ * @throws IOException when failed to delete the temporary files
+ */
+ @Override
+ public void freeTemporaryResources(boolean isErrorOccurred)
+ throws IOException {
+ closeFile(enumClassJavaFileHandle, isErrorOccurred);
+ closeFile(enumClassTempFileHandle, true);
+ if (isEnumClass) {
+ super.freeTemporaryResources(isErrorOccurred);
+ }
+ }
+
+ public boolean isEnumClass() {
+ return isEnumClass;
+ }
+
+ /**
+ * Sets true if free super resources is required.
+ *
+ * @param enumClass true if free super resources is required
+ */
+ public void setEnumClass(boolean enumClass) {
+ isEnumClass = enumClass;
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/TempJavaEventFragmentFiles.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/TempJavaEventFragmentFiles.java
new file mode 100644
index 0000000..efc860b
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/TempJavaEventFragmentFiles.java
@@ -0,0 +1,437 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava;
+
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.translator.tojava.utils.JavaExtendsListHolder;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.JavaAttributeInfo.getAttributeInfoForTheData;
+import static org.onosproject.yang.compiler.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedTypeInfoOfCurNode;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaFileGenerator.generateEventFile;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaFileGenerator.generateEventListenerFile;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaFileGenerator.generateEventSubjectFile;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaFileGeneratorUtils.getFileObject;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaIdentifierSyntax.getEnumJavaAttribute;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getGetterForClass;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getSetterForClass;
+import static org.onosproject.yang.compiler.utils.UtilConstants.COMMA;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EVENT_LISTENER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EVENT_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.NEW_LINE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SLASH;
+import static org.onosproject.yang.compiler.utils.io.impl.FileSystemUtil.closeFile;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.MANAGER_SETTER_METHOD;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.enumJavaDocForInnerClass;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.getJavaDoc;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getAbsolutePackagePath;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getCamelCase;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getCapitalCase;
+
+/**
+ * Represent temporary java fragments for event files.
+ */
+public class TempJavaEventFragmentFiles
+ extends TempJavaFragmentFiles {
+ /**
+ * File name for generated class file for special type like union, typedef suffix.
+ */
+ private static final String EVENT_SUBJECT_NAME_SUFFIX = "EventSubject";
+
+ /**
+ * File name for event enum temp file.
+ */
+ private static final String EVENT_ENUM_FILE_NAME = "EventEnum";
+
+ /**
+ * File name for event method temp file.
+ */
+ private static final String EVENT_METHOD_FILE_NAME = "EventMethod";
+
+ /**
+ * File name for event subject attribute temp file.
+ */
+ private static final String EVENT_SUBJECT_ATTRIBUTE_FILE_NAME
+ = "EventSubjectAttribute";
+
+ /**
+ * File name for event subject getter temp file.
+ */
+ private static final String EVENT_SUBJECT_GETTER_FILE_NAME
+ = "EventSubjectGetter";
+
+ /**
+ * File name for event subject setter temp file.
+ */
+ private static final String EVENT_SUBJECT_SETTER_FILE_NAME
+ = "EventSubjectSetter";
+
+ private static final String JAVA_FILE_EXTENSION = ".java";
+ /**
+ * Java file handle for event subject file.
+ */
+ private File eventSubjectJavaFileHandle;
+
+ /**
+ * Java file handle for event listener file.
+ */
+ private File eventListenerJavaFileHandle;
+
+ /**
+ * Java file handle for event file.
+ */
+ private File eventJavaFileHandle;
+
+ /**
+ * Java file handle for event enum impl file.
+ */
+ private final File eventEnumTempFileHandle;
+ /**
+ * Java file handle for event method impl file.
+ */
+ private final File eventMethodTempFileHandle;
+ /**
+ * Java file handle for event subject attribute file.
+ */
+ private final File eventSubjectAttributeTempFileHandle;
+ /**
+ * Java file handle for event subject getter impl file.
+ */
+ private final File eventSubjectGetterTempFileHandle;
+ /**
+ * Java file handle for event subject setter impl file.
+ */
+ private final File eventSubjectSetterTempFileHandle;
+
+ /**
+ * Creates an instance of temporary java code fragment.
+ *
+ * @param javaFileInfo generated file information
+ * @throws IOException when fails to create new file handle
+ */
+ TempJavaEventFragmentFiles(JavaFileInfoTranslator javaFileInfo)
+ throws IOException {
+ setJavaExtendsListHolder(new JavaExtendsListHolder());
+ setJavaImportData(new JavaImportData());
+ setJavaFileInfo(javaFileInfo);
+ setAbsoluteDirPath(getAbsolutePackagePath(
+ getJavaFileInfo().getBaseCodeGenPath(),
+ getJavaFileInfo().getPackageFilePath()));
+
+ addGeneratedTempFile(EVENT_ENUM_MASK);
+ addGeneratedTempFile(EVENT_METHOD_MASK);
+ addGeneratedTempFile(EVENT_SUBJECT_ATTRIBUTE_MASK);
+ addGeneratedTempFile(EVENT_SUBJECT_GETTER_MASK);
+ addGeneratedTempFile(EVENT_SUBJECT_SETTER_MASK);
+
+ eventEnumTempFileHandle = getTemporaryFileHandle(EVENT_ENUM_FILE_NAME);
+ eventMethodTempFileHandle = getTemporaryFileHandle(
+ EVENT_METHOD_FILE_NAME);
+ eventSubjectAttributeTempFileHandle = getTemporaryFileHandle
+ (EVENT_SUBJECT_ATTRIBUTE_FILE_NAME);
+ eventSubjectGetterTempFileHandle = getTemporaryFileHandle(
+ EVENT_SUBJECT_GETTER_FILE_NAME);
+ eventSubjectSetterTempFileHandle = getTemporaryFileHandle(
+ EVENT_SUBJECT_SETTER_FILE_NAME);
+ }
+
+ /**
+ * Returns event enum temp file.
+ *
+ * @return event enum temp file
+ */
+ public File getEventEnumTempFileHandle() {
+ return eventEnumTempFileHandle;
+ }
+
+ /**
+ * Returns event method temp file.
+ *
+ * @return event method temp file
+ */
+ public File getEventMethodTempFileHandle() {
+ return eventMethodTempFileHandle;
+ }
+
+ /**
+ * Returns event subject attribute temp file.
+ *
+ * @return event subject attribute temp file
+ */
+ public File getEventSubjectAttributeTempFileHandle() {
+ return eventSubjectAttributeTempFileHandle;
+ }
+
+ /**
+ * Returns event subject getter temp file.
+ *
+ * @return event subject getter temp file
+ */
+ public File getEventSubjectGetterTempFileHandle() {
+ return eventSubjectGetterTempFileHandle;
+ }
+
+ /**
+ * Returns event subject setter temp file.
+ *
+ * @return event subject setter temp file
+ */
+ public File getEventSubjectSetterTempFileHandle() {
+ return eventSubjectSetterTempFileHandle;
+ }
+
+ /*Adds event method contents to event file.*/
+ private static String getEventFileContents(String eventClassname, String classname) {
+ return "\n" +
+ " /**\n" +
+ " * Creates " + classname + " event with type and subject.\n" +
+ " *\n" +
+ " * @param type event type\n" +
+ " * @param subject subject " + classname + "\n" +
+ " */\n" +
+ " public " + eventClassname + "(Type type, " +
+ getCapitalCase(classname) + " subject) {\n" +
+ " super(type, subject);\n" +
+ " }\n" +
+ "\n" +
+ " /**\n" +
+ " * Creates " + classname + " event with type, subject and time.\n" +
+ " *\n" +
+ " * @param type event type\n" +
+ " * @param subject subject " + classname + "\n" +
+ " * @param time time of event\n" +
+ " */\n" +
+ " public " + eventClassname + "(Type type, " + getCapitalCase(classname)
+ + " subject, long time) {\n" +
+ " super(type, subject, time);\n" +
+ " }\n" +
+ "\n";
+ }
+
+ public void generateJavaFile(int fileType, YangNode curNode)
+ throws IOException {
+ generateEventJavaFile(curNode);
+ generateEventListenerJavaFile(curNode);
+ generateEventSubjectJavaFile(curNode);
+
+ // Close all the file handles.
+ freeTemporaryResources(false);
+ }
+
+ /**
+ * Constructs java code exit.
+ *
+ * @param curNode current YANG node
+ * @throws IOException when fails to generate java files
+ */
+ private void generateEventJavaFile(YangNode curNode)
+ throws IOException {
+
+ List<String> imports = new ArrayList<>();
+
+ imports.add(getJavaImportData().getAbstractEventsImport());
+ String curNodeInfo = getCapitalCase(((JavaFileInfoContainer) curNode)
+ .getJavaFileInfo().getJavaName());
+ String nodeName = curNodeInfo + EVENT_STRING;
+
+ addEnumMethod(nodeName, curNodeInfo + EVENT_SUBJECT_NAME_SUFFIX);
+
+ //Creates event interface file.
+ eventJavaFileHandle = getJavaFileHandle(curNode, curNodeInfo +
+ EVENT_STRING);
+ generateEventFile(eventJavaFileHandle, curNode, imports);
+ }
+
+ /**
+ * Constructs java code exit.
+ *
+ * @param curNode current YANG node
+ * @throws IOException when fails to generate java files
+ */
+ private void generateEventListenerJavaFile(YangNode curNode)
+ throws IOException {
+
+ List<String> imports = new ArrayList<>();
+
+ imports.add(getJavaImportData().getEventListenerImport());
+ String curNodeInfo = getCapitalCase(((JavaFileInfoContainer) curNode)
+ .getJavaFileInfo().getJavaName());
+
+ // Creates event listener interface file.
+ eventListenerJavaFileHandle =
+ getJavaFileHandle(curNode, curNodeInfo + EVENT_LISTENER);
+ generateEventListenerFile(eventListenerJavaFileHandle, curNode, imports);
+ }
+
+ /**
+ * Constructs java code exit.
+ *
+ * @param curNode current YANG node
+ * @throws IOException when fails to generate java files
+ */
+ private void generateEventSubjectJavaFile(YangNode curNode)
+ throws IOException {
+
+ String curNodeInfo = getCapitalCase(((JavaFileInfoContainer) curNode)
+ .getJavaFileInfo().getJavaName());
+
+ //Creates event interface file.
+ eventSubjectJavaFileHandle = getJavaFileHandle(curNode, curNodeInfo +
+ EVENT_SUBJECT_NAME_SUFFIX);
+ generateEventSubjectFile(eventSubjectJavaFileHandle, curNode);
+ }
+
+ /**
+ * Adds java snippet for events to event subject file.
+ *
+ * @param curNode current node
+ * @param pluginConfig plugin configurations
+ * @throws IOException when fails to do IO operations
+ */
+ void addJavaSnippetOfEvent(YangNode curNode, YangPluginConfig pluginConfig)
+ throws IOException {
+
+ String currentInfo = getCamelCase(curNode.getName(), pluginConfig
+ .getConflictResolver());
+ String notificationName = curNode.getName();
+
+ JavaQualifiedTypeInfoTranslator qualifiedTypeInfo
+ = getQualifiedTypeInfoOfCurNode(curNode, getCapitalCase(currentInfo));
+
+ JavaAttributeInfo javaAttributeInfo
+ = getAttributeInfoForTheData(qualifiedTypeInfo, currentInfo,
+ null, false, false);
+
+ /*Adds java info for event in respective temp files.*/
+ addEventEnum(notificationName);
+ addEventSubjectAttribute(javaAttributeInfo);
+ addEventSubjectGetter(javaAttributeInfo);
+ addEventSubjectSetter(javaAttributeInfo, currentInfo);
+ }
+
+ /*Adds event to enum temp file.*/
+ private void addEventEnum(String notificationName)
+ throws IOException {
+ appendToFile(getEventEnumTempFileHandle(), enumJavaDocForInnerClass(
+ notificationName) + EIGHT_SPACE_INDENTATION
+ + getEnumJavaAttribute(notificationName).toUpperCase() +
+ COMMA + NEW_LINE);
+ }
+
+ /*Adds event method in event class*/
+ private void addEnumMethod(String eventClassname, String className)
+ throws IOException {
+ appendToFile(getEventMethodTempFileHandle(),
+ getEventFileContents(eventClassname, className));
+ }
+
+ /*Adds events to event subject file.*/
+ private void addEventSubjectAttribute(JavaAttributeInfo attr)
+ throws IOException {
+ appendToFile(getEventSubjectAttributeTempFileHandle(),
+ parseAttribute(attr));
+ }
+
+ /*Adds getter method for event in event subject class.*/
+ private void addEventSubjectGetter(JavaAttributeInfo attr)
+ throws IOException {
+ String appDataStructure = null;
+ if (attr.getCompilerAnnotation() != null) {
+ appDataStructure = attr.getCompilerAnnotation()
+ .getYangAppDataStructure().getDataStructure().name();
+ }
+ appendToFile(getEventSubjectGetterTempFileHandle(), getJavaDoc(
+ GETTER_METHOD, attr.getAttributeName(), false,
+ appDataStructure) + getGetterForClass(
+ attr, GENERATE_EVENT_SUBJECT_CLASS) + NEW_LINE);
+ }
+
+ /*Adds setter method for event in event subject class.*/
+ private void addEventSubjectSetter(JavaAttributeInfo attr,
+ String className)
+ throws IOException {
+ String appDataStructure = null;
+ if (attr.getCompilerAnnotation() != null) {
+ appDataStructure = attr.getCompilerAnnotation()
+ .getYangAppDataStructure().getDataStructure().name();
+ }
+ appendToFile(getEventSubjectSetterTempFileHandle(), getJavaDoc(
+ MANAGER_SETTER_METHOD, attr.getAttributeName(),
+ false, appDataStructure) + getSetterForClass(
+ attr, className, GENERATE_EVENT_SUBJECT_CLASS) + NEW_LINE);
+ }
+
+ /**
+ * Returns a temporary file handle for the event's file type.
+ *
+ * @param name file name
+ * @return temporary file handle
+ */
+ private File getJavaFileHandle(YangNode curNode, String name) {
+
+ JavaFileInfoTranslator parentInfo = ((JavaFileInfoContainer) curNode)
+ .getJavaFileInfo();
+ return getFileObject(getDirPath(parentInfo), name, JAVA_FILE_EXTENSION,
+ parentInfo);
+ }
+
+ /**
+ * Returns the directory path.
+ *
+ * @return directory path
+ */
+ private String getDirPath(JavaFileInfoTranslator parentInfo) {
+ return (parentInfo.getPackageFilePath() + SLASH +
+ parentInfo.getJavaName()).toLowerCase();
+ }
+
+ /**
+ * Removes all temporary file handles.
+ *
+ * @param isErrorOccurred flag to tell translator that error has occurred while file generation
+ * @throws IOException when failed to delete the temporary files
+ */
+ @Override
+ public void freeTemporaryResources(boolean isErrorOccurred)
+ throws IOException {
+
+ closeFile(eventJavaFileHandle, isErrorOccurred);
+ closeFile(eventListenerJavaFileHandle, isErrorOccurred);
+ closeFile(eventSubjectJavaFileHandle, isErrorOccurred);
+
+ closeFile(eventEnumTempFileHandle, true);
+ closeFile(eventSubjectAttributeTempFileHandle, true);
+ closeFile(eventMethodTempFileHandle, true);
+ closeFile(eventSubjectGetterTempFileHandle, true);
+ closeFile(eventSubjectSetterTempFileHandle, true);
+
+ super.freeTemporaryResources(isErrorOccurred);
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/TempJavaFragmentFiles.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/TempJavaFragmentFiles.java
new file mode 100644
index 0000000..7b47f96
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/TempJavaFragmentFiles.java
@@ -0,0 +1,2149 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.translator.tojava;
+
+import org.onosproject.yang.compiler.datamodel.RpcNotificationContainer;
+import org.onosproject.yang.compiler.datamodel.YangAugment;
+import org.onosproject.yang.compiler.datamodel.YangCase;
+import org.onosproject.yang.compiler.datamodel.YangChoice;
+import org.onosproject.yang.compiler.datamodel.YangDataStructure;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangLeavesHolder;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangSchemaNode;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.javadatamodel.JavaFileInfo;
+import org.onosproject.yang.compiler.datamodel.javadatamodel.JavaQualifiedTypeInfo;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+import org.onosproject.yang.compiler.translator.tojava.javamodel.JavaLeafInfoContainer;
+import org.onosproject.yang.compiler.translator.tojava.javamodel.YangJavaGroupingTranslator;
+import org.onosproject.yang.compiler.translator.tojava.javamodel.YangJavaLeafTranslator;
+import org.onosproject.yang.compiler.translator.tojava.utils.JavaExtendsListHolder;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.getParentNodeInGenCode;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.BITS;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.IDENTITYREF;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.DEFAULT_CLASS_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_TYPE_CLASS;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_IMPL_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_INTERFACE_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.EDIT_CONTENT_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_NODES_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.JavaAttributeInfo.getAttributeInfoForTheData;
+import static org.onosproject.yang.compiler.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedInfoOfFromString;
+import static org.onosproject.yang.compiler.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedTypeInfoOfCurNode;
+import static org.onosproject.yang.compiler.translator.tojava.YangJavaModelUtils.generateBitsFile;
+import static org.onosproject.yang.compiler.translator.tojava.javamodel.AttributesJavaDataType.updateJavaFileInfo;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaCodeSnippetGen.generateEnumAttributeString;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaCodeSnippetGen.getJavaAttributeDefinition;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaFileGenerator.generateBuilderClassFile;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaFileGenerator.generateBuilderInterfaceFile;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaFileGenerator.generateDefaultClassFile;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaFileGenerator.generateInterfaceFile;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaFileGenerator.generateKeyClassFile;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaFileGeneratorUtils.getFileObject;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaIdentifierSyntax.createPackage;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getAddToListMethodImpl;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getAddToListMethodInterface;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getBuildString;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getDefaultConstructorString;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getEqualsMethod;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getFromStringMethod;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getGetterForClass;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getGetterString;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getHashCodeMethod;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getSetterForClass;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getSetterString;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getToStringMethod;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getYangDataStructure;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.parseBuilderInterfaceBuildMethodString;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getImportString;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getOverRideString;
+import static org.onosproject.yang.compiler.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getSubtreeFilteringForLeaf;
+import static org.onosproject.yang.compiler.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getSubtreeFilteringForLeafList;
+import static org.onosproject.yang.compiler.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getSubtreeFilteringForNode;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorErrorType.INVALID_LEAF_HOLDER;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorErrorType.INVALID_NODE;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorErrorType.INVALID_PARENT_NODE;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorErrorType.MISSING_PARENT_NODE;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorUtils.getBeanFiles;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorUtils.getErrorMsg;
+import static org.onosproject.yang.compiler.utils.UtilConstants.AUGMENT_MAP_TYPE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BIT_SET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BOOLEAN_DATA_TYPE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BUILDER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.CLASS_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.CLOSE_CURLY_BRACKET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.COLLECTION_IMPORTS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.DEFAULT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.DEFAULT_CAPS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.DIAMOND_CLOSE_BRACKET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.DIAMOND_OPEN_BRACKET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EMPTY_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EXTEND;
+import static org.onosproject.yang.compiler.utils.UtilConstants.FOUR_SPACE_INDENTATION;
+import static org.onosproject.yang.compiler.utils.UtilConstants.GOOGLE_MORE_OBJECT_IMPORT_CLASS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.GOOGLE_MORE_OBJECT_IMPORT_PKG;
+import static org.onosproject.yang.compiler.utils.UtilConstants.HASH_MAP;
+import static org.onosproject.yang.compiler.utils.UtilConstants.INTERFACE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.INVOCATION_TARGET_EXCEPTION;
+import static org.onosproject.yang.compiler.utils.UtilConstants.JAVA_UTIL_OBJECTS_IMPORT_CLASS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.JAVA_UTIL_PKG;
+import static org.onosproject.yang.compiler.utils.UtilConstants.KEYS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.MAP;
+import static org.onosproject.yang.compiler.utils.UtilConstants.NEW_LINE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OPERATION_TYPE_ATTRIBUTE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OPERATION_TYPE_CLASS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OP_PARAM;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PERIOD;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PRIVATE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PROTECTED;
+import static org.onosproject.yang.compiler.utils.UtilConstants.QUESTION_MARK;
+import static org.onosproject.yang.compiler.utils.UtilConstants.REFLECT_IMPORTS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SELECT_LEAF;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SERVICE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SLASH;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SPACE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SUBTREE_FILTERED;
+import static org.onosproject.yang.compiler.utils.UtilConstants.VALUE_LEAF;
+import static org.onosproject.yang.compiler.utils.UtilConstants.YANG;
+import static org.onosproject.yang.compiler.utils.UtilConstants.YANG_AUGMENTED_INFO_MAP;
+import static org.onosproject.yang.compiler.utils.io.impl.FileSystemUtil.*;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.ADD_TO_LIST;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.SETTER_METHOD;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.getJavaDoc;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getAbsolutePackagePath;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getCamelCase;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getCapitalCase;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getPackageDirPathFromJavaJPackage;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.mergeJavaFiles;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.validateLineLength;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BIT_SET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.JAVA_UTIL_PKG;
+import static org.onosproject.yang.compiler.utils.UtilConstants.VALUE_LEAF;
+
+/**
+ * Represents implementation of java code fragments temporary implementations.
+ * Manages the common temp file required for Java file(s) generated.
+ */
+public class TempJavaFragmentFiles {
+
+ /**
+ * File type extension for java classes.
+ */
+ private static final String JAVA_FILE_EXTENSION = ".java";
+
+ /**
+ * File type extension for temporary classes.
+ */
+ private static final String TEMP_FILE_EXTENSION = ".tmp";
+
+ /**
+ * Folder suffix for temporary files folder.
+ */
+ private static final String TEMP_FOLDER_NAME_SUFFIX = "-Temp";
+
+ /**
+ * File name for getter method.
+ */
+ private static final String GETTER_METHOD_FILE_NAME = "GetterMethod";
+
+ /**
+ * File name for setter method.
+ */
+ private static final String SETTER_METHOD_FILE_NAME = "SetterMethod";
+
+ /**
+ * File name for getter method implementation.
+ */
+ private static final String GETTER_METHOD_IMPL_FILE_NAME =
+ "GetterMethodImpl";
+
+ /**
+ * File name for setter method implementation.
+ */
+ private static final String SETTER_METHOD_IMPL_FILE_NAME =
+ "SetterMethodImpl";
+
+ /**
+ * File name for attributes.
+ */
+ private static final String ATTRIBUTE_FILE_NAME = "Attributes";
+
+ /**
+ * File name for to string method.
+ */
+ private static final String TO_STRING_METHOD_FILE_NAME = "ToString";
+
+ /**
+ * File name for hash code method.
+ */
+ private static final String HASH_CODE_METHOD_FILE_NAME = "HashCode";
+
+ /**
+ * File name for equals method.
+ */
+ private static final String EQUALS_METHOD_FILE_NAME = "Equals";
+
+ /**
+ * File name for from string method.
+ */
+ private static final String FROM_STRING_METHOD_FILE_NAME = "FromString";
+
+ /**
+ * File name for from add to list interface method.
+ */
+ private static final String ADD_TO_LIST_INTERFACE_METHOD_FILE_NAME =
+ "addToList";
+
+ /**
+ * File name for from add to list impl method.
+ */
+ private static final String ADD_TO_LIST_IMPL_METHOD_FILE_NAME =
+ "addToListImpl";
+
+ /**
+ * File name for from leaf identifier attributes.
+ */
+ private static final String LEAF_IDENTIFIER_ATTRIBUTES_FILE_NAME =
+ "leafIdentifierAtr";
+
+ /**
+ * File name for is filter content leaf match.
+ */
+ private static final String FILTER_CONTENT_MATCH_LEAF_FILE_NAME =
+ "isFilterContentMatchLeafMask";
+
+ /**
+ * File name for is filter content leaf-list match.
+ */
+ private static final String FILTER_CONTENT_MATCH_LEAF_LIST_FILE_NAME =
+ "isFilterContentMatchLeafListMask";
+
+ /**
+ * File name for is filter content node match.
+ */
+ private static final String FILTER_CONTENT_MATCH_NODE_FILE_NAME =
+ "isFilterContentMatchNodeMask";
+
+ /**
+ * File name for edit content file.
+ */
+ private static final String EDIT_CONTENT_FILE_NAME = "editContentFile";
+
+ /**
+ * File name for interface java file name suffix.
+ */
+ private static final String INTERFACE_FILE_NAME_SUFFIX = EMPTY_STRING;
+
+ /**
+ * File name for builder interface file name suffix.
+ */
+ private static final String BUILDER_INTERFACE_FILE_NAME_SUFFIX =
+ BUILDER + INTERFACE;
+
+ /**
+ * File name for builder class file name suffix.
+ */
+ private static final String BUILDER_CLASS_FILE_NAME_SUFFIX = BUILDER;
+
+ /**
+ * File name for list key class file name suffix.
+ */
+ private static final String KEY_CLASS_FILE_NAME_SUFFIX = KEYS;
+
+ /**
+ * Current attributes YANG node
+ */
+ private YangNode attrNode;
+
+ /**
+ * Information about the java files being generated.
+ */
+ private JavaFileInfoTranslator javaFileInfo;
+
+ /**
+ * Imported class info.
+ */
+ private JavaImportData javaImportData;
+
+ /**
+ * The variable which guides the types of temporary files generated using
+ * the temporary generated file types mask.
+ */
+ private int tempFilesFlagSet;
+
+ /**
+ * Absolute path where the target java file needs to be generated.
+ */
+ private String absoluteDirPath;
+
+ /**
+ * Contains all the interface(s)/class name which will be extended by
+ * generated files.
+ */
+ private JavaExtendsListHolder javaExtendsListHolder;
+
+ /**
+ * Java file handle for interface file.
+ */
+ private File interfaceJavaFileHandle;
+
+ /**
+ * Java file handle for builder interface file.
+ */
+ private File builderInterfaceJavaFileHandle;
+
+ /**
+ * Java file handle for builder class file.
+ */
+ private File builderClassJavaFileHandle;
+
+ /**
+ * Java file handle for impl class file.
+ */
+ private File implClassJavaFileHandle;
+
+ /**
+ * Temporary file handle for attribute.
+ */
+ private File attributesTempFileHandle;
+
+ /**
+ * Temporary file handle for getter of interface.
+ */
+ private File getterInterfaceTempFileHandle;
+
+ /**
+ * Temporary file handle for setter of interface.
+ */
+ private File setterInterfaceTempFileHandle;
+
+ /**
+ * Temporary file handle for getter of class.
+ */
+ private File getterImplTempFileHandle;
+
+ /**
+ * Temporary file handle for setter of class.
+ */
+ private File setterImplTempFileHandle;
+
+ /**
+ * Temporary file handle for hash code method of class.
+ */
+ private File hashCodeImplTempFileHandle;
+
+ /**
+ * Temporary file handle for equals method of class.
+ */
+ private File equalsImplTempFileHandle;
+
+ /**
+ * Temporary file handle for to string method of class.
+ */
+ private File toStringImplTempFileHandle;
+
+ /**
+ * Temporary file handle for from string method of class.
+ */
+ private File fromStringImplTempFileHandle;
+
+ /**
+ * Temporary file handle for add to list interface method of class.
+ */
+ private File addToListInterfaceTempFileHandle;
+
+ /**
+ * Temporary file handle for add to list impl method of class.
+ */
+ private File addToListImplTempFileHandle;
+
+ /**
+ * Temporary file handle for leaf id attributes of enum.
+ */
+ private File leafIdAttributeTempFileHandle;
+
+ /**
+ * Temporary file handle for is content match method for leaf-list.
+ */
+ private File getSubtreeFilteringForListTempFileHandle;
+
+ /**
+ * Temporary file handle for is content match method for node.
+ */
+ private File getSubtreeFilteringForChildNodeTempFileHandle;
+
+ /**
+ * Temporary file handle for is content match method for leaf.
+ */
+ private File subtreeFilteringForLeafTempFileHandle;
+
+ /**
+ * Temporary file handle for edit content file.
+ */
+ private File editContentTempFileHandle;
+
+ /**
+ * Leaf count.
+ */
+ private int leafCount;
+
+ /**
+ * If current node is root node.
+ */
+ private boolean rootNode;
+
+ /**
+ * Is attribute added.
+ */
+ private boolean isAttributePresent;
+
+ /**
+ * Creates an instance of temp JAVA fragment files.
+ */
+ TempJavaFragmentFiles() {
+ }
+
+ /**
+ * Creates an instance of temporary java code fragment.
+ *
+ * @param fileInfo generated java file information
+ * @throws IOException when fails to create new file handle
+ */
+ protected TempJavaFragmentFiles(JavaFileInfoTranslator fileInfo)
+ throws IOException {
+ javaExtendsListHolder = new JavaExtendsListHolder();
+ javaImportData = new JavaImportData();
+ javaFileInfo = fileInfo;
+ absoluteDirPath = getAbsolutePackagePath(fileInfo.getBaseCodeGenPath(),
+ fileInfo.getPackageFilePath());
+ /*
+ * Initialize getter when generation file type matches to interface
+ * mask.
+ */
+ if (javaFlagSet(INTERFACE_MASK)) {
+ addGeneratedTempFile(GETTER_FOR_INTERFACE_MASK |
+ ADD_TO_LIST_INTERFACE_MASK |
+ LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK);
+ }
+ /*
+ * Initialize getter and setter when generation file type matches to
+ * builder interface mask.
+ */
+ if (javaFlagSet(BUILDER_INTERFACE_MASK)) {
+ addGeneratedTempFile(GETTER_FOR_INTERFACE_MASK |
+ SETTER_FOR_INTERFACE_MASK);
+ }
+ /*
+ * Initialize getterImpl, setterImpl and attributes when generation file
+ * type matches to builder class mask.
+ */
+ if (javaFlagSet(BUILDER_CLASS_MASK)) {
+ addGeneratedTempFile(ATTRIBUTES_MASK | GETTER_FOR_CLASS_MASK |
+ SETTER_FOR_CLASS_MASK);
+ }
+ /*
+ * Initialize getterImpl, attributes, constructor, hash code, equals and
+ * to strings when generation file type matches to impl class mask.
+ */
+ if (javaFlagSet(DEFAULT_CLASS_MASK)) {
+ addGeneratedTempFile(
+ ATTRIBUTES_MASK | GETTER_FOR_CLASS_MASK |
+ HASH_CODE_IMPL_MASK | EQUALS_IMPL_MASK |
+ TO_STRING_IMPL_MASK | ADD_TO_LIST_IMPL_MASK |
+ FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK |
+ FILTER_CONTENT_MATCH_FOR_LEAF_MASK |
+ FILTER_CONTENT_MATCH_FOR_NODES_MASK);
+ }
+ /*
+ * Initialize temp files to generate type class.
+ */
+ if (javaFlagSet(GENERATE_TYPE_CLASS)) {
+ addGeneratedTempFile(ATTRIBUTES_MASK | GETTER_FOR_CLASS_MASK |
+ HASH_CODE_IMPL_MASK | EQUALS_IMPL_MASK |
+ FROM_STRING_IMPL_MASK);
+
+ if (getGeneratedJavaFiles() != GENERATE_UNION_CLASS) {
+ addGeneratedTempFile(TO_STRING_IMPL_MASK);
+ }
+ }
+
+ //Set temporary file handles
+ if (tempFlagSet(ATTRIBUTES_MASK)) {
+ attributesTempFileHandle =
+ getTemporaryFileHandle(ATTRIBUTE_FILE_NAME);
+ }
+ if (tempFlagSet(GETTER_FOR_INTERFACE_MASK)) {
+ getterInterfaceTempFileHandle =
+ getTemporaryFileHandle(GETTER_METHOD_FILE_NAME);
+ }
+ if (tempFlagSet(SETTER_FOR_INTERFACE_MASK)) {
+ setterInterfaceTempFileHandle =
+ getTemporaryFileHandle(SETTER_METHOD_FILE_NAME);
+ }
+ if (tempFlagSet(GETTER_FOR_CLASS_MASK)) {
+ getterImplTempFileHandle =
+ getTemporaryFileHandle(GETTER_METHOD_IMPL_FILE_NAME);
+ }
+ if (tempFlagSet(SETTER_FOR_CLASS_MASK)) {
+ setterImplTempFileHandle =
+ getTemporaryFileHandle(SETTER_METHOD_IMPL_FILE_NAME);
+ }
+ if (tempFlagSet(HASH_CODE_IMPL_MASK)) {
+ hashCodeImplTempFileHandle =
+ getTemporaryFileHandle(HASH_CODE_METHOD_FILE_NAME);
+ }
+ if (tempFlagSet(EQUALS_IMPL_MASK)) {
+ equalsImplTempFileHandle =
+ getTemporaryFileHandle(EQUALS_METHOD_FILE_NAME);
+ }
+ if (tempFlagSet(TO_STRING_IMPL_MASK)) {
+ toStringImplTempFileHandle =
+ getTemporaryFileHandle(TO_STRING_METHOD_FILE_NAME);
+ }
+ if (tempFlagSet(FROM_STRING_IMPL_MASK)) {
+ fromStringImplTempFileHandle =
+ getTemporaryFileHandle(FROM_STRING_METHOD_FILE_NAME);
+ }
+ if (tempFlagSet(ADD_TO_LIST_INTERFACE_MASK)) {
+ addToListInterfaceTempFileHandle =
+ getTemporaryFileHandle(ADD_TO_LIST_INTERFACE_METHOD_FILE_NAME);
+ }
+ if (tempFlagSet(ADD_TO_LIST_IMPL_MASK)) {
+ addToListImplTempFileHandle =
+ getTemporaryFileHandle(ADD_TO_LIST_IMPL_METHOD_FILE_NAME);
+ }
+ if (tempFlagSet(LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK)) {
+ leafIdAttributeTempFileHandle =
+ getTemporaryFileHandle(LEAF_IDENTIFIER_ATTRIBUTES_FILE_NAME);
+ }
+ if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_MASK)) {
+ subtreeFilteringForLeafTempFileHandle =
+ getTemporaryFileHandle(FILTER_CONTENT_MATCH_LEAF_FILE_NAME);
+ }
+ if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK)) {
+ getSubtreeFilteringForListTempFileHandle =
+ getTemporaryFileHandle(FILTER_CONTENT_MATCH_LEAF_LIST_FILE_NAME);
+ }
+ if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_NODES_MASK)) {
+ getSubtreeFilteringForChildNodeTempFileHandle =
+ getTemporaryFileHandle(FILTER_CONTENT_MATCH_NODE_FILE_NAME);
+ }
+ if (tempFlagSet(EDIT_CONTENT_MASK)) {
+ editContentTempFileHandle =
+ getTemporaryFileHandle(EDIT_CONTENT_FILE_NAME);
+ }
+ }
+
+ /**
+ * Adds current node info as and attribute to the parent generated file.
+ *
+ * @param curNode current node
+ * @param isList is list construct
+ * @param config plugin configurations
+ * @throws IOException IO operation exception
+ */
+ protected static void addCurNodeInfoInParentTempFile(YangNode curNode,
+ boolean isList,
+ YangPluginConfig config)
+ throws IOException {
+ YangNode parent = getParentNodeInGenCode(curNode);
+ if (!(parent instanceof JavaCodeGenerator)) {
+ throw new TranslatorException(getErrorMsg(MISSING_PARENT_NODE,
+ curNode));
+ }
+ if (parent instanceof YangJavaGroupingTranslator) {
+ /*
+ * In case of grouping, there is no need to add the information, it
+ * will be taken care in uses.
+ */
+ return;
+ }
+ addCurNodeInfoInParentTempFile(curNode, isList, config, parent);
+ }
+
+ /**
+ * Adds current node info as and attribute to a specified parent generated
+ * file. In case of grouping parent will be referred grouping node or
+ * referred node in grouping.
+ *
+ * @param curNode current node
+ * @param isList is list construct
+ * @param config plugin configurations
+ * @param parent parent node
+ * @throws IOException IO operation exception
+ */
+ protected static void addCurNodeInfoInParentTempFile(
+ YangNode curNode, boolean isList, YangPluginConfig config,
+ YangNode parent)
+ throws IOException {
+ TempJavaBeanFragmentFiles tempFiles =
+ getBeanFiles((JavaCodeGeneratorInfo) parent);
+ tempFiles.setAttrNode(curNode);
+ JavaFileInfoTranslator fileInfo = ((JavaCodeGeneratorInfo) parent)
+ .getJavaFileInfo();
+ if (curNode instanceof YangChoice && curNode.isOpTypeReq()) {
+ JavaQualifiedTypeInfoTranslator info = new
+ JavaQualifiedTypeInfoTranslator();
+ info.setClassInfo(INVOCATION_TARGET_EXCEPTION);
+ info.setPkgInfo(REFLECT_IMPORTS);
+ info.setForInterface(false);
+ tempFiles.getJavaImportData().addImportInfo(
+ info, getCapitalCase(fileInfo.getJavaName()),
+ fileInfo.getPackage());
+ }
+ JavaAttributeInfo attr = getCurNodeAsAttributeInTarget(
+ curNode, parent, isList, tempFiles);
+ tempFiles.addJavaSnippetInfoToApplicableTempFiles(attr, config);
+ }
+
+ /**
+ * Creates an attribute info object corresponding to a data model node
+ * and return it.
+ *
+ * @param curNode current node
+ * @param targetNode target node
+ * @param listNode flag indicating if a node is a list node
+ * @param tempFiles temp java fragment files
+ * @return java attribute info
+ */
+ public static JavaAttributeInfo
+ getCurNodeAsAttributeInTarget(YangNode curNode, YangNode targetNode,
+ boolean listNode,
+ TempJavaFragmentFiles tempFiles) {
+ JavaFileInfoTranslator translator =
+ ((JavaFileInfoContainer) curNode).getJavaFileInfo();
+ String curNodeName = translator.getJavaName();
+ if (curNodeName == null) {
+ updateJavaFileInfo(curNode, null);
+ curNodeName = translator.getJavaName();
+ }
+ /*
+ * Get the import info corresponding to the attribute for import in
+ * generated java files or qualified access.
+ */
+ JavaQualifiedTypeInfoTranslator typeInfo =
+ getQualifiedTypeInfoOfCurNode(curNode,
+ getCapitalCase(curNodeName));
+ if (!(targetNode instanceof TempJavaCodeFragmentFilesContainer)) {
+ throw new TranslatorException(getErrorMsg(INVALID_PARENT_NODE,
+ curNode));
+ }
+ JavaImportData parentImportData = tempFiles.getJavaImportData();
+ JavaFileInfoTranslator fileInfo =
+ ((JavaFileInfoContainer) targetNode).getJavaFileInfo();
+
+ boolean qualified;
+ if (tempFiles instanceof TempJavaServiceFragmentFiles &&
+ typeInfo.getClassInfo().contentEquals(SERVICE) ||
+ typeInfo.getClassInfo()
+ .contentEquals(getCapitalCase(fileInfo.getJavaName() +
+ SERVICE))) {
+ qualified = true;
+ } else {
+ String className;
+ if (tempFiles instanceof TempJavaServiceFragmentFiles) {
+ className = getCapitalCase(fileInfo.getJavaName()) + SERVICE;
+ } else {
+ className = getCapitalCase(fileInfo.getJavaName());
+ }
+ qualified = parentImportData.addImportInfo(typeInfo, className,
+ fileInfo.getPackage());
+ if (!qualified && !(curNode instanceof YangChoice) &&
+ targetNode.isOpTypeReq()) {
+ String name = DEFAULT_CAPS + typeInfo.getClassInfo();
+ JavaQualifiedTypeInfoTranslator qInfo =
+ new JavaQualifiedTypeInfoTranslator();
+ qInfo.setForInterface(false);
+ qInfo.setPkgInfo(typeInfo.getPkgInfo());
+ qInfo.setClassInfo(name);
+ parentImportData.addImportInfo(qInfo, className,
+ fileInfo.getPackage());
+ }
+ }
+ boolean collectionSet = false;
+ if (curNode instanceof YangList) {
+ YangList yangList = (YangList) curNode;
+ YangDataStructure ds = getYangDataStructure(
+ yangList.getCompilerAnnotation());
+ if (ds != null) {
+ switch (ds) {
+ case QUEUE:
+ parentImportData.setQueueToImport(true);
+ collectionSet = true;
+ break;
+
+ case SET:
+ parentImportData.setSetToImport(true);
+ collectionSet = true;
+ break;
+
+ case MAP:
+ parentImportData.setMapToImport(true);
+ collectionSet = true;
+ break;
+
+ default: {
+ parentImportData.setIfListImported(true);
+ collectionSet = true;
+ }
+ }
+ }
+ }
+ if (listNode && !collectionSet) {
+ parentImportData.setIfListImported(true);
+ }
+ if (curNode instanceof YangList) {
+ return getAttributeInfoForTheData(typeInfo, curNodeName,
+ null, qualified, listNode,
+ ((YangList) curNode)
+ .getCompilerAnnotation());
+ }
+ return getAttributeInfoForTheData(typeInfo, curNodeName, null,
+ qualified, listNode);
+ }
+
+ /**
+ * Returns java attribute for leaf.
+ *
+ * @param tempFiles temporary generated file
+ * @param container JAVA leaf info container
+ * @param config plugin configurations
+ * @param leafList flag indicating if it's leaf list
+ * @return java attribute info
+ */
+ private static JavaAttributeInfo
+ getJavaAttributeOfLeaf(TempJavaFragmentFiles tempFiles,
+ JavaLeafInfoContainer container,
+ YangPluginConfig config, boolean leafList) throws IOException {
+ if (leafList) {
+ tempFiles.getJavaImportData().setIfListImported(true);
+ return getAttributeOfLeafInfoContainer(tempFiles, container, config,
+ true);
+ }
+ return getAttributeOfLeafInfoContainer(tempFiles, container, config,
+ false);
+ }
+
+ /**
+ * Returns java attribute for leaf container.
+ *
+ * @param tempFiles temporary generated file
+ * @param container JAVA leaf info container
+ * @param config plugin configurations
+ * @param listAttribute flag indicating if list attribute
+ * @return JAVA attribute information
+ * @throws IOException when fails to do IO operations
+ */
+ private static JavaAttributeInfo
+ getAttributeOfLeafInfoContainer(TempJavaFragmentFiles tempFiles,
+ JavaLeafInfoContainer container,
+ YangPluginConfig config,
+ boolean listAttribute) throws IOException {
+ container.setConflictResolveConfig(config.getConflictResolver());
+ container.updateJavaQualifiedInfo();
+ addImportForLeafInfo(tempFiles, container);
+ JavaAttributeInfo attr = getAttributeInfoForTheData(
+ container.getJavaQualifiedInfo(),
+ container.getJavaName(config.getConflictResolver()),
+ container.getDataType(),
+ tempFiles.getIsQualifiedAccessOrAddToImportList(
+ container.getJavaQualifiedInfo()), listAttribute);
+ boolean condition =
+ ((YangSchemaNode) container).getReferredSchema() == null &&
+ container.getDataType().getDataType() == BITS;
+ if (condition) {
+ addBitsHandler(attr, container.getDataType(), tempFiles);
+ }
+ return attr;
+ }
+
+ /**
+ * Returns list of java attribute for keys of list node.
+ *
+ * @param curNode current list node
+ * @return attribute list
+ * @throws IOException when fails to do IO operations
+ */
+ public static List<JavaAttributeInfo> getListOfAttributesForKey(
+ YangNode curNode) throws IOException {
+ List<String> keys = ((YangList) curNode).getKeyList();
+
+ JavaFileInfoTranslator fileInfo =
+ ((JavaFileInfoContainer) curNode).getJavaFileInfo();
+ YangLeavesHolder holder = (YangLeavesHolder) curNode;
+ Iterator<String> keyIt = keys.iterator();
+ Iterator<YangLeaf> leafIt;
+ String key;
+ YangJavaLeafTranslator leaf;
+ TempJavaBeanFragmentFiles beanFile = getBeanFiles(curNode);
+ List<JavaAttributeInfo> attrs = new ArrayList<>();
+ while (keyIt.hasNext()) {
+ key = keyIt.next();
+ leafIt = holder.getListOfLeaf().iterator();
+ while (leafIt.hasNext()) {
+ leaf = (YangJavaLeafTranslator) leafIt.next();
+ if (key.equals(leaf.getName())) {
+ attrs.add(getAttributeOfLeafInfoContainer(
+ beanFile, leaf,
+ fileInfo.getPluginConfig(), false));
+ }
+ }
+ }
+ return attrs;
+ }
+
+ /**
+ * Adds bits handler attribute for bits to string method.
+ *
+ * @param attr attribute
+ * @param type type
+ * @param tempFiles temp fragment file
+ */
+ static void addBitsHandler(JavaAttributeInfo attr, YangType type,
+ TempJavaFragmentFiles tempFiles)
+ throws IOException {
+ generateBitsFile(attr, type, tempFiles.getJavaFileInfo(), tempFiles);
+ }
+
+ /**
+ * Adds attribute types import to leaf info container's parent.
+ *
+ * @param tempFiles temp java file
+ * @param container leaf info container
+ */
+ private static void addImportForLeafInfo(TempJavaFragmentFiles tempFiles,
+ JavaLeafInfoContainer container) {
+ String containedInCls = getCapitalCase(tempFiles.getJavaFileInfo()
+ .getJavaName());
+ String containedInPkg = tempFiles.getJavaFileInfo().getPackage();
+ JavaQualifiedTypeInfoTranslator info;
+ if (container.getDataType().getDataType() == BITS) {
+ //Add bitset import for type and leaf value flags.
+ info = new JavaQualifiedTypeInfoTranslator();
+ info.setClassInfo(BIT_SET);
+ info.setPkgInfo(JAVA_UTIL_PKG);
+ tempFiles.getJavaImportData().addImportInfo(info, containedInCls,
+ containedInPkg);
+ }
+ tempFiles.getJavaImportData().addImportInfo(
+ (JavaQualifiedTypeInfoTranslator) container
+ .getJavaQualifiedInfo(), containedInCls, containedInPkg);
+ }
+
+ /**
+ * Sets absolute path where the file needs to be generated.
+ *
+ * @param absoluteDirPath absolute path where the file needs to be
+ * generated
+ */
+ protected void setAbsoluteDirPath(String absoluteDirPath) {
+ this.absoluteDirPath = absoluteDirPath;
+ }
+
+ /**
+ * Returns the generated java file information.
+ *
+ * @return generated java file information
+ */
+ protected JavaFileInfoTranslator getJavaFileInfo() {
+ return javaFileInfo;
+ }
+
+ /**
+ * Sets the generated java file information.
+ *
+ * @param javaFileInfo generated java file information
+ */
+ protected void setJavaFileInfo(JavaFileInfoTranslator javaFileInfo) {
+ this.javaFileInfo = javaFileInfo;
+ }
+
+ /**
+ * Returns the flag-set for generated temp files.
+ *
+ * @return flag-set
+ */
+ protected int getGeneratedTempFiles() {
+ return tempFilesFlagSet;
+ }
+
+ /**
+ * Adds to the flag-set for generated temp files.
+ *
+ * @param flags generated temp files flag-set
+ */
+ protected void addGeneratedTempFile(int flags) {
+ tempFilesFlagSet |= flags;
+ }
+
+ /**
+ * Returns the generated Java files.
+ *
+ * @return generated Java files
+ */
+ protected int getGeneratedJavaFiles() {
+ return javaFileInfo.getGeneratedFileTypes();
+ }
+
+ /**
+ * Retrieves the mapped Java class name.
+ *
+ * @return mapped Java class name
+ */
+ protected String getGeneratedJavaClassName() {
+ return getCapitalCase(javaFileInfo.getJavaName());
+ }
+
+ /**
+ * Retrieves the import data for the generated Java file.
+ *
+ * @return import data for the generated Java file
+ */
+ public JavaImportData getJavaImportData() {
+ return javaImportData;
+ }
+
+ /**
+ * Sets import data for the generated Java file.
+ *
+ * @param data import data for the generated Java file
+ */
+ protected void setJavaImportData(JavaImportData data) {
+ javaImportData = data;
+ }
+
+ /**
+ * Retrieves the status of any attributes added.
+ *
+ * @return status of any attributes added
+ */
+ protected boolean isAttributePresent() {
+ return isAttributePresent;
+ }
+
+ /**
+ * Returns getter methods's temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ public File getGetterInterfaceTempFileHandle() {
+ return getterInterfaceTempFileHandle;
+ }
+
+ /**
+ * Returns setter method's temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ public File getSetterInterfaceTempFileHandle() {
+ return setterInterfaceTempFileHandle;
+ }
+
+ /**
+ * Returns setter method's impl's temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ public File getSetterImplTempFileHandle() {
+ return setterImplTempFileHandle;
+ }
+
+ /**
+ * Returns from string method's temporary file handle.
+ *
+ * @return from string method's temporary file handle
+ */
+ public File getFromStringImplTempFileHandle() {
+ return fromStringImplTempFileHandle;
+ }
+
+ /**
+ * Returns attribute's temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ public File getAttributesTempFileHandle() {
+ return attributesTempFileHandle;
+ }
+
+ /**
+ * Returns getter method's impl's temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ public File getGetterImplTempFileHandle() {
+ return getterImplTempFileHandle;
+ }
+
+ /**
+ * Returns hash code method's temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ public File getHashCodeImplTempFileHandle() {
+ return hashCodeImplTempFileHandle;
+ }
+
+ /**
+ * Returns equals method's temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ public File getEqualsImplTempFileHandle() {
+ return equalsImplTempFileHandle;
+ }
+
+ /**
+ * Returns to string method's temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ public File getToStringImplTempFileHandle() {
+ return toStringImplTempFileHandle;
+ }
+
+ /**
+ * Returns java extends list holder.
+ *
+ * @return java extends list holder
+ */
+ public JavaExtendsListHolder getJavaExtendsListHolder() {
+ return javaExtendsListHolder;
+ }
+
+ /**
+ * Sets java extends list holder.
+ *
+ * @param holder java extends list holder
+ */
+ protected void setJavaExtendsListHolder(
+ JavaExtendsListHolder holder) {
+ javaExtendsListHolder = holder;
+ }
+
+ /**
+ * Adds is filter content match for leaf.
+ *
+ * @param attr java attribute
+ * @throws IOException when fails to do IO operations
+ */
+ private void addSubTreeFilteringForLeaf(JavaAttributeInfo attr)
+ throws IOException {
+ appendToFile(subtreeFilteringForLeafTempFileHandle,
+ getSubtreeFilteringForLeaf(attr, attr.getAttributeType()) +
+ NEW_LINE);
+ }
+
+ /**
+ * Adds is filter content match for leaf-list.
+ *
+ * @param attr java attribute
+ * @throws IOException when fails to do IO operations
+ */
+ private void addSubtreeFilteringForLeafList(JavaAttributeInfo attr)
+ throws IOException {
+ appendToFile(getSubtreeFilteringForListTempFileHandle,
+ getSubtreeFilteringForLeafList(attr) + NEW_LINE);
+ }
+
+ /**
+ * Adds is filter content match for nodes.
+ *
+ * @param attr java attribute
+ * @throws IOException when fails to do IO operations
+ */
+ private void addSubtreeFilteringForChildNode(JavaAttributeInfo attr)
+ throws IOException {
+ appendToFile(getSubtreeFilteringForChildNodeTempFileHandle,
+ getSubtreeFilteringForNode(attr, attrNode) + NEW_LINE);
+ }
+
+ /**
+ * Adds attribute for class.
+ *
+ * @param attr attribute info
+ * @throws IOException when fails to append to temporary file
+ */
+ private void addAttribute(JavaAttributeInfo attr)
+ throws IOException {
+ appendToFile(attributesTempFileHandle, parseAttribute(attr));
+ }
+
+ /**
+ * Adds getter for interface.
+ *
+ * @param attr attribute info
+ * @throws IOException when fails to append to temporary file
+ */
+ private void addGetterForInterface(JavaAttributeInfo attr)
+ throws IOException {
+ appendToFile(getterInterfaceTempFileHandle,
+ getGetterString(attr, getGeneratedJavaFiles()) +
+ NEW_LINE);
+ }
+
+ /**
+ * Adds setter for interface.
+ *
+ * @param attr attribute info
+ * @throws IOException when fails to append to temporary file
+ */
+ private void addSetterForInterface(JavaAttributeInfo attr)
+ throws IOException {
+ appendToFile(setterInterfaceTempFileHandle,
+ getSetterString(attr, getGeneratedJavaClassName(),
+ getGeneratedJavaFiles()) + NEW_LINE);
+ }
+
+ /**
+ * Adds setter's implementation for class.
+ *
+ * @param attr attribute info
+ * @throws IOException when fails to append to temporary file
+ */
+ private void addSetterImpl(JavaAttributeInfo attr)
+ throws IOException {
+ String setter = getSetterForClass(attr, getGeneratedJavaClassName(),
+ getGeneratedJavaFiles());
+ String javadoc = getOverRideString();
+ if (attr.getAttributeName().equals(SUBTREE_FILTERED)) {
+ javadoc = getJavaDoc(SETTER_METHOD, attr.getAttributeName(),
+ false, null);
+ }
+ appendToFile(setterImplTempFileHandle, javadoc + setter);
+ }
+
+ /**
+ * Adds getter method's impl for class.
+ *
+ * @param attr attribute info
+ * @throws IOException when fails to append to temporary file
+ */
+ protected void addGetterImpl(JavaAttributeInfo attr)
+ throws IOException {
+ String getter = getGetterForClass(attr, getGeneratedJavaFiles());
+ String javadoc = getOverRideString();
+ YangDataStructure ds = getYangDataStructure(
+ attr.getCompilerAnnotation());
+ String annotation = null;
+ if (ds != null) {
+ annotation = ds.name();
+ }
+ if (attr.getAttributeName().equals(SUBTREE_FILTERED)) {
+ javadoc = getJavaDoc(GETTER_METHOD, attr.getAttributeName(),
+ false, annotation);
+ }
+ if (javaFlagSet(BUILDER_CLASS_MASK)) {
+ appendToFile(getterImplTempFileHandle, javadoc + getter);
+ } else {
+ appendToFile(getterImplTempFileHandle,
+ getJavaDoc(GETTER_METHOD, attr.getAttributeName(),
+ false, annotation) + getter);
+ }
+ }
+
+ /**
+ * Adds add to list interface method.
+ *
+ * @param attr attribute
+ * @throws IOException when fails to do IO operations
+ */
+ private void addAddToListInterface(JavaAttributeInfo attr)
+ throws IOException {
+ YangDataStructure ds = getYangDataStructure(
+ attr.getCompilerAnnotation());
+ String annotation = null;
+ if (ds != null) {
+ annotation = ds.name();
+ }
+ appendToFile(addToListInterfaceTempFileHandle,
+ getJavaDoc(ADD_TO_LIST, attr.getAttributeName(), false,
+ annotation) + getAddToListMethodInterface(
+ attr, getGeneratedJavaClassName()) + NEW_LINE);
+ }
+
+ /**
+ * Adds add to list interface method.
+ *
+ * @param attr attribute
+ * @throws IOException when fails to do IO operations
+ */
+ private void addAddToListImpl(JavaAttributeInfo attr)
+ throws IOException {
+ appendToFile(addToListImplTempFileHandle,
+ getAddToListMethodImpl(attr, getGeneratedJavaClassName()
+ ) + NEW_LINE);
+ }
+
+ /**
+ * Adds leaf identifier enum attributes.
+ *
+ * @param attr attribute
+ * @param value value
+ * @throws IOException when fails to do IO operations
+ */
+ private void addLeafIdAttributes(JavaAttributeInfo attr, int value)
+ throws IOException {
+ appendToFile(leafIdAttributeTempFileHandle, FOUR_SPACE_INDENTATION +
+ generateEnumAttributeString(attr.getAttributeName(), value));
+ }
+
+ /**
+ * Adds build method for interface.
+ *
+ * @return build method for interface
+ * @throws IOException when fails to append to temporary file
+ */
+ protected String addBuildMethodForInterface()
+ throws IOException {
+ return parseBuilderInterfaceBuildMethodString(
+ getGeneratedJavaClassName());
+ }
+
+ /**
+ * Adds build method's implementation for class.
+ *
+ * @return build method implementation for class
+ * @throws IOException when fails to append to temporary file
+ */
+ protected String addBuildMethodImpl()
+ throws IOException {
+ return getBuildString(getGeneratedJavaClassName(), rootNode) + NEW_LINE;
+ }
+
+ /**
+ * Adds default constructor for class.
+ *
+ * @param modifier modifier for constructor
+ * @param toAppend string which need to be appended with the class name
+ * @param suffix is value need to be appended as suffix
+ * @return default constructor for class
+ * @throws IOException when fails to append to file
+ */
+ protected String addDefaultConstructor(String modifier, String toAppend,
+ boolean suffix)
+ throws IOException {
+ StringBuilder name = new StringBuilder();
+ name.append(getGeneratedJavaClassName());
+ if (rootNode && !toAppend.equals(BUILDER)) {
+ name.append(OP_PARAM);
+ return getDefaultConstructorString(name.toString(), modifier);
+ }
+ if (suffix) {
+ name.append(toAppend);
+ return getDefaultConstructorString(name.toString(), modifier);
+ }
+ StringBuilder appended = new StringBuilder();
+ if (toAppend.equals(DEFAULT)) {
+ appended.append(getCapitalCase(toAppend));
+ } else {
+ appended.append(toAppend);
+ }
+ return NEW_LINE + getDefaultConstructorString(appended.append(
+ name).toString(), modifier);
+ // TODO getDefaultConstructorString to handle new line.
+ }
+
+ /**
+ * Adds hash code method for class.
+ *
+ * @param attr attribute info
+ * @throws IOException when fails to append to temporary file
+ */
+ private void addHashCodeMethod(JavaAttributeInfo attr)
+ throws IOException {
+ appendToFile(hashCodeImplTempFileHandle,
+ getHashCodeMethod(attr) + NEW_LINE);
+ }
+
+ /**
+ * Adds equals method for class.
+ *
+ * @param attr attribute info
+ * @throws IOException when fails to append to temporary file
+ */
+ private void addEqualsMethod(JavaAttributeInfo attr)
+ throws IOException {
+ appendToFile(equalsImplTempFileHandle,
+ getEqualsMethod(attr) + NEW_LINE);
+ }
+
+ /**
+ * Adds ToString method for class.
+ *
+ * @param attr attribute info
+ * @throws IOException when fails to append to temporary file
+ */
+ private void addToStringMethod(JavaAttributeInfo attr)
+ throws IOException {
+ appendToFile(toStringImplTempFileHandle,
+ getToStringMethod(attr) + NEW_LINE);
+ }
+
+ /**
+ * Adds from string method for union class.
+ *
+ * @param attr type attribute info
+ * @param fromStringAttr from string attribute info
+ * @throws IOException when fails to append to temporary file
+ */
+ void addFromStringMethod(JavaAttributeInfo attr,
+ JavaAttributeInfo fromStringAttr)
+ throws IOException {
+ appendToFile(fromStringImplTempFileHandle,
+ getFromStringMethod(attr, fromStringAttr) + NEW_LINE);
+ }
+
+ /**
+ * Returns a temporary file handle for the specific file type.
+ *
+ * @param fileName file name
+ * @return temporary file handle
+ * @throws IOException when fails to create new file handle
+ */
+ protected File getTemporaryFileHandle(String fileName)
+ throws IOException {
+ String path = getTempDirPath(absoluteDirPath);
+ File dir = new File(path);
+ boolean isCreated;
+ if (!dir.exists()) {
+ isCreated = dir.mkdirs();
+ if (!isCreated) {
+ throw new IOException("failed to create temporary directory " +
+ "for " + fileName);
+ }
+ }
+ File file = new File(path + fileName + TEMP_FILE_EXTENSION);
+ if (!file.exists()) {
+ isCreated = file.createNewFile();
+ if (!isCreated) {
+ throw new IOException("failed to create temporary file for " +
+ fileName);
+ }
+ } else {
+ throw new IOException(fileName + " is reused due to YANG naming. " +
+ "probably your previous build " +
+ "would have failed");
+ }
+ return file;
+ }
+
+ /**
+ * Returns a temporary file handle for the specific file type.
+ *
+ * @param fileName file name
+ * @return temporary file handle
+ * @throws IOException when fails to create new file handle
+ */
+ public File getJavaFileHandle(String fileName)
+ throws IOException {
+ return getFileObject(getDirPath(), fileName, JAVA_FILE_EXTENSION,
+ javaFileInfo);
+ }
+
+ /**
+ * Returns data from the temporary files.
+ *
+ * @param file temporary file handle
+ * @param absolutePath absolute path
+ * @return stored data from temporary files
+ * @throws IOException when failed to get data from the given file
+ */
+ public String getTemporaryDataFromFileHandle(File file, String absolutePath)
+ throws IOException {
+ String path = getTempDirPath(absolutePath);
+ if (new File(path + file.getName()).exists()) {
+ return readAppendFile(path + file.getName(), EMPTY_STRING);
+ }
+ throw new IOException("Unable to get data from the given " +
+ file.getName() + " file for " +
+ getGeneratedJavaClassName() + PERIOD);
+ }
+
+ /**
+ * Returns temporary directory path.
+ *
+ * @param path absolute path
+ * @return directory path
+ */
+ private String getTempDirPath(String path) {
+ return getPackageDirPathFromJavaJPackage(path) + SLASH +
+ getGeneratedJavaClassName() + TEMP_FOLDER_NAME_SUFFIX + SLASH;
+ }
+
+ /**
+ * Parses attribute to get the attribute string.
+ *
+ * @param attr attribute info
+ * @return attribute string
+ */
+ protected String parseAttribute(JavaAttributeInfo attr) {
+ /*
+ * TODO: check if this utility needs to be called or move to the caller
+ */
+ String attrName = attr.getAttributeName();
+ String attrAccessType = PRIVATE;
+ if ((getGeneratedJavaFiles() & GENERATE_INTERFACE_WITH_BUILDER) != 0) {
+ attrAccessType = PROTECTED;
+ }
+ String pkg = null;
+ if (attr.isQualifiedName()) {
+ pkg = attr.getImportInfo().getPkgInfo();
+ }
+ String attrType = attr.getImportInfo().getClassInfo();
+ if (attr.getAttributeType() != null &&
+ attr.getAttributeType().getDataType() == IDENTITYREF) {
+ String type = attrType;
+ if (pkg != null) {
+ type = pkg + PERIOD + attrType;
+ }
+ attrType = CLASS_STRING + DIAMOND_OPEN_BRACKET +
+ QUESTION_MARK + SPACE + EXTEND + SPACE + type +
+ DIAMOND_CLOSE_BRACKET;
+ return getJavaAttributeDefinition(
+ null, attrType, attrName, attr.isListAttr(), attrAccessType,
+ attr.getCompilerAnnotation());
+ }
+
+ return getJavaAttributeDefinition(
+ pkg, attrType, attrName, attr.isListAttr(), attrAccessType,
+ attr.getCompilerAnnotation());
+ }
+
+ /**
+ * Appends content to temporary file.
+ *
+ * @param file temporary file
+ * @param data data to be appended
+ * @throws IOException when fails to append to file
+ */
+ protected void appendToFile(File file, String data)
+ throws IOException {
+ try {
+ insertDataIntoJavaFile(file, data);
+ } catch (IOException ex) {
+ throw new IOException("failed to write in temp file.");
+ }
+ }
+
+ /**
+ * Adds parent's info to current node import list.
+ *
+ * @param curNode current node
+ * @param config plugin configurations
+ */
+ protected void addParentInfoInCurNodeTempFile(YangNode curNode,
+ YangPluginConfig config) {
+ JavaQualifiedTypeInfoTranslator caseImportInfo =
+ new JavaQualifiedTypeInfoTranslator();
+ YangNode parent = getParentNodeInGenCode(curNode);
+ if (curNode instanceof YangCase && parent instanceof YangAugment) {
+ return;
+ }
+ if (!(parent instanceof JavaCodeGenerator)) {
+ throw new TranslatorException(getErrorMsg(INVALID_PARENT_NODE, curNode));
+ }
+ if (!(curNode instanceof JavaFileInfoContainer)) {
+ throw new TranslatorException(getErrorMsg(INVALID_NODE, curNode));
+ }
+ caseImportInfo.setClassInfo(
+ getCapitalCase(getCamelCase(parent.getName(),
+ config.getConflictResolver())));
+ caseImportInfo.setPkgInfo(((JavaFileInfoContainer) parent).getJavaFileInfo()
+ .getPackage());
+
+ JavaFileInfoTranslator fileInfo =
+ ((JavaFileInfoContainer) curNode).getJavaFileInfo();
+
+ getBeanFiles(curNode).getJavaImportData().addImportInfo(
+ caseImportInfo, getCapitalCase(fileInfo.getJavaName()),
+ fileInfo.getPackage());
+ }
+
+ /**
+ * Adds leaf attributes in generated files.
+ *
+ * @param entry JAVA leaf info container
+ * @param config plugin config
+ * @param curNode current node
+ * @param leafList flag indicating whether leaf container is leafList
+ * @throws IOException IO operation fail
+ */
+ private void addLeafInfoToTempFiles(JavaLeafInfoContainer entry,
+ YangPluginConfig config,
+ YangNode curNode,
+ boolean leafList)
+ throws IOException {
+ if (entry != null) {
+ if (curNode instanceof RpcNotificationContainer) {
+ TempJavaBeanFragmentFiles tempFiles = getBeanFiles(curNode);
+ addJavaSnippetInfoToApplicableTempFiles(
+ getJavaAttributeOfLeaf(tempFiles, entry,
+ config, leafList), config);
+ } else {
+ addJavaSnippetInfoToApplicableTempFiles(
+ getJavaAttributeOfLeaf(this, entry,
+ config, leafList), config);
+ }
+ }
+ }
+
+ /**
+ * Adds all the leaves in the current data model node as part of the
+ * generated temporary file.
+ *
+ * @param curNode current node
+ * @param config plugin config
+ * @throws IOException IO operation fail
+ */
+ protected void addCurNodeLeavesInfoToTempFiles(YangNode curNode,
+ YangPluginConfig config)
+ throws IOException {
+ if (!(curNode instanceof YangLeavesHolder)) {
+ throw new TranslatorException(getErrorMsg(INVALID_LEAF_HOLDER,
+ curNode));
+ }
+ YangLeavesHolder leavesHolder = (YangLeavesHolder) curNode;
+
+ for (YangLeaf leaf : leavesHolder.getListOfLeaf()) {
+ addLeafInfoToTempFiles((JavaLeafInfoContainer) leaf, config,
+ curNode, false);
+ }
+
+ for (YangLeafList leafList : leavesHolder.getListOfLeafList()) {
+ addLeafInfoToTempFiles((JavaLeafInfoContainer) leafList, config,
+ curNode, true);
+ }
+ }
+
+ /**
+ * Adds operation type to temp files.
+ *
+ * @param curNode current YANG node
+ * @param config YANG plugin config
+ * @throws IOException IO exception
+ */
+ protected void addOperationTypeToTempFiles(YangNode curNode,
+ YangPluginConfig config)
+ throws IOException {
+ JavaQualifiedTypeInfoTranslator typeInfo =
+ new JavaQualifiedTypeInfoTranslator();
+ typeInfo.setClassInfo(OPERATION_TYPE_CLASS);
+ JavaFileInfo curInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
+ JavaFileInfo info;
+ if (curNode instanceof RpcNotificationContainer) {
+ info = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
+ } else {
+ info = ((JavaFileInfoContainer) getModuleNode(curNode))
+ .getJavaFileInfo();
+ }
+
+ typeInfo.setPkgInfo(info.getPackage().toLowerCase() + PERIOD +
+ getCapitalCase(info.getJavaName()));
+ String curNodeName = getCapitalCase(curInfo.getJavaName());
+ boolean isQualified = false;
+ if (!(curNode instanceof RpcNotificationContainer)) {
+ isQualified = javaImportData.addImportInfo(typeInfo, curNodeName,
+ curInfo.getPackage());
+ }
+ JavaAttributeInfo attributeInfo =
+ getAttributeInfoForTheData(typeInfo, YANG + curNodeName +
+ OPERATION_TYPE_ATTRIBUTE, null, isQualified, false);
+ addJavaSnippetInfoToApplicableTempFiles(attributeInfo, config);
+ }
+
+ private YangNode getModuleNode(YangNode curNode) {
+ YangNode tempNode = curNode.getParent();
+ while (!(tempNode instanceof RpcNotificationContainer)) {
+ tempNode = tempNode.getParent();
+ }
+ return tempNode;
+ }
+
+ /**
+ * Adds value leaf flag to temp files.
+ *
+ * @param config YANG plugin config
+ * @param node YANG node
+ * @throws IOException IO exception
+ */
+ protected void addValueLeafFlag(YangPluginConfig config, YangNode node)
+ throws IOException {
+ JavaFileInfo info = ((JavaFileInfoContainer) node).getJavaFileInfo();
+ JavaQualifiedTypeInfoTranslator typeInfo =
+ new JavaQualifiedTypeInfoTranslator();
+ typeInfo.setClassInfo(BIT_SET);
+ typeInfo.setPkgInfo(JAVA_UTIL_PKG);
+ getJavaImportData().addImportInfo(typeInfo, info.getJavaName(),
+ info.getPackage());
+ JavaAttributeInfo attributeInfo =
+ getAttributeInfoForTheData(typeInfo, VALUE_LEAF, null, false, false);
+ addJavaSnippetInfoToApplicableTempFiles(attributeInfo, config);
+ }
+
+ /**
+ * Adds value leaf flag to temp files.
+ *
+ * @param config YANG plugin config
+ * @throws IOException IO exception
+ */
+ protected void addSelectLeafFlag(YangPluginConfig config)
+ throws IOException {
+ JavaQualifiedTypeInfoTranslator typeInfo =
+ new JavaQualifiedTypeInfoTranslator();
+ typeInfo.setClassInfo(BIT_SET);
+ typeInfo.setPkgInfo(JAVA_UTIL_PKG);
+ JavaAttributeInfo attributeInfo =
+ getAttributeInfoForTheData(typeInfo, SELECT_LEAF, null, false, false);
+ addJavaSnippetInfoToApplicableTempFiles(attributeInfo, config);
+ }
+
+ /**
+ * Adds sub tree filtering to temp files.
+ *
+ * @param config YANG plugin config
+ * @throws IOException IO exception
+ */
+ protected void addIsSubTreeFilteredFlag(YangPluginConfig config)
+ throws IOException {
+ JavaQualifiedTypeInfoTranslator typeInfo =
+ new JavaQualifiedTypeInfoTranslator();
+ typeInfo.setClassInfo(BOOLEAN_DATA_TYPE);
+ typeInfo.setPkgInfo(null);
+ JavaAttributeInfo attributeInfo =
+ getAttributeInfoForTheData(typeInfo, SUBTREE_FILTERED, null, false, false);
+ addJavaSnippetInfoToApplicableTempFiles(attributeInfo, config);
+ }
+
+ /**
+ * Adds value leaf flag to temp files.
+ *
+ * @param config YANG plugin config
+ * @param curNode current yang node
+ * @throws IOException IO exception
+ */
+ protected void addYangAugmentedMap(YangPluginConfig config, YangNode curNode)
+ throws IOException {
+ JavaFileInfoTranslator info = ((JavaCodeGeneratorInfo) curNode)
+ .getJavaFileInfo();
+ JavaQualifiedTypeInfoTranslator typeInfo =
+ new JavaQualifiedTypeInfoTranslator();
+ typeInfo.setClassInfo(AUGMENT_MAP_TYPE);
+ //Fix for add yangAugmentedInfo in equals/hashcode/and to string method.
+ typeInfo.setPkgInfo(null);
+ typeInfo.setForInterface(false);
+ JavaAttributeInfo attributeInfo =
+ getAttributeInfoForTheData(typeInfo, YANG_AUGMENTED_INFO_MAP,
+ null, false, false);
+ //MAP
+ addImportInfoOfNode(MAP, COLLECTION_IMPORTS,
+ getCapitalCase(info.getJavaName()),
+ info.getPackage(), true);
+ //HASH map
+ addImportInfoOfNode(HASH_MAP, COLLECTION_IMPORTS,
+ getCapitalCase(info.getJavaName()),
+ info.getPackage(), false);
+
+ if (curNode.isOpTypeReq()) {
+ //exception
+ addImportInfoOfNode(INVOCATION_TARGET_EXCEPTION, REFLECT_IMPORTS,
+ getCapitalCase(info.getJavaName()),
+ info.getPackage(), false);
+ }
+ addJavaSnippetInfoToApplicableTempFiles(attributeInfo, config);
+ }
+
+ private JavaQualifiedTypeInfoTranslator addImportInfoOfNode(
+ String cls, String pkg, String nodeName, String nodePkg,
+ boolean isForInterface) {
+ JavaQualifiedTypeInfoTranslator typeInfo =
+ new JavaQualifiedTypeInfoTranslator();
+ typeInfo.setClassInfo(cls);
+ typeInfo.setPkgInfo(pkg);
+ typeInfo.setForInterface(isForInterface);
+
+ getJavaImportData().addImportInfo(typeInfo, nodeName, nodePkg);
+ return typeInfo;
+ }
+
+ /**
+ * Adds the new attribute info to the target generated temporary files.
+ *
+ * @param newAttrInfo new attribute info
+ * @param pluginConfig plugin configurations
+ * @throws IOException IO operation fail
+ */
+ void addJavaSnippetInfoToApplicableTempFiles(JavaAttributeInfo newAttrInfo,
+ YangPluginConfig pluginConfig)
+ throws IOException {
+ isAttributePresent = true;
+ String attrName = newAttrInfo.getAttributeName();
+ //Boolean flag for operation type attr info generation control.
+ boolean required = !attrName.equals(VALUE_LEAF) &&
+ !attrName.equals(SELECT_LEAF) &&
+ !attrName.equals(YANG_AUGMENTED_INFO_MAP);
+ //Boolean flag for subtree for nodes info generation control.
+ boolean subTreeForChild =
+ tempFlagSet(FILTER_CONTENT_MATCH_FOR_NODES_MASK) &&
+ newAttrInfo.getAttributeType() == null &&
+ !attrName.contains(OPERATION_TYPE_ATTRIBUTE) &&
+ required && !attrName.equals(SUBTREE_FILTERED);
+ ;
+ if (tempFlagSet(ATTRIBUTES_MASK)) {
+ addAttribute(newAttrInfo);
+ }
+ if (tempFlagSet(GETTER_FOR_INTERFACE_MASK) &&
+ !attrName.equals(SUBTREE_FILTERED)) {
+ addGetterForInterface(newAttrInfo);
+ }
+ if (tempFlagSet(SETTER_FOR_INTERFACE_MASK) && required &&
+ !attrName.equals(SUBTREE_FILTERED)) {
+ addSetterForInterface(newAttrInfo);
+ }
+ if (tempFlagSet(SETTER_FOR_CLASS_MASK) && required) {
+ addSetterImpl(newAttrInfo);
+ }
+ if (tempFlagSet(HASH_CODE_IMPL_MASK)) {
+ addHashCodeMethod(newAttrInfo);
+ }
+ if (tempFlagSet(EQUALS_IMPL_MASK)) {
+ addEqualsMethod(newAttrInfo);
+ }
+ if (tempFlagSet(TO_STRING_IMPL_MASK)) {
+ addToStringMethod(newAttrInfo);
+ }
+ if (tempFlagSet(EDIT_CONTENT_MASK)) {
+ //TODO: add implementation for edit content match.
+ }
+ boolean listAttr = newAttrInfo.isListAttr();
+ if (tempFlagSet(ADD_TO_LIST_IMPL_MASK) && listAttr) {
+ addAddToListImpl(newAttrInfo);
+ }
+ if (tempFlagSet(ADD_TO_LIST_INTERFACE_MASK) && listAttr) {
+ addAddToListInterface(newAttrInfo);
+ }
+ YangType attrType = newAttrInfo.getAttributeType();
+ if (subTreeForChild) {
+ addSubtreeFilteringForChildNode(newAttrInfo);
+ }
+ if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_MASK) &&
+ !listAttr && attrType != null) {
+ addSubTreeFilteringForLeaf(newAttrInfo);
+ }
+ if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK) &&
+ listAttr && attrType != null) {
+ addSubtreeFilteringForLeafList(newAttrInfo);
+ }
+ if (tempFlagSet(LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK) &&
+ !listAttr && attrType != null) {
+ leafCount++;
+ addLeafIdAttributes(newAttrInfo, leafCount);
+ }
+ if (!newAttrInfo.isIntConflict() && !newAttrInfo.isLongConflict() &&
+ !newAttrInfo.isShortConflict()) {
+ if (tempFlagSet(GETTER_FOR_CLASS_MASK)) {
+ addGetterImpl(newAttrInfo);
+ }
+ if (tempFlagSet(FROM_STRING_IMPL_MASK)) {
+ JavaQualifiedTypeInfoTranslator typeInfo =
+ getQualifiedInfoOfFromString(newAttrInfo,
+ pluginConfig.getConflictResolver());
+ /*
+ * Create a new java attribute info with qualified information of
+ * wrapper classes.
+ */
+ JavaAttributeInfo fromStringAttributeInfo =
+ getAttributeInfoForTheData(
+ typeInfo, newAttrInfo.getAttributeName(),
+ attrType, getIsQualifiedAccessOrAddToImportList(
+ typeInfo), false);
+ addFromStringMethod(newAttrInfo, fromStringAttributeInfo);
+ }
+ }
+ }
+
+ /**
+ * Returns JAVA class name for non implementation classes.
+ *
+ * @param suffix for the class name based on the file type
+ * @return java class name
+ */
+ protected String getJavaClassName(String suffix) {
+ return getCapitalCase(javaFileInfo.getJavaName()) + suffix;
+ }
+
+ /**
+ * Returns class name for implementation classes.
+ *
+ * @param node YANG node
+ * @return java class name
+ */
+ private String getImplClassName(YangNode node) {
+ if (node instanceof RpcNotificationContainer) {
+ return getGeneratedJavaClassName() + OP_PARAM;
+ }
+ return DEFAULT_CAPS + getGeneratedJavaClassName();
+ }
+
+ /**
+ * Returns the directory path.
+ *
+ * @return directory path
+ */
+ private String getDirPath() {
+ return javaFileInfo.getPackageFilePath();
+ }
+
+ /**
+ * Constructs java code exit.
+ *
+ * @param fileType generated file type
+ * @param curNode current YANG node
+ * @throws IOException when fails to generate java files
+ */
+ public void generateJavaFile(int fileType, YangNode curNode)
+ throws IOException {
+
+ if (curNode.isOpTypeReq()) {
+ addImportInfoOfNode(BIT_SET, JAVA_UTIL_PKG, getGeneratedJavaClassName(),
+ getJavaFileInfo().getPackage(), false);
+ }
+ if (isAttributePresent) {
+ //Object utils
+ addImportInfoOfNode(JAVA_UTIL_OBJECTS_IMPORT_CLASS, JAVA_UTIL_PKG,
+ getGeneratedJavaClassName(),
+ getJavaFileInfo().getPackage(), false);
+ //more objects.
+ addImportInfoOfNode(GOOGLE_MORE_OBJECT_IMPORT_CLASS,
+ GOOGLE_MORE_OBJECT_IMPORT_PKG,
+ getGeneratedJavaClassName(),
+ getJavaFileInfo().getPackage(), false);
+ }
+
+ List<String> imports =
+ getBeanFiles(curNode).getJavaImportData().getImports(true);
+ createPackage(curNode);
+
+ //Generate java code.
+ if ((fileType & INTERFACE_MASK) != 0 ||
+ (fileType & BUILDER_INTERFACE_MASK) != 0) {
+
+ //Create interface file.
+ interfaceJavaFileHandle =
+ getJavaFileHandle(getJavaClassName(INTERFACE_FILE_NAME_SUFFIX));
+ interfaceJavaFileHandle =
+ generateInterfaceFile(interfaceJavaFileHandle, imports,
+ curNode, isAttributePresent);
+
+ //Create builder interface file.
+ if ((fileType & BUILDER_INTERFACE_MASK) != 0) {
+ builderInterfaceJavaFileHandle =
+ getJavaFileHandle(getJavaClassName(
+ BUILDER_INTERFACE_FILE_NAME_SUFFIX));
+ builderInterfaceJavaFileHandle =
+ generateBuilderInterfaceFile(
+ builderInterfaceJavaFileHandle,
+ curNode, isAttributePresent);
+ /*
+ * Append builder interface file to interface file and
+ * close it.
+ */
+ mergeJavaFiles(builderInterfaceJavaFileHandle,
+ interfaceJavaFileHandle);
+ }
+
+ insertDataIntoJavaFile(interfaceJavaFileHandle, CLOSE_CURLY_BRACKET);
+ validateLineLength(interfaceJavaFileHandle);
+ }
+
+ //add imports for default class.
+ imports = getBeanFiles(curNode).getJavaImportData().getImports(false);
+ if (!curNode.isOpTypeReq()) {
+ removeCaseParentImport(curNode, imports);
+ }
+
+ if ((fileType & BUILDER_CLASS_MASK) != 0 ||
+ (fileType & DEFAULT_CLASS_MASK) != 0) {
+
+ //Create impl class file.
+ implClassJavaFileHandle =
+ getJavaFileHandle(getImplClassName(curNode));
+ implClassJavaFileHandle =
+ generateDefaultClassFile(implClassJavaFileHandle,
+ curNode, isAttributePresent,
+ imports);
+
+ //Create builder class file.
+ if ((fileType & BUILDER_CLASS_MASK) != 0) {
+ builderClassJavaFileHandle =
+ getJavaFileHandle(getJavaClassName(
+ BUILDER_CLASS_FILE_NAME_SUFFIX));
+ builderClassJavaFileHandle =
+ generateBuilderClassFile(builderClassJavaFileHandle,
+ curNode,
+ isAttributePresent);
+
+ //Append impl class to builder class and close it.
+ mergeJavaFiles(builderClassJavaFileHandle,
+ implClassJavaFileHandle);
+ }
+ insertDataIntoJavaFile(implClassJavaFileHandle, CLOSE_CURLY_BRACKET);
+ validateLineLength(implClassJavaFileHandle);
+ }
+
+ if (curNode instanceof YangList) {
+ File keyClassJavaFileHandle;
+ YangList list = (YangList) curNode;
+ YangDataStructure data = getYangDataStructure(
+ list.getCompilerAnnotation());
+ if (list.isConfig() && data == YangDataStructure.MAP) {
+ keyClassJavaFileHandle =
+ getJavaFileHandle(getJavaClassName(
+ KEY_CLASS_FILE_NAME_SUFFIX));
+ generateKeyClassFile(keyClassJavaFileHandle, curNode);
+ }
+ }
+ //Close all the file handles.
+ freeTemporaryResources(false);
+ }
+
+ //Removes case's parent import.
+ private void removeCaseParentImport(YangNode node, List<String> imports) {
+ YangNode parent = node.getParent();
+ JavaFileInfo info = ((JavaFileInfoContainer) parent).getJavaFileInfo();
+ String impt = getImportString(info.getPackage(),
+ getCapitalCase(info.getJavaName()));
+ imports.remove(impt);
+ }
+
+ /**
+ * Removes all temporary file handles.
+ *
+ * @param errorOccurred flag indicating if error occurred
+ * @throws IOException when failed to delete the temporary files
+ */
+ public void freeTemporaryResources(boolean errorOccurred)
+ throws IOException {
+ /*
+ * Close all java file handles and when error occurs delete the files.
+ */
+ if (javaFlagSet(INTERFACE_MASK)) {
+ closeFile(interfaceJavaFileHandle, errorOccurred);
+ }
+ if (javaFlagSet(BUILDER_CLASS_MASK)) {
+ closeFile(builderClassJavaFileHandle);
+ }
+ if (javaFlagSet(BUILDER_INTERFACE_MASK)) {
+ closeFile(builderInterfaceJavaFileHandle);
+ }
+ if (javaFlagSet(DEFAULT_CLASS_MASK)) {
+ closeFile(implClassJavaFileHandle, errorOccurred);
+ }
+ /*
+ * Close all temporary file handles and delete the files.
+ */
+ if (tempFlagSet(GETTER_FOR_CLASS_MASK)) {
+ closeFile(getterImplTempFileHandle);
+ }
+ if (tempFlagSet(ATTRIBUTES_MASK)) {
+ closeFile(attributesTempFileHandle);
+ }
+ if (tempFlagSet(HASH_CODE_IMPL_MASK)) {
+ closeFile(hashCodeImplTempFileHandle);
+ }
+ if (tempFlagSet(TO_STRING_IMPL_MASK)) {
+ closeFile(toStringImplTempFileHandle);
+ }
+ if (tempFlagSet(EQUALS_IMPL_MASK)) {
+ closeFile(equalsImplTempFileHandle);
+ }
+ if (tempFlagSet(FROM_STRING_IMPL_MASK)) {
+ closeFile(fromStringImplTempFileHandle);
+ }
+ if (tempFlagSet(ADD_TO_LIST_IMPL_MASK)) {
+ closeFile(addToListImplTempFileHandle);
+ }
+ if (tempFlagSet(ADD_TO_LIST_INTERFACE_MASK)) {
+ closeFile(addToListInterfaceTempFileHandle);
+ }
+ if (tempFlagSet(LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK)) {
+ closeFile(leafIdAttributeTempFileHandle);
+ }
+ if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_MASK)) {
+ closeFile(subtreeFilteringForLeafTempFileHandle);
+ }
+ if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK)) {
+ closeFile(getSubtreeFilteringForListTempFileHandle);
+ }
+ if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_NODES_MASK)) {
+ closeFile(getSubtreeFilteringForChildNodeTempFileHandle);
+ }
+ if (tempFlagSet(EDIT_CONTENT_MASK)) {
+ closeFile(editContentTempFileHandle);
+ }
+ }
+
+ /**
+ * Returns if the attribute needs to be accessed in a qualified manner or
+ * not, if it needs to be imported, then the same needs to be done.
+ *
+ * @param importInfo import info
+ * @return status of the qualified access to the attribute
+ */
+ protected boolean getIsQualifiedAccessOrAddToImportList(
+ JavaQualifiedTypeInfo importInfo) {
+ return javaImportData
+ .addImportInfo((JavaQualifiedTypeInfoTranslator) importInfo,
+ getGeneratedJavaClassName(),
+ javaFileInfo.getPackage());
+ }
+
+ /**
+ * Returns temp file handle for add to list interface.
+ *
+ * @return temp file handle for add to list interface
+ */
+ public File getAddToListInterfaceTempFileHandle() {
+ return addToListInterfaceTempFileHandle;
+ }
+
+ /**
+ * Returns temp file handle for add to list impl.
+ *
+ * @return temp file handle for add to list impl
+ */
+ public File getAddToListImplTempFileHandle() {
+ return addToListImplTempFileHandle;
+ }
+
+ /**
+ * Returns temp file handle for leaf identifier attributes.
+ *
+ * @return temp file handle for leaf identifier attributes
+ */
+ public File getLeafIdAttributeTempFileHandle() {
+ return leafIdAttributeTempFileHandle;
+ }
+
+ /**
+ * Sets true if root node.
+ *
+ * @param rootNode true if root node
+ */
+ void setRootNode(boolean rootNode) {
+ this.rootNode = rootNode;
+ }
+
+ /**
+ * Returns temp file for is content match.
+ *
+ * @return temp file for is content match
+ */
+ public File getSubtreeFilteringForLeafTempFileHandle() {
+ return subtreeFilteringForLeafTempFileHandle;
+ }
+
+ /**
+ * Returns temp file for edit content file.
+ *
+ * @return temp file for edit content file
+ */
+ public File getEditContentTempFileHandle() {
+ return editContentTempFileHandle;
+ }
+
+ /**
+ * Returns temp file for is content match.
+ *
+ * @return temp file for is content match
+ */
+ public File getGetSubtreeFilteringForListTempFileHandle() {
+ return getSubtreeFilteringForListTempFileHandle;
+ }
+
+ /**
+ * Returns temp file for is content match.
+ *
+ * @return temp file for is content match
+ */
+ public File getGetSubtreeFilteringForChildNodeTempFileHandle() {
+ return getSubtreeFilteringForChildNodeTempFileHandle;
+ }
+
+ /**
+ * Checks if a given flag is set in generated java files.
+ * Returns true if ANY flag is set in a bitwise-ORed argument, e.g.
+ * <pre>
+ * javaFlagSet(FOO | BAR)
+ * </pre>
+ * returns true if either FOO flag or BAR flag is set.
+ *
+ * @param flag input flag mask value
+ * @return true if set, else false
+ */
+ private boolean javaFlagSet(int flag) {
+ return (getGeneratedJavaFiles() & flag) != 0;
+ }
+
+ /**
+ * Checks if a given flag is set in temp files.
+ *
+ * @param flag input flag mask value
+ * @return true if set, else false
+ */
+ private boolean tempFlagSet(int flag) {
+ return (tempFilesFlagSet & flag) != 0;
+ }
+
+ /**
+ * Sets attribute's node.
+ *
+ * @param attrNode attribute's node
+ */
+ public void setAttrNode(YangNode attrNode) {
+ this.attrNode = attrNode;
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/TempJavaServiceFragmentFiles.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/TempJavaServiceFragmentFiles.java
new file mode 100644
index 0000000..5162b34
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/TempJavaServiceFragmentFiles.java
@@ -0,0 +1,312 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava;
+
+import org.onosproject.yang.compiler.datamodel.RpcNotificationContainer;
+import org.onosproject.yang.compiler.datamodel.YangAugment;
+import org.onosproject.yang.compiler.datamodel.YangInput;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangOutput;
+import org.onosproject.yang.compiler.datamodel.YangRpc;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+import org.onosproject.yang.compiler.translator.tojava.javamodel.YangJavaModuleTranslator;
+import org.onosproject.yang.compiler.translator.tojava.javamodel.YangJavaSubModuleTranslator;
+import org.onosproject.yang.compiler.translator.tojava.utils.JavaExtendsListHolder;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.JavaAttributeInfo.getAttributeInfoForTheData;
+import static org.onosproject.yang.compiler.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedTypeInfoOfCurNode;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaCodeSnippetGen.addListenersImport;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaFileGenerator.generateServiceInterfaceFile;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaFileGeneratorUtils.addResolvedAugmentedDataNodeImports;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaIdentifierSyntax.createPackage;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getRpcServiceMethod;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EMPTY_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.HYPHEN;
+import static org.onosproject.yang.compiler.utils.UtilConstants.INPUT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OUTPUT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.Operation.ADD;
+import static org.onosproject.yang.compiler.utils.UtilConstants.RPC_INPUT_VAR_NAME;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SERVICE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.VOID;
+import static org.onosproject.yang.compiler.utils.io.impl.FileSystemUtil.closeFile;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.generateJavaDocForRpc;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getAbsolutePackagePath;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getCamelCase;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getCapitalCase;
+
+/**
+ * Represents implementation of java service code fragments temporary
+ * implementations. Maintains the temp files required specific for service
+ * and manager java snippet generation.
+ */
+public class TempJavaServiceFragmentFiles extends TempJavaFragmentFiles {
+
+ /**
+ * File name for rpc method.
+ */
+ private static final String RPC_INTERFACE_FILE_NAME = "Rpc";
+
+ /**
+ * Temporary file handle for rpc interface.
+ */
+ private final File rpcInterfaceTempFileHandle;
+
+ /**
+ * Java file handle for rpc interface file.
+ */
+ private File serviceJavaFileHandle;
+
+ /**
+ * Creates an instance of temporary java code fragment.
+ *
+ * @param javaFileInfo generated file information
+ * @throws IOException when fails to create new file handle
+ */
+ TempJavaServiceFragmentFiles(JavaFileInfoTranslator javaFileInfo)
+ throws IOException {
+ setJavaExtendsListHolder(new JavaExtendsListHolder());
+ setJavaImportData(new JavaImportData());
+ setJavaFileInfo(javaFileInfo);
+ setAbsoluteDirPath(getAbsolutePackagePath(
+ getJavaFileInfo().getBaseCodeGenPath(),
+ getJavaFileInfo().getPackageFilePath()));
+ addGeneratedTempFile(RPC_INTERFACE_MASK);
+ rpcInterfaceTempFileHandle = getTemporaryFileHandle(RPC_INTERFACE_FILE_NAME);
+ }
+
+ /**
+ * Returns rpc method's temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ public File getRpcInterfaceTempFileHandle() {
+ return rpcInterfaceTempFileHandle;
+ }
+
+ /**
+ * Constructs java code exit.
+ *
+ * @param fileType generated file type
+ * @param curNode current YANG node
+ * @throws IOException when fails to generate java files
+ */
+ @Override
+ public void generateJavaFile(int fileType, YangNode curNode)
+ throws IOException {
+
+ addResolvedAugmentedDataNodeImports(curNode);
+ List<String> imports = ((JavaCodeGeneratorInfo) curNode)
+ .getTempJavaCodeFragmentFiles().getServiceTempFiles()
+ .getJavaImportData().getImports(true);
+ createPackage(curNode);
+ boolean notification = false;
+ if (curNode instanceof YangJavaModuleTranslator) {
+ if (!((YangJavaModuleTranslator) curNode).getNotificationNodes()
+ .isEmpty()) {
+ notification = true;
+ }
+ } else if (curNode instanceof YangJavaSubModuleTranslator) {
+ if (!((YangJavaSubModuleTranslator) curNode).getNotificationNodes()
+ .isEmpty()) {
+ notification = true;
+ }
+ }
+
+ if (notification) {
+ addListenersImport(curNode, imports, ADD);
+ }
+
+ serviceJavaFileHandle = getJavaFileHandle(getJavaClassName(SERVICE));
+ generateServiceInterfaceFile(serviceJavaFileHandle, curNode, imports);
+
+ // Close all the file handles.
+ freeTemporaryResources(false);
+ }
+
+ /**
+ * Adds rpc string information to applicable temp file.
+ *
+ * @param inAttr RPCs input node attribute info
+ * @param outAttr RPCs output node attribute info
+ * @param rpcName name of the rpc function
+ * @throws IOException IO operation fail
+ */
+ private void addRpcString(JavaAttributeInfo inAttr, JavaAttributeInfo outAttr,
+ String rpcName) throws IOException {
+ String rpcInput = null;
+ String rpcOutput = VOID;
+ String rpcIn = EMPTY_STRING;
+ if (inAttr != null) {
+ rpcInput = getCapitalCase(inAttr.getAttributeName());
+ }
+ if (outAttr != null) {
+ rpcOutput = getCapitalCase(outAttr.getAttributeName());
+ }
+ if (rpcInput != null) {
+ rpcIn = RPC_INPUT_VAR_NAME;
+ }
+ appendToFile(rpcInterfaceTempFileHandle,
+ generateJavaDocForRpc(rpcName, rpcIn, rpcOutput) +
+ getRpcServiceMethod(rpcName, rpcInput, rpcOutput));
+ }
+
+ /**
+ * Adds the JAVA rpc snippet information.
+ *
+ * @param inAttr RPCs input node attribute info
+ * @param outAttr RPCs output node attribute info
+ * @param rpcName name of the rpc function
+ * @throws IOException IO operation fail
+ */
+ public void addJavaSnippetInfoToApplicableTempFiles(JavaAttributeInfo inAttr,
+ JavaAttributeInfo outAttr,
+ String rpcName)
+ throws IOException {
+ addRpcString(inAttr, outAttr, rpcName);
+ }
+
+ /**
+ * Creates an attribute info object corresponding to a data model node and
+ * return it.
+ *
+ * @param childNode child data model node(input / output) for which the java code generation
+ * is being handled
+ * @param parentNode parent node (module / sub-module) in which the child node is an attribute
+ * @param rpcName rpc name
+ * @return AttributeInfo attribute details required to add in temporary
+ * files
+ */
+ public JavaAttributeInfo getChildNodeAsAttributeInParentService(
+ YangNode childNode, YangNode parentNode, String rpcName) {
+
+ JavaFileInfoTranslator fileInfo = ((JavaFileInfoContainer) childNode)
+ .getJavaFileInfo();
+ String childNodeName = fileInfo.getJavaName();
+ if (childNodeName == null) {
+ if (childNode instanceof YangInput) {
+ childNodeName = rpcName + HYPHEN + INPUT;
+ } else {
+ childNodeName = rpcName + HYPHEN + OUTPUT;
+ }
+ childNodeName = getCamelCase(childNodeName, null);
+ }
+ /*
+ * Get the import info corresponding to the attribute for import in
+ * generated java files or qualified access
+ */
+ JavaQualifiedTypeInfoTranslator qualifiedTypeInfo =
+ getQualifiedTypeInfoOfCurNode(childNode,
+ getCapitalCase(childNodeName));
+ if (!(parentNode instanceof TempJavaCodeFragmentFilesContainer)) {
+ throw new TranslatorException("Parent node does not have file info");
+ }
+
+ boolean isQualified = addImportToService(qualifiedTypeInfo, parentNode);
+ return getAttributeInfoForTheData(qualifiedTypeInfo, childNodeName,
+ null, isQualified, false);
+ }
+
+ /**
+ * Adds to service class import list.
+ *
+ * @param importInfo import info
+ * @return true or false
+ */
+ private boolean addImportToService(
+ JavaQualifiedTypeInfoTranslator importInfo, YangNode curNode) {
+ JavaFileInfoTranslator fileInfo = ((JavaFileInfoContainer) curNode)
+ .getJavaFileInfo();
+ String name = fileInfo.getJavaName();
+ String clsInfo = importInfo.getClassInfo();
+
+ StringBuilder className = new StringBuilder()
+ .append(getCapitalCase(name))
+ .append(SERVICE);
+ return clsInfo.contentEquals(SERVICE) || clsInfo.contentEquals(className) ||
+ getJavaImportData().addImportInfo(importInfo, className.toString(),
+ fileInfo.getPackage());
+ }
+
+ /**
+ * Adds augmented rpc methods to service temp file.
+ *
+ * @param module root node
+ * @throws IOException when fails to do IO operations
+ */
+ public void addAugmentedRpcMethod(RpcNotificationContainer module)
+ throws IOException {
+ JavaAttributeInfo in = null;
+ JavaAttributeInfo out = null;
+ YangNode rpcChild;
+ YangRpc rpc;
+ String rpcName;
+ YangInput input;
+
+ for (YangAugment info : module.getAugmentList()) {
+ input = (YangInput) info.getAugmentedNode();
+
+ if (input != null) {
+ rpc = (YangRpc) input.getParent();
+ if (!validateForIntraFile(module, (RpcNotificationContainer) rpc
+ .getParent())) {
+ rpcChild = rpc.getChild();
+
+ rpcName = getCamelCase(rpc.getName(), null);
+ while (rpcChild != null) {
+ if (rpcChild instanceof YangInput) {
+ in = getChildNodeAsAttributeInParentService(
+ rpcChild, (YangNode) module, rpcName);
+ }
+ if (rpcChild instanceof YangOutput) {
+ out = getChildNodeAsAttributeInParentService(
+ rpcChild, (YangNode) module, rpcName);
+ }
+ rpcChild = rpcChild.getNextSibling();
+ }
+ addJavaSnippetInfoToApplicableTempFiles(in, out, rpcName);
+ }
+ }
+ }
+ }
+
+ private boolean validateForIntraFile(RpcNotificationContainer parent,
+ RpcNotificationContainer curModule) {
+ return parent.getPrefix().equals(curModule.getPrefix());
+ }
+
+ /**
+ * Removes all temporary file handles.
+ *
+ * @param errorOccurred flag indicating error
+ * @throws IOException when failed to delete the temporary files
+ */
+ @Override
+ public void freeTemporaryResources(boolean errorOccurred)
+ throws IOException {
+ closeFile(serviceJavaFileHandle, errorOccurred);
+ closeFile(rpcInterfaceTempFileHandle);
+ closeFile(getGetterInterfaceTempFileHandle());
+ closeFile(getSetterInterfaceTempFileHandle());
+ closeFile(getSetterImplTempFileHandle());
+ super.freeTemporaryResources(errorOccurred);
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/TempJavaTypeFragmentFiles.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/TempJavaTypeFragmentFiles.java
new file mode 100644
index 0000000..e65127f
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/TempJavaTypeFragmentFiles.java
@@ -0,0 +1,1033 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava;
+
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.YangTypeDef;
+import org.onosproject.yang.compiler.datamodel.YangTypeHolder;
+import org.onosproject.yang.compiler.datamodel.YangUnion;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+import org.onosproject.yang.compiler.translator.tojava.javamodel.YangJavaTypeTranslator;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.onosproject.yang.compiler.datamodel.exceptions.ErrorMessages.getErrorMsg;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.BINARY;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.BITS;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.INT16;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.INT32;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.INT64;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.UINT16;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.UINT32;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.UINT8;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.JavaAttributeInfo.getAttributeInfoForTheData;
+import static org.onosproject.yang.compiler.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedInfoOfFromString;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaFileGenerator.generateTypeDefClassFile;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaFileGenerator.generateUnionClassFile;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaIdentifierSyntax.createPackage;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getOfMethodStringAndJavaDoc;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getTypeConstructorStringAndJavaDoc;
+import static org.onosproject.yang.compiler.translator.tojava.utils.ValidatorTypeForUnionTypes.INT_TYPE_CONFLICT;
+import static org.onosproject.yang.compiler.translator.tojava.utils.ValidatorTypeForUnionTypes.LONG_TYPE_CONFLICT;
+import static org.onosproject.yang.compiler.translator.tojava.utils.ValidatorTypeForUnionTypes.SHORT_TYPE_CONFLICT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BASE64;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EMPTY_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.HOLDER_TYPE_DEF;
+import static org.onosproject.yang.compiler.utils.UtilConstants.JAVA_UTIL_PKG;
+import static org.onosproject.yang.compiler.utils.UtilConstants.LAST;
+import static org.onosproject.yang.compiler.utils.UtilConstants.NEW_LINE;
+import static org.onosproject.yang.compiler.utils.io.impl.FileSystemUtil.closeFile;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getCamelCase;
+
+/**
+ * Represents implementation of java data type code fragments temporary implementations. Maintains the temp files
+ * required specific for user defined data type java snippet generation.
+ */
+//TODO: Update with multi type handler framework.
+public class TempJavaTypeFragmentFiles
+ extends TempJavaFragmentFiles {
+
+ /**
+ * File name for of string method.
+ */
+ private static final String OF_STRING_METHOD_FILE_NAME = "OfString";
+
+ /**
+ * File name for construction for special type like union, typedef.
+ */
+ private static final String CONSTRUCTOR_FOR_TYPE_FILE_NAME = "ConstructorForType";
+
+ /**
+ * Integer index in type list.
+ */
+ private int intIndex = 0;
+
+ /**
+ * UInt index in type list.
+ */
+ private int uIntIndex = 0;
+
+ /**
+ * long index in type list.
+ */
+ private int longIndex = 0;
+
+ /**
+ * ULong index in type list.
+ */
+ private int uLongIndex = 0;
+
+ /**
+ * short index in type list.
+ */
+ private int shortIndex = 0;
+
+ /**
+ * Uint8 index in type list.
+ */
+ private int uInt8Index = 0;
+
+ /**
+ * Temporary file handle for of string method of class.
+ */
+ private File ofStringImplTempFileHandle;
+
+ /**
+ * Temporary file handle for constructor for type class.
+ */
+ private File constructorForTypeTempFileHandle;
+
+ /**
+ * Java file handle for typedef class file.
+ */
+ private File typedefClassJavaFileHandle;
+
+ /**
+ * Java file handle for type class like union, typedef file.
+ */
+ private File typeClassJavaFileHandle;
+
+ /**
+ * Java attribute for int.
+ */
+ private JavaAttributeInfo intAttribute;
+
+ /**
+ * Java attribute for long.
+ */
+ private JavaAttributeInfo longAttribute;
+
+ /**
+ * Java attribute for short.
+ */
+ private JavaAttributeInfo shortAttribute;
+
+ /**
+ * Java attribute for uint8.
+ */
+ private JavaAttributeInfo uInt8Attribute;
+
+ /**
+ * Java attribute for uInt.
+ */
+ private JavaAttributeInfo uIntAttribute;
+
+ /**
+ * Java attribute for uLong.
+ */
+ private JavaAttributeInfo uLongAttribute;
+
+ private List<YangType<?>> local = new ArrayList<>();
+
+ private List<JavaAttributeInfo> attrs = new ArrayList<>();
+
+ /**
+ * Creates an instance of temporary java code fragment.
+ *
+ * @param javaFileInfo generated java file info
+ * @throws IOException when fails to create new file handle
+ */
+ TempJavaTypeFragmentFiles(JavaFileInfoTranslator javaFileInfo)
+ throws IOException {
+
+ super(javaFileInfo);
+
+ /*
+ * Initialize getterImpl, attributes, hash code, equals and to strings
+ * when generation file type matches to typeDef class mask.
+ */
+ addGeneratedTempFile(OF_STRING_IMPL_MASK | CONSTRUCTOR_FOR_TYPE_MASK |
+ FROM_STRING_IMPL_MASK);
+
+ ofStringImplTempFileHandle = getTemporaryFileHandle(
+ OF_STRING_METHOD_FILE_NAME);
+ constructorForTypeTempFileHandle = getTemporaryFileHandle(
+ CONSTRUCTOR_FOR_TYPE_FILE_NAME);
+ }
+
+ /**
+ * Returns type class constructor method's temporary file handle.
+ *
+ * @return type class constructor method's temporary file handle
+ */
+
+ public File getConstructorForTypeTempFileHandle() {
+ return constructorForTypeTempFileHandle;
+ }
+
+ /**
+ * Returns java file handle for typedef class file.
+ *
+ * @return java file handle for typedef class file
+ */
+ private File getTypedefClassJavaFileHandle() {
+ return typedefClassJavaFileHandle;
+ }
+
+ /**
+ * Sets the java file handle for typedef class file.
+ *
+ * @param typedefClassJavaFileHandle java file handle
+ */
+ private void setTypedefClassJavaFileHandle(File typedefClassJavaFileHandle) {
+ this.typedefClassJavaFileHandle = typedefClassJavaFileHandle;
+ }
+
+ /**
+ * Returns java file handle for type class file.
+ *
+ * @return java file handle for type class file
+ */
+ private File getTypeClassJavaFileHandle() {
+ return typeClassJavaFileHandle;
+ }
+
+ /**
+ * Sets the java file handle for type class file.
+ *
+ * @param typeClassJavaFileHandle type file handle
+ */
+ private void setTypeClassJavaFileHandle(File typeClassJavaFileHandle) {
+ this.typeClassJavaFileHandle = typeClassJavaFileHandle;
+ }
+
+ /**
+ * Returns of string method's temporary file handle.
+ *
+ * @return of string method's temporary file handle
+ */
+
+ public File getOfStringImplTempFileHandle() {
+ return ofStringImplTempFileHandle;
+ }
+
+ private void verifyUnionTypes(List<YangType<?>> typeList,
+ YangTypeHolder yangTypeHolder) {
+ String msg;
+ YangUnion union = (YangUnion) yangTypeHolder;
+ for (YangType<?> yangType : typeList) {
+ YangDataTypes type = yangType.getDataType();
+ switch (type) {
+ case EMPTY:
+ msg = "Union member derived type must not be one of the " +
+ "type whose built-in types is \"empty\"";
+ break;
+ case LEAFREF:
+ msg = "Union member derived type must not be one of the " +
+ "type whose built-in types is \"leafref\"";
+ break;
+ default:
+ msg = null;
+ }
+ if (msg != null) {
+ throw new TranslatorException(getErrorMsg(
+ msg, union.getName(), union.getLineNumber(), union
+ .getCharPosition(), union.getFileName()));
+ }
+ }
+ }
+
+ /**
+ * Adds all the type in the current data model node as part of the generated temporary file.
+ *
+ * @param yangTypeHolder YANG java data model node which has type info, eg union / typedef
+ * @param config plugin configurations for naming conventions
+ * @throws IOException IO operation fail
+ */
+ void addTypeInfoToTempFiles(YangTypeHolder yangTypeHolder, YangPluginConfig config)
+ throws IOException {
+ List<YangType<?>> typeList = yangTypeHolder.getTypeList();
+ if (yangTypeHolder instanceof YangUnion) {
+ verifyUnionTypes(typeList, yangTypeHolder);
+ }
+ if (typeList != null) {
+ List<YangType<?>> types = validateTypes(typeList);
+ for (YangType<?> type : types) {
+ if (!(type instanceof YangJavaTypeTranslator)) {
+ throw new TranslatorException(
+ "Type does not have Java info " + type
+ .getDataTypeName() + " in " + type
+ .getLineNumber() + " at " + type
+ .getCharPosition() + " in " +
+ type.getFileName());
+ }
+ JavaAttributeInfo javaAttributeInfo = getAttributeForType(type,
+ config);
+ if (yangTypeHolder instanceof YangTypeDef) {
+ javaAttributeInfo.setCurHolderOrCount(HOLDER_TYPE_DEF);
+ } else if (types.indexOf(type) == types.size() - 1) {
+ javaAttributeInfo.setCurHolderOrCount(LAST);
+ }
+ if (type.getDataType() == BITS) {
+ addBitsHandler(javaAttributeInfo, type, this);
+ }
+ if (type.getDataType() == BINARY) {
+ JavaQualifiedTypeInfoTranslator info = new
+ JavaQualifiedTypeInfoTranslator();
+ info.setClassInfo(BASE64);
+ info.setPkgInfo(JAVA_UTIL_PKG);
+ getJavaImportData().addImportInfo(
+ info, getGeneratedJavaClassName(), getJavaFileInfo()
+ .getPackage());
+ }
+ addJavaSnippetInfoToApplicableTempFiles(javaAttributeInfo,
+ config, types);
+ }
+ addTypeConstructor();
+ addMethodsInConflictCase(config);
+ for (JavaAttributeInfo attr : attrs) {
+ super.addJavaSnippetInfoToApplicableTempFiles(attr, config);
+ }
+ }
+ }
+
+ /**
+ * Returns java attribute.
+ *
+ * @param type YANG type
+ * @param config plugin configurations
+ * @return java attribute
+ */
+ private JavaAttributeInfo getAttributeForType(YangType type,
+ YangPluginConfig config) {
+ YangJavaTypeTranslator javaType = (YangJavaTypeTranslator) type;
+ javaType.updateJavaQualifiedInfo(config.getConflictResolver());
+ String typeName = getCamelCase(javaType.getDataTypeName(), config
+ .getConflictResolver());
+ return getAttributeInfoForTheData(
+ javaType.getJavaQualifiedInfo(), typeName, javaType,
+ getIsQualifiedAccessOrAddToImportList(
+ javaType.getJavaQualifiedInfo()), false);
+ }
+
+ /**
+ * Adds the new attribute info to the target generated temporary files for union class.
+ *
+ * @param attr the attribute info that needs to be added to temporary files
+ * @param config plugin configurations
+ * @param types type list
+ * @throws IOException IO operation fail
+ */
+ private void addJavaSnippetInfoToApplicableTempFiles(
+ JavaAttributeInfo attr, YangPluginConfig config, List<YangType<?>> types)
+ throws IOException {
+
+ YangDataTypes attrType = attr.getAttributeType().getDataType();
+
+ if (attrType == INT16 || attrType == UINT8) {
+ boolean isShortConflict = validateForConflictingShortTypes(types);
+ attr.setShortConflict(isShortConflict);
+ updateAttributeCondition(attr);
+ if (!isShortConflict) {
+ addMethodsWhenNoConflictingTypes(attr, config, types);
+ }
+ } else if (attrType == INT32 || attrType == UINT16) {
+ boolean isIntConflict = validateForConflictingIntTypes(types);
+ attr.setIntConflict(isIntConflict);
+ updateAttributeCondition(attr);
+ if (!isIntConflict) {
+ addMethodsWhenNoConflictingTypes(attr, config, types);
+ }
+ } else if (attrType == INT64 || attrType == UINT32) {
+ boolean isLongConflict = validateForConflictingLongTypes(types);
+ attr.setLongConflict(isLongConflict);
+ updateAttributeCondition(attr);
+ if (!isLongConflict) {
+ addMethodsWhenNoConflictingTypes(attr, config, types);
+ }
+ } else {
+ addMethodsWhenNoConflictingTypes(attr, config, types);
+ }
+ String attrHolder = attr.getCurHolderOrCount();
+ if (attrHolder != null && !attrHolder.equals(HOLDER_TYPE_DEF)) {
+ attrs.add(attr);
+ } else {
+ super.addJavaSnippetInfoToApplicableTempFiles(attr, config);
+ }
+ }
+
+ private List<YangType<?>> validateTypes(List<YangType<?>> types) {
+ String curType;
+ List<String> preType = new ArrayList<>();
+ for (YangType type : types) {
+ curType = type.getDataTypeName();
+ if (!preType.contains(curType)) {
+ preType.add(curType);
+ local.add(type);
+ }
+ }
+ return local;
+ }
+
+ /**
+ * Adds of method and constructor when there is no conflicting types.
+ *
+ * @param javaAttributeInfo java attribute info
+ * @param pluginConfig plugin configurations
+ * @param types YANG type
+ * @throws IOException when fails to do IO operations
+ */
+ private void addMethodsWhenNoConflictingTypes(JavaAttributeInfo javaAttributeInfo,
+ YangPluginConfig pluginConfig, List<YangType<?>> types)
+ throws IOException {
+ if ((getGeneratedTempFiles() & OF_STRING_IMPL_MASK) != 0) {
+ addOfStringMethod(javaAttributeInfo, pluginConfig);
+ }
+
+ if ((getGeneratedTempFiles() & CONSTRUCTOR_FOR_TYPE_MASK) != 0) {
+ addTypeConstructor(javaAttributeInfo, types.indexOf
+ (javaAttributeInfo.getAttributeType()));
+ }
+ }
+
+ /**
+ * Adds of, getter and from string method in conflict cases.
+ *
+ * @param pluginConfig plugin configurations
+ * @throws IOException when fails to do IO operations
+ */
+ private void addMethodsInConflictCase(YangPluginConfig pluginConfig)
+ throws IOException {
+ JavaAttributeInfo attr = getIntAttribute();
+ if (attr != null) {
+ attr = getUIntAttribute();
+ }
+ if (attr != null) {
+ if (attr.isIntConflict()) {
+ if (getIntIndex() < getUIntIndex()) {
+ getIntAttribute().setCurHolderOrCount(
+ getUIntAttribute().getCurHolderOrCount());
+ appendToFile(getOfStringImplTempFileHandle(), getOfMethodStringAndJavaDoc(
+ getIntAttribute(), getGeneratedJavaClassName())
+ + NEW_LINE);
+ addGetterImpl(getIntAttribute());
+
+ addFromStringMethod(getIntAttribute(), pluginConfig);
+ } else {
+ getUIntAttribute().setCurHolderOrCount(
+ getIntAttribute().getCurHolderOrCount());
+ appendToFile(getOfStringImplTempFileHandle(),
+ getOfMethodStringAndJavaDoc(getUIntAttribute(),
+ getGeneratedJavaClassName())
+ + NEW_LINE);
+ addGetterImpl(getUIntAttribute());
+ addFromStringMethod(getUIntAttribute(), pluginConfig);
+ }
+ }
+ }
+ attr = getLongAttribute();
+ if (attr != null) {
+ attr = getULongAttribute();
+ }
+ if (attr != null) {
+ if (attr.isLongConflict()) {
+ if (getLongIndex() < getULongIndex()) {
+ getLongAttribute().setCurHolderOrCount(
+ getULongAttribute().getCurHolderOrCount());
+ appendToFile(getOfStringImplTempFileHandle(),
+ getOfMethodStringAndJavaDoc(getLongAttribute(),
+ getGeneratedJavaClassName())
+ + NEW_LINE);
+ addGetterImpl(getLongAttribute());
+ addFromStringMethod(getLongAttribute(), pluginConfig);
+ } else {
+ getULongAttribute().setCurHolderOrCount(
+ getLongAttribute().getCurHolderOrCount());
+ appendToFile(getOfStringImplTempFileHandle(),
+ getOfMethodStringAndJavaDoc(getULongAttribute(),
+ getGeneratedJavaClassName())
+ + NEW_LINE);
+ addGetterImpl(getULongAttribute());
+ addFromStringMethod(getULongAttribute(), pluginConfig);
+ }
+ }
+ }
+
+ attr = getShortAttribute();
+ if (attr != null) {
+ attr = getUInt8Attribute();
+ }
+ if (attr != null) {
+ if (attr.isShortConflict()) {
+ if (getShortIndex() < getUInt8Index()) {
+ getShortAttribute().setCurHolderOrCount(
+ getUInt8Attribute().getCurHolderOrCount());
+ appendToFile(getOfStringImplTempFileHandle(),
+ getOfMethodStringAndJavaDoc(getShortAttribute(),
+ getGeneratedJavaClassName())
+ + NEW_LINE);
+ addGetterImpl(getShortAttribute());
+ addFromStringMethod(getShortAttribute(), pluginConfig);
+ } else {
+ getUInt8Attribute().setCurHolderOrCount(
+ getShortAttribute().getCurHolderOrCount());
+ appendToFile(getOfStringImplTempFileHandle(),
+ getOfMethodStringAndJavaDoc(getUInt8Attribute(),
+ getGeneratedJavaClassName())
+ + NEW_LINE);
+ addGetterImpl(getUInt8Attribute());
+ addFromStringMethod(getUInt8Attribute(), pluginConfig);
+ }
+ }
+ }
+ }
+
+ /**
+ * Adds from string method for conflict case.
+ *
+ * @param newAttrInfo new attribute
+ * @param pluginConfig plugin configurations
+ * @throws IOException when fails to do IO operations
+ */
+ private void addFromStringMethod(JavaAttributeInfo newAttrInfo, YangPluginConfig pluginConfig)
+ throws IOException {
+
+ JavaQualifiedTypeInfoTranslator qualifiedInfoOfFromString = getQualifiedInfoOfFromString(newAttrInfo,
+ pluginConfig.getConflictResolver());
+ /*
+ * Create a new java attribute info with qualified information of
+ * wrapper classes.
+ */
+ JavaAttributeInfo fromStringAttributeInfo =
+ getAttributeInfoForTheData(qualifiedInfoOfFromString,
+ newAttrInfo.getAttributeName(),
+ newAttrInfo.getAttributeType(),
+ getIsQualifiedAccessOrAddToImportList(
+ qualifiedInfoOfFromString), false);
+
+ addFromStringMethod(newAttrInfo, fromStringAttributeInfo);
+ }
+
+ /**
+ * Adds type constructor.
+ *
+ * @param attr attribute info
+ * @param count count of types
+ * @throws IOException when fails to append to temporary file
+ */
+ private void addTypeConstructor(JavaAttributeInfo attr, int count)
+ throws IOException {
+ appendToFile(getConstructorForTypeTempFileHandle(),
+ getTypeConstructorStringAndJavaDoc(
+ attr, getGeneratedJavaClassName(), getGeneratedJavaFiles(), count)
+ + NEW_LINE);
+ }
+
+ /**
+ * Adds type constructor.
+ *
+ * @throws IOException when fails to append to temporary file
+ */
+ private void addTypeConstructor()
+ throws IOException {
+ JavaAttributeInfo attr = getIntAttribute();
+ if (attr != null) {
+ attr = getUIntAttribute();
+ }
+ boolean index = getIntIndex() < getUIntIndex();
+ int count;
+ if (index) {
+ count = getIntIndex();
+ } else {
+ count = getUIntIndex();
+ }
+ if (attr != null) {
+ if (attr.isIntConflict()) {
+ appendToFile(getConstructorForTypeTempFileHandle(),
+ getTypeConstructorStringAndJavaDoc(
+ getIntAttribute(),
+ getUIntAttribute(), getGeneratedJavaClassName(),
+ INT_TYPE_CONFLICT,
+ index, count) + NEW_LINE);
+ }
+ }
+ attr = getLongAttribute();
+ if (attr != null) {
+ attr = getULongAttribute();
+ }
+ index = getLongIndex() < getULongIndex();
+ if (index) {
+ count = getLongIndex();
+ } else {
+ count = getULongIndex();
+ }
+ if (attr != null) {
+ if (attr.isLongConflict()) {
+ appendToFile(getConstructorForTypeTempFileHandle(),
+ getTypeConstructorStringAndJavaDoc(
+ getLongAttribute(),
+ getULongAttribute(), getGeneratedJavaClassName(),
+ LONG_TYPE_CONFLICT,
+ index, count) + NEW_LINE);
+ }
+ }
+ attr = getShortAttribute();
+ if (attr != null) {
+ attr = getUInt8Attribute();
+ }
+ index = getShortIndex() < getUInt8Index();
+ if (index) {
+ count = getShortIndex();
+ } else {
+ count = getUInt8Index();
+ }
+ if (attr != null) {
+ if (attr.isShortConflict()) {
+ appendToFile(getConstructorForTypeTempFileHandle(),
+ getTypeConstructorStringAndJavaDoc(
+ getShortAttribute(),
+ getUInt8Attribute(), getGeneratedJavaClassName(),
+ SHORT_TYPE_CONFLICT,
+ index, count) + NEW_LINE);
+ }
+ }
+ }
+
+ /**
+ * Adds of string for type.
+ *
+ * @param attr attribute info
+ * @param pluginConfig plugin configurations
+ * @throws IOException when fails to append to temporary file
+ */
+ private void addOfStringMethod(JavaAttributeInfo attr, YangPluginConfig pluginConfig)
+ throws IOException {
+ appendToFile(getOfStringImplTempFileHandle(),
+ getOfMethodStringAndJavaDoc(attr,
+ getGeneratedJavaClassName())
+ + NEW_LINE);
+ }
+
+ /**
+ * Removes all temporary file handles.
+ *
+ * @param isErrorOccurred flag to tell translator that error has occurred while file generation
+ * @throws IOException when failed to delete the temporary files
+ */
+ @Override
+ public void freeTemporaryResources(boolean isErrorOccurred)
+ throws IOException {
+
+ if ((getGeneratedJavaFiles() & GENERATE_TYPEDEF_CLASS) != 0 ||
+ (getGeneratedJavaFiles() & GENERATE_UNION_CLASS) != 0) {
+ closeFile(typeClassJavaFileHandle, isErrorOccurred);
+ }
+
+ if ((getGeneratedTempFiles() & CONSTRUCTOR_FOR_TYPE_MASK) != 0) {
+ closeFile(constructorForTypeTempFileHandle, true);
+ }
+ if ((getGeneratedTempFiles() & OF_STRING_IMPL_MASK) != 0) {
+ closeFile(ofStringImplTempFileHandle, true);
+ }
+ if ((getGeneratedTempFiles() & FROM_STRING_IMPL_MASK) != 0) {
+ closeFile(getFromStringImplTempFileHandle(), true);
+ }
+
+ super.freeTemporaryResources(isErrorOccurred);
+ }
+
+ /**
+ * Constructs java code exit.
+ *
+ * @param fileType generated file type
+ * @param curNode current YANG node
+ * @throws IOException when fails to generate java files
+ */
+ @Override
+ public void generateJavaFile(int fileType, YangNode curNode)
+ throws IOException {
+ List<String> imports = new ArrayList<>();
+ if (isAttributePresent()) {
+ imports = getJavaImportData().getImports(true);
+ }
+
+ createPackage(curNode);
+ imports.add(getJavaImportData().getImportForHashAndEquals());
+
+ /*
+ * Creates type def class file.
+ */
+ if ((fileType & GENERATE_TYPEDEF_CLASS) != 0) {
+ setTypedefClassJavaFileHandle(getJavaFileHandle(
+ getJavaClassName(EMPTY_STRING)));
+ generateTypeDefClassFile(getTypedefClassJavaFileHandle(), curNode, imports);
+ }
+ String bit = getJavaImportData().getImportForToBitSet();
+ if (!imports.contains(bit)) {
+ imports.add(bit);
+ }
+ /*
+ * Creates type class file.
+ */
+ if ((fileType & GENERATE_UNION_CLASS) != 0) {
+ setTypeClassJavaFileHandle(getJavaFileHandle(
+ getJavaClassName(EMPTY_STRING)));
+ generateUnionClassFile(getTypeClassJavaFileHandle(), curNode, imports);
+ }
+
+ /*
+ * Close all the file handles.
+ */
+ freeTemporaryResources(false);
+ }
+
+ /**
+ * Returns short type index from type list.
+ *
+ * @return short type index from type list
+ */
+ public int getShortIndex() {
+ return shortIndex;
+ }
+
+ /**
+ * Sets short type index from type list.
+ *
+ * @param shortIndex short type index from type list.
+ */
+ private void setShortIndex(int shortIndex) {
+ this.shortIndex = shortIndex;
+ }
+
+ /**
+ * Returns uInt type index from type list.
+ *
+ * @return uInt type index from type list
+ */
+ public int getUInt8Index() {
+ return uInt8Index;
+ }
+
+ /**
+ * Sets uInt8 type index from type list.
+ *
+ * @param uInt8Index uInt8 type index from type list.
+ */
+ private void setUInt8Index(int uInt8Index) {
+ this.uInt8Index = uInt8Index;
+ }
+
+ /**
+ * Returns int type index from type list.
+ *
+ * @return int type index from type list
+ */
+ public int getIntIndex() {
+ return intIndex;
+ }
+
+ /**
+ * Sets int type index from type list.
+ *
+ * @param intIndex int type index from type list.
+ */
+ private void setIntIndex(int intIndex) {
+ this.intIndex = intIndex;
+ }
+
+ /**
+ * Returns uInt type index from type list.
+ *
+ * @return uInt type index from type list
+ */
+ public int getUIntIndex() {
+ return uIntIndex;
+ }
+
+ /**
+ * Sets uInt type index from type list.
+ *
+ * @param uIntIndex uInt type index from type list.
+ */
+ private void setUIntIndex(int uIntIndex) {
+ this.uIntIndex = uIntIndex;
+ }
+
+ /**
+ * Returns long type index from type list.
+ *
+ * @return long type index from type list
+ */
+ public int getLongIndex() {
+ return longIndex;
+ }
+
+ /**
+ * Sets long type index from type list.
+ *
+ * @param longIndex long type index from type list.
+ */
+ private void setLongIndex(int longIndex) {
+ this.longIndex = longIndex;
+ }
+
+ /**
+ * Returns uLong type index from type list.
+ *
+ * @return uLong type index from type list
+ */
+ public int getULongIndex() {
+ return uLongIndex;
+ }
+
+ /**
+ * Sets uLong type index from type list.
+ *
+ * @param uLongIndex uLong type index from type list.
+ */
+ private void setULongIndex(int uLongIndex) {
+ this.uLongIndex = uLongIndex;
+ }
+
+ /**
+ * Validates conflict for int and uInt.
+ *
+ * @param typeList type list
+ * @return true if conflict is there
+ */
+ private boolean validateForConflictingIntTypes(List<YangType<?>> typeList) {
+ boolean isIntPresent = false;
+ boolean isUIntPresent = false;
+ for (YangType type : typeList) {
+ if (type.getDataType().equals(INT32)) {
+ setIntIndex(typeList.indexOf(type));
+ isIntPresent = true;
+ }
+ if (type.getDataType().equals(UINT16)) {
+ setUIntIndex(typeList.indexOf(type));
+ isUIntPresent = true;
+ }
+ }
+
+ return isIntPresent && isUIntPresent;
+ }
+
+ /**
+ * Validates conflict for int and uInt.
+ *
+ * @param typeList type list
+ * @return true if conflict is there
+ */
+ private boolean validateForConflictingShortTypes(List<YangType<?>> typeList) {
+ boolean isShortPresent = false;
+ boolean isUInt8Present = false;
+ for (YangType type : typeList) {
+ if (type.getDataType().equals(INT16)) {
+ setShortIndex(typeList.indexOf(type));
+ isShortPresent = true;
+ }
+ if (type.getDataType().equals(UINT8)) {
+ setUInt8Index(typeList.indexOf(type));
+ isUInt8Present = true;
+ }
+ }
+
+ return isShortPresent && isUInt8Present;
+ }
+
+ /**
+ * Validates conflict for long and uLong.
+ *
+ * @param typeList type list
+ * @return true if conflict is there
+ */
+ private boolean validateForConflictingLongTypes(List<YangType<?>> typeList) {
+ boolean isLongPresent = false;
+ boolean isULongPresent = false;
+ for (YangType type : typeList) {
+ if (type.getDataType().equals(INT64)) {
+ setLongIndex(typeList.indexOf(type));
+ isLongPresent = true;
+ }
+ if (type.getDataType().equals(UINT32)) {
+ setULongIndex(typeList.indexOf(type));
+ isULongPresent = true;
+ }
+ }
+
+ return isLongPresent && isULongPresent;
+ }
+
+ /**
+ * Updates attribute info in case of conflicts.
+ *
+ * @param javaAttributeInfo java attribute info
+ */
+ private void updateAttributeCondition(JavaAttributeInfo javaAttributeInfo) {
+
+ if (javaAttributeInfo.isIntConflict()) {
+ if (javaAttributeInfo.getAttributeType().getDataType() == UINT16) {
+ setUIntAttribute(javaAttributeInfo);
+ } else if (javaAttributeInfo.getAttributeType().getDataType() == INT32) {
+ setIntAttribute(javaAttributeInfo);
+ }
+ }
+ if (javaAttributeInfo.isLongConflict()) {
+ if (javaAttributeInfo.getAttributeType().getDataType() == UINT32) {
+ setULongAttribute(javaAttributeInfo);
+ } else if (javaAttributeInfo.getAttributeType().getDataType() == INT64) {
+ setLongAttribute(javaAttributeInfo);
+ }
+ }
+ if (javaAttributeInfo.isShortConflict()) {
+ if (javaAttributeInfo.getAttributeType().getDataType() == UINT8) {
+ setUInt8Attribute(javaAttributeInfo);
+ } else if (javaAttributeInfo.getAttributeType().getDataType() == INT16) {
+ setShortAttribute(javaAttributeInfo);
+ }
+ }
+ }
+
+ /**
+ * Returns attribute for int.
+ *
+ * @return attribute for int
+ */
+ public JavaAttributeInfo getIntAttribute() {
+ return intAttribute;
+ }
+
+ /**
+ * Sets attribute for int.
+ *
+ * @param intAttribute attribute for int
+ */
+ private void setIntAttribute(JavaAttributeInfo intAttribute) {
+ this.intAttribute = intAttribute;
+ }
+
+ /**
+ * Returns attribute for long.
+ *
+ * @return attribute for long
+ */
+ public JavaAttributeInfo getLongAttribute() {
+ return longAttribute;
+ }
+
+ /**
+ * Sets attribute for long.
+ *
+ * @param longAttribute attribute for long
+ */
+ private void setLongAttribute(JavaAttributeInfo longAttribute) {
+ this.longAttribute = longAttribute;
+ }
+
+ /**
+ * Returns attribute for uInt.
+ *
+ * @return attribute for uInt
+ */
+ public JavaAttributeInfo getUIntAttribute() {
+ return uIntAttribute;
+ }
+
+ /**
+ * Sets attribute for uInt.
+ *
+ * @param uIntAttribute attribute for uInt
+ */
+ private void setUIntAttribute(JavaAttributeInfo uIntAttribute) {
+ this.uIntAttribute = uIntAttribute;
+ }
+
+ /**
+ * Returns attribute for uLong.
+ *
+ * @return attribute for uLong
+ */
+ public JavaAttributeInfo getULongAttribute() {
+ return uLongAttribute;
+ }
+
+ /**
+ * Sets attribute for uLong.
+ *
+ * @param uLongAttribute attribute for uLong
+ */
+ private void setULongAttribute(JavaAttributeInfo uLongAttribute) {
+ this.uLongAttribute = uLongAttribute;
+ }
+
+ /**
+ * Returns attribute for uInt8.
+ *
+ * @return attribute for uInt8
+ */
+ public JavaAttributeInfo getUInt8Attribute() {
+ return uInt8Attribute;
+ }
+
+ /**
+ * Sets attribute for uInt8.
+ *
+ * @param uInt8Attribute attribute for uInt8
+ */
+ private void setUInt8Attribute(JavaAttributeInfo uInt8Attribute) {
+ this.uInt8Attribute = uInt8Attribute;
+ }
+
+ /**
+ * Returns attribute for short.
+ *
+ * @return attribute for short
+ */
+ public JavaAttributeInfo getShortAttribute() {
+ return shortAttribute;
+ }
+
+ /**
+ * Sets attribute for short.
+ *
+ * @param shortAttribute attribute for short
+ */
+ private void setShortAttribute(JavaAttributeInfo shortAttribute) {
+ this.shortAttribute = shortAttribute;
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/YangDataModelFactory.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/YangDataModelFactory.java
new file mode 100644
index 0000000..9af9591
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/YangDataModelFactory.java
@@ -0,0 +1,429 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.translator.tojava;
+
+import org.onosproject.yang.compiler.datamodel.YangAugment;
+import org.onosproject.yang.compiler.datamodel.YangCase;
+import org.onosproject.yang.compiler.datamodel.YangChoice;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangGrouping;
+import org.onosproject.yang.compiler.datamodel.YangIdentity;
+import org.onosproject.yang.compiler.datamodel.YangInput;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNotification;
+import org.onosproject.yang.compiler.datamodel.YangOutput;
+import org.onosproject.yang.compiler.datamodel.YangRpc;
+import org.onosproject.yang.compiler.datamodel.YangSubModule;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.YangTypeDef;
+import org.onosproject.yang.compiler.datamodel.YangUnion;
+import org.onosproject.yang.compiler.datamodel.YangUses;
+import org.onosproject.yang.compiler.datamodel.utils.GeneratedLanguage;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+import org.onosproject.yang.compiler.translator.tojava.javamodel.YangJavaAugmentTranslator;
+import org.onosproject.yang.compiler.translator.tojava.javamodel.YangJavaCaseTranslator;
+import org.onosproject.yang.compiler.translator.tojava.javamodel.YangJavaChoiceTranslator;
+import org.onosproject.yang.compiler.translator.tojava.javamodel.YangJavaContainerTranslator;
+import org.onosproject.yang.compiler.translator.tojava.javamodel.YangJavaEnumerationTranslator;
+import org.onosproject.yang.compiler.translator.tojava.javamodel.YangJavaGroupingTranslator;
+import org.onosproject.yang.compiler.translator.tojava.javamodel.YangJavaIdentityTranslator;
+import org.onosproject.yang.compiler.translator.tojava.javamodel.YangJavaInputTranslator;
+import org.onosproject.yang.compiler.translator.tojava.javamodel.YangJavaLeafListTranslator;
+import org.onosproject.yang.compiler.translator.tojava.javamodel.YangJavaLeafTranslator;
+import org.onosproject.yang.compiler.translator.tojava.javamodel.YangJavaListTranslator;
+import org.onosproject.yang.compiler.translator.tojava.javamodel.YangJavaModuleTranslator;
+import org.onosproject.yang.compiler.translator.tojava.javamodel.YangJavaNotificationTranslator;
+import org.onosproject.yang.compiler.translator.tojava.javamodel.YangJavaOutputTranslator;
+import org.onosproject.yang.compiler.translator.tojava.javamodel.YangJavaRpcTranslator;
+import org.onosproject.yang.compiler.translator.tojava.javamodel.YangJavaSubModuleTranslator;
+import org.onosproject.yang.compiler.translator.tojava.javamodel.YangJavaTypeDefTranslator;
+import org.onosproject.yang.compiler.translator.tojava.javamodel.YangJavaTypeTranslator;
+import org.onosproject.yang.compiler.translator.tojava.javamodel.YangJavaUnionTranslator;
+import org.onosproject.yang.compiler.translator.tojava.javamodel.YangJavaUsesTranslator;
+
+/**
+ * Represents factory to create data model objects based on the target file type.
+ */
+public final class YangDataModelFactory {
+
+ /**
+ * Creates a YANG data model factory object.
+ */
+ private YangDataModelFactory() {
+ }
+
+ /**
+ * Based on the target language generate the inherited data model node.
+ *
+ * @param targetLanguage target language in which YANG mapping needs to be
+ * generated
+ * @return the corresponding inherited node based on the target language
+ */
+ public static YangModule getYangModuleNode(GeneratedLanguage targetLanguage) {
+ switch (targetLanguage) {
+ case JAVA_GENERATION: {
+ return new YangJavaModuleTranslator();
+ }
+ default: {
+ throw new TranslatorException("Only YANG to Java is supported.");
+ }
+ }
+ }
+
+ /**
+ * Returns based on the target language generate the inherited data model node.
+ *
+ * @param targetLanguage target language in which YANG mapping needs to be
+ * generated
+ * @return the corresponding inherited node based on the target language
+ */
+ public static YangAugment getYangAugmentNode(GeneratedLanguage targetLanguage) {
+ switch (targetLanguage) {
+ case JAVA_GENERATION: {
+ return new YangJavaAugmentTranslator();
+ }
+ default: {
+ throw new TranslatorException("Only YANG to Java is supported.");
+ }
+ }
+ }
+
+ /**
+ * Returns based on the target language generate the inherited data model node.
+ *
+ * @param targetLanguage target language in which YANG mapping needs to be
+ * generated
+ * @return the corresponding inherited node based on the target language
+ */
+ public static YangCase getYangCaseNode(GeneratedLanguage targetLanguage) {
+ switch (targetLanguage) {
+ case JAVA_GENERATION: {
+ return new YangJavaCaseTranslator();
+ }
+ default: {
+ throw new TranslatorException("Only YANG to Java is supported.");
+ }
+ }
+ }
+
+ /**
+ * Returns based on the target language generate the inherited data model node.
+ *
+ * @param targetLanguage target language in which YANG mapping needs to be
+ * generated
+ * @return the corresponding inherited node based on the target language
+ */
+ public static YangChoice getYangChoiceNode(GeneratedLanguage targetLanguage) {
+ switch (targetLanguage) {
+ case JAVA_GENERATION: {
+ return new YangJavaChoiceTranslator();
+ }
+ default: {
+ throw new TranslatorException("Only YANG to Java is supported.");
+ }
+ }
+ }
+
+ /**
+ * Returns based on the target language generate the inherited data model node.
+ *
+ * @param targetLanguage target language in which YANG mapping needs to be
+ * generated
+ * @return the corresponding inherited node based on the target language
+ */
+ public static YangContainer getYangContainerNode(GeneratedLanguage targetLanguage) {
+ switch (targetLanguage) {
+ case JAVA_GENERATION: {
+ return new YangJavaContainerTranslator();
+ }
+ default: {
+ throw new TranslatorException("Only YANG to Java is supported.");
+ }
+ }
+ }
+
+ /**
+ * Returns based on the target language generate the inherited data model node.
+ *
+ * @param targetLanguage target language in which YANG mapping needs to be
+ * generated
+ * @return the corresponding inherited node based on the target language
+ */
+ public static YangIdentity getYangIdentityNode(GeneratedLanguage targetLanguage) {
+ switch (targetLanguage) {
+ case JAVA_GENERATION: {
+ return new YangJavaIdentityTranslator();
+ }
+ default: {
+ throw new TranslatorException("Only YANG to Java is supported.");
+ }
+ }
+ }
+
+ /**
+ * Returns based on the target language generate the inherited data model node.
+ *
+ * @param targetLanguage target language in which YANG mapping needs to be
+ * generated
+ * @return the corresponding inherited node based on the target language
+ */
+ public static YangGrouping getYangGroupingNode(GeneratedLanguage targetLanguage) {
+ switch (targetLanguage) {
+ case JAVA_GENERATION: {
+ return new YangJavaGroupingTranslator();
+ }
+ default: {
+ throw new TranslatorException("Only YANG to Java is supported.");
+ }
+ }
+ }
+
+ /**
+ * Returns based on the target language generate the inherited data model node.
+ *
+ * @param targetLanguage target language in which YANG mapping needs to be
+ * generated
+ * @return the corresponding inherited node based on the target language
+ */
+ public static YangList getYangListNode(GeneratedLanguage targetLanguage) {
+ switch (targetLanguage) {
+ case JAVA_GENERATION: {
+ return new YangJavaListTranslator();
+ }
+ default: {
+ throw new TranslatorException("Only YANG to Java is supported.");
+ }
+ }
+ }
+
+ /**
+ * Returns based on the target language generate the inherited data model node.
+ *
+ * @param targetLanguage target language in which YANG mapping needs to be
+ * generated
+ * @return the corresponding inherited node based on the target language
+ */
+ public static YangSubModule getYangSubModuleNode(GeneratedLanguage targetLanguage) {
+ switch (targetLanguage) {
+ case JAVA_GENERATION: {
+ return new YangJavaSubModuleTranslator();
+ }
+ default: {
+ throw new TranslatorException("Only YANG to Java is supported.");
+ }
+ }
+ }
+
+ /**
+ * Returns based on the target language generate the inherited data model node.
+ *
+ * @param targetLanguage target language in which YANG mapping needs to be
+ * generated
+ * @return the corresponding inherited node based on the target language
+ */
+ public static YangTypeDef getYangTypeDefNode(GeneratedLanguage targetLanguage) {
+ switch (targetLanguage) {
+ case JAVA_GENERATION: {
+ return new YangJavaTypeDefTranslator();
+ }
+ default: {
+ throw new TranslatorException("Only YANG to Java is supported.");
+ }
+ }
+ }
+
+ /**
+ * Returns based on the target language generate the inherited data model node.
+ *
+ * @param targetLanguage target language in which YANG mapping needs to be
+ * generated
+ * @return the corresponding inherited node based on the target language
+ */
+ public static YangUnion getYangUnionNode(GeneratedLanguage targetLanguage) {
+ switch (targetLanguage) {
+ case JAVA_GENERATION: {
+ return new YangJavaUnionTranslator();
+ }
+ default: {
+ throw new TranslatorException("Only YANG to Java is supported.");
+ }
+ }
+ }
+
+ /**
+ * Returns based on the target language generate the inherited data model node.
+ *
+ * @param targetLanguage target language in which YANG mapping needs to be
+ * generated
+ * @return the corresponding inherited node based on the target language
+ */
+ public static YangUses getYangUsesNode(GeneratedLanguage targetLanguage) {
+ switch (targetLanguage) {
+ case JAVA_GENERATION: {
+ return new YangJavaUsesTranslator();
+ }
+ default: {
+ throw new TranslatorException("Only YANG to Java is supported.");
+ }
+ }
+ }
+
+ /**
+ * Returns based on the target language generate the inherited data model node.
+ *
+ * @param targetLanguage target language in which YANG mapping needs to be
+ * generated
+ * @return the corresponding inherited node based on the target language
+ */
+ public static YangNotification getYangNotificationNode(GeneratedLanguage targetLanguage) {
+ switch (targetLanguage) {
+ case JAVA_GENERATION: {
+ return new YangJavaNotificationTranslator();
+ }
+ default: {
+ throw new TranslatorException("Only YANG to Java is supported.");
+ }
+ }
+ }
+
+ /**
+ * Returns based on the target language generate the inherited data model node.
+ *
+ * @param targetLanguage target language in which YANG mapping needs to be
+ * generated
+ * @return the corresponding inherited node based on the target language
+ */
+ public static YangLeaf getYangLeaf(GeneratedLanguage targetLanguage) {
+ switch (targetLanguage) {
+ case JAVA_GENERATION: {
+ return new YangJavaLeafTranslator();
+ }
+ default: {
+ throw new RuntimeException("Only YANG to Java is supported.");
+ }
+ }
+ }
+
+ /**
+ * Returns based on the target language generate the inherited data model node.
+ *
+ * @param targetLanguage target language in which YANG mapping needs to be
+ * generated
+ * @return the corresponding inherited node based on the target language
+ */
+ public static YangLeafList getYangLeafList(GeneratedLanguage targetLanguage) {
+ switch (targetLanguage) {
+ case JAVA_GENERATION: {
+ return new YangJavaLeafListTranslator();
+ }
+ default: {
+ throw new RuntimeException("Only YANG to Java is supported.");
+ }
+ }
+ }
+
+ /**
+ * Returns based on the target language generate the inherited data model node.
+ *
+ * @param targetLanguage target language in which YANG mapping needs to be
+ * generated
+ * @return the corresponding inherited node based on the target language
+ */
+ public static YangRpc getYangRpcNode(GeneratedLanguage targetLanguage) {
+ switch (targetLanguage) {
+ case JAVA_GENERATION: {
+ return new YangJavaRpcTranslator();
+ }
+ default: {
+ throw new TranslatorException("Only YANG to Java is supported.");
+ }
+ }
+ }
+
+ /**
+ * Returns based on the target language generate the inherited data model node.
+ *
+ * @param targetLanguage target language in which YANG mapping needs to be
+ * generated
+ * @return the corresponding inherited node based on the target language
+ */
+ public static YangInput getYangInputNode(GeneratedLanguage targetLanguage) {
+ switch (targetLanguage) {
+ case JAVA_GENERATION: {
+ return new YangJavaInputTranslator();
+ }
+ default: {
+ throw new TranslatorException("Only YANG to Java is supported.");
+ }
+ }
+ }
+
+ /**
+ * Returns based on the target language generate the inherited data model node.
+ *
+ * @param targetLanguage target language in which YANG mapping needs to be
+ * generated
+ * @return the corresponding inherited node based on the target language
+ */
+ public static YangOutput getYangOutputNode(GeneratedLanguage targetLanguage) {
+ switch (targetLanguage) {
+ case JAVA_GENERATION: {
+ return new YangJavaOutputTranslator();
+ }
+ default: {
+ throw new TranslatorException("Only YANG to Java is supported.");
+ }
+ }
+ }
+
+ /**
+ * Returns based on the target language generate the inherited data model node.
+ *
+ * @param targetLanguage target language in which YANG mapping needs to be
+ * generated
+ * @return the corresponding inherited node based on the target language
+ */
+ public static YangJavaEnumerationTranslator getYangEnumerationNode(GeneratedLanguage targetLanguage) {
+ switch (targetLanguage) {
+ case JAVA_GENERATION: {
+ return new YangJavaEnumerationTranslator();
+ }
+ default: {
+ throw new TranslatorException("Only YANG to Java is supported.");
+ }
+ }
+ }
+ /**
+ * Returns based on the target language generate the inherited data model node.
+ *
+ * @param targetLanguage target language in which YANG mapping needs to be
+ * generated
+ * @return the corresponding inherited node based on the target language
+ */
+ public static YangType getYangType(GeneratedLanguage targetLanguage) {
+ switch (targetLanguage) {
+ case JAVA_GENERATION: {
+ return new YangJavaTypeTranslator();
+ }
+ default: {
+ throw new RuntimeException("Only YANG to Java is supported.");
+ }
+ }
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/YangJavaModelUtils.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/YangJavaModelUtils.java
new file mode 100644
index 0000000..4cc70c2
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/YangJavaModelUtils.java
@@ -0,0 +1,813 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava;
+
+import org.onosproject.yang.compiler.datamodel.RpcNotificationContainer;
+import org.onosproject.yang.compiler.datamodel.YangAtomicPath;
+import org.onosproject.yang.compiler.datamodel.YangAugment;
+import org.onosproject.yang.compiler.datamodel.YangBit;
+import org.onosproject.yang.compiler.datamodel.YangBits;
+import org.onosproject.yang.compiler.datamodel.YangCase;
+import org.onosproject.yang.compiler.datamodel.YangChoice;
+import org.onosproject.yang.compiler.datamodel.YangEnum;
+import org.onosproject.yang.compiler.datamodel.YangEnumeration;
+import org.onosproject.yang.compiler.datamodel.YangGrouping;
+import org.onosproject.yang.compiler.datamodel.YangLeavesHolder;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeIdentifier;
+import org.onosproject.yang.compiler.datamodel.YangSchemaNode;
+import org.onosproject.yang.compiler.datamodel.YangTranslatorOperatorNode;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.YangTypeHolder;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+import org.onosproject.yang.compiler.translator.tojava.javamodel.YangJavaAugmentTranslator;
+import org.onosproject.yang.compiler.translator.tojava.javamodel.YangJavaEnumerationTranslator;
+import org.onosproject.yang.compiler.translator.tojava.javamodel.YangJavaInputTranslator;
+import org.onosproject.yang.compiler.translator.tojava.javamodel.YangJavaModuleTranslator;
+import org.onosproject.yang.compiler.translator.tojava.javamodel.YangJavaOutputTranslator;
+import org.onosproject.yang.compiler.translator.tojava.javamodel.YangJavaSubModuleTranslator;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+import org.slf4j.Logger;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.getParentNodeInGenCode;
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.isRpcChildNodePresent;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
+import static org.onosproject.yang.compiler.translator.tojava.TempJavaFragmentFiles.addCurNodeInfoInParentTempFile;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaFileGenerator.generateInterfaceFile;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaIdentifierSyntax.getRootPackage;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorErrorType.INVALID_NODE;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorErrorType.INVALID_PARENT_NODE;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorErrorType.INVALID_TRANSLATION_NODE;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorUtils.getBeanFiles;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorUtils.getErrorMsg;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorUtils.getErrorMsgForCodeGenerator;
+import static org.onosproject.yang.compiler.utils.UtilConstants.AUGMENTED;
+import static org.onosproject.yang.compiler.utils.UtilConstants.CLOSE_CURLY_BRACKET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.HYPHEN;
+import static org.onosproject.yang.compiler.utils.UtilConstants.INPUT_KEYWORD;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OUTPUT_KEYWORD;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PERIOD;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.addPackageInfo;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getCamelCase;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getCapitalCase;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getPackageDirPathFromJavaJPackage;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.trimAtLast;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.validateLineLength;
+import static org.slf4j.LoggerFactory.getLogger;
+
+/**
+ * Represents utility class for YANG java model.
+ */
+public final class YangJavaModelUtils {
+
+ private static final Logger LOG = getLogger(YangJavaModelUtils.class);
+
+ // No instantiation.
+ private YangJavaModelUtils() {
+ }
+
+ /**
+ * Updates YANG java file package information.
+ *
+ * @param info YANG java file info node
+ * @param config YANG plugin config
+ */
+ public static void updatePackageInfo(JavaCodeGeneratorInfo info,
+ YangPluginConfig config) {
+
+ JavaFileInfoTranslator translator = info.getJavaFileInfo();
+
+ if (info instanceof YangJavaAugmentTranslator) {
+ updatePackageForAugmentInfo(info, config);
+ } else {
+ setNodeJavaName(info, config);
+ translator.setJavaAttributeName(info.getJavaFileInfo()
+ .getJavaName());
+ translator.setPackage(getCurNodePackage((YangNode) info));
+ }
+ updateCommonPackageInfo(translator, info, config);
+ }
+
+ /**
+ * The java name for input, output is prefixed with rpc name and other
+ * nodes are set by taking its own name from YANG.
+ *
+ * @param info YANG java file info node
+ * @param config YANG plugin config
+ */
+ private static void setNodeJavaName(JavaCodeGeneratorInfo info,
+ YangPluginConfig config) {
+ String javaGenName;
+ if (info instanceof YangJavaInputTranslator) {
+ javaGenName = ((YangJavaInputTranslator) info).getParent().getName() +
+ INPUT_KEYWORD;
+ } else if (info instanceof YangJavaOutputTranslator) {
+ javaGenName = ((YangJavaOutputTranslator) info).getParent().getName() +
+ OUTPUT_KEYWORD;
+ } else {
+ javaGenName = ((YangNode) info).getName();
+ }
+ info.getJavaFileInfo().setJavaName(getCamelCase(
+ javaGenName, config.getConflictResolver()));
+ }
+
+ /**
+ * Updates YANG java file package information.
+ *
+ * @param info YANG java file info node
+ * @param config YANG plugin config
+ */
+ private static void updatePackageForAugmentInfo(JavaCodeGeneratorInfo info,
+ YangPluginConfig config) {
+
+ JavaFileInfoTranslator translator = info.getJavaFileInfo();
+
+ translator.setJavaName(getAugmentClassName(
+ (YangJavaAugmentTranslator) info, config));
+ translator.setPackage(getAugmentsNodePackage((YangNode) info));
+ updateCommonPackageInfo(translator, info, config);
+ }
+
+ /**
+ * Returns package for augment node.
+ *
+ * @param yangNode augment node
+ * @return package for augment node
+ */
+ private static String getAugmentsNodePackage(YangNode yangNode) {
+ YangAugment augment = (YangAugment) yangNode;
+ StringBuilder augmentPkg = new StringBuilder();
+ augmentPkg.append(getCurNodePackage(augment)).append(PERIOD)
+ .append(getPkgFromAugment(augment));
+ return augmentPkg.toString();
+ }
+
+ private static String getPkgFromAugment(YangAugment augment) {
+ StringBuilder pkg = new StringBuilder();
+ for (YangAtomicPath atomicPath : augment.getTargetNode()) {
+ pkg.append(getCamelCase(atomicPath.getNodeIdentifier().getName(),
+ null)).append(PERIOD);
+ }
+ return trimAtLast(pkg.toString(), PERIOD).toLowerCase();
+ }
+
+ /**
+ * Updates YANG java file package information for specified package.
+ *
+ * @param info YANG java file info node
+ * @param config YANG plugin config
+ */
+ private static void updatePackageInfo(JavaCodeGeneratorInfo info,
+ YangPluginConfig config,
+ String pkg) {
+
+ JavaFileInfoTranslator translator = info.getJavaFileInfo();
+ translator.setJavaName(getCamelCase(((YangNode) info).getName(),
+ config.getConflictResolver()));
+ translator.setPackage(pkg);
+ updateCommonPackageInfo(translator, info, config);
+ }
+
+ /**
+ * Updates common package information.
+ *
+ * @param translator JAVA file info translator
+ * @param info YANG java file info node
+ * @param config YANG plugin config
+ */
+ private static void updateCommonPackageInfo(JavaFileInfoTranslator translator,
+ JavaCodeGeneratorInfo info,
+ YangPluginConfig config) {
+ translator.setPackageFilePath(getPackageDirPathFromJavaJPackage(
+ info.getJavaFileInfo().getPackage()));
+ translator.setBaseCodeGenPath(config.getCodeGenDir());
+ translator.setPluginConfig(config);
+ }
+
+ /**
+ * Updates temporary java code fragment files.
+ *
+ * @param info YANG java file info node
+ * @throws IOException IO operations fails
+ */
+ private static void createTempFragmentFile(JavaCodeGeneratorInfo info)
+ throws IOException {
+ info.setTempJavaCodeFragmentFiles(
+ new TempJavaCodeFragmentFiles(info.getJavaFileInfo()));
+ }
+
+ /**
+ * Updates leaf information in temporary java code fragment files.
+ *
+ * @param info YANG java file info node
+ * @throws IOException IO operations fails
+ */
+ private static void updateTempFragmentFiles(JavaCodeGeneratorInfo info,
+ YangPluginConfig config)
+ throws IOException {
+
+ TempJavaCodeFragmentFiles translator =
+ info.getTempJavaCodeFragmentFiles();
+ TempJavaBeanFragmentFiles bean = getBeanFiles(info);
+ if (info instanceof RpcNotificationContainer) {
+ bean.setRootNode(true);
+ /*
+ * event classes code generation.
+ */
+ updateNotificationNodeInfo(info, config);
+ }
+ if (info instanceof YangLeavesHolder) {
+
+ YangLeavesHolder holder = (YangLeavesHolder) info;
+ boolean isLeafPresent = holder.getListOfLeaf() != null && !holder
+ .getListOfLeaf().isEmpty();
+ boolean isLeafListPresent = holder.getListOfLeafList() != null &&
+ !holder.getListOfLeafList().isEmpty();
+ /*
+ * Container
+ * Case
+ * Grouping
+ * Input
+ * List
+ * Notification
+ * Output
+ */
+ if (isLeafPresent || isLeafListPresent) {
+ bean.addCurNodeLeavesInfoToTempFiles((YangNode) info,
+ config);
+ }
+ //Add value leaf flag attribute to temp file.
+ if (isLeafPresent) {
+ bean.addValueLeafFlag(config, (YangNode) info);
+ }
+ if (((YangNode) info).isOpTypeReq()) {
+ // Add operation type as an attribute.
+ bean.addOperationTypeToTempFiles((YangNode) info,
+ config);
+ bean.addIsSubTreeFilteredFlag(config);
+ if (isLeafPresent) {
+ //Add select leaf flag attribute to temp file.
+ bean.addSelectLeafFlag(config);
+ }
+ }
+ } else if (info instanceof YangTypeHolder) {
+ /*
+ * Typedef
+ * Union
+ */
+ translator.addTypeInfoToTempFiles((YangTypeHolder) info, config);
+ } else if (info instanceof YangJavaEnumerationTranslator) {
+ /*
+ * Enumeration
+ */
+ translator.getEnumTempFiles()
+ .addEnumAttributeToTempFiles((YangNode) info, config);
+ } else if (!(info instanceof YangChoice)) {
+ /*Do nothing, only the interface needs to be generated for choice*/
+ throw new TranslatorException(
+ getErrorMsgForCodeGenerator(INVALID_TRANSLATION_NODE, info));
+ }
+ }
+
+ /**
+ * Process generate code entry of YANG node.
+ *
+ * @param info YANG java file info node
+ * @param config plugin configurations
+ * @throws IOException IO operations fails
+ */
+ private static void generateTempFiles(JavaCodeGeneratorInfo info,
+ YangPluginConfig config)
+ throws IOException {
+ if (!(info instanceof YangNode)) {
+ throw new TranslatorException(
+ getErrorMsgForCodeGenerator(INVALID_TRANSLATION_NODE,
+ info));
+ }
+ createTempFragmentFile(info);
+ updateTempFragmentFiles(info, config);
+ }
+
+ /**
+ * Updates notification node info in service temporary file.
+ *
+ * @param info java code generator info
+ * @param config plugin configurations
+ * @throws IOException when fails to do IO operations
+ */
+ private static void updateNotificationNodeInfo(JavaCodeGeneratorInfo info,
+ YangPluginConfig config)
+ throws IOException {
+ TempJavaCodeFragmentFiles tempFile = info.getTempJavaCodeFragmentFiles();
+ for (YangNode notification :
+ ((RpcNotificationContainer) info).getNotificationNodes()) {
+ tempFile.getEventFragmentFiles()
+ .addJavaSnippetOfEvent(notification, config);
+ }
+ }
+
+ /**
+ * Generates code for the current ata model node and adds itself as an
+ * attribute in the parent.
+ *
+ * @param info YANG java file info node
+ * @param config YANG plugin config
+ * @param isMultiInstance flag to indicate whether it's a list
+ * @throws IOException IO operations fails
+ */
+ public static void generateCodeAndUpdateInParent(JavaCodeGeneratorInfo info,
+ YangPluginConfig config,
+ boolean isMultiInstance)
+ throws IOException {
+ if (!(info instanceof YangNode)) {
+ throw new TranslatorException(
+ getErrorMsgForCodeGenerator(INVALID_TRANSLATION_NODE,
+ info));
+ }
+
+ /*
+ * For second level and below cloned nodes code shouldn't be
+ * generated also they needn't be added in parent, since
+ * generated code will be under grouping, cloned node is only
+ * used for YANG namespace.
+ */
+ YangNode n = (YangNode) info;
+ if (n.getReferredSchema() != null &&
+ !(((YangNode) n.getReferredSchema()).getParent() instanceof
+ YangGrouping)) {
+ return;
+ }
+ /*
+ * If first level cloned node, then it needs to be imported in the
+ * generated code. In case uses under grouping, it would further have
+ * second level uses, hence needn't add in parent grouping.
+ */
+ YangSchemaNode rn = getRefSchema(info);
+ if (rn != null) {
+ YangNode parent = ((YangNode) info).getParent();
+ if (!(parent instanceof YangGrouping)) {
+ addCurNodeInfoInParentTempFile((YangNode) rn, isMultiInstance,
+ config, parent);
+ }
+ return;
+ }
+
+ /*
+ * Generate the Java files corresponding to the current node.
+ */
+ generateCodeOfAugmentableNode(info, config);
+
+ /*
+ * Update the current nodes info in its parent nodes generated files.
+ */
+ addCurNodeInfoInParentTempFile((YangNode) info, isMultiInstance,
+ config);
+ }
+
+ /**
+ * Returns referred schema node in case of grouping uses.
+ *
+ * @param info YANG java file info node
+ * @return referred schema node
+ */
+ private static YangSchemaNode getRefSchema(JavaCodeGeneratorInfo info) {
+
+ YangSchemaNode node = (YangSchemaNode) info;
+ if (node.getReferredSchema() == null) {
+ return null;
+ }
+
+ /*
+ * Obtain last referred node in case grouping is embedded inside
+ * another grouping.
+ */
+ while (node.getReferredSchema() != null) {
+ node = node.getReferredSchema();
+ }
+ return node;
+ }
+
+ /**
+ * Generates code for the current data model node and adds support for it to
+ * be augmented.
+ *
+ * @param info YANG java file info node
+ * @param config YANG plugin config
+ * @throws IOException IO operations fails
+ */
+ public static void generateCodeOfAugmentableNode(JavaCodeGeneratorInfo info,
+ YangPluginConfig config)
+ throws IOException {
+ if (!(info instanceof YangNode)) {
+ throw new TranslatorException(
+ getErrorMsgForCodeGenerator(INVALID_TRANSLATION_NODE,
+ info));
+ }
+
+ generateCodeOfNode(info, config);
+ TempJavaBeanFragmentFiles tempFiles = getBeanFiles(info);
+ if (!(info instanceof YangChoice)) {
+ tempFiles.addYangAugmentedMap(config, (YangNode) info);
+ }
+ if (info instanceof YangCase) {
+ YangNode parent = ((YangCase) info).getParent();
+ JavaQualifiedTypeInfoTranslator typeInfo =
+ getQualifierInfoForCasesParent(parent, config);
+ tempFiles.getJavaExtendsListHolder()
+ .addToExtendsList(typeInfo, (YangNode) info, tempFiles);
+
+ tempFiles.addParentInfoInCurNodeTempFile((YangNode) info, config);
+ }
+ }
+
+ /**
+ * Returns cases parent's qualified info.
+ *
+ * @param parent parent node
+ * @param config plugin configuration
+ * @return cases parent's qualified info
+ */
+ private static JavaQualifiedTypeInfoTranslator getQualifierInfoForCasesParent(
+ YangNode parent, YangPluginConfig config) {
+ String parentName;
+ String parentPkg;
+ JavaFileInfoTranslator parentInfo;
+ if (parent instanceof YangChoice) {
+ parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
+ } else {
+ parent = ((YangAugment) parent).getAugmentedNode();
+ parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
+ }
+ if (parentInfo.getPackage() != null) {
+ parentName = getCapitalCase(parentInfo.getJavaName());
+ parentPkg = parentInfo.getPackage();
+ } else {
+ parentName = getCapitalCase(getCamelCase(parent.getName(),
+ config.getConflictResolver()));
+ parentPkg = getNodesPackage(parent, config);
+ }
+ JavaQualifiedTypeInfoTranslator qualifiedTypeInfo =
+ new JavaQualifiedTypeInfoTranslator();
+ qualifiedTypeInfo.setClassInfo(parentName);
+ qualifiedTypeInfo.setPkgInfo(parentPkg);
+ return qualifiedTypeInfo;
+ }
+
+ /**
+ * Generates code for the current data model node.
+ *
+ * @param info YANG java file info node
+ * @param config YANG plugin config
+ * @throws IOException IO operations fails
+ */
+ public static void generateCodeOfNode(JavaCodeGeneratorInfo info,
+ YangPluginConfig config)
+ throws IOException {
+ if (!(info instanceof YangNode)) {
+ throw new TranslatorException(
+ getErrorMsgForCodeGenerator(INVALID_TRANSLATION_NODE,
+ info));
+ }
+ updatePackageInfo(info, config);
+ generateTempFiles(info, config);
+ }
+
+ /**
+ * Generates code for the root module/sub-module node.
+ *
+ * @param info YANG java file info node
+ * @param config YANG plugin config
+ * @param rootPkg package of the root node
+ * @throws IOException IO operations fails
+ */
+ public static void generateCodeOfRootNode(JavaCodeGeneratorInfo info,
+ YangPluginConfig config,
+ String rootPkg)
+ throws IOException {
+ if (!(info instanceof YangNode)) {
+ throw new TranslatorException(
+ getErrorMsgForCodeGenerator(INVALID_TRANSLATION_NODE,
+ info));
+ }
+ updatePackageInfo(info, config, rootPkg);
+
+ if (isRpcChildNodePresent((YangNode) info)) {
+ info.getJavaFileInfo().addGeneratedFileTypes(GENERATE_SERVICE_AND_MANAGER);
+ }
+ generateTempFiles(info, config);
+ }
+
+ /**
+ * Returns the node package string.
+ *
+ * @param curNode current java node whose package string needs to be set
+ * @return returns the root package string
+ */
+ public static String getCurNodePackage(YangNode curNode)
+ throws TranslatorException {
+
+ String pkg;
+ if (!(curNode instanceof JavaFileInfoContainer) ||
+ curNode.getParent() == null) {
+ throw new TranslatorException(getErrorMsg(INVALID_NODE, curNode));
+ }
+
+ YangNode parentNode = getParentNodeInGenCode(curNode);
+ if (!(parentNode instanceof JavaFileInfoContainer)) {
+ throw new TranslatorException(getErrorMsg(INVALID_PARENT_NODE,
+ curNode));
+ }
+ JavaFileInfoTranslator handle =
+ ((JavaFileInfoContainer) parentNode).getJavaFileInfo();
+ pkg = handle.getPackage() + PERIOD + handle.getJavaName();
+ return pkg.toLowerCase();
+ }
+
+ /**
+ * Returns true if root node contains any data node.
+ *
+ * @param node root YANG node
+ * @return true if root node contains any data node
+ */
+ public static boolean isRootNodesCodeGenRequired(YangNode node) {
+ return isNodeCodeGenRequired(node, true);
+ }
+
+ /**
+ * Returns true if get/set method of root node are required.
+ *
+ * @param node root node
+ * @return true if get/set method of root node are required
+ */
+ public static boolean isGetSetOfRootNodeRequired(YangNode node) {
+ return isNodeCodeGenRequired(node, false);
+ }
+
+ /**
+ * Returns true if either get/set method of root node are required or root
+ * node contains any data node. This check is done depending on the
+ * boolean parameter indicating whether check to be performed for root
+ * node code generation or get/set method generation.
+ *
+ * @param node root node
+ * @param rootNodeGen flag indicating check type
+ * @return true if check pass, false otherwise
+ */
+ private static boolean isNodeCodeGenRequired(YangNode node,
+ boolean rootNodeGen) {
+ YangLeavesHolder holder = (YangLeavesHolder) node;
+
+ if (!holder.getListOfLeaf().isEmpty()) {
+ return true;
+ }
+ if (!holder.getListOfLeafList().isEmpty()) {
+ return true;
+ }
+ node = node.getChild();
+ if (node == null) {
+ return false;
+ }
+
+ if (rootNodeGen) {
+ while (node != null) {
+ if (!(node instanceof YangTranslatorOperatorNode)) {
+ return true;
+ }
+ node = node.getNextSibling();
+ }
+ return false;
+ }
+ while (node != null) {
+ if (!(node instanceof YangAugment)) {
+ return true;
+ }
+ node = node.getNextSibling();
+ }
+ return false;
+ }
+
+ /**
+ * Returns nodes package.
+ *
+ * @param node YANG node
+ * @param config plugin config
+ * @return java package
+ */
+ public static String getNodesPackage(YangNode node,
+ YangPluginConfig config) {
+
+ List<String> clsInfo = new ArrayList<>();
+ while (node.getParent() != null) {
+ if (node instanceof YangJavaAugmentTranslator) {
+ YangJavaAugmentTranslator augment =
+ (YangJavaAugmentTranslator) node;
+ clsInfo.add(getAugmentClassName(augment, config));
+ clsInfo.add(getPkgFromAugment(augment));
+ } else {
+ clsInfo.add(getCamelCase(node.getName(), config
+ .getConflictResolver()));
+ }
+ node = node.getParent();
+ }
+
+ StringBuilder pkg = new StringBuilder();
+ if (node instanceof YangJavaModuleTranslator) {
+ YangJavaModuleTranslator module = (YangJavaModuleTranslator) node;
+ pkg.append(getRootPackage(module.getVersion(),
+ module.getModuleNamespace(),
+ module.getRevision(),
+ config.getConflictResolver()));
+ } else if (node instanceof YangJavaSubModuleTranslator) {
+ YangJavaSubModuleTranslator subModule =
+ (YangJavaSubModuleTranslator) node;
+ pkg.append(getRootPackage(subModule.getVersion(),
+ subModule.getNameSpaceFromModule(),
+ subModule.getRevision(),
+ config.getConflictResolver()));
+ }
+ clsInfo.add(getCamelCase(node.getName(), config.getConflictResolver()));
+
+ int size = clsInfo.size();
+ for (int i = size - 1; i > 0; i--) {
+ pkg.append(PERIOD).append(clsInfo.get(i));
+ }
+ return pkg.toString().toLowerCase();
+ }
+
+ /**
+ * Returns augment class name.
+ *
+ * @param augment YANG augment
+ * @param config plugin configurations
+ * @return augment class name
+ */
+ private static String getAugmentClassName(YangAugment augment,
+ YangPluginConfig config) {
+ YangNodeIdentifier identifier =
+ augment.getTargetNode().get(augment.getTargetNode().size() - 1)
+ .getNodeIdentifier();
+ String prefix = identifier.getPrefix();
+ String idName = identifier.getName();
+ StringBuilder name = new StringBuilder(AUGMENTED).append(HYPHEN);
+ if (identifier.getPrefix() != null) {
+ name.append(prefix).append(HYPHEN);
+ }
+ name.append(idName);
+ return getCapitalCase(getCamelCase(name.toString(),
+ config.getConflictResolver()));
+ }
+
+ /**
+ * Generated java code during exit.
+ *
+ * @param type generated file type
+ * @param node current YANG node
+ * @throws IOException when fails to generate java files
+ */
+ public static void generateJava(int type, YangNode node)
+ throws IOException {
+ /*
+ * Call for file generation if node is not under uses.
+ */
+ if (node.getReferredSchema() == null) {
+ ((TempJavaCodeFragmentFilesContainer) node)
+ .getTempJavaCodeFragmentFiles().generateJavaFile(type, node);
+ }
+ }
+
+ private static void createAndAddEnum(String name, int value,
+ YangEnumeration enumeration) {
+ YangEnum yangEnum = new YangEnum();
+ yangEnum.setNamedValue(name);
+ yangEnum.setValue(value);
+ try {
+ enumeration.addEnumInfo(yangEnum);
+ } catch (DataModelException e) {
+ LOG.error("failed to add enum in bits enum class " + e);
+ }
+ }
+
+ /**
+ * Returns bits type enum file.
+ *
+ * @param attr attribute
+ * @param type data type
+ * @param fileInfo file info
+ * @param tempFile temp java fragment files
+ * @throws IOException when fails to do IO operations
+ */
+ static void generateBitsFile(
+ JavaAttributeInfo attr, YangType type,
+ JavaFileInfoTranslator fileInfo, TempJavaFragmentFiles tempFile) throws IOException {
+ String className = attr.getAttributeName();
+ JavaFileInfoTranslator attrInfo = new JavaFileInfoTranslator();
+ attrInfo.setJavaName(className);
+ attrInfo.setPackage((fileInfo.getPackage() + "." + fileInfo.getJavaName()
+ ).toLowerCase());
+ attrInfo.setBaseCodeGenPath(fileInfo.getBaseCodeGenPath());
+ attrInfo.setGeneratedFileTypes(GENERATE_ENUM_CLASS);
+ attrInfo.setPackageFilePath(fileInfo.getPackageFilePath() + File.separator +
+ fileInfo.getJavaName().toLowerCase());
+ attrInfo.setPluginConfig(fileInfo.getPluginConfig());
+ TempJavaCodeFragmentFiles codeFile = new TempJavaCodeFragmentFiles(
+ attrInfo);
+ YangJavaEnumerationTranslator enumeration = new YangJavaEnumerationTranslator() {
+ @Override
+ public String getJavaPackage() {
+ return attr.getImportInfo().getPkgInfo();
+ }
+
+ @Override
+ public String getJavaClassNameOrBuiltInType() {
+ return className;
+ }
+
+ @Override
+ public String getJavaAttributeName() {
+ return className;
+ }
+ };
+
+ enumeration.setName(getCapitalCase(className));
+ enumeration.setJavaFileInfo(attrInfo);
+ enumeration.setTempJavaCodeFragmentFiles(codeFile);
+ YangBits yangBits = (YangBits) type.getDataTypeExtendedInfo();
+ Integer key;
+ YangBit bit;
+ String bitName;
+ for (Map.Entry<Integer, YangBit> entry : yangBits.getBitPositionMap()
+ .entrySet()) {
+ key = entry.getKey();
+ bit = entry.getValue();
+ if (bit != null) {
+ bitName = bit.getBitName();
+ createAndAddEnum(bitName, key, enumeration);
+ }
+ }
+
+ codeFile.getEnumTempFiles()
+ .addEnumAttributeToTempFiles(enumeration, fileInfo.getPluginConfig());
+ codeFile.getEnumTempFiles().setEnumClass(false);
+ codeFile.generateJavaFile(GENERATE_ENUM_CLASS, enumeration);
+
+ //Add to import list.
+ JavaQualifiedTypeInfoTranslator info = new
+ JavaQualifiedTypeInfoTranslator();
+ info.setClassInfo(getCapitalCase(attrInfo.getJavaName()));
+ info.setPkgInfo(attrInfo.getPackage());
+ if (tempFile instanceof TempJavaTypeFragmentFiles) {
+ tempFile.getJavaImportData().addImportInfo(info, fileInfo
+ .getJavaName(), fileInfo.getPackage());
+ }
+ }
+
+ /**
+ * Generates interface file for those yang file which contains only any
+ * of these grouping, typedef and identity.
+ *
+ * @param rootNode root node
+ * @throws IOException when fails to do IO operations
+ */
+ public static void generateInterfaceFileForNonDataNodes(YangNode rootNode) throws
+ IOException {
+ JavaCodeGeneratorInfo info = (JavaCodeGeneratorInfo) rootNode;
+ TempJavaCodeFragmentFiles tempFile = info
+ .getTempJavaCodeFragmentFiles();
+ JavaFileInfoTranslator fileInfo = info.getJavaFileInfo();
+ File filePath = new File(fileInfo.getBaseCodeGenPath() + fileInfo
+ .getPackageFilePath());
+ String name = getCapitalCase(fileInfo.getJavaName());
+ //Add package info file for this.
+ addPackageInfo(filePath, name, fileInfo.getPackage(), false);
+ //Generate file handle for this.
+ File interFace = tempFile.getBeanTempFiles().getJavaFileHandle(
+ name);
+ //generate java code for interface file.
+ validateLineLength(generateInterfaceFile(interFace, null, rootNode,
+ false));
+ insertDataIntoJavaFile(interFace, CLOSE_CURLY_BRACKET);
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/AttributesJavaDataType.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/AttributesJavaDataType.java
new file mode 100644
index 0000000..65b2a02
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/AttributesJavaDataType.java
@@ -0,0 +1,578 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava.javamodel;
+
+import org.onosproject.yang.compiler.datamodel.YangDerivedInfo;
+import org.onosproject.yang.compiler.datamodel.YangEnumeration;
+import org.onosproject.yang.compiler.datamodel.YangIdentity;
+import org.onosproject.yang.compiler.datamodel.YangIdentityRef;
+import org.onosproject.yang.compiler.datamodel.YangLeafRef;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.YangUnion;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGeneratorInfo;
+import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoContainer;
+import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoTranslator;
+import org.onosproject.yang.compiler.utils.io.YangToJavaNamingConflictUtil;
+
+import java.util.Stack;
+
+import static org.onosproject.yang.compiler.translator.tojava.YangJavaModelUtils.getCurNodePackage;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaIdentifierSyntax.getRootPackage;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BIG_DECIMAL;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BIG_INTEGER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BIT_SET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BOOLEAN_DATA_TYPE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BOOLEAN_WRAPPER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BYTE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BYTE_WRAPPER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.COLLECTION_IMPORTS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.INT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.INTEGER_WRAPPER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.JAVA_LANG;
+import static org.onosproject.yang.compiler.utils.UtilConstants.JAVA_MATH;
+import static org.onosproject.yang.compiler.utils.UtilConstants.LONG;
+import static org.onosproject.yang.compiler.utils.UtilConstants.LONG_WRAPPER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OBJECT_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PERIOD;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SHORT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SHORT_WRAPPER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SQUARE_BRACKETS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.STRING_DATA_TYPE;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getCamelCase;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getCapitalCase;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getPackageDirPathFromJavaJPackage;
+
+/**
+ * Represents java data types info corresponding to YANG type.
+ */
+public final class AttributesJavaDataType {
+
+ /**
+ * Creates an instance of attribute java data type.
+ */
+ private AttributesJavaDataType() {
+ }
+
+ /**
+ * Returns java type.
+ *
+ * @param yangType YANG type
+ * @return java type
+ */
+ public static String getJavaDataType(YangType<?> yangType) {
+
+ YangDataTypes type = yangType.getDataType();
+
+ switch (type) {
+ case INT8:
+ return BYTE;
+ case INT16:
+ return SHORT;
+ case INT32:
+ return INT;
+ case INT64:
+ return LONG;
+ case UINT8:
+ return SHORT;
+ case UINT16:
+ return INT;
+ case UINT32:
+ return LONG;
+ case UINT64:
+ return BIG_INTEGER;
+ case BITS:
+ return BIT_SET;
+ case BINARY:
+ return BYTE + SQUARE_BRACKETS;
+ case DECIMAL64:
+ return BIG_DECIMAL;
+ case STRING:
+ return STRING_DATA_TYPE;
+ case BOOLEAN:
+ return BOOLEAN_DATA_TYPE;
+ case INSTANCE_IDENTIFIER:
+ return STRING_DATA_TYPE;
+ case LEAFREF:
+ YangType refType = getReferredTypeFromLeafref(yangType);
+ if (refType == null) {
+ return OBJECT_STRING;
+ }
+ return getJavaDataType(getReferredTypeFromLeafref(yangType));
+ default:
+ throw new TranslatorException("given data type is not supported. " +
+ yangType.getDataTypeName() + " in " +
+ yangType.getLineNumber() + " at " +
+ yangType.getCharPosition()
+ + " in " + yangType.getFileName());
+ }
+ }
+
+ /**
+ * Returns java import class.
+ *
+ * @param yangType YANG type
+ * @param isListAttr if the attribute need to be a list
+ * @param pluginConfig plugin configurations
+ * @return java import class
+ */
+ public static String getJavaImportClass(YangType<?> yangType, boolean isListAttr,
+ YangToJavaNamingConflictUtil pluginConfig) {
+
+ YangDataTypes type = yangType.getDataType();
+
+ if (isListAttr) {
+ switch (type) {
+ case INT8:
+ return BYTE_WRAPPER;
+ case INT16:
+ return SHORT_WRAPPER;
+ case INT32:
+ return INTEGER_WRAPPER;
+ case INT64:
+ return LONG_WRAPPER;
+ case UINT8:
+ return SHORT_WRAPPER;
+ case UINT16:
+ return INTEGER_WRAPPER;
+ case UINT32:
+ return LONG_WRAPPER;
+ case UINT64:
+ return BIG_INTEGER;
+ case DECIMAL64:
+ return BIG_DECIMAL;
+ case STRING:
+ return STRING_DATA_TYPE;
+ case BOOLEAN:
+ return BOOLEAN_WRAPPER;
+ case ENUMERATION:
+ return getCapitalCase(
+ getCamelCase(((YangJavaEnumerationTranslator) yangType.getDataTypeExtendedInfo()).getName(),
+ pluginConfig));
+ case BITS:
+ return BIT_SET;
+ case BINARY:
+ return BYTE + SQUARE_BRACKETS;
+ case LEAFREF:
+ return getLeafRefImpClass(yangType, pluginConfig, true);
+ case IDENTITYREF:
+ return getIdentityRefImpClass(yangType, pluginConfig);
+ case EMPTY:
+ return BOOLEAN_WRAPPER;
+ case UNION:
+ return getCapitalCase(getCamelCase(((YangJavaUnionTranslator) yangType
+ .getDataTypeExtendedInfo()).getName(), pluginConfig));
+ case INSTANCE_IDENTIFIER:
+ return STRING_DATA_TYPE;
+ case DERIVED:
+ return getCapitalCase(
+ getCamelCase(yangType.getDataTypeName(), pluginConfig));
+ default:
+ throw new TranslatorException("given data type is not supported ." +
+ yangType.getDataTypeName() + " in " +
+ yangType.getLineNumber() + " at " +
+ yangType.getCharPosition()
+ + " in " + yangType.getFileName());
+ }
+ } else {
+ switch (type) {
+ case UINT64:
+ return BIG_INTEGER;
+ case STRING:
+ return STRING_DATA_TYPE;
+ case ENUMERATION:
+ return getCapitalCase(
+ getCamelCase(((YangJavaEnumerationTranslator) yangType.getDataTypeExtendedInfo()).getName(),
+ pluginConfig));
+ case BITS:
+ return BIT_SET;
+ case DECIMAL64:
+ return BIG_DECIMAL;
+ case LEAFREF:
+ return getLeafRefImpClass(yangType, pluginConfig, false);
+ case IDENTITYREF:
+ return getIdentityRefImpClass(yangType, pluginConfig);
+ case EMPTY:
+ return BOOLEAN_DATA_TYPE;
+ case UNION:
+ return getCapitalCase(getCamelCase(((YangJavaUnionTranslator) yangType
+ .getDataTypeExtendedInfo()).getName(), pluginConfig));
+ case INSTANCE_IDENTIFIER:
+ return STRING_DATA_TYPE;
+ case DERIVED:
+ return getCapitalCase(
+ getCamelCase(yangType.getDataTypeName(), pluginConfig));
+ default:
+ return null;
+ }
+ }
+ }
+
+ /**
+ * Returns java import package.
+ *
+ * @param yangType YANG type
+ * @param isListAttr if the attribute is of list type
+ * @param conflictResolver object of YANG to java naming conflict util
+ * @return java import package
+ */
+ public static String getJavaImportPackage(YangType<?> yangType, boolean isListAttr,
+ YangToJavaNamingConflictUtil conflictResolver) {
+
+ YangDataTypes type = yangType.getDataType();
+
+ if (isListAttr) {
+ switch (type) {
+ case INT8:
+ case INT16:
+ case INT32:
+ case INT64:
+ case UINT8:
+ case UINT16:
+ case UINT32:
+ case BINARY:
+ case STRING:
+ case BOOLEAN:
+ case EMPTY:
+ return JAVA_LANG;
+ case UINT64:
+ case DECIMAL64:
+ return JAVA_MATH;
+ case ENUMERATION:
+ return getEnumsPackage(yangType, conflictResolver);
+ case BITS:
+ return COLLECTION_IMPORTS;
+ case LEAFREF:
+ return getLeafRefImpPkg(yangType, conflictResolver, true);
+ case IDENTITYREF:
+ return getIdentityRefPackage(yangType, conflictResolver);
+ case UNION:
+ return getUnionPackage(yangType, conflictResolver);
+ case INSTANCE_IDENTIFIER:
+ return JAVA_LANG;
+ case DERIVED:
+ return getTypeDefsPackage(yangType, conflictResolver);
+ default:
+ throw new TranslatorException("given data type is not supported. " +
+ yangType.getDataTypeName() + " in " +
+ yangType.getLineNumber() + " at " +
+ yangType.getCharPosition()
+ + " in " + yangType.getFileName());
+ }
+ } else {
+ switch (type) {
+ case UINT64:
+ case DECIMAL64:
+ return JAVA_MATH;
+ case EMPTY:
+ case STRING:
+ return JAVA_LANG;
+ case ENUMERATION:
+ return getEnumsPackage(yangType, conflictResolver);
+ case BITS:
+ return COLLECTION_IMPORTS;
+ case LEAFREF:
+ return getLeafRefImpPkg(yangType, conflictResolver, false);
+ case IDENTITYREF:
+ return getIdentityRefPackage(yangType, conflictResolver);
+ case UNION:
+ return getUnionPackage(yangType, conflictResolver);
+ case INSTANCE_IDENTIFIER:
+ return JAVA_LANG;
+ case DERIVED:
+ return getTypeDefsPackage(yangType, conflictResolver);
+ default:
+ return null;
+ }
+ }
+ }
+
+ /**
+ * Returns java package for typedef node.
+ *
+ * @param type YANG type
+ * @param conflictResolver object of YANG to java naming conflict util
+ * @return java package for typedef node
+ */
+ private static String getTypeDefsPackage(YangType<?> type,
+ YangToJavaNamingConflictUtil conflictResolver) {
+ Object var = type.getDataTypeExtendedInfo();
+ if (!(var instanceof YangDerivedInfo)) {
+ throw new TranslatorException("type should have been derived. " +
+ type.getDataTypeName() + " in " +
+ type.getLineNumber() + " at " +
+ type.getCharPosition()
+ + " in " + type.getFileName());
+ }
+
+ if ((((YangDerivedInfo<?>) var).getReferredTypeDef() == null)) {
+ throw new TranslatorException("derived info is not an instance of typedef. " +
+ type.getDataTypeName() + " in " +
+ type.getLineNumber() + " at " +
+ type.getCharPosition()
+ + " in " + type.getFileName());
+ }
+
+ YangJavaTypeDefTranslator typedef = (YangJavaTypeDefTranslator) ((YangDerivedInfo<?>) var).getReferredTypeDef();
+ return getTypePackage(typedef, conflictResolver);
+ }
+
+ /**
+ * Returns java package for union node.
+ *
+ * @param type YANG type
+ * @param conflictResolver object of YANG to java naming conflict util
+ * @return java package for union node
+ */
+ private static String getUnionPackage(YangType<?> type,
+ YangToJavaNamingConflictUtil conflictResolver) {
+
+ if (!(type.getDataTypeExtendedInfo() instanceof YangUnion)) {
+ throw new TranslatorException("type should have been union. " +
+ type.getDataTypeName() + " in " +
+ type.getLineNumber() + " at " +
+ type.getCharPosition()
+ + " in " + type.getFileName());
+ }
+
+ YangJavaUnionTranslator union = (YangJavaUnionTranslator) type.getDataTypeExtendedInfo();
+ return getTypePackage(union, conflictResolver);
+ }
+
+ /**
+ * Returns YANG enumeration's java package.
+ *
+ * @param type YANG type
+ * @param conflictResolver object of YANG to java naming conflict util
+ * @return YANG enumeration's java package
+ */
+ private static String getEnumsPackage(YangType<?> type,
+ YangToJavaNamingConflictUtil conflictResolver) {
+
+ if (!(type.getDataTypeExtendedInfo() instanceof YangEnumeration)) {
+ throw new TranslatorException("type should have been enumeration. " +
+ type.getDataTypeName() + " in " +
+ type.getLineNumber() + " at " +
+ type.getCharPosition()
+ + " in " + type.getFileName());
+ }
+ YangJavaEnumerationTranslator enumeration =
+ (YangJavaEnumerationTranslator) type.getDataTypeExtendedInfo();
+ return getTypePackage(enumeration, conflictResolver);
+ }
+
+ /**
+ * Returns YANG identity's java package.
+ *
+ * @param type YANG type
+ * @param conflictResolver object of YANG to java naming conflict util
+ * @return YANG identity's java package
+ */
+ private static String getIdentityRefPackage(YangType<?> type,
+ YangToJavaNamingConflictUtil conflictResolver) {
+
+ if (!(type.getDataTypeExtendedInfo() instanceof YangIdentityRef)) {
+ throw new TranslatorException("type should have been identityref. " +
+ type.getDataTypeName() + " in " +
+ type.getLineNumber() + " at " +
+ type.getCharPosition()
+ + " in " + type.getFileName());
+ }
+ YangIdentityRef identityRef = (YangIdentityRef) type.getDataTypeExtendedInfo();
+ if (identityRef.isInGrouping()) {
+ return JAVA_LANG;
+ }
+ YangJavaIdentityTranslator identity =
+ (YangJavaIdentityTranslator) (identityRef.getReferredIdentity());
+ return getTypePackage(identity, conflictResolver);
+ }
+
+ /**
+ * Returns type package.
+ *
+ * @param info YANG code generator info
+ * @param conflictResolver object of YANG to java naming conflict util
+ * @return type java package
+ */
+ private static String getTypePackage(JavaCodeGeneratorInfo info,
+ YangToJavaNamingConflictUtil conflictResolver) {
+ YangNode node = (YangNode) info;
+ // Check for referred schema type node for grouping scenario.
+ while (node.getReferredSchema() != null) {
+ node = (YangNode) node.getReferredSchema();
+ }
+ info = (JavaCodeGeneratorInfo) node;
+ if (info.getJavaFileInfo().getPackage() == null) {
+ return getPackageFromParent(node.getParent(), conflictResolver);
+ }
+ return info.getJavaFileInfo().getPackage();
+ }
+
+ /**
+ * Returns package from parent node.
+ *
+ * @param parent parent YANG node
+ * @param conflictResolver object of YANG to java naming conflict util
+ * @return java package from parent node
+ */
+ private static String getPackageFromParent(YangNode parent,
+ YangToJavaNamingConflictUtil conflictResolver) {
+ if (!(parent instanceof JavaFileInfoContainer)) {
+ throw new TranslatorException("invalid child node is being processed. " +
+ parent.getName() + " in " +
+ parent.getLineNumber() + " at " +
+ parent.getCharPosition()
+ + " in " + parent.getFileName());
+ }
+ JavaFileInfoTranslator parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
+ if (parentInfo.getPackage() == null) {
+ updateJavaFileInfo(parent, conflictResolver);
+ }
+ return parentInfo.getPackage() + PERIOD + parentInfo.getJavaName().toLowerCase();
+ }
+
+ /**
+ * Update the referred data model nodes java file info, this will be called,
+ * when the linked node is yet to translate. Then resolve until the parent hierarchy.
+ *
+ * @param yangNode node whose java info needs to be updated
+ * @param conflictResolver yang plugin config
+ */
+ public static void updateJavaFileInfo(YangNode yangNode,
+ YangToJavaNamingConflictUtil conflictResolver) {
+ Stack<YangNode> nodesToUpdatePackage = new Stack<>();
+
+ /*
+ * Add the nodes to be updated for package info in a stack.
+ */
+ while (yangNode != null
+ && ((JavaFileInfoContainer) yangNode)
+ .getJavaFileInfo().getPackage() == null) {
+ nodesToUpdatePackage.push(yangNode);
+ yangNode = yangNode.getParent();
+ }
+
+ /*
+ * If the package is not updated till root node, then root package needs to
+ * be updated.
+ */
+ if (yangNode == null) {
+ yangNode = nodesToUpdatePackage.pop();
+ String pkg;
+ if (yangNode instanceof YangJavaModuleTranslator) {
+ YangJavaModuleTranslator module = (YangJavaModuleTranslator) yangNode;
+ pkg = getRootPackage(module.getVersion(), module.getModuleNamespace(),
+ module.getRevision(), conflictResolver);
+ } else if (yangNode instanceof YangJavaSubModuleTranslator) {
+ YangJavaSubModuleTranslator submodule = (YangJavaSubModuleTranslator) yangNode;
+ pkg = getRootPackage(submodule.getVersion(),
+ submodule.getNameSpaceFromModule(),
+ submodule.getRevision(), conflictResolver);
+ } else {
+ throw new TranslatorException("Invalid root node of data model tree " +
+ yangNode.getName() + " in " +
+ yangNode.getLineNumber() + " at " +
+ yangNode.getCharPosition()
+ + " in " + yangNode.getFileName());
+ }
+
+ ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
+ .setJavaName(getCamelCase(yangNode.getName(), conflictResolver));
+ ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
+ .setPackage(pkg);
+ ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
+ .setPackageFilePath(getPackageDirPathFromJavaJPackage(
+ ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
+ .getPackage()));
+ }
+
+ /*
+ * Parent of the node in stack is updated with java info,
+ * all the nodes can be popped and updated
+ */
+ while (nodesToUpdatePackage.size() != 0) {
+ yangNode = nodesToUpdatePackage.pop();
+ ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
+ .setJavaName(getCamelCase(yangNode.getName(), conflictResolver));
+ ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
+ .setPackage(getCurNodePackage(yangNode));
+ ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
+ .setPackageFilePath(getPackageDirPathFromJavaJPackage(
+ ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
+ .getPackage()));
+ }
+ }
+
+ /**
+ * Returns the referred type from leaf/leaf-list.
+ *
+ * @param type current type in leaf
+ * @return type from the leafref
+ */
+ private static YangType<?> getReferredTypeFromLeafref(YangType type) {
+ YangLeafRef<?> lri = (YangLeafRef<?>) type.getDataTypeExtendedInfo();
+ return lri.isInGrouping() ? null : lri.getEffectiveDataType();
+ }
+
+ /**
+ * Returns leaf ref import string.
+ *
+ * @param type YANG type
+ * @param cnfg YANG to java naming conflict util
+ * @param isList true if list, false otherwise
+ * @return import class
+ */
+ public static String getLeafRefImpClass(
+ YangType type, YangToJavaNamingConflictUtil cnfg, boolean isList) {
+ YangType<?> rt = getReferredTypeFromLeafref(type);
+ return rt == null ? OBJECT_STRING : getJavaImportClass(rt, isList,
+ cnfg);
+ }
+
+ /**
+ * Returns identity ref import class.
+ *
+ * @param type YANG type
+ * @param cnfg YANG to java naming conflict util
+ * @return import class
+ */
+ public static String getIdentityRefImpClass(
+ YangType type, YangToJavaNamingConflictUtil cnfg) {
+ YangIdentityRef ir = (YangIdentityRef) type.getDataTypeExtendedInfo();
+ if (ir.isInGrouping()) {
+ return OBJECT_STRING;
+ }
+ YangIdentity identity = ir.getReferredIdentity();
+ return getCapitalCase(getCamelCase(identity.getName(), cnfg));
+ }
+
+ /**
+ * Returns leaf ref import package.
+ *
+ * @param type YANG type
+ * @param cnfg YANG to java naming conflict util
+ * @param isList true if list, false otherwise
+ * @return import package
+ */
+ private static String getLeafRefImpPkg(
+ YangType type, YangToJavaNamingConflictUtil cnfg, boolean isList) {
+ YangType<?> rt = getReferredTypeFromLeafref(type);
+ return rt == null ? JAVA_LANG : getJavaImportPackage(rt, isList, cnfg);
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/JavaLeafInfoContainer.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/JavaLeafInfoContainer.java
new file mode 100644
index 0000000..6622c3f
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/JavaLeafInfoContainer.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.translator.tojava.javamodel;
+
+import org.onosproject.yang.compiler.datamodel.LocationInfo;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.javadatamodel.JavaQualifiedTypeInfoContainer;
+import org.onosproject.yang.compiler.utils.io.YangToJavaNamingConflictUtil;
+
+/**
+ * Represent java based identification of the YANG leaves.
+ */
+public interface JavaLeafInfoContainer
+ extends JavaQualifiedTypeInfoContainer, LocationInfo {
+ /**
+ * Retrieves the data type of the leaf.
+ *
+ * @return data type of the leaf
+ */
+ YangType<?> getDataType();
+
+ /**
+ * Retrieves the name of the leaf.
+ *
+ * @return name of the leaf
+ */
+ String getName();
+
+ /**
+ * Retrieves the java name of the leaf.
+ *
+ * @param conflictResolveConfig user config to resolve conflicts
+ * @return name of the leaf
+ */
+ String getJavaName(YangToJavaNamingConflictUtil conflictResolveConfig);
+
+ /**
+ * Identifies if object is a leaf-list.
+ *
+ * @return true if leaf-list false otherwise
+ */
+ boolean isLeafList();
+
+ /**
+ * updates the qualified info.
+ */
+ void updateJavaQualifiedInfo();
+
+ /**
+ * Returns java naming conflict resolver.
+ *
+ * @return java naming conflict resolver
+ */
+ YangToJavaNamingConflictUtil getConflictResolveConfig();
+
+ /**
+ * Sets java naming conflict resolver.
+ *
+ * @param conflictResolveConfig java naming conflict resolver
+ */
+ void setConflictResolveConfig(YangToJavaNamingConflictUtil conflictResolveConfig);
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/JavaQualifiedTypeResolver.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/JavaQualifiedTypeResolver.java
new file mode 100644
index 0000000..439c37a
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/JavaQualifiedTypeResolver.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.translator.tojava.javamodel;
+
+import org.onosproject.yang.compiler.utils.io.YangToJavaNamingConflictUtil;
+
+/**
+ * Represent java based identification of the YANG leaves.
+ */
+interface JavaQualifiedTypeResolver {
+
+ /**
+ * updates the qualified access details of the type.
+ *
+ * @param conflictResolver plugin configurations
+ */
+ void updateJavaQualifiedInfo(YangToJavaNamingConflictUtil conflictResolver);
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaAugmentTranslator.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaAugmentTranslator.java
new file mode 100644
index 0000000..6c6d80b
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaAugmentTranslator.java
@@ -0,0 +1,150 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.translator.tojava.javamodel;
+
+import org.onosproject.yang.compiler.datamodel.YangChoice;
+import org.onosproject.yang.compiler.datamodel.javadatamodel.YangJavaAugment;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGenerator;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGeneratorInfo;
+import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoTranslator;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaCodeFragmentFiles;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+
+import java.io.IOException;
+
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
+import static org.onosproject.yang.compiler.translator.tojava.YangJavaModelUtils.generateCodeOfNode;
+
+/**
+ * Represents augment information extended to support java code generation.
+ */
+public class YangJavaAugmentTranslator
+ extends YangJavaAugment
+ implements JavaCodeGeneratorInfo, JavaCodeGenerator {
+
+ private static final long serialVersionUID = 806201632L;
+
+ /**
+ * File handle to maintain temporary java code fragments as per the code snippet types.
+ */
+ private transient TempJavaCodeFragmentFiles tempFileHandle;
+
+ /**
+ * Creates a YANG java augment object.
+ */
+ public YangJavaAugmentTranslator() {
+ super();
+ setJavaFileInfo(new JavaFileInfoTranslator());
+ getJavaFileInfo().setGeneratedFileTypes(GENERATE_INTERFACE_WITH_BUILDER);
+ }
+
+ /**
+ * Returns the generated java file information.
+ *
+ * @return generated java file information
+ */
+ @Override
+ public JavaFileInfoTranslator getJavaFileInfo() {
+
+ if (javaFileInfo == null) {
+ throw new TranslatorException("Missing java info in java datamodel node " +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition()
+ + " in " + getFileName());
+ }
+ return (JavaFileInfoTranslator) javaFileInfo;
+ }
+
+ /**
+ * Sets the java file info object.
+ *
+ * @param javaInfo java file info object
+ */
+ @Override
+ public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
+ javaFileInfo = javaInfo;
+ }
+
+ /**
+ * Returns the temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ @Override
+ public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
+ return tempFileHandle;
+ }
+
+ /**
+ * Sets temporary file handle.
+ *
+ * @param fileHandle temporary file handle
+ */
+ @Override
+ public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
+ tempFileHandle = fileHandle;
+ }
+
+ /**
+ * Prepare the information for java code generation corresponding to YANG augment info.
+ *
+ * @param yangPlugin YANG plugin config
+ * @throws TranslatorException translator operation fail
+ */
+ @Override
+ public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
+ try {
+ generateCodeOfNode(this, yangPlugin);
+ } catch (IOException e) {
+ throw new TranslatorException("Failed to generate code for augmentable node " +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition()
+ + " in " + getFileName() + " " + e.getLocalizedMessage());
+ }
+ }
+
+ /**
+ * Create a java file using the YANG augment info.
+ *
+ * @throws TranslatorException when failed to do translator operations
+ */
+ @Override
+ public void generateCodeExit() throws TranslatorException {
+ try {
+ if (validateAugmentNode()) {
+ getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_INTERFACE_WITH_BUILDER, this);
+ }
+ } catch (IOException e) {
+ throw new TranslatorException("Failed to generate code for augmentable node " +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition()
+ + " in " + getFileName() + " " + e.getLocalizedMessage());
+ }
+ }
+
+ /**
+ * Returns true if augment does not have choice as target node.
+ *
+ * @return true if augment does not have choice as target node
+ */
+ private boolean validateAugmentNode() {
+ return !(getAugmentedNode() instanceof YangChoice);
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaCaseTranslator.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaCaseTranslator.java
new file mode 100644
index 0000000..880d117
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaCaseTranslator.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.translator.tojava.javamodel;
+
+import org.onosproject.yang.compiler.datamodel.javadatamodel.YangJavaCase;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGenerator;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGeneratorInfo;
+import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoTranslator;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaCodeFragmentFiles;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+
+import java.io.IOException;
+
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
+import static org.onosproject.yang.compiler.translator.tojava.YangJavaModelUtils.generateCodeOfAugmentableNode;
+import static org.onosproject.yang.compiler.translator.tojava.YangJavaModelUtils.generateJava;
+
+/**
+ * Represents case information extended to support java code generation.
+ */
+public class YangJavaCaseTranslator
+ extends YangJavaCase
+ implements JavaCodeGeneratorInfo, JavaCodeGenerator {
+
+ private static final long serialVersionUID = 806201631L;
+
+ /**
+ * File handle to maintain temporary java code fragments as per the code
+ * snippet types.
+ */
+ private transient TempJavaCodeFragmentFiles tempFileHandle;
+
+ /**
+ * Creates YANG java case object.
+ */
+ public YangJavaCaseTranslator() {
+ super();
+ setJavaFileInfo(new JavaFileInfoTranslator());
+ getJavaFileInfo().setGeneratedFileTypes(GENERATE_INTERFACE_WITH_BUILDER);
+ }
+
+ /**
+ * Returns the generated java file information.
+ *
+ * @return generated java file information
+ */
+ @Override
+ public JavaFileInfoTranslator getJavaFileInfo() {
+ if (javaFileInfo == null) {
+ throw new TranslatorException("Missing java info in java datamodel node" +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition()
+ + " in " + getFileName());
+ }
+ return (JavaFileInfoTranslator) javaFileInfo;
+ }
+
+ /**
+ * Sets the java file info object.
+ *
+ * @param javaInfo java file info object
+ */
+ @Override
+ public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
+ javaFileInfo = javaInfo;
+ }
+
+ /**
+ * Returns the temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ @Override
+ public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
+ return tempFileHandle;
+ }
+
+ /**
+ * Sets temporary file handle.
+ *
+ * @param fileHandle temporary file handle
+ */
+ @Override
+ public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
+ tempFileHandle = fileHandle;
+ }
+
+ /**
+ * Prepare the information for java code generation corresponding to YANG
+ * case info.
+ *
+ * @param yangPlugin YANG plugin config
+ * @throws TranslatorException translator operation fail
+ */
+ @Override
+ public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
+ try {
+ if (getReferredSchema() != null) {
+ return;
+ }
+ generateCodeOfAugmentableNode(this, yangPlugin);
+ } catch (IOException e) {
+ throw new TranslatorException(
+ "Failed to prepare generate code entry for case node " +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition()
+ + " in " + getFileName() + " " + e.getLocalizedMessage());
+ }
+ }
+
+ /**
+ * Creates a java file using the YANG case info.
+ */
+ @Override
+ public void generateCodeExit() throws TranslatorException {
+ try {
+ generateJava(GENERATE_INTERFACE_WITH_BUILDER, this);
+ } catch (IOException e) {
+ throw new TranslatorException("Failed to generate code for case node " +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition()
+ + " in " + getFileName() + " " + e.getLocalizedMessage());
+ }
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaChoiceTranslator.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaChoiceTranslator.java
new file mode 100644
index 0000000..b04e849
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaChoiceTranslator.java
@@ -0,0 +1,139 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.translator.tojava.javamodel;
+
+import org.onosproject.yang.compiler.datamodel.javadatamodel.YangJavaChoice;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGenerator;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGeneratorInfo;
+import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoTranslator;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaCodeFragmentFiles;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+
+import java.io.IOException;
+
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.YangJavaModelUtils.generateCodeAndUpdateInParent;
+import static org.onosproject.yang.compiler.translator.tojava.YangJavaModelUtils.generateJava;
+
+/**
+ * Represents choice information extended to support java code generation.
+ */
+public class YangJavaChoiceTranslator
+ extends YangJavaChoice
+ implements JavaCodeGeneratorInfo, JavaCodeGenerator {
+
+ private static final long serialVersionUID = 806201631L;
+
+ /**
+ * File handle to maintain temporary java code fragments as per the code
+ * snippet types.
+ */
+ private transient TempJavaCodeFragmentFiles tempFileHandle;
+
+ /**
+ * Creates YANG java choice object.
+ */
+ public YangJavaChoiceTranslator() {
+ super();
+ setJavaFileInfo(new JavaFileInfoTranslator());
+ getJavaFileInfo().setGeneratedFileTypes(INTERFACE_MASK);
+ }
+
+ /**
+ * Returns the generated java file information.
+ *
+ * @return generated java file information
+ */
+ @Override
+ public JavaFileInfoTranslator getJavaFileInfo() {
+ if (javaFileInfo == null) {
+ throw new TranslatorException("Missing java info in java datamodel node" +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition()
+ + " in " + getFileName());
+ }
+ return (JavaFileInfoTranslator) javaFileInfo;
+ }
+
+ /**
+ * Sets the java file info object.
+ *
+ * @param javaInfo java file info object
+ */
+ @Override
+ public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
+ javaFileInfo = javaInfo;
+ }
+
+ /**
+ * Returns the temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ @Override
+ public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
+ return tempFileHandle;
+ }
+
+ /**
+ * Sets temporary file handle.
+ *
+ * @param fileHandle temporary file handle
+ */
+ @Override
+ public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
+ tempFileHandle = fileHandle;
+ }
+
+ /**
+ * Prepare the information for java code generation corresponding to YANG
+ * choice info.
+ *
+ * @param yangPlugin YANG plugin config
+ * @throws TranslatorException translator operation fail
+ */
+ @Override
+ public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
+ try {
+ generateCodeAndUpdateInParent(this, yangPlugin, false);
+ } catch (IOException e) {
+ throw new TranslatorException(
+ "Failed to prepare generate code entry for choice node " +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition()
+ + " in " + getFileName() + " " + e.getLocalizedMessage());
+ }
+ }
+
+ /**
+ * Creates a java file using the YANG choice info.
+ */
+ @Override
+ public void generateCodeExit() throws TranslatorException {
+ try {
+ generateJava(INTERFACE_MASK, this);
+ } catch (IOException e) {
+ throw new TranslatorException("Failed to generate code for choice node " +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition()
+ + " in " + getFileName() + " " + e.getLocalizedMessage());
+ }
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaContainerTranslator.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaContainerTranslator.java
new file mode 100644
index 0000000..6230a71
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaContainerTranslator.java
@@ -0,0 +1,141 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.translator.tojava.javamodel;
+
+import org.onosproject.yang.compiler.datamodel.javadatamodel.YangJavaContainer;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGenerator;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGeneratorInfo;
+import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoTranslator;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaCodeFragmentFiles;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+
+import java.io.IOException;
+
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
+import static org.onosproject.yang.compiler.translator.tojava.YangJavaModelUtils.generateCodeAndUpdateInParent;
+import static org.onosproject.yang.compiler.translator.tojava.YangJavaModelUtils.generateJava;
+
+/**
+ * Represents container information extended to support java code generation.
+ */
+public class YangJavaContainerTranslator
+ extends YangJavaContainer
+ implements JavaCodeGeneratorInfo, JavaCodeGenerator {
+
+ private static final long serialVersionUID = 806201630L;
+
+ /**
+ * File handle to maintain temporary java code fragments as per the code
+ * snippet types.
+ */
+ private transient TempJavaCodeFragmentFiles tempFileHandle;
+
+ /**
+ * Creates YANG java container object.
+ */
+ public YangJavaContainerTranslator() {
+ super();
+ setJavaFileInfo(new JavaFileInfoTranslator());
+ getJavaFileInfo().setGeneratedFileTypes(GENERATE_INTERFACE_WITH_BUILDER);
+ }
+
+ /**
+ * Returns the generated java file information.
+ *
+ * @return generated java file information
+ */
+ @Override
+ public JavaFileInfoTranslator getJavaFileInfo() {
+ if (javaFileInfo == null) {
+ throw new TranslatorException("Missing java info in java datamodel node " +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition()
+ + " in " + getFileName());
+ }
+ return (JavaFileInfoTranslator) javaFileInfo;
+ }
+
+ /**
+ * Sets the java file info object.
+ *
+ * @param javaInfo java file info object
+ */
+ @Override
+ public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
+ javaFileInfo = javaInfo;
+ }
+
+ /**
+ * Returns the temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ @Override
+ public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
+ return tempFileHandle;
+ }
+
+ /**
+ * Sets temporary file handle.
+ *
+ * @param fileHandle temporary file handle
+ */
+ @Override
+ public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
+ tempFileHandle = fileHandle;
+ }
+
+ /**
+ * Prepare the information for java code generation corresponding to YANG
+ * container info.
+ *
+ * @param yangPlugin YANG plugin config
+ * @throws TranslatorException translator operation fail
+ */
+ @Override
+ public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
+ try {
+ generateCodeAndUpdateInParent(this, yangPlugin, false);
+ } catch (IOException e) {
+ throw new TranslatorException(
+ "Failed to prepare generate code entry for container node " +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition()
+ + " in " + getFileName() + " " + e.getLocalizedMessage());
+ }
+ }
+
+ /**
+ * Create a java file using the YANG container info.
+ *
+ * @throws TranslatorException translator operation fail
+ */
+ @Override
+ public void generateCodeExit() throws TranslatorException {
+ try {
+ generateJava(GENERATE_INTERFACE_WITH_BUILDER, this);
+ } catch (IOException e) {
+ throw new TranslatorException("Failed to generate code for container node " +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition()
+ + " in " + getFileName() + " " + e.getLocalizedMessage());
+ }
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaEnumerationTranslator.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaEnumerationTranslator.java
new file mode 100644
index 0000000..3b81976
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaEnumerationTranslator.java
@@ -0,0 +1,140 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava.javamodel;
+
+import org.onosproject.yang.compiler.datamodel.javadatamodel.YangJavaEnumeration;
+import org.onosproject.yang.compiler.translator.exception.InvalidNodeForTranslatorException;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGenerator;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGeneratorInfo;
+import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoTranslator;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaCodeFragmentFiles;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+
+import java.io.IOException;
+
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
+import static org.onosproject.yang.compiler.translator.tojava.YangJavaModelUtils.generateCodeOfNode;
+import static org.onosproject.yang.compiler.translator.tojava.YangJavaModelUtils.generateJava;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorErrorType.FAIL_AT_ENTRY;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorErrorType.FAIL_AT_EXIT;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorUtils.getErrorMsg;
+
+/**
+ * Represents YANG java enumeration information extended to support java code generation.
+ */
+public class YangJavaEnumerationTranslator
+ extends YangJavaEnumeration
+ implements JavaCodeGenerator, JavaCodeGeneratorInfo {
+
+ private static final long serialVersionUID = 806201629L;
+
+ /**
+ * File handle to maintain temporary java code fragments as per the code
+ * snippet types.
+ */
+ private transient TempJavaCodeFragmentFiles tempFileHandle;
+
+ /**
+ * Creates YANG java enumeration object.
+ */
+ public YangJavaEnumerationTranslator() {
+ setJavaFileInfo(new JavaFileInfoTranslator());
+ getJavaFileInfo().setGeneratedFileTypes(GENERATE_ENUM_CLASS);
+ }
+
+ /**
+ * Returns the generated java file information.
+ *
+ * @return generated java file information
+ */
+ @Override
+ public JavaFileInfoTranslator getJavaFileInfo() {
+
+ if (javaFileInfo == null) {
+ throw new TranslatorException("Missing java info in java datamodel node " +
+ getName());
+ }
+ return (JavaFileInfoTranslator) javaFileInfo;
+ }
+
+ /**
+ * Sets the java file info object.
+ *
+ * @param javaInfo java file info object
+ */
+ @Override
+ public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
+ javaFileInfo = javaInfo;
+ }
+
+ /**
+ * Returns the temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ @Override
+ public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
+ return tempFileHandle;
+ }
+
+ /**
+ * Sets temporary file handle.
+ *
+ * @param fileHandle temporary file handle
+ */
+ @Override
+ public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
+ tempFileHandle = fileHandle;
+ }
+
+ /**
+ * Prepare the information for java code generation corresponding to YANG
+ * enumeration info.
+ *
+ * @param yangPlugin YANG plugin config
+ * @throws TranslatorException translator operations fails
+ */
+ @Override
+ public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
+ try {
+ if (getReferredSchema() != null) {
+ throw new InvalidNodeForTranslatorException();
+ }
+ generateCodeOfNode(this, yangPlugin);
+ tempFileHandle.getEnumTempFiles().setEnumClass(true);
+ } catch (IOException e) {
+ throw new TranslatorException(getErrorMsg(FAIL_AT_ENTRY, this,
+ e.getLocalizedMessage()));
+ }
+ }
+
+ /**
+ * Creates a java file using the YANG enumeration info.
+ *
+ * @throws TranslatorException translator operation fail
+ */
+ @Override
+ public void generateCodeExit() throws TranslatorException {
+ try {
+ generateJava(GENERATE_ENUM_CLASS, this);
+ } catch (IOException e) {
+ throw new TranslatorException(getErrorMsg(FAIL_AT_EXIT, this,
+ e.getLocalizedMessage()));
+ }
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaGroupingTranslator.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaGroupingTranslator.java
new file mode 100644
index 0000000..ca2d3e0
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaGroupingTranslator.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.translator.tojava.javamodel;
+
+import org.onosproject.yang.compiler.datamodel.javadatamodel.YangJavaGrouping;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGenerator;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGeneratorInfo;
+import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoTranslator;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaCodeFragmentFiles;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+
+import java.io.IOException;
+
+import static org.onosproject.yang.compiler.translator.tojava.YangJavaModelUtils.updatePackageInfo;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaIdentifierSyntax.createPackage;
+
+/**
+ * Represents grouping information extended to support java code generation.
+ */
+public class YangJavaGroupingTranslator
+ extends YangJavaGrouping
+ implements JavaCodeGeneratorInfo, JavaCodeGenerator {
+
+ private static final long serialVersionUID = 806201628L;
+
+ /**
+ * File handle to maintain temporary java code fragments as per the code
+ * snippet types.
+ */
+ private transient TempJavaCodeFragmentFiles tempFileHandle;
+
+ /**
+ * Creates YANG Java grouping object.
+ */
+ public YangJavaGroupingTranslator() {
+ super();
+ setJavaFileInfo(new JavaFileInfoTranslator());
+ }
+
+ /**
+ * Returns the generated java file information.
+ *
+ * @return generated java file information
+ */
+ @Override
+ public JavaFileInfoTranslator getJavaFileInfo() {
+ if (javaFileInfo == null) {
+ throw new TranslatorException("Missing java info in java datamodel node " +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition()
+ + " in " + getFileName());
+ }
+ return (JavaFileInfoTranslator) javaFileInfo;
+ }
+
+ /**
+ * Sets the java file info object.
+ *
+ * @param javaInfo java file info object
+ */
+ @Override
+ public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
+ javaFileInfo = javaInfo;
+ }
+
+ /**
+ * Returns the temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ @Override
+ public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
+ return tempFileHandle;
+ }
+
+ /**
+ * Sets temporary file handle.
+ *
+ * @param fileHandle temporary file handle
+ */
+ @Override
+ public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
+ tempFileHandle = fileHandle;
+ }
+
+
+ @Override
+ public void generateCodeEntry(YangPluginConfig yangPlugin)
+ throws TranslatorException {
+ updatePackageInfo(this, yangPlugin);
+ }
+
+ @Override
+ public void generateCodeExit()
+ throws TranslatorException, IOException {
+ createPackage(this);
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaIdentityTranslator.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaIdentityTranslator.java
new file mode 100644
index 0000000..56f54c0
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaIdentityTranslator.java
@@ -0,0 +1,191 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.translator.tojava.javamodel;
+
+import org.onosproject.yang.compiler.datamodel.javadatamodel.YangJavaIdentity;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGenerator;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGeneratorInfo;
+import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoTranslator;
+import org.onosproject.yang.compiler.translator.tojava.JavaImportData;
+import org.onosproject.yang.compiler.translator.tojava.JavaQualifiedTypeInfoTranslator;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaCodeFragmentFiles;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_IDENTITY_CLASS;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
+import static org.onosproject.yang.compiler.translator.tojava.YangJavaModelUtils.updatePackageInfo;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaFileGeneratorUtils.getFileObject;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaIdentifierSyntax.createPackage;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getFromStringMethodForIdentity;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getToStringMethodForIdentity;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorErrorType.FAIL_AT_ENTRY;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorErrorType.FAIL_AT_EXIT;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorUtils.getErrorMsg;
+import static org.onosproject.yang.compiler.utils.UtilConstants.CLOSE_CURLY_BRACKET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EMPTY_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.JAVA_FILE_EXTENSION;
+import static org.onosproject.yang.compiler.utils.io.impl.FileSystemUtil.closeFile;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getCapitalCase;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.validateLineLength;
+
+/**
+ * Represents input information extended to support java code generation.
+ */
+public class YangJavaIdentityTranslator extends YangJavaIdentity
+ implements JavaCodeGeneratorInfo, JavaCodeGenerator {
+
+ //Contains the information of the imported.
+ private transient JavaImportData importData;
+
+ /**
+ * File handle to maintain temporary java code fragments as per the code
+ * snippet types.
+ */
+ private transient TempJavaCodeFragmentFiles tempFileHandle;
+
+ /**
+ * Creates YANG java container object.
+ */
+ public YangJavaIdentityTranslator() {
+ setJavaFileInfo(new JavaFileInfoTranslator());
+ getJavaFileInfo().setGeneratedFileTypes(GENERATE_INTERFACE_WITH_BUILDER);
+ importData = new JavaImportData();
+ }
+
+ /**
+ * Returns the generated java file information.
+ *
+ * @return generated java file information
+ */
+ @Override
+ public JavaFileInfoTranslator getJavaFileInfo() {
+ if (javaFileInfo == null) {
+ throw new TranslatorException("Missing java info in java identity" +
+ " node " + getName());
+ }
+ return (JavaFileInfoTranslator) javaFileInfo;
+ }
+
+ /**
+ * Sets the java file info object.
+ *
+ * @param javaInfo java file info object
+ */
+ @Override
+ public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
+ javaFileInfo = javaInfo;
+ }
+
+ /**
+ * Returns the temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ @Override
+ public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
+ return tempFileHandle;
+ }
+
+ /**
+ * Sets temporary file handle.
+ *
+ * @param fileHandle temporary file handle
+ */
+ @Override
+ public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
+ tempFileHandle = fileHandle;
+ }
+
+ /**
+ * Prepare the information for java code generation corresponding to YANG
+ * container info.
+ *
+ * @param yangPlugin YANG plugin config
+ * @throws TranslatorException translator operation fail
+ */
+ @Override
+ public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
+ try {
+
+ updatePackageInfo(this, yangPlugin);
+ JavaQualifiedTypeInfoTranslator basePkgInfo =
+ new JavaQualifiedTypeInfoTranslator();
+ JavaFileInfoTranslator itsInfo = getJavaFileInfo();
+ String name = itsInfo.getJavaName();
+ String className = getCapitalCase(name);
+ String path = itsInfo.getPackageFilePath();
+ createPackage(this);
+ List<String> imports = null;
+ boolean isQualified;
+
+ if (getBaseNode() != null && getBaseNode().getReferredIdentity() != null) {
+ if (!(getBaseNode().getReferredIdentity() instanceof YangJavaIdentityTranslator)) {
+ throw new TranslatorException(getErrorMsg(FAIL_AT_ENTRY, this,
+ EMPTY_STRING));
+ }
+ YangJavaIdentityTranslator base =
+ (YangJavaIdentityTranslator) getBaseNode().getReferredIdentity();
+ JavaFileInfoTranslator info = base.getJavaFileInfo();
+ String baseClassName = getCapitalCase(info.getJavaName());
+ String basePkg = info.getPackage();
+ basePkgInfo.setClassInfo(baseClassName);
+ basePkgInfo.setPkgInfo(basePkg);
+ isQualified = importData.addImportInfo(basePkgInfo, className,
+ javaFileInfo.getPackage());
+ if (!isQualified) {
+ imports = importData.getImports(true);
+ }
+ }
+
+ File file = getFileObject(path, className, JAVA_FILE_EXTENSION, itsInfo);
+
+ initiateJavaFileGeneration(file, GENERATE_IDENTITY_CLASS, imports, this, className);
+ file = validateLineLength(file);
+ //Add to string and from string method to class
+ addStringMethodsToClass(file, name);
+ insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
+
+ closeFile(file, false);
+ } catch (IOException e) {
+ throw new TranslatorException(getErrorMsg(FAIL_AT_EXIT, this,
+ e.getLocalizedMessage()));
+ }
+ }
+
+ private void addStringMethodsToClass(File file, String className) throws IOException {
+ insertDataIntoJavaFile(file, getToStringMethodForIdentity(getName()));
+ insertDataIntoJavaFile(file, getFromStringMethodForIdentity(
+ className, getName()));
+ }
+
+ /**
+ * Create a java file using the YANG container info.
+ *
+ * @throws TranslatorException translator operation fail
+ */
+ @Override
+ public void generateCodeExit() throws TranslatorException {
+ /* Do nothing, file is already generated in entry*/
+ }
+}
+
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaInputTranslator.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaInputTranslator.java
new file mode 100644
index 0000000..dc39964
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaInputTranslator.java
@@ -0,0 +1,141 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava.javamodel;
+
+import org.onosproject.yang.compiler.datamodel.javadatamodel.YangJavaInput;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGenerator;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGeneratorInfo;
+import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoTranslator;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaCodeFragmentFiles;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+
+import java.io.IOException;
+
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
+import static org.onosproject.yang.compiler.translator.tojava.YangJavaModelUtils.generateCodeOfAugmentableNode;
+
+/**
+ * Represents input information extended to support java code generation.
+ */
+public class YangJavaInputTranslator
+ extends YangJavaInput
+ implements JavaCodeGeneratorInfo, JavaCodeGenerator {
+
+ private static final long serialVersionUID = 806201627L;
+
+ /**
+ * File handle to maintain temporary java code fragments as per the code
+ * snippet types.
+ */
+ private transient TempJavaCodeFragmentFiles tempFileHandle;
+
+ /**
+ * Creates an instance of java input.
+ */
+ public YangJavaInputTranslator() {
+ super();
+ setJavaFileInfo(new JavaFileInfoTranslator());
+ getJavaFileInfo().setGeneratedFileTypes(GENERATE_INTERFACE_WITH_BUILDER);
+ }
+
+ /**
+ * Returns the generated java file information.
+ *
+ * @return generated java file information
+ */
+ @Override
+ public JavaFileInfoTranslator getJavaFileInfo() {
+ if (javaFileInfo == null) {
+ throw new TranslatorException("missing java info in java datamodel node " +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition()
+ + " in " + getFileName());
+ }
+ return (JavaFileInfoTranslator) javaFileInfo;
+ }
+
+ /**
+ * Sets the java file info object.
+ *
+ * @param javaInfo java file info object
+ */
+ @Override
+ public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
+ javaFileInfo = javaInfo;
+ }
+
+ /**
+ * Returns the temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ @Override
+ public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
+ return tempFileHandle;
+ }
+
+ /**
+ * Sets temporary file handle.
+ *
+ * @param fileHandle temporary file handle
+ */
+ @Override
+ public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
+ tempFileHandle = fileHandle;
+ }
+
+ /**
+ * Prepare the information for java code generation corresponding to YANG
+ * input info.
+ *
+ * @param yangPlugin YANG plugin config
+ * @throws TranslatorException translator operation fail
+ */
+ @Override
+ public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
+ try {
+ generateCodeOfAugmentableNode(this, yangPlugin);
+ } catch (IOException e) {
+ throw new TranslatorException(
+ "Failed to prepare generate code entry for input node " +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition()
+ + " in " + getFileName() + " " + e.getLocalizedMessage());
+ }
+ }
+
+ /**
+ * Creates a java file using the YANG input info.
+ *
+ * @throws TranslatorException translator operation fail
+ */
+ @Override
+ public void generateCodeExit() throws TranslatorException {
+ try {
+ getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_INTERFACE_WITH_BUILDER, this);
+ } catch (IOException e) {
+ throw new TranslatorException("Failed to generate code for input node " +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition()
+ + " in " + getFileName() + " " + e.getLocalizedMessage());
+ }
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaLeafListTranslator.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaLeafListTranslator.java
new file mode 100644
index 0000000..8333e9e
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaLeafListTranslator.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.translator.tojava.javamodel;
+
+import org.onosproject.yang.compiler.datamodel.javadatamodel.YangJavaLeafList;
+import org.onosproject.yang.compiler.translator.tojava.JavaQualifiedTypeInfoTranslator;
+import org.onosproject.yang.compiler.utils.io.YangToJavaNamingConflictUtil;
+
+import static org.onosproject.yang.compiler.translator.tojava.JavaQualifiedTypeInfoTranslator.updateLeavesJavaQualifiedInfo;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getCamelCase;
+
+/**
+ * Represents java information corresponding to the YANG leaf-list.
+ */
+public class YangJavaLeafListTranslator
+ extends YangJavaLeafList
+ implements JavaLeafInfoContainer {
+
+ private static final long serialVersionUID = 806201638L;
+
+ private transient YangToJavaNamingConflictUtil conflictResolveConfig;
+
+ /**
+ * Returns a new YANG leaf object with java qualified access details.
+ */
+ public YangJavaLeafListTranslator() {
+ super();
+ setJavaQualifiedInfo(new JavaQualifiedTypeInfoTranslator());
+ }
+
+ @Override
+ public String getJavaName(YangToJavaNamingConflictUtil conflictResolveConfig) {
+ return getCamelCase(getName(), conflictResolveConfig);
+ }
+
+ @Override
+ public boolean isLeafList() {
+ return true;
+ }
+
+ @Override
+ public void updateJavaQualifiedInfo() {
+ updateLeavesJavaQualifiedInfo(this);
+ }
+
+ /**
+ * Returns java naming conflict resolve configurations.
+ *
+ * @return java naming conflict resolve configurations
+ */
+ @Override
+ public YangToJavaNamingConflictUtil getConflictResolveConfig() {
+ return conflictResolveConfig;
+ }
+
+ /**
+ * Sets java naming conflict resolve configurations.
+ *
+ * @param conflictResolveConfig java naming conflict resolve configurations
+ */
+ @Override
+ public void setConflictResolveConfig(YangToJavaNamingConflictUtil conflictResolveConfig) {
+ this.conflictResolveConfig = conflictResolveConfig;
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaLeafTranslator.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaLeafTranslator.java
new file mode 100644
index 0000000..90a74f4
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaLeafTranslator.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.translator.tojava.javamodel;
+
+import org.onosproject.yang.compiler.datamodel.javadatamodel.YangJavaLeaf;
+import org.onosproject.yang.compiler.translator.tojava.JavaQualifiedTypeInfoTranslator;
+import org.onosproject.yang.compiler.utils.io.YangToJavaNamingConflictUtil;
+
+import static org.onosproject.yang.compiler.translator.tojava.JavaQualifiedTypeInfoTranslator.updateLeavesJavaQualifiedInfo;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getCamelCase;
+
+/**
+ * Represents java information corresponding to the YANG leaf.
+ */
+public class YangJavaLeafTranslator
+ extends YangJavaLeaf
+ implements JavaLeafInfoContainer {
+
+ private static final long serialVersionUID = 806201636L;
+
+ private transient YangToJavaNamingConflictUtil conflictResolveConfig;
+
+ /**
+ * Returns a new YANG leaf object with java qualified access details.
+ */
+ public YangJavaLeafTranslator() {
+ super();
+ setJavaQualifiedInfo(new JavaQualifiedTypeInfoTranslator());
+ }
+
+ @Override
+ public String getJavaName(YangToJavaNamingConflictUtil conflictResolveConfig) {
+ return getCamelCase(getName(), conflictResolveConfig);
+ }
+
+ @Override
+ public boolean isLeafList() {
+ return false;
+ }
+
+ @Override
+ public void updateJavaQualifiedInfo() {
+ updateLeavesJavaQualifiedInfo(this);
+ }
+
+ /**
+ * Returns java naming conflict resolve configurations.
+ *
+ * @return java naming conflict resolve configurations
+ */
+ @Override
+ public YangToJavaNamingConflictUtil getConflictResolveConfig() {
+ return conflictResolveConfig;
+ }
+
+ /**
+ * Sets java naming conflict resolve configurations.
+ *
+ * @param conflictResolveConfig java naming conflict resolve configurations
+ */
+ @Override
+ public void setConflictResolveConfig(YangToJavaNamingConflictUtil conflictResolveConfig) {
+ this.conflictResolveConfig = conflictResolveConfig;
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaListTranslator.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaListTranslator.java
new file mode 100644
index 0000000..49cb315
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaListTranslator.java
@@ -0,0 +1,141 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.translator.tojava.javamodel;
+
+import org.onosproject.yang.compiler.datamodel.javadatamodel.YangJavaList;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGenerator;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGeneratorInfo;
+import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoTranslator;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaCodeFragmentFiles;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+
+import java.io.IOException;
+
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
+import static org.onosproject.yang.compiler.translator.tojava.YangJavaModelUtils.generateCodeAndUpdateInParent;
+import static org.onosproject.yang.compiler.translator.tojava.YangJavaModelUtils.generateJava;
+
+/**
+ * Represents YANG list information extended to support java code generation.
+ */
+public class YangJavaListTranslator
+ extends YangJavaList
+ implements JavaCodeGeneratorInfo, JavaCodeGenerator {
+
+ private static final long serialVersionUID = 806201626L;
+
+ /**
+ * File handle to maintain temporary java code fragments as per the code
+ * snippet types.
+ */
+ private transient TempJavaCodeFragmentFiles tempFileHandle;
+
+ /**
+ * Creates YANG java list object.
+ */
+ public YangJavaListTranslator() {
+ super();
+ setJavaFileInfo(new JavaFileInfoTranslator());
+ getJavaFileInfo().setGeneratedFileTypes(GENERATE_INTERFACE_WITH_BUILDER);
+ }
+
+ /**
+ * Returns the generated java file information.
+ *
+ * @return generated java file information
+ */
+ @Override
+ public JavaFileInfoTranslator getJavaFileInfo() {
+ if (javaFileInfo == null) {
+ throw new TranslatorException("Missing java info in java datamodel node " +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition()
+ + " in " + getFileName());
+ }
+ return (JavaFileInfoTranslator) javaFileInfo;
+ }
+
+ /**
+ * Sets the java file info object.
+ *
+ * @param javaInfo java file info object
+ */
+ @Override
+ public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
+ javaFileInfo = javaInfo;
+ }
+
+ /**
+ * Returns the temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ @Override
+ public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
+ return tempFileHandle;
+ }
+
+ /**
+ * Sets temporary file handle.
+ *
+ * @param fileHandle temporary file handle
+ */
+ @Override
+ public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
+ tempFileHandle = fileHandle;
+ }
+
+ /**
+ * Prepare the information for java code generation corresponding to YANG
+ * list info.
+ *
+ * @param yangPlugin YANG plugin config
+ * @throws TranslatorException translator operation fail
+ */
+ @Override
+ public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
+ try {
+ generateCodeAndUpdateInParent(this, yangPlugin, true);
+ } catch (IOException e) {
+ throw new TranslatorException(
+ "Failed to prepare generate code entry for list node " +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition()
+ + " in " + getFileName() + " " + e.getLocalizedMessage());
+ }
+ }
+
+ /**
+ * Creates a java file using the YANG list info.
+ *
+ * @throws TranslatorException translator operation fail
+ */
+ @Override
+ public void generateCodeExit() throws TranslatorException {
+ try {
+ generateJava(GENERATE_INTERFACE_WITH_BUILDER, this);
+ } catch (IOException e) {
+ throw new TranslatorException("Failed to generate code for list node " +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition()
+ + " in " + getFileName() + " " + e.getLocalizedMessage());
+ }
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaModuleTranslator.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaModuleTranslator.java
new file mode 100644
index 0000000..dbc6803
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaModuleTranslator.java
@@ -0,0 +1,218 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.translator.tojava.javamodel;
+
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNotification;
+import org.onosproject.yang.compiler.datamodel.javadatamodel.YangJavaModule;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGenerator;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGeneratorInfo;
+import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoTranslator;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaCodeFragmentFiles;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+
+import java.io.IOException;
+import java.util.ArrayList;
+
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_ALL_EVENT_CLASS_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
+import static org.onosproject.yang.compiler.translator.tojava.YangJavaModelUtils.generateCodeOfRootNode;
+import static org.onosproject.yang.compiler.translator.tojava.YangJavaModelUtils.generateInterfaceFileForNonDataNodes;
+import static org.onosproject.yang.compiler.translator.tojava.YangJavaModelUtils.isRootNodesCodeGenRequired;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaIdentifierSyntax.getRootPackage;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorErrorType.FAIL_AT_ENTRY;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorErrorType.FAIL_AT_EXIT;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorUtils.getErrorMsg;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SBI;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.removeEmptyDirectory;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.searchAndDeleteTempDir;
+
+/**
+ * Represents module information extended to support java code generation.
+ */
+public class YangJavaModuleTranslator
+ extends YangJavaModule
+ implements JavaCodeGeneratorInfo, JavaCodeGenerator {
+
+ private static final long serialVersionUID = 806201625L;
+
+ /**
+ * File handle to maintain temporary java code fragments as per the code
+ * snippet types.
+ */
+ private transient TempJavaCodeFragmentFiles tempFileHandle;
+
+ /**
+ * Creates a YANG node of module type.
+ */
+ public YangJavaModuleTranslator() {
+ setJavaFileInfo(new JavaFileInfoTranslator());
+ notificationNodes = new ArrayList<>();
+ getJavaFileInfo().setGeneratedFileTypes(
+ GENERATE_SERVICE_AND_MANAGER | GENERATE_INTERFACE_WITH_BUILDER);
+ }
+
+ /**
+ * Returns the generated java file information.
+ *
+ * @return generated java file information
+ */
+ @Override
+ public JavaFileInfoTranslator getJavaFileInfo() {
+ if (javaFileInfo == null) {
+ throw new TranslatorException(
+ "Missing java info in java datamodel node " + getName());
+ }
+ return (JavaFileInfoTranslator) javaFileInfo;
+ }
+
+ /**
+ * Sets the java file info object.
+ *
+ * @param javaInfo java file info object
+ */
+ @Override
+ public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
+ javaFileInfo = javaInfo;
+ }
+
+ /**
+ * Returns the temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ @Override
+ public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
+ return tempFileHandle;
+ }
+
+ /**
+ * Sets temporary file handle.
+ *
+ * @param fileHandle temporary file handle
+ */
+ @Override
+ public void setTempJavaCodeFragmentFiles(
+ TempJavaCodeFragmentFiles fileHandle) {
+ tempFileHandle = fileHandle;
+ }
+
+ /**
+ * Generates java code for module.
+ *
+ * @param yangPlugin YANG plugin config
+ * @throws TranslatorException when fails to generate the source files
+ */
+ @Override
+ public void generateCodeEntry(YangPluginConfig yangPlugin)
+ throws TranslatorException {
+ String modulePkg = getRootPackage(getVersion(), getModuleNamespace(),
+ getRevision(),
+ yangPlugin.getConflictResolver());
+
+ if (isNotificationChildNodePresent(this)) {
+ getJavaFileInfo().setGeneratedFileTypes(
+ getJavaFileInfo().getGeneratedFileTypes()
+ | GENERATE_ALL_EVENT_CLASS_MASK);
+ }
+ try {
+ generateCodeOfRootNode(this, yangPlugin, modulePkg);
+ //Add augmented rpc name
+ tempFileHandle.getServiceTempFiles().addAugmentedRpcMethod(this);
+ } catch (IOException e) {
+ throw new TranslatorException(getErrorMsg(FAIL_AT_ENTRY, this,
+ e.getLocalizedMessage()));
+ }
+ }
+
+ /**
+ * Creates a java file using the YANG module info.
+ */
+ @Override
+ public void generateCodeExit()
+ throws TranslatorException {
+ /*
+ * As part of the notification support the following files needs to be generated.
+ * 1) Subject of the notification(event), this is simple interface with builder class.
+ * 2) Event class extending "AbstractEvent" and defining event type enum.
+ * 3) Event listener interface extending "EventListener".
+ * 4) Event subject class.
+ *
+ * The manager class needs to extend the "ListenerRegistry".
+ */
+ try {
+ if ((getJavaFileInfo().getGeneratedFileTypes() &
+ GENERATE_ALL_EVENT_CLASS_MASK) != 0) {
+ getTempJavaCodeFragmentFiles().generateJavaFile(
+ GENERATE_ALL_EVENT_CLASS_MASK, this);
+ }
+
+ if (!isRootNodesCodeGenRequired(this)) {
+ if (getChild() != null) {
+ generateInterfaceFileForNonDataNodes(this);
+ }
+ } else {
+ getTempJavaCodeFragmentFiles()
+ .generateJavaFile(GENERATE_INTERFACE_WITH_BUILDER, this);
+ if (getJavaFileInfo().getPluginConfig()
+ .getCodeGenerateForSbi() == null ||
+ !getJavaFileInfo().getPluginConfig()
+ .getCodeGenerateForSbi().equals(SBI)) {
+ getTempJavaCodeFragmentFiles()
+ .generateJavaFile(GENERATE_SERVICE_AND_MANAGER, this);
+ }
+ }
+
+ searchAndDeleteTempDir(getJavaFileInfo().getBaseCodeGenPath() +
+ getJavaFileInfo().getPackageFilePath());
+ removeEmptyDirectory(getJavaFileInfo().getBaseCodeGenPath() +
+ getJavaFileInfo().getPackageFilePath());
+ } catch (IOException e) {
+ throw new TranslatorException(getErrorMsg(FAIL_AT_EXIT, this,
+ e.getLocalizedMessage()));
+ }
+ }
+
+ /**
+ * Adds to notification node list.
+ *
+ * @param curNode notification node
+ */
+ private void addToNotificationList(YangNode curNode) {
+ notificationNodes.add(curNode);
+ }
+
+ /**
+ * Checks if there is any notification node present.
+ *
+ * @param rootNode root node of the data model
+ * @return status of notification's existence
+ */
+ private boolean isNotificationChildNodePresent(YangNode rootNode) {
+ YangNode childNode = rootNode.getChild();
+
+ while (childNode != null) {
+ if (childNode instanceof YangNotification) {
+ addToNotificationList(childNode);
+ }
+ childNode = childNode.getNextSibling();
+ }
+
+ return !notificationNodes.isEmpty();
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaNotificationTranslator.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaNotificationTranslator.java
new file mode 100644
index 0000000..5d37e5a
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaNotificationTranslator.java
@@ -0,0 +1,192 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava.javamodel;
+
+import org.onosproject.yang.compiler.datamodel.RpcNotificationContainer;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.javadatamodel.YangJavaNotification;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGenerator;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGeneratorInfo;
+import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoContainer;
+import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoTranslator;
+import org.onosproject.yang.compiler.translator.tojava.JavaQualifiedTypeInfoTranslator;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaCodeFragmentFiles;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaCodeFragmentFilesContainer;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaServiceFragmentFiles;
+import org.onosproject.yang.compiler.translator.tojava.utils.JavaExtendsListHolder;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+
+import java.io.IOException;
+
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
+import static org.onosproject.yang.compiler.translator.tojava.YangJavaModelUtils.generateCodeOfAugmentableNode;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaIdentifierSyntax.getEnumJavaAttribute;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorErrorType.FAIL_AT_ENTRY;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorErrorType.FAIL_AT_EXIT;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorErrorType.INVALID_NODE;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorUtils.getErrorMsg;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EVENT_LISTENER_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EVENT_STRING;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getCapitalCase;
+
+/**
+ * Represents notification information extended to support java code generation.
+ */
+public class YangJavaNotificationTranslator
+ extends YangJavaNotification
+ implements JavaCodeGenerator, JavaCodeGeneratorInfo {
+
+ private static final long serialVersionUID = 806201624L;
+
+ /**
+ * File handle to maintain temporary java code fragments as per the code
+ * snippet types.
+ */
+ private transient TempJavaCodeFragmentFiles tempFileHandle;
+
+ /**
+ * Creates an instance of java Notification.
+ */
+ public YangJavaNotificationTranslator() {
+ setJavaFileInfo(new JavaFileInfoTranslator());
+ getJavaFileInfo().setGeneratedFileTypes(GENERATE_INTERFACE_WITH_BUILDER);
+ }
+
+ /**
+ * Returns the generated java file information.
+ *
+ * @return generated java file information
+ */
+ @Override
+ public JavaFileInfoTranslator getJavaFileInfo() {
+
+ if (javaFileInfo == null) {
+ throw new TranslatorException(getErrorMsg(INVALID_NODE, this));
+ }
+ return (JavaFileInfoTranslator) javaFileInfo;
+ }
+
+ /**
+ * Sets the java file info object.
+ *
+ * @param javaInfo java file info object
+ */
+ @Override
+ public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
+ javaFileInfo = javaInfo;
+ }
+
+ /**
+ * Returns the temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ @Override
+ public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
+ return tempFileHandle;
+ }
+
+ /**
+ * Sets temporary file handle.
+ *
+ * @param fileHandle temporary file handle
+ */
+ @Override
+ public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
+ tempFileHandle = fileHandle;
+ }
+
+ /**
+ * Prepare the information for java code generation corresponding to YANG
+ * notification info.
+ *
+ * @param yangPlugin YANG plugin config
+ * @throws TranslatorException translator operation fail
+ */
+ @Override
+ public void generateCodeEntry(YangPluginConfig yangPlugin)
+ throws TranslatorException {
+
+ // Obtain the notification name as per enum in notification.
+ String enumName = getEnumJavaAttribute(getName().toUpperCase());
+ ((RpcNotificationContainer) getParent())
+ .addToNotificationEnumMap(enumName, this);
+
+ /*
+ * As part of the notification support the following files needs to be
+ * generated.
+ * 1) Subject of the notification(event), this is simple interface with
+ * builder class.
+ * 2) Event class extending "AbstractEvent" and defining event type
+ * enum.
+ * 3) Event listener interface extending "EventListener".
+ *
+ * The manager class needs to extend the ListenerRegistry.
+ */
+
+ // Generate subject of the notification(event), this is simple interface
+ // with builder class.
+ try {
+ generateCodeOfAugmentableNode(this, yangPlugin);
+ addNotificationToExtendsList();
+ } catch (IOException e) {
+ throw new TranslatorException(getErrorMsg(FAIL_AT_ENTRY, this,
+ e.getLocalizedMessage()));
+ }
+ }
+
+ /*Adds current notification info to the extends list so its parents service*/
+ private void addNotificationToExtendsList() {
+ YangNode parent = getParent();
+ TempJavaServiceFragmentFiles tempFiles =
+ ((TempJavaCodeFragmentFilesContainer) parent).getTempJavaCodeFragmentFiles()
+ .getServiceTempFiles();
+ JavaExtendsListHolder holder = tempFiles.getJavaExtendsListHolder();
+ JavaQualifiedTypeInfoTranslator event =
+ new JavaQualifiedTypeInfoTranslator();
+
+ String parentInfo = getCapitalCase(((JavaFileInfoContainer) parent)
+ .getJavaFileInfo()
+ .getJavaName());
+ event.setClassInfo(parentInfo + EVENT_STRING);
+ event.setPkgInfo(getJavaFileInfo().getPackage());
+ holder.addToExtendsList(event, parent, tempFiles);
+
+ JavaQualifiedTypeInfoTranslator eventListener =
+ new JavaQualifiedTypeInfoTranslator();
+
+ eventListener.setClassInfo(parentInfo + EVENT_LISTENER_STRING);
+ eventListener.setPkgInfo(getJavaFileInfo().getPackage());
+ holder.addToExtendsList(eventListener, parent, tempFiles);
+ }
+
+ /**
+ * Creates a java file using the YANG notification info.
+ */
+ @Override
+ public void generateCodeExit()
+ throws TranslatorException {
+ try {
+ getTempJavaCodeFragmentFiles().generateJavaFile(
+ GENERATE_INTERFACE_WITH_BUILDER, this);
+ } catch (IOException e) {
+ throw new TranslatorException(getErrorMsg(FAIL_AT_EXIT, this,
+ e.getLocalizedMessage()));
+ }
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaOutputTranslator.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaOutputTranslator.java
new file mode 100644
index 0000000..d5c7f82
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaOutputTranslator.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava.javamodel;
+
+import org.onosproject.yang.compiler.datamodel.javadatamodel.YangJavaOutput;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGenerator;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGeneratorInfo;
+import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoTranslator;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaCodeFragmentFiles;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+
+import java.io.IOException;
+
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
+import static org.onosproject.yang.compiler.translator.tojava.YangJavaModelUtils.generateCodeOfAugmentableNode;
+
+/**
+ * Represents output information extended to support java code generation.
+ */
+public class YangJavaOutputTranslator
+ extends YangJavaOutput
+ implements JavaCodeGeneratorInfo, JavaCodeGenerator {
+
+ private static final long serialVersionUID = 806201623L;
+
+ /**
+ * File handle to maintain temporary java code fragments as per the code
+ * snippet types.
+ */
+ private transient TempJavaCodeFragmentFiles tempFileHandle;
+
+ /**
+ * Creates an instance of java output.
+ */
+ public YangJavaOutputTranslator() {
+ super();
+ setJavaFileInfo(new JavaFileInfoTranslator());
+ getJavaFileInfo().setGeneratedFileTypes(GENERATE_INTERFACE_WITH_BUILDER);
+ }
+
+ /**
+ * Returns the generated java file information.
+ *
+ * @return generated java file information
+ */
+ @Override
+ public JavaFileInfoTranslator getJavaFileInfo() {
+ if (javaFileInfo == null) {
+ throw new TranslatorException("missing java info in java datamodel node " +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition()
+ + " in " + getFileName());
+ }
+ return (JavaFileInfoTranslator) javaFileInfo;
+ }
+
+ /**
+ * Sets the java file info object.
+ *
+ * @param javaInfo java file info object
+ */
+ @Override
+ public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
+ javaFileInfo = javaInfo;
+ }
+
+ /**
+ * Returns the temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ @Override
+ public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
+ return tempFileHandle;
+ }
+
+ /**
+ * Sets temporary file handle.
+ *
+ * @param fileHandle temporary file handle
+ */
+ @Override
+ public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
+ tempFileHandle = fileHandle;
+ }
+
+ /**
+ * Prepare the information for java code generation corresponding to YANG
+ * output info.
+ *
+ * @param yangPlugin YANG plugin config
+ * @throws TranslatorException translator operation fail
+ */
+ @Override
+ public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
+ try {
+ generateCodeOfAugmentableNode(this, yangPlugin);
+ } catch (IOException e) {
+ throw new TranslatorException(
+ "Failed to prepare generate code entry for output node " +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition()
+ + " in " + getFileName() + " " + e.getLocalizedMessage());
+ }
+ }
+
+ /**
+ * Creates a java file using the YANG output info.
+ *
+ * @throws TranslatorException translator operation fail
+ */
+ @Override
+ public void generateCodeExit() throws TranslatorException {
+ try {
+ getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_INTERFACE_WITH_BUILDER, this);
+ } catch (IOException e) {
+ throw new TranslatorException(
+ "Failed to prepare generate code exit for output node " +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition()
+ + " in " + getFileName() + " " + e.getLocalizedMessage());
+ }
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaRpcTranslator.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaRpcTranslator.java
new file mode 100644
index 0000000..a23a7e4
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaRpcTranslator.java
@@ -0,0 +1,179 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava.javamodel;
+
+import org.onosproject.yang.compiler.datamodel.RpcNotificationContainer;
+import org.onosproject.yang.compiler.datamodel.YangInput;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangOutput;
+import org.onosproject.yang.compiler.datamodel.javadatamodel.YangJavaRpc;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+import org.onosproject.yang.compiler.translator.tojava.JavaAttributeInfo;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGenerator;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGeneratorInfo;
+import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoTranslator;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaCodeFragmentFiles;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaCodeFragmentFilesContainer;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaServiceFragmentFiles;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+
+import java.io.IOException;
+
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.getParentNodeInGenCode;
+import static org.onosproject.yang.compiler.translator.tojava.YangJavaModelUtils.updatePackageInfo;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorErrorType.FAIL_AT_EXIT;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorErrorType.INVALID_CHILD_NODE;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorErrorType.INVALID_PARENT_NODE;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorUtils.getErrorMsg;
+
+/**
+ * Represents rpc information extended to support java code generation.
+ */
+public class YangJavaRpcTranslator
+ extends YangJavaRpc
+ implements JavaCodeGenerator, JavaCodeGeneratorInfo {
+
+ private static final long serialVersionUID = 806201622L;
+
+ /**
+ * Temporary file for code generation.
+ */
+ private transient TempJavaCodeFragmentFiles tempJavaCodeFragmentFiles;
+
+ /**
+ * Creates an instance of YANG java rpc.
+ */
+ public YangJavaRpcTranslator() {
+ setJavaFileInfo(new JavaFileInfoTranslator());
+ }
+
+ /**
+ * Returns the generated java file information.
+ *
+ * @return generated java file information
+ */
+ @Override
+ public JavaFileInfoTranslator getJavaFileInfo() {
+
+ if (javaFileInfo == null) {
+ throw new TranslatorException("missing java info in java datamodel node " +
+ getName());
+ }
+ return (JavaFileInfoTranslator) javaFileInfo;
+ }
+
+ /**
+ * Sets the java file info object.
+ *
+ * @param javaInfo java file info object
+ */
+ @Override
+ public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
+ javaFileInfo = javaInfo;
+ }
+
+ @Override
+ public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
+ return tempJavaCodeFragmentFiles;
+ }
+
+ @Override
+ public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
+ tempJavaCodeFragmentFiles = fileHandle;
+ }
+
+ /**
+ * Prepares the information for java code generation corresponding to YANG
+ * RPC info.
+ *
+ * @param yangPlugin YANG plugin config
+ * @throws TranslatorException translator operations fails
+ */
+ @Override
+ public void generateCodeEntry(YangPluginConfig yangPlugin)
+ throws TranslatorException {
+
+ // Add package information for rpc and create corresponding folder.
+ updatePackageInfo(this, yangPlugin);
+ }
+
+ /**
+ * Creates a java file using the YANG RPC info.
+ *
+ * @throws TranslatorException translator operations fails
+ */
+ @Override
+ public void generateCodeExit()
+ throws TranslatorException {
+ // Get the parent module/sub-module.
+ YangNode parent = getParentNodeInGenCode(this);
+
+ // Parent should be holder of rpc or notification.
+ if (!(parent instanceof RpcNotificationContainer)) {
+ throw new TranslatorException(getErrorMsg(INVALID_PARENT_NODE,
+ this));
+ }
+
+ /*
+ * Create attribute info for input and output of rpc and add it to the
+ * parent import list.
+ */
+ TempJavaServiceFragmentFiles tempJavaFragmentFiles =
+ ((TempJavaCodeFragmentFilesContainer) getParent())
+ .getTempJavaCodeFragmentFiles()
+ .getServiceTempFiles();
+ JavaAttributeInfo javaAttributeInfoOfInput = null;
+ JavaAttributeInfo javaAttributeInfoOfOutput = null;
+
+ // Get the child input and output node and obtain create java attribute
+ // info.
+ YangNode yangNode = getChild();
+ while (yangNode != null) {
+ if (yangNode instanceof YangInput) {
+ javaAttributeInfoOfInput = tempJavaFragmentFiles
+ .getChildNodeAsAttributeInParentService(yangNode,
+ getParent(),
+ getJavaClassNameOrBuiltInType());
+ } else if (yangNode instanceof YangOutput) {
+ javaAttributeInfoOfOutput = tempJavaFragmentFiles
+ .getChildNodeAsAttributeInParentService(yangNode,
+ getParent(),
+ getJavaClassNameOrBuiltInType());
+ } else {
+ throw new TranslatorException(getErrorMsg(INVALID_CHILD_NODE,
+ this));
+ }
+ yangNode = yangNode.getNextSibling();
+ }
+
+ /*
+ * Add the rpc information to the parent's service temp file.
+ */
+ try {
+
+ ((TempJavaCodeFragmentFilesContainer) parent)
+ .getTempJavaCodeFragmentFiles().getServiceTempFiles()
+ .addJavaSnippetInfoToApplicableTempFiles(
+ javaAttributeInfoOfInput, javaAttributeInfoOfOutput,
+ getJavaClassNameOrBuiltInType());
+ } catch (IOException e) {
+ throw new TranslatorException(getErrorMsg(FAIL_AT_EXIT, this,
+ e.getLocalizedMessage()));
+ }
+ // No file will be generated during RPC exit.
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaSubModuleTranslator.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaSubModuleTranslator.java
new file mode 100644
index 0000000..5cee773
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaSubModuleTranslator.java
@@ -0,0 +1,228 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.translator.tojava.javamodel;
+
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNotification;
+import org.onosproject.yang.compiler.datamodel.javadatamodel.YangJavaSubModule;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGenerator;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGeneratorInfo;
+import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoTranslator;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaCodeFragmentFiles;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+
+import java.io.IOException;
+import java.util.ArrayList;
+
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_ALL_EVENT_CLASS_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
+import static org.onosproject.yang.compiler.translator.tojava.YangJavaModelUtils.generateCodeOfRootNode;
+import static org.onosproject.yang.compiler.translator.tojava.YangJavaModelUtils.generateInterfaceFileForNonDataNodes;
+import static org.onosproject.yang.compiler.translator.tojava.YangJavaModelUtils.isRootNodesCodeGenRequired;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaIdentifierSyntax.getRootPackage;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorErrorType.FAIL_AT_ENTRY;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorErrorType.FAIL_AT_EXIT;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorUtils.getErrorMsg;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SBI;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.removeEmptyDirectory;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.searchAndDeleteTempDir;
+
+/**
+ * Represents sub module information extended to support java code generation.
+ */
+public class YangJavaSubModuleTranslator
+ extends YangJavaSubModule
+ implements JavaCodeGeneratorInfo, JavaCodeGenerator {
+
+ private static final long serialVersionUID = 806201621L;
+
+ /**
+ * File handle to maintain temporary java code fragments as per the code snippet types.
+ */
+ private transient TempJavaCodeFragmentFiles tempFileHandle;
+
+ /**
+ * Creates YANG java sub module object.
+ */
+ public YangJavaSubModuleTranslator() {
+ setJavaFileInfo(new JavaFileInfoTranslator());
+ notificationNodes = new ArrayList<>();
+ int genType =
+ GENERATE_SERVICE_AND_MANAGER | GENERATE_INTERFACE_WITH_BUILDER;
+ if (isNotificationChildNodePresent(this)) {
+ genType = GENERATE_SERVICE_AND_MANAGER | GENERATE_ALL_EVENT_CLASS_MASK;
+ }
+ getJavaFileInfo().setGeneratedFileTypes(genType);
+ }
+
+ /**
+ * Returns the generated java file information.
+ *
+ * @return generated java file information
+ */
+ @Override
+ public JavaFileInfoTranslator getJavaFileInfo() {
+ if (javaFileInfo == null) {
+ throw new TranslatorException("Missing java info in java datamodel node " +
+ getName());
+ }
+ return (JavaFileInfoTranslator) javaFileInfo;
+ }
+
+ /**
+ * Sets the java file info object.
+ *
+ * @param javaInfo java file info object
+ */
+ @Override
+ public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
+ javaFileInfo = javaInfo;
+ }
+
+ /**
+ * Returns the temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ @Override
+ public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
+ return tempFileHandle;
+ }
+
+ /**
+ * Sets temporary file handle.
+ *
+ * @param fileHandle temporary file handle
+ */
+ @Override
+ public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
+ tempFileHandle = fileHandle;
+ }
+
+ /**
+ * Returns the name space of the module to which the sub module belongs to.
+ *
+ * @return the name space string of the module.
+ */
+ public String getNameSpaceFromModule() {
+ return ((YangModule) getBelongsTo().getModuleNode()).getModuleNamespace();
+ }
+
+ /**
+ * Prepares the information for java code generation corresponding to
+ * YANG submodule info.
+ *
+ * @param yangPlugin YANG plugin config
+ * @throws TranslatorException when fails to translate
+ */
+ @Override
+ public void generateCodeEntry(YangPluginConfig yangPlugin)
+ throws TranslatorException {
+ String subModulePkg = getRootPackage(
+ getVersion(), getNameSpaceFromModule(), getRevision(),
+ yangPlugin.getConflictResolver());
+
+ if (isNotificationChildNodePresent(this)) {
+ getJavaFileInfo().setGeneratedFileTypes(
+ getJavaFileInfo().getGeneratedFileTypes()
+ | GENERATE_ALL_EVENT_CLASS_MASK);
+ }
+ try {
+ generateCodeOfRootNode(this, yangPlugin, subModulePkg);
+ tempFileHandle.getServiceTempFiles().addAugmentedRpcMethod(
+ this);
+ } catch (IOException e) {
+ throw new TranslatorException(getErrorMsg(FAIL_AT_ENTRY, this,
+ e.getLocalizedMessage()));
+ }
+ }
+
+ /**
+ * Creates a java file using the YANG submodule info.
+ */
+ @Override
+ public void generateCodeExit()
+ throws TranslatorException {
+ /*
+ * As part of the notification support the following files needs to be generated.
+ * 1) Subject of the notification(event), this is simple interface with builder class.
+ * 2) Event class extending "AbstractEvent" and defining event type enum.
+ * 3) Event listener interface extending "EventListener".
+ * 4) Event subject class.
+ *
+ * The manager class needs to extend the "ListenerRegistry".
+ */
+ try {
+ if ((getJavaFileInfo().getGeneratedFileTypes() &
+ GENERATE_ALL_EVENT_CLASS_MASK) != 0) {
+ getTempJavaCodeFragmentFiles().generateJavaFile(
+ GENERATE_ALL_EVENT_CLASS_MASK, this);
+ }
+ if (!isRootNodesCodeGenRequired(this)) {
+ generateInterfaceFileForNonDataNodes(this);
+ } else {
+ getTempJavaCodeFragmentFiles()
+ .generateJavaFile(GENERATE_INTERFACE_WITH_BUILDER, this);
+ if (getJavaFileInfo().getPluginConfig()
+ .getCodeGenerateForSbi() == null ||
+ !getJavaFileInfo().getPluginConfig()
+ .getCodeGenerateForSbi().equals(SBI)) {
+ getTempJavaCodeFragmentFiles().generateJavaFile(
+ GENERATE_SERVICE_AND_MANAGER, this);
+ }
+ }
+
+ searchAndDeleteTempDir(getJavaFileInfo().getBaseCodeGenPath() +
+ getJavaFileInfo().getPackageFilePath());
+ removeEmptyDirectory(getJavaFileInfo().getBaseCodeGenPath() +
+ getJavaFileInfo().getPackageFilePath());
+ } catch (IOException e) {
+ throw new TranslatorException(getErrorMsg(FAIL_AT_EXIT, this,
+ e.getLocalizedMessage()));
+ }
+ }
+
+ /**
+ * Adds to notification node list.
+ *
+ * @param curNode notification node
+ */
+ private void addToNotificationList(YangNode curNode) {
+ notificationNodes.add(curNode);
+ }
+
+ /**
+ * Checks if there is any notification node present.
+ *
+ * @param rootNode root node of the data model
+ * @return status of notification's existence
+ */
+ private boolean isNotificationChildNodePresent(YangNode rootNode) {
+ YangNode childNode = rootNode.getChild();
+
+ while (childNode != null) {
+ if (childNode instanceof YangNotification) {
+ addToNotificationList(childNode);
+ }
+ childNode = childNode.getNextSibling();
+ }
+
+ return !notificationNodes.isEmpty();
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaTypeDefTranslator.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaTypeDefTranslator.java
new file mode 100644
index 0000000..d9efd0f
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaTypeDefTranslator.java
@@ -0,0 +1,162 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.translator.tojava.javamodel;
+
+import org.onosproject.yang.compiler.datamodel.YangDerivedInfo;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.javadatamodel.YangJavaTypeDef;
+import org.onosproject.yang.compiler.translator.exception.InvalidNodeForTranslatorException;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGenerator;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGeneratorInfo;
+import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoTranslator;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaCodeFragmentFiles;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+
+import java.io.IOException;
+
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.LEAFREF;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
+import static org.onosproject.yang.compiler.translator.tojava.YangJavaModelUtils.generateCodeOfNode;
+import static org.onosproject.yang.compiler.translator.tojava.YangJavaModelUtils.generateJava;
+
+/**
+ * Represents type define information extended to support java code generation.
+ */
+public class YangJavaTypeDefTranslator
+ extends YangJavaTypeDef
+ implements JavaCodeGeneratorInfo, JavaCodeGenerator {
+
+ private static final long serialVersionUID = 806201620L;
+
+ /**
+ * File handle to maintain temporary java code fragments as per the code
+ * snippet types.
+ */
+ private transient TempJavaCodeFragmentFiles tempFileHandle;
+
+ /**
+ * Creates a YANG java typedef object.
+ */
+ public YangJavaTypeDefTranslator() {
+ super();
+ setJavaFileInfo(new JavaFileInfoTranslator());
+ getJavaFileInfo().setGeneratedFileTypes(GENERATE_TYPEDEF_CLASS);
+ }
+
+ /**
+ * Returns the generated java file information.
+ *
+ * @return generated java file information
+ */
+ @Override
+ public JavaFileInfoTranslator getJavaFileInfo() {
+
+ if (javaFileInfo == null) {
+ throw new TranslatorException("Missing java info in java datamodel node " +
+ getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition()
+ + " in " + getFileName());
+ }
+ return (JavaFileInfoTranslator) javaFileInfo;
+ }
+
+ /**
+ * Sets the java file info object.
+ *
+ * @param javaInfo java file info object
+ */
+ @Override
+ public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
+ javaFileInfo = javaInfo;
+ }
+
+ /**
+ * Returns the temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ @Override
+ public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
+ return tempFileHandle;
+ }
+
+ /**
+ * Sets temporary file handle.
+ *
+ * @param fileHandle temporary file handle
+ */
+ @Override
+ public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
+ tempFileHandle = fileHandle;
+ }
+
+ /**
+ * Prepare the information for java code generation corresponding to YANG
+ * typedef info.
+ *
+ * @param yangPlugin YANG plugin config
+ * @throws TranslatorException when fails to translate
+ */
+ @Override
+ public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
+ if (getReferredSchema() != null) {
+ throw new InvalidNodeForTranslatorException();
+ }
+ // TODO update the below exception in all related places, remove file
+ // name and other information.
+ YangType typeInTypeDef = this.getTypeDefBaseType();
+ InvalidNodeForTranslatorException exception = new InvalidNodeForTranslatorException();
+ exception.setFileName(this.getFileName());
+ exception.setCharPosition(this.getCharPosition());
+ exception.setLine(this.getLineNumber());
+ if (typeInTypeDef.getDataType() == DERIVED) {
+ YangDerivedInfo derivedInfo = (YangDerivedInfo) typeInTypeDef.getDataTypeExtendedInfo();
+ if (derivedInfo.getEffectiveBuiltInType() == LEAFREF) {
+ throw exception;
+ }
+ } else if (typeInTypeDef.getDataType() == LEAFREF) {
+ throw exception;
+ }
+ try {
+ generateCodeOfNode(this, yangPlugin);
+ } catch (IOException e) {
+ throw new TranslatorException(
+ "Failed to prepare generate code entry for typedef node " + getName()
+ + "in " + getLineNumber() + " at " + getCharPosition() + " in " + getFileName()
+ + " " + e.getLocalizedMessage());
+ }
+ }
+
+ /**
+ * Create a java file using the YANG typedef info.
+ *
+ * @throws TranslatorException when fails to translate
+ */
+ @Override
+ public void generateCodeExit() throws TranslatorException {
+ try {
+ generateJava(GENERATE_TYPEDEF_CLASS, this);
+ } catch (IOException e) {
+ throw new TranslatorException(
+ "Failed to prepare generate code for typedef node " + getName()
+ + "in " + getLineNumber() + " at " + getCharPosition() + " in " + getFileName()
+ + " " + e.getLocalizedMessage());
+ }
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaTypeTranslator.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaTypeTranslator.java
new file mode 100644
index 0000000..f439c8d
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaTypeTranslator.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.translator.tojava.javamodel;
+
+import org.onosproject.yang.compiler.datamodel.javadatamodel.YangJavaType;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+import org.onosproject.yang.compiler.translator.tojava.JavaQualifiedTypeInfoTranslator;
+import org.onosproject.yang.compiler.utils.io.YangToJavaNamingConflictUtil;
+
+import static org.onosproject.yang.compiler.translator.tojava.javamodel.AttributesJavaDataType.getJavaDataType;
+import static org.onosproject.yang.compiler.translator.tojava.javamodel.AttributesJavaDataType.getJavaImportClass;
+import static org.onosproject.yang.compiler.translator.tojava.javamodel.AttributesJavaDataType.getJavaImportPackage;
+
+/**
+ * Represents java information corresponding to the YANG type.
+ */
+public class YangJavaTypeTranslator
+ extends YangJavaType
+ implements JavaQualifiedTypeResolver {
+
+ /**
+ * Create a YANG leaf object with java qualified access details.
+ */
+ public YangJavaTypeTranslator() {
+ super();
+ setJavaQualifiedInfo(new JavaQualifiedTypeInfoTranslator());
+ }
+
+ @Override
+ public void updateJavaQualifiedInfo(YangToJavaNamingConflictUtil conflictResolver) {
+ JavaQualifiedTypeInfoTranslator importInfo = (JavaQualifiedTypeInfoTranslator) getJavaQualifiedInfo();
+
+ /*
+ * Type is added as an attribute in the class.
+ */
+ String className = getJavaImportClass(this, false, conflictResolver);
+ if (className != null) {
+ /*
+ * Corresponding to the attribute type a class needs to be imported,
+ * since it can be a derived type or a usage of wrapper classes.
+ */
+ importInfo.setClassInfo(className);
+ String classPkg = getJavaImportPackage(this,
+ false, conflictResolver);
+ if (classPkg == null) {
+ throw new TranslatorException("import package cannot be null when the class is used " +
+ getDataTypeName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition()
+ + " in " + getFileName());
+ }
+ importInfo.setPkgInfo(classPkg);
+ } else {
+ /*
+ * The attribute does not need a class to be imported, for example
+ * built in java types.
+ */
+ String dataTypeName = getJavaDataType(this);
+ if (dataTypeName == null) {
+ throw new TranslatorException("not supported data type " +
+ getDataTypeName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition()
+ + " in " + getFileName());
+ }
+ importInfo.setClassInfo(dataTypeName);
+ }
+ setJavaQualifiedInfo(importInfo);
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaUnionTranslator.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaUnionTranslator.java
new file mode 100644
index 0000000..6d65ded
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaUnionTranslator.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.translator.tojava.javamodel;
+
+import org.onosproject.yang.compiler.datamodel.javadatamodel.YangJavaUnion;
+import org.onosproject.yang.compiler.translator.exception.InvalidNodeForTranslatorException;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGenerator;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGeneratorInfo;
+import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoTranslator;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaCodeFragmentFiles;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+
+import java.io.IOException;
+
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
+import static org.onosproject.yang.compiler.translator.tojava.YangJavaModelUtils.generateCodeOfNode;
+import static org.onosproject.yang.compiler.translator.tojava.YangJavaModelUtils.generateJava;
+
+/**
+ * Represents union information extended to support java code generation.
+ */
+public class YangJavaUnionTranslator
+ extends YangJavaUnion
+ implements JavaCodeGeneratorInfo, JavaCodeGenerator {
+
+ private static final long serialVersionUID = 806201619L;
+
+ /**
+ * File handle to maintain temporary java code fragments as per the code
+ * snippet types.
+ */
+ private transient TempJavaCodeFragmentFiles tempFileHandle;
+
+ /**
+ * Creates an instance of YANG java union.
+ */
+ public YangJavaUnionTranslator() {
+ super();
+ setJavaFileInfo(new JavaFileInfoTranslator());
+ getJavaFileInfo().setGeneratedFileTypes(GENERATE_UNION_CLASS);
+ }
+
+ /**
+ * Returns the generated java file information.
+ *
+ * @return generated java file information
+ */
+ @Override
+ public JavaFileInfoTranslator getJavaFileInfo() {
+ if (javaFileInfo == null) {
+ throw new RuntimeException("Missing java info in java datamodel node " + getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition()
+ + " in " + getFileName());
+ }
+ return (JavaFileInfoTranslator) javaFileInfo;
+ }
+
+ /**
+ * Sets the java file info object.
+ *
+ * @param javaInfo java file info object
+ */
+ @Override
+ public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
+ javaFileInfo = javaInfo;
+ }
+
+ /**
+ * Returns the temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ @Override
+ public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
+ return tempFileHandle;
+ }
+
+ /**
+ * Sets temporary file handle.
+ *
+ * @param fileHandle temporary file handle
+ */
+ @Override
+ public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
+ tempFileHandle = fileHandle;
+ }
+
+ /**
+ * Prepare the information for java code generation corresponding to YANG
+ * union info.
+ *
+ * @param yangPlugin YANG plugin config
+ * @throws TranslatorException when fails to translate
+ */
+ @Override
+ public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
+ try {
+ if (getReferredSchema() != null) {
+ throw new InvalidNodeForTranslatorException();
+ }
+ generateCodeOfNode(this, yangPlugin);
+ } catch (IOException e) {
+ throw new TranslatorException(
+ "Failed to prepare generate code entry for union node " + getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition()
+ + " in " + getFileName() + " " + e.getLocalizedMessage());
+ }
+ }
+
+ /**
+ * Creates a java file using the YANG union info.
+ *
+ * @throws TranslatorException when fails to translate
+ */
+ @Override
+ public void generateCodeExit() throws TranslatorException {
+ try {
+ generateJava(GENERATE_UNION_CLASS, this);
+ } catch (IOException e) {
+ throw new TranslatorException("Failed to generate code for union node " + getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition()
+ + " in " + getFileName() + " " + e.getLocalizedMessage());
+ }
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaUsesTranslator.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaUsesTranslator.java
new file mode 100644
index 0000000..7176167
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/YangJavaUsesTranslator.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.translator.tojava.javamodel;
+
+import org.onosproject.yang.compiler.datamodel.javadatamodel.YangJavaUses;
+import org.onosproject.yang.compiler.translator.exception.InvalidNodeForTranslatorException;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGenerator;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGeneratorInfo;
+import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoTranslator;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaCodeFragmentFiles;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+
+/**
+ * Represents uses information extended to support java code generation.
+ */
+public class YangJavaUsesTranslator
+ extends YangJavaUses
+ implements JavaCodeGeneratorInfo, JavaCodeGenerator {
+
+ private static final long serialVersionUID = 806201618L;
+
+ /**
+ * File handle to maintain temporary java code fragments as per the code
+ * snippet types.
+ */
+ private transient TempJavaCodeFragmentFiles tempFileHandle;
+
+ /**
+ * Creates YANG java uses object.
+ */
+ public YangJavaUsesTranslator() {
+ super();
+ setJavaFileInfo(new JavaFileInfoTranslator());
+ }
+
+ /**
+ * Returns the generated java file information.
+ *
+ * @return generated java file information
+ */
+ @Override
+ public JavaFileInfoTranslator getJavaFileInfo() {
+ if (javaFileInfo == null) {
+ throw new TranslatorException("Missing java info in java datamodel node " + getName() + " in " +
+ getLineNumber() + " at " +
+ getCharPosition()
+ + " in " + getFileName());
+ }
+ return (JavaFileInfoTranslator) javaFileInfo;
+ }
+
+ /**
+ * Sets the java file info object.
+ *
+ * @param javaInfo java file info object
+ */
+ @Override
+ public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
+ javaFileInfo = javaInfo;
+ }
+
+ /**
+ * Returns the temporary file handle.
+ *
+ * @return temporary file handle
+ */
+ @Override
+ public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
+ return tempFileHandle;
+ }
+
+ /**
+ * Sets temporary file handle.
+ *
+ * @param fileHandle temporary file handle
+ */
+ @Override
+ public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
+ tempFileHandle = fileHandle;
+ }
+
+ @Override
+ public void generateCodeEntry(YangPluginConfig yangPlugin)
+ throws TranslatorException {
+ InvalidNodeForTranslatorException exception = new InvalidNodeForTranslatorException();
+ exception.setFileName(this.getFileName());
+ exception.setCharPosition(this.getCharPosition());
+ exception.setLine(this.getLineNumber());
+ throw exception;
+ }
+
+ @Override
+ public void generateCodeExit()
+ throws TranslatorException {
+ /*
+ * Do nothing.
+ */
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/package-info.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/package-info.java
new file mode 100644
index 0000000..8f52890
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/javamodel/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+/**
+ * Maintains application's schema mapped to java classes / interfaces.
+ */
+package org.onosproject.yang.compiler.translator.tojava.javamodel;
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/package-info.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/package-info.java
new file mode 100644
index 0000000..72ee575
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+/**
+ * Generates java class definition from data model.
+ */
+package org.onosproject.yang.compiler.translator.tojava;
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/BracketType.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/BracketType.java
new file mode 100644
index 0000000..2b78eac
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/BracketType.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava.utils;
+
+/**
+ * Represents different bracket types.
+ */
+enum BracketType {
+
+ //Open close bracket '()'.
+ OPEN_CLOSE_BRACKET,
+
+ //Open close bracket with value '(value)).
+ OPEN_CLOSE_BRACKET_WITH_VALUE,
+
+ //Open close bracket with value '(String value)).
+ OPEN_CLOSE_BRACKET_WITH_VALUE_AND_RETURN_TYPE,
+
+ //Open close bracket with value '(String value,.
+ OPEN_BRACKET_WITH_VALUE,
+
+ //Open close bracket with value ',String value)).
+ CLOSE_BRACKET_WITH_VALUE,
+
+ //Open close diamond bracket '<>'.
+ OPEN_CLOSE_DIAMOND,
+
+ //Open close diamond bracket with value '<String>'
+ OPEN_CLOSE_DIAMOND_WITH_VALUE
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/ClassDefinitionGenerator.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/ClassDefinitionGenerator.java
new file mode 100644
index 0000000..115d220
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/ClassDefinitionGenerator.java
@@ -0,0 +1,475 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava.utils;
+
+import org.onosproject.yang.compiler.datamodel.RpcNotificationContainer;
+import org.onosproject.yang.compiler.datamodel.YangAugment;
+import org.onosproject.yang.compiler.datamodel.YangCase;
+import org.onosproject.yang.compiler.datamodel.YangIdentity;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNotification;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoContainer;
+import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoTranslator;
+import org.onosproject.yang.compiler.translator.tojava.JavaQualifiedTypeInfoTranslator;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaCodeFragmentFilesContainer;
+
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.DEFAULT_CLASS_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_IDENTITY_CLASS;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_KEY_CLASS;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.utils.BracketType.OPEN_CLOSE_DIAMOND_WITH_VALUE;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.brackets;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getBuilderImplStringClassDef;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getDefaultDefinition;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getDefaultDefinitionWithExtends;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getDefaultDefinitionWithImpl;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getDefaultName;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getDefinitionWithImplements;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getErrorMsg;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getEventExtendsString;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getSpecificModifier;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getSuffixedName;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ABSTRACT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ABSTRACT_EVENT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BUILDER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.CLASS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.COMMA;
+import static org.onosproject.yang.compiler.utils.UtilConstants.COMPARABLE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.DEFAULT_CAPS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EMPTY_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ENUM;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ERROR_MSG_JAVA_IDENTITY;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EVENT_LISTENER_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EVENT_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EVENT_TYPE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EXTEND;
+import static org.onosproject.yang.compiler.utils.UtilConstants.FINAL;
+import static org.onosproject.yang.compiler.utils.UtilConstants.IMPLEMENTS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.INTERFACE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.LISTENER_SERVICE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.NEW_LINE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OPEN_CURLY_BRACKET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OP_PARAM;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PERIOD;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PUBLIC;
+import static org.onosproject.yang.compiler.utils.UtilConstants.REGEX_FOR_ANY_STRING_ENDING_WITH_SERVICE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SERVICE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SPACE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.STATIC;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SUBJECT;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getCapitalCase;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.trimAtLast;
+
+/**
+ * Represents generator for class definition of generated files.
+ */
+final class ClassDefinitionGenerator {
+
+ /**
+ * Creates an instance of class definition generator.
+ */
+ private ClassDefinitionGenerator() {
+ }
+
+ /**
+ * Based on the file type and the YANG name of the file, generate the class
+ * / interface definition start.
+ *
+ * @param genFileTypes generated file type
+ * @param yangName class name
+ * @return class definition
+ */
+ static String generateClassDefinition(int genFileTypes, String yangName) {
+
+ /*
+ * Based on the file type and the YANG name of the file, generate the
+ * class / interface definition start.
+ */
+ switch (genFileTypes) {
+ case GENERATE_TYPEDEF_CLASS:
+ case GENERATE_UNION_CLASS:
+ return getTypeClassDefinition(yangName);
+ case GENERATE_ENUM_CLASS:
+ return getEnumClassDefinition(yangName);
+ default:
+ return null;
+ }
+ }
+
+ /**
+ * Based on the file type and the YANG name of the file, generate the class
+ * / interface definition start.
+ *
+ * @param genFileTypes generated file type
+ * @param yangName class name
+ * @param curNode current YANG node
+ * @return class definition
+ */
+ static String generateClassDefinition(int genFileTypes, String yangName,
+ YangNode curNode) {
+ /*
+ * Based on the file type and the YANG name of the file, generate the
+ * class / interface definition start.
+ */
+ switch (genFileTypes) {
+ case INTERFACE_MASK:
+ return getInterfaceDefinition(yangName, curNode);
+ case BUILDER_CLASS_MASK:
+ return getBuilderClassDefinition(yangName, curNode);
+ case DEFAULT_CLASS_MASK:
+ return getImplClassDefinition(yangName, curNode);
+ case BUILDER_INTERFACE_MASK:
+ return getBuilderInterfaceDefinition(yangName, curNode);
+ case GENERATE_SERVICE_AND_MANAGER:
+ return getRpcInterfaceDefinition(yangName, curNode);
+ case GENERATE_EVENT_CLASS:
+ String eventName = yangName + SUBJECT;
+ return getEventDefinition(yangName, eventName);
+ case GENERATE_EVENT_LISTENER_INTERFACE:
+ return getEventListenerDefinition(yangName);
+ case GENERATE_KEY_CLASS:
+ return getKeyClassDefinition(yangName);
+ case GENERATE_EVENT_SUBJECT_CLASS:
+ return getClassDefinition(yangName);
+ case GENERATE_IDENTITY_CLASS:
+ return getIdentityClassDefinition(yangName, curNode);
+ default:
+ return null;
+ }
+ }
+
+ /**
+ * Returns enum file class definition.
+ *
+ * @param yangName class name
+ * @return enum file class definition
+ */
+ private static String getEnumClassDefinition(String yangName) {
+ return getDefaultDefinition(ENUM, yangName, PUBLIC);
+ }
+
+ /**
+ * Returns interface file class definition.
+ *
+ * @param yangName file name
+ * @return definition
+ */
+ private static String getInterfaceDefinition(String yangName,
+ YangNode curNode) {
+
+ String clsDef = getClassDefinitionForWhenExtended(curNode, yangName,
+ INTERFACE_MASK);
+ if (clsDef != null) {
+ return clsDef;
+ }
+ return getDefaultDefinition(INTERFACE, yangName, PUBLIC);
+ }
+
+ /**
+ * Returns builder interface file class definition.
+ *
+ * @param yangName java class name, corresponding to which the builder
+ * class is being generated
+ * @return definition
+ */
+ private static String getBuilderInterfaceDefinition(String yangName,
+ YangNode curNode) {
+ if (!(curNode instanceof YangCase) &&
+ !(curNode instanceof YangAugment)) {
+ String clsDef = getClassDefinitionForWhenExtended(
+ curNode, yangName, BUILDER_INTERFACE_MASK);
+ if (clsDef != null) {
+ return clsDef;
+ }
+ }
+ return getDefaultDefinition(INTERFACE, getSuffixedName(yangName, BUILDER),
+ null);
+ }
+
+ /**
+ * Returns builder file class definition.
+ *
+ * @param yangName file name
+ * @return definition
+ */
+ private static String getBuilderClassDefinition(String yangName,
+ YangNode curNode) {
+ String mod = getSpecificModifier(PUBLIC, STATIC);
+ String bName = getSuffixedName(yangName, BUILDER);
+ if (!(curNode instanceof YangCase)) {
+ String clsDef = getClassDefinitionForWhenExtended(curNode, yangName,
+ BUILDER_CLASS_MASK);
+ if (clsDef != null) {
+ return clsDef;
+ }
+ }
+ return getDefaultDefinitionWithImpl(CLASS, bName, mod,
+ getBuilderImplStringClassDef(yangName));
+ }
+
+ /**
+ * Returns impl file class definition.
+ *
+ * @param yangName file name
+ * @return definition
+ */
+ private static String getImplClassDefinition(String yangName,
+ YangNode curNode) {
+ if (!(curNode instanceof YangCase)) {
+ String clsDef = getClassDefinitionForWhenExtended(
+ curNode, yangName, DEFAULT_CLASS_MASK);
+ if (clsDef != null) {
+ return clsDef;
+ }
+ }
+ if (curNode instanceof RpcNotificationContainer) {
+ return getDefaultDefinitionWithImpl(
+ CLASS, getSuffixedName(yangName, OP_PARAM), PUBLIC, yangName);
+ }
+ return getDefaultDefinitionWithImpl(CLASS, getDefaultName(yangName),
+ PUBLIC, yangName);
+ }
+
+ /**
+ * Returns impl file class definition.
+ *
+ * @param yangName file name
+ * @return definition
+ */
+ private static String getClassDefinition(String yangName) {
+ return getDefaultDefinition(CLASS, yangName, PUBLIC);
+ }
+
+ /**
+ * Returns impl file class definition.
+ *
+ * @param yangName file name
+ * @return definition
+ */
+ private static String getKeyClassDefinition(String yangName) {
+ String compareName = COMPARABLE + brackets(
+ OPEN_CLOSE_DIAMOND_WITH_VALUE, yangName, null);
+ return getDefinitionWithImplements(CLASS, yangName, PUBLIC, compareName);
+ }
+
+ /**
+ * Returns implementation file identity class definition.
+ *
+ * @param yangName file name
+ * @return identity class definition
+ */
+ private static String getIdentityClassDefinition(String yangName, YangNode curNode) {
+ String error = getErrorMsg(ERROR_MSG_JAVA_IDENTITY, curNode.getName(),
+ curNode.getLineNumber(), curNode
+ .getCharPosition(), curNode
+ .getFileName());
+ if (!(curNode instanceof YangIdentity)) {
+ throw new TranslatorException(error);
+ }
+ YangIdentity identity = (YangIdentity) curNode;
+ String mod = getSpecificModifier(PUBLIC, ABSTRACT);
+ if (identity.getBaseNode() != null) {
+ YangIdentity baseIdentity = identity.getBaseNode().getReferredIdentity();
+ if (baseIdentity == null) {
+ throw new TranslatorException(error);
+ }
+
+ JavaFileInfoTranslator fileInfo = ((JavaFileInfoContainer) baseIdentity)
+ .getJavaFileInfo();
+ return getDefaultDefinitionWithExtends(
+ CLASS, yangName, mod, getCapitalCase(fileInfo.getJavaName()));
+ }
+ return getDefaultDefinition(CLASS, yangName, mod);
+ }
+
+ /**
+ * Returns type file class definition.
+ *
+ * @param yangName file name
+ * @return definition
+ */
+ private static String getTypeClassDefinition(String yangName) {
+ return getDefaultDefinition(CLASS, yangName,
+ getSpecificModifier(PUBLIC, FINAL));
+ }
+
+ /**
+ * Returns RPC file interface definition.
+ *
+ * @param yangName file name
+ * @param curNode current YANG node
+ * @return definition
+ */
+ private static String getRpcInterfaceDefinition(String yangName, YangNode curNode) {
+ JavaExtendsListHolder holder = ((TempJavaCodeFragmentFilesContainer) curNode)
+ .getTempJavaCodeFragmentFiles().getServiceTempFiles()
+ .getJavaExtendsListHolder();
+ if (holder.getExtendsList() != null && !holder.getExtendsList().isEmpty()) {
+ curNode = curNode.getChild();
+ while (curNode != null) {
+ if (curNode instanceof YangNotification) {
+ return getRpcInterfaceDefinitionWhenItExtends(yangName);
+ }
+ curNode = curNode.getNextSibling();
+ }
+ }
+ if (yangName.matches(REGEX_FOR_ANY_STRING_ENDING_WITH_SERVICE)) {
+ return getDefaultDefinition(INTERFACE, yangName, PUBLIC);
+ }
+ String name = getSuffixedName(
+ yangName.substring(0, yangName.length() - 7), SERVICE);
+ return getDefaultDefinitionWithImpl(CLASS, yangName, PUBLIC, name);
+ }
+
+ /* Provides class definition when RPC interface needs to extends any event.*/
+ private static String getRpcInterfaceDefinitionWhenItExtends(String yangName) {
+
+ StringBuilder newString = new StringBuilder(yangName);
+ newString.replace(yangName.lastIndexOf(SERVICE), yangName
+ .lastIndexOf(SERVICE) + 7, EMPTY_STRING);
+ return getDefaultDefinitionWithExtends(
+ INTERFACE, yangName, PUBLIC, getEventExtendsString(
+ getSuffixedName(newString.toString(), EVENT_STRING),
+ LISTENER_SERVICE, getSuffixedName(newString.toString(),
+ EVENT_LISTENER_STRING)));
+ }
+
+ /**
+ * Returns event class definition.
+ *
+ * @param javaName file name
+ * @return definition
+ */
+ private static String getEventDefinition(String javaName, String eventName) {
+ return getDefaultDefinitionWithExtends(
+ CLASS, javaName, PUBLIC, getEventExtendsString(
+ getSuffixedName(javaName, EVENT_TYPE), ABSTRACT_EVENT,
+ eventName));
+ }
+
+ /**
+ * Returns event listener interface definition.
+ *
+ * @param javaName file name
+ * @return definition
+ */
+ private static String getEventListenerDefinition(String javaName) {
+
+ String name = javaName.substring(0, javaName.length() - 8);
+ return getDefaultDefinitionWithExtends(
+ INTERFACE, javaName, PUBLIC, EVENT_LISTENER_STRING +
+ brackets(OPEN_CLOSE_DIAMOND_WITH_VALUE, name, null));
+ }
+
+ /**
+ * Returns class definition when class is extending another class.
+ *
+ * @param curNode current node
+ * @param yangName name
+ * @param genFileTypes gen file type
+ * @return class definition
+ */
+ private static String getClassDefinitionForWhenExtended(
+ YangNode curNode, String yangName, int genFileTypes) {
+ JavaExtendsListHolder holder = ((TempJavaCodeFragmentFilesContainer) curNode)
+ .getTempJavaCodeFragmentFiles().getBeanTempFiles()
+ .getJavaExtendsListHolder();
+ StringBuilder def = new StringBuilder();
+ if (holder.getExtendsList() != null && !holder.getExtendsList().isEmpty()) {
+ def.append(PUBLIC).append(SPACE);
+ switch (genFileTypes) {
+ case INTERFACE_MASK:
+ def.append(INTERFACE).append(SPACE).append(yangName)
+ .append(SPACE).append(EXTEND).append(SPACE);
+ def = new StringBuilder(getDefinitionString(def.toString(),
+ holder));
+ break;
+ case BUILDER_INTERFACE_MASK:
+ def.append(INTERFACE)
+ .append(SPACE).append(yangName).append(BUILDER)
+ .append(SPACE).append(EXTEND).append(SPACE);
+ def = new StringBuilder(getDefinitionString(
+ def.toString(), holder));
+ break;
+ case BUILDER_CLASS_MASK:
+ def.append(STATIC).append(SPACE).append(CLASS)
+ .append(SPACE).append(yangName).append(BUILDER)
+ .append(SPACE).append(EXTEND).append(SPACE);
+ def = new StringBuilder(getDefinitionString(def.toString(),
+ holder));
+ def.append(SPACE).append(IMPLEMENTS).append(SPACE)
+ .append(yangName).append(PERIOD)
+ .append(yangName).append(BUILDER);
+ break;
+ case DEFAULT_CLASS_MASK:
+ if (curNode instanceof RpcNotificationContainer) {
+ def.append(CLASS).append(SPACE).append(yangName)
+ .append(OP_PARAM).append(SPACE).append(EXTEND)
+ .append(SPACE);
+ } else {
+ def.append(CLASS).append(SPACE).append(DEFAULT_CAPS)
+ .append(yangName).append(SPACE).append(EXTEND)
+ .append(SPACE);
+ }
+ def = new StringBuilder(getDefinitionString(def.toString(),
+ holder));
+ def.append(SPACE).append(IMPLEMENTS).append(SPACE)
+ .append(yangName);
+ break;
+ default:
+ return null;
+ }
+ return def.append(SPACE).append(OPEN_CURLY_BRACKET)
+ .append(NEW_LINE).toString();
+ }
+ return null;
+ }
+
+ /**
+ * Returns updated class definition.
+ *
+ * @param def current definition
+ * @param holder extend list holder
+ * @return updated class definition
+ */
+ private static String getDefinitionString(String def,
+ JavaExtendsListHolder holder) {
+ StringBuilder builder = new StringBuilder(def);
+ String str;
+ for (JavaQualifiedTypeInfoTranslator info : holder.getExtendsList()) {
+ if (!holder.getExtendedClassStore().get(info)) {
+ str = info.getClassInfo() + COMMA + SPACE;
+ } else {
+ str = info.getPkgInfo() + PERIOD + info.getClassInfo() +
+ COMMA + SPACE;
+ }
+ builder.append(str);
+ }
+ def = builder.toString();
+ return trimAtLast(def, COMMA);
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/IndentationType.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/IndentationType.java
new file mode 100644
index 0000000..0eb34af
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/IndentationType.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava.utils;
+
+/**
+ * Represents indentation type.
+ */
+public enum IndentationType {
+
+ //Four space indentation.
+ FOUR_SPACE,
+
+ //Eight space indentation.
+ EIGHT_SPACE,
+
+ //Twelve space indentation.
+ TWELVE_SPACE,
+
+ //Sixteen space indentation.
+ SIXTEEN_SPACE,
+
+ //Twenty space indentation.
+ TWENTY_SPACE,
+
+ //Twenty four space indentation.
+ TWENTY_FOUR_SPACE,
+
+ //Twenty eight space indentation.
+ TWENTY_EIGHT_SPACE
+
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/JavaCodeSnippetGen.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/JavaCodeSnippetGen.java
new file mode 100644
index 0000000..810123c
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/JavaCodeSnippetGen.java
@@ -0,0 +1,453 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava.utils;
+
+import org.onosproject.yang.compiler.datamodel.YangCompilerAnnotation;
+import org.onosproject.yang.compiler.datamodel.YangDataStructure;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGeneratorInfo;
+import org.onosproject.yang.compiler.translator.tojava.JavaQualifiedTypeInfoTranslator;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaServiceFragmentFiles;
+import org.onosproject.yang.compiler.utils.UtilConstants.Operation;
+
+import java.util.List;
+
+import static java.util.Collections.sort;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaIdentifierSyntax.getEnumJavaAttribute;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getYangDataStructure;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getDefaultDefinition;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getImportString;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getOpenCloseParaWithValue;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.signatureClose;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BIT_SET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.COMMA;
+import static org.onosproject.yang.compiler.utils.UtilConstants.DIAMOND_CLOSE_BRACKET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.DIAMOND_OPEN_BRACKET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EMPTY_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ENUM;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EQUAL;
+import static org.onosproject.yang.compiler.utils.UtilConstants.FOUR_SPACE_INDENTATION;
+import static org.onosproject.yang.compiler.utils.UtilConstants.HASH_MAP;
+import static org.onosproject.yang.compiler.utils.UtilConstants.INT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.INT_MAX_RANGE_ATTR;
+import static org.onosproject.yang.compiler.utils.UtilConstants.INT_MIN_RANGE_ATTR;
+import static org.onosproject.yang.compiler.utils.UtilConstants.KEYS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.LIST;
+import static org.onosproject.yang.compiler.utils.UtilConstants.LONG_MAX_RANGE_ATTR;
+import static org.onosproject.yang.compiler.utils.UtilConstants.LONG_MIN_RANGE_ATTR;
+import static org.onosproject.yang.compiler.utils.UtilConstants.MAP;
+import static org.onosproject.yang.compiler.utils.UtilConstants.NEW;
+import static org.onosproject.yang.compiler.utils.UtilConstants.NEW_LINE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OPEN_CLOSE_BRACKET_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OPEN_CLOSE_DIAMOND_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PERIOD;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PRIVATE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PUBLIC;
+import static org.onosproject.yang.compiler.utils.UtilConstants.QUEUE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.QUOTES;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SCHEMA_NAME;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SELECT_LEAF;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SEMI_COLON;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SET_VALUE_PARA;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SHORT_MAX_RANGE_ATTR;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SHORT_MIN_RANGE_ATTR;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SPACE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.STRING_DATA_TYPE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.TYPE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.UINT8_MAX_RANGE_ATTR;
+import static org.onosproject.yang.compiler.utils.UtilConstants.UINT8_MIN_RANGE_ATTR;
+import static org.onosproject.yang.compiler.utils.UtilConstants.UINT_MAX_RANGE_ATTR;
+import static org.onosproject.yang.compiler.utils.UtilConstants.UINT_MIN_RANGE_ATTR;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ULONG_MAX_RANGE_ATTR;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ULONG_MIN_RANGE_ATTR;
+import static org.onosproject.yang.compiler.utils.UtilConstants.VALUE_LEAF;
+import static org.onosproject.yang.compiler.utils.UtilConstants.YANG_AUGMENTED_INFO_MAP;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.ENUM_ATTRIBUTE;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.enumJavaDocForInnerClass;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.getJavaDoc;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.trimAtLast;
+
+/**
+ * Represents utility class to generate the java snippet.
+ */
+public final class JavaCodeSnippetGen {
+
+ // No instantiation.
+ private JavaCodeSnippetGen() {
+ }
+
+ /**
+ * Returns the java file header comment.
+ *
+ * @return the java file header comment
+ */
+ public static String getFileHeaderComment() {
+
+ /*
+ * TODO return the file header.
+ */
+ return null;
+ }
+
+ /**
+ * Returns the textual java code information corresponding to the import
+ * list.
+ *
+ * @param importInfo import info
+ * @return the textual java code information corresponding to the import
+ * list
+ */
+ static String getImportText(JavaQualifiedTypeInfoTranslator importInfo) {
+ return getImportString(importInfo.getPkgInfo(), importInfo
+ .getClassInfo());
+ }
+
+ /**
+ * Returns the textual java code for attribute definition in class.
+ *
+ * @param typePkg Package of the attribute type
+ * @param attrType java attribute type
+ * @param attrName name of the attribute
+ * @param isList is list attribute
+ * @param accessType attribute access type
+ * @param annotation compiler annotation
+ * @return the textual java code for attribute definition in class
+ */
+ public static String getJavaAttributeDefinition(String typePkg,
+ String attrType,
+ String attrName,
+ boolean isList,
+ String accessType,
+ YangCompilerAnnotation annotation) {
+ StringBuilder attrDef = new StringBuilder(FOUR_SPACE_INDENTATION);
+ attrDef.append(accessType).append(SPACE);
+
+ if (!isList) {
+ if (typePkg != null) {
+ attrDef.append(typePkg).append(PERIOD);
+ }
+
+ attrDef.append(attrType).append(SPACE)
+ .append(attrName);
+ //Initialize select leaf/value leaf/ augment map attribute.
+ if (attrName.equals(SELECT_LEAF) || attrName.equals(VALUE_LEAF)) {
+ attrDef.append(SPACE).append(EQUAL).append(SPACE).append(NEW)
+ .append(SPACE).append(BIT_SET)
+ .append(OPEN_CLOSE_BRACKET_STRING);
+ } else if (attrName.equals(YANG_AUGMENTED_INFO_MAP)) {
+ attrDef.append(SPACE).append(EQUAL).append(SPACE).append(NEW)
+ .append(SPACE).append(HASH_MAP)
+ .append(OPEN_CLOSE_DIAMOND_STRING)
+ .append(OPEN_CLOSE_BRACKET_STRING);
+ }
+
+ attrDef.append(signatureClose());
+ } else {
+ StringBuilder type = new StringBuilder();
+ if (typePkg != null) {
+ type.append(typePkg).append(PERIOD);
+ }
+
+ type.append(attrType);
+
+ // Add starting definition.
+ addAttrStartDef(annotation, attrDef, type.toString());
+
+ // Add ending definition.
+ addAttrEndDef(attrDef, attrName);
+ }
+ return attrDef.toString();
+ }
+
+ /**
+ * Adds starting attribute definition.
+ *
+ * @param annotation compiler annotation
+ * @param attrDef JAVA attribute definition
+ * @param type attr type
+ */
+ private static void addAttrStartDef(YangCompilerAnnotation annotation,
+ StringBuilder attrDef, String type) {
+ YangDataStructure ds = getYangDataStructure(annotation);
+ if (ds != null) {
+ switch (ds) {
+ case QUEUE: {
+ attrDef.append(QUEUE)
+ .append(DIAMOND_OPEN_BRACKET);
+ break;
+ }
+ case SET: {
+ attrDef.append(SET)
+ .append(DIAMOND_OPEN_BRACKET);
+ break;
+ }
+ case MAP:
+ attrDef.append(MAP).append(DIAMOND_OPEN_BRACKET)
+ .append(type).append(KEYS).append(COMMA);
+ break;
+ default: {
+ attrDef.append(LIST)
+ .append(DIAMOND_OPEN_BRACKET);
+ }
+ }
+ } else {
+ attrDef.append(LIST).append(DIAMOND_OPEN_BRACKET);
+ }
+ attrDef.append(type);
+ }
+
+ /**
+ * Adds ending attribute definition.
+ *
+ * @param attrDef JAVA attribute definition
+ * @param attrName name of attribute
+ */
+ private static void addAttrEndDef(StringBuilder attrDef, String attrName) {
+ attrDef.append(DIAMOND_CLOSE_BRACKET).append(SPACE)
+ .append(attrName).append(signatureClose());
+ }
+
+ /**
+ * Returns string for enum's attribute.
+ *
+ * @param name name of attribute
+ * @param value value of the enum
+ * @return string for enum's attribute
+ */
+ public static String generateEnumAttributeString(String name, int value) {
+ String enumName = getEnumJavaAttribute(name);
+ return enumJavaDocForInnerClass(name) + EIGHT_SPACE_INDENTATION +
+ enumName.toUpperCase() + getOpenCloseParaWithValue(
+ value + EMPTY_STRING) + COMMA + NEW_LINE;
+ }
+
+ /**
+ * Returns string for enum's attribute for enum class.
+ *
+ * @param name name of attribute
+ * @param value value of the enum
+ * @return string for enum's attribute
+ */
+ public static String generateEnumAttributeStringWithSchemaName(
+ String name, int value) {
+ String enumName = getEnumJavaAttribute(name);
+ String str = value + COMMA + SPACE + QUOTES + name + QUOTES;
+ return getJavaDoc(ENUM_ATTRIBUTE, name, false, null) +
+ FOUR_SPACE_INDENTATION + enumName.toUpperCase() +
+ getOpenCloseParaWithValue(str) + COMMA + NEW_LINE;
+ }
+
+ /**
+ * Returns sorted import list.
+ *
+ * @param imports import list
+ * @return sorted import list
+ */
+ public static List<String> sortImports(List<String> imports) {
+ sort(imports);
+ return imports;
+ }
+
+ /**
+ * Returns event enum start.
+ *
+ * @return event enum start
+ */
+ static String getEventEnumTypeStart() {
+ return NEW_LINE + FOUR_SPACE_INDENTATION +
+ getDefaultDefinition(ENUM, TYPE, PUBLIC);
+ }
+
+ /**
+ * Adds listener's imports.
+ *
+ * @param curNode currentYangNode.
+ * @param imports import list
+ * @param operation add or remove
+ */
+ public static void addListenersImport(YangNode curNode,
+ List<String> imports,
+ Operation operation) {
+ String thisImport;
+ TempJavaServiceFragmentFiles tempFiles =
+ ((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles()
+ .getServiceTempFiles();
+ thisImport = tempFiles.getJavaImportData().getListenerServiceImport();
+ performOperationOnImports(imports, thisImport, operation);
+ }
+
+ /**
+ * Performs given operations on import list.
+ *
+ * @param imports list of imports
+ * @param curImport current import
+ * @param operation ADD or REMOVE
+ * @return import list
+ */
+ private static List<String> performOperationOnImports(List<String> imports,
+ String curImport,
+ Operation operation) {
+ switch (operation) {
+ case ADD:
+ imports.add(curImport);
+ break;
+ case REMOVE:
+ imports.remove(curImport);
+ break;
+ default:
+ throw new TranslatorException("Invalid operation type");
+ }
+ sortImports(imports);
+ return imports;
+ }
+
+ /**
+ * Returns integer attribute for enum's class to get the values.
+ *
+ * @param className enum's class name
+ * @return enum's attribute
+ */
+ static String getEnumsValueAttribute(String className) {
+ return getJavaAttributeDefinition(null, INT, className,
+ false, PRIVATE, null) +
+ getJavaAttributeDefinition(null, STRING_DATA_TYPE, SCHEMA_NAME,
+ false, PRIVATE, null) + NEW_LINE;
+ }
+
+ /**
+ * Adds attribute for int ranges.
+ *
+ * @param modifier modifier for attribute
+ * @param addFirst true if int need to be added fist.
+ * @return attribute for int ranges
+ */
+ static String addStaticAttributeIntRange(String modifier,
+ boolean addFirst) {
+ if (addFirst) {
+ return getTypeConflictAttributeStrings(modifier,
+ INT_MIN_RANGE_ATTR,
+ INT_MAX_RANGE_ATTR);
+ }
+ return getTypeConflictAttributeStrings(modifier,
+ UINT_MIN_RANGE_ATTR,
+ UINT_MAX_RANGE_ATTR);
+ }
+
+ /**
+ * Adds attribute for long ranges.
+ *
+ * @param modifier modifier for attribute
+ * @param addFirst if need to be added first
+ * @return attribute for long ranges
+ */
+ static String addStaticAttributeLongRange(String modifier,
+ boolean addFirst) {
+ if (addFirst) {
+ return getTypeConflictAttributeStrings(modifier,
+ LONG_MIN_RANGE_ATTR,
+ LONG_MAX_RANGE_ATTR);
+ }
+ return getTypeConflictAttributeStrings(modifier,
+ ULONG_MIN_RANGE_ATTR,
+ ULONG_MAX_RANGE_ATTR);
+ }
+
+ /**
+ * Adds attribute for long ranges.
+ *
+ * @param modifier modifier for attribute
+ * @param addFirst if need to be added first
+ * @return attribute for long ranges
+ */
+ static String addStaticAttributeShortRange(String modifier,
+ boolean addFirst) {
+ if (addFirst) {
+ return getTypeConflictAttributeStrings(modifier,
+ SHORT_MIN_RANGE_ATTR,
+ SHORT_MAX_RANGE_ATTR);
+ }
+ return getTypeConflictAttributeStrings(modifier,
+ UINT8_MIN_RANGE_ATTR,
+ UINT8_MAX_RANGE_ATTR);
+ }
+
+ /**
+ * Returns attribute for conflicting type in union.
+ *
+ * @param modifier modifier
+ * @param attr1 attribute one
+ * @param att2 attribute two
+ * @return attribute for conflicting type in union
+ */
+ private static String getTypeConflictAttributeStrings(String modifier,
+ String attr1,
+ String att2) {
+ return FOUR_SPACE_INDENTATION + modifier + SPACE +
+ attr1 + FOUR_SPACE_INDENTATION + modifier +
+ SPACE + att2 + NEW_LINE;
+ }
+
+ /**
+ * Returns operation type enum.
+ *
+ * @return operation type enum
+ */
+ static String getOperationTypeEnum() {
+ return " /**\n" +
+ " * Specify the node specific operation in protocols " +
+ "like NETCONF.\n" +
+ " * Applicable in protocol edit operation, not applicable" +
+ " in query operation\n" +
+ " */\n" +
+ " public static enum OnosYangOpType {\n" +
+ " MERGE,\n" +
+ " REPLACE,\n" +
+ " CREATE,\n" +
+ " DELETE,\n" +
+ " REMOVE,\n" +
+ " NONE\n" +
+ " }\n";
+ }
+
+ /**
+ * Returns attribute in constructor for yang augmented info map.
+ *
+ * @return augment info map
+ */
+ static String getYangAugmentedMapObjectForConstruct() {
+ return " this.yangAugmentedInfoMap = builderObject" +
+ ".yangAugmentedInfoMap();\n";
+ }
+
+ /**
+ * Returns set value parameter for union class.
+ *
+ * @return set value parameter for union class.
+ */
+ static String getSetValueParaForUnionClass() {
+ String[] array = {NEW_LINE, SEMI_COLON};
+ return new StringBuilder().append(trimAtLast(
+ getJavaAttributeDefinition(null, BIT_SET, SET_VALUE_PARA,
+ false, PRIVATE, null), array))
+ .append(SPACE).append(EQUAL).append(SPACE).append(NEW)
+ .append(SPACE).append(BIT_SET).append(OPEN_CLOSE_BRACKET_STRING)
+ .append(signatureClose()).toString();
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/JavaExtendsListHolder.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/JavaExtendsListHolder.java
new file mode 100644
index 0000000..2ae1905
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/JavaExtendsListHolder.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava.utils;
+
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoContainer;
+import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoTranslator;
+import org.onosproject.yang.compiler.translator.tojava.JavaImportData;
+import org.onosproject.yang.compiler.translator.tojava.JavaQualifiedTypeInfoTranslator;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaFragmentFiles;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getCapitalCase;
+
+/**
+ * Represent the extends list for generated java classes. It holds the class details which needs to be extended by the
+ * generated java code.
+ */
+public class JavaExtendsListHolder {
+
+ private Map<JavaQualifiedTypeInfoTranslator, Boolean> extendedClassStore;
+ private List<JavaQualifiedTypeInfoTranslator> extendsList;
+
+ /**
+ * Creates an instance of JavaExtendsListHolder.
+ */
+ public JavaExtendsListHolder() {
+ setExtendedClassStore(new HashMap<>());
+ setExtendsList(new ArrayList<>());
+ }
+
+ /**
+ * Returns extends list.
+ *
+ * @return extends list
+ */
+ Map<JavaQualifiedTypeInfoTranslator, Boolean> getExtendedClassStore() {
+ return extendedClassStore;
+ }
+
+ /**
+ * Sets extends list.
+ *
+ * @param extendedClass map of classes need to be extended
+ */
+ private void setExtendedClassStore(Map<JavaQualifiedTypeInfoTranslator, Boolean> extendedClass) {
+ extendedClassStore = extendedClass;
+ }
+
+ /**
+ * Adds to the extends list.
+ *
+ * @param info java file info
+ * @param node YANG node
+ * @param tempJavaFragmentFiles temp java fragment files
+ */
+ public void addToExtendsList(JavaQualifiedTypeInfoTranslator info, YangNode node,
+ TempJavaFragmentFiles tempJavaFragmentFiles) {
+ JavaFileInfoTranslator fileInfo = ((JavaFileInfoContainer) node).getJavaFileInfo();
+
+ JavaImportData importData = tempJavaFragmentFiles.getJavaImportData();
+ boolean qualified = importData.addImportInfo(info,
+ getCapitalCase(fileInfo.getJavaName()), fileInfo.getPackage());
+
+ /*true means import should be added*/
+ getExtendedClassStore().put(info, qualified);
+
+ addToExtendsList(info);
+ }
+
+ /**
+ * Returns extends list.
+ *
+ * @return the extendsList
+ */
+ public List<JavaQualifiedTypeInfoTranslator> getExtendsList() {
+ return extendsList;
+ }
+
+ /**
+ * Sets extends info list.
+ *
+ * @param classInfoList the extends List to set
+ */
+ private void setExtendsList(List<JavaQualifiedTypeInfoTranslator> classInfoList) {
+ extendsList = classInfoList;
+ }
+
+ /**
+ * Adds extends info to list.
+ *
+ * @param classInfo class info
+ */
+ private void addToExtendsList(JavaQualifiedTypeInfoTranslator classInfo) {
+ getExtendsList().add(classInfo);
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/JavaFileGenerator.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/JavaFileGenerator.java
new file mode 100644
index 0000000..546ed05
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/JavaFileGenerator.java
@@ -0,0 +1,1308 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava.utils;
+
+import org.onosproject.yang.compiler.datamodel.RpcNotificationContainer;
+import org.onosproject.yang.compiler.datamodel.YangAugmentableNode;
+import org.onosproject.yang.compiler.datamodel.YangChoice;
+import org.onosproject.yang.compiler.datamodel.YangEnumeration;
+import org.onosproject.yang.compiler.datamodel.YangLeavesHolder;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.YangTypeDef;
+import org.onosproject.yang.compiler.datamodel.YangUnion;
+import org.onosproject.yang.compiler.translator.tojava.JavaAttributeInfo;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGeneratorInfo;
+import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoContainer;
+import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoTranslator;
+import org.onosproject.yang.compiler.translator.tojava.JavaImportData;
+import org.onosproject.yang.compiler.translator.tojava.JavaQualifiedTypeInfoTranslator;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaCodeFragmentFilesContainer;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaEnumerationFragmentFiles;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaEventFragmentFiles;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaServiceFragmentFiles;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaTypeFragmentFiles;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import static java.util.Collections.sort;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.DEFAULT_CLASS_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_KEY_CLASS;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_IMPL_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_INTERFACE_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.TempJavaFragmentFiles.getCurNodeAsAttributeInTarget;
+import static org.onosproject.yang.compiler.translator.tojava.TempJavaFragmentFiles.getListOfAttributesForKey;
+import static org.onosproject.yang.compiler.translator.tojava.YangJavaModelUtils.isGetSetOfRootNodeRequired;
+import static org.onosproject.yang.compiler.translator.tojava.utils.IndentationType.FOUR_SPACE;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaCodeSnippetGen.addStaticAttributeIntRange;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaCodeSnippetGen.addStaticAttributeLongRange;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaCodeSnippetGen.addStaticAttributeShortRange;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaCodeSnippetGen.getEnumsValueAttribute;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaCodeSnippetGen.getEventEnumTypeStart;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaCodeSnippetGen.getJavaAttributeDefinition;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaCodeSnippetGen.getOperationTypeEnum;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaCodeSnippetGen.getSetValueParaForUnionClass;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodBodyTypes.ENUM_METHOD_INT_VALUE;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodBodyTypes.ENUM_METHOD_STRING_VALUE;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.builderMethod;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.generateBuildMethodForSubTree;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodImpl;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodInterface;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getAugmentsDataMethodForService;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getBitSetEnumClassFromString;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getBitSetEnumClassToString;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getCompareToForKeyClass;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getConstructorStart;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getEnumsConstructor;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getEnumsOfValueMethod;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getEqualsMethod;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getEqualsMethodClose;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getEqualsMethodOpen;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getFromStringMethodClose;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getFromStringMethodSignature;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getGetter;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getGetterForClass;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getGetterString;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getHashCodeMethod;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getHashCodeMethodClose;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getHashCodeMethodOpen;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getInterfaceLeafIdEnumSignature;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getRangeValidatorMethodForUnion;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getSetterForClass;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getSetterForSelectLeaf;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getSetterString;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getToStringForEnumClass;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getToStringForType;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getToStringMethodClose;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getToStringMethodOpen;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getUnionToStringMethod;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoImpl;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoInterface;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.isLeafValueSetInterface;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.isSelectLeafSetInterface;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.setSelectLeafSetInterface;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getImportString;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getInterfaceLeafIdEnumMethods;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getIsSelectLeafSet;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getIsValueLeafSet;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.methodClose;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.signatureClose;
+import static org.onosproject.yang.compiler.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getAugmentableSubTreeFiltering;
+import static org.onosproject.yang.compiler.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessChildNodeSubtreeFiltering;
+import static org.onosproject.yang.compiler.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessLeafListSubtreeFiltering;
+import static org.onosproject.yang.compiler.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessLeafSubtreeFiltering;
+import static org.onosproject.yang.compiler.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessSubTreeFilteringEnd;
+import static org.onosproject.yang.compiler.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessSubTreeForChoiceInterface;
+import static org.onosproject.yang.compiler.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessSubtreeFilteringStart;
+import static org.onosproject.yang.compiler.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessSubtreeFunctionBody;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorUtils.addDefaultConstructor;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorUtils.getBeanFiles;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorUtils.getTypeFiles;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BIG_INTEGER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BUILDER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BUILDER_CLASS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BUILDER_INTERFACE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.CLOSE_CURLY_BRACKET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.COMMA;
+import static org.onosproject.yang.compiler.utils.UtilConstants.DEFAULT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.DEFAULT_CAPS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EMPTY_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ENUM_CLASS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EVENT_CLASS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EVENT_LISTENER_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EVENT_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EVENT_SUBJECT_NAME_SUFFIX;
+import static org.onosproject.yang.compiler.utils.UtilConstants.IMPL_CLASS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.INT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.INTERFACE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.JAVA_UTIL_OBJECTS_IMPORT_CLASS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.JAVA_UTIL_PKG;
+import static org.onosproject.yang.compiler.utils.UtilConstants.KEYS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.NEW_LINE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OP_PARAM;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PRIVATE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PROTECTED;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PUBLIC;
+import static org.onosproject.yang.compiler.utils.UtilConstants.RPC_CLASS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SEMI_COLON;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SERVICE_METHOD_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.TYPEDEF_CLASS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.UNION_CLASS;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.MANAGER_SETTER_METHOD;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.getJavaDoc;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getCamelCase;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getCapitalCase;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.replaceLast;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.trimAtLast;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.validateLineLength;
+
+/**
+ * Representation of java file generator.
+ */
+public final class JavaFileGenerator {
+
+ // No instantiation
+ private JavaFileGenerator() {
+ }
+
+ /**
+ * Returns generated interface file for current node.
+ *
+ * @param file file
+ * @param imports imports for the file
+ * @param curNode current YANG node
+ * @param attrPresent if any attribute is present or not
+ * @return interface file
+ * @throws IOException when fails to write in file
+ */
+ public static File generateInterfaceFile(File file, List<String> imports,
+ YangNode curNode,
+ boolean attrPresent)
+ throws IOException {
+
+ JavaFileInfoTranslator fileInfo =
+ ((JavaFileInfoContainer) curNode).getJavaFileInfo();
+
+ String path;
+ if (curNode instanceof RpcNotificationContainer) {
+ path = fileInfo.getPluginConfig().getCodeGenDir() +
+ fileInfo.getPackageFilePath();
+ } else {
+ path = fileInfo.getBaseCodeGenPath() +
+ fileInfo.getPackageFilePath();
+ }
+
+ String className = getCapitalCase(fileInfo.getJavaName());
+
+ boolean leavesPresent;
+ YangLeavesHolder leavesHolder;
+ if (curNode instanceof YangLeavesHolder) {
+ leavesHolder = (YangLeavesHolder) curNode;
+ leavesPresent = leavesPresent(leavesHolder);
+ } else {
+ leavesPresent = false;
+ }
+
+ initiateJavaFileGeneration(file, INTERFACE_MASK, imports, curNode,
+ className);
+
+ // Generate ENUM interface
+ if (curNode instanceof RpcNotificationContainer) {
+ insertDataIntoJavaFile(file, getOperationTypeEnum());
+ }
+ List<String> methods = new ArrayList<>();
+
+ //Add only for choice class
+ if (curNode instanceof YangChoice) {
+ insertDataIntoJavaFile(file, getProcessSubTreeForChoiceInterface(
+ curNode));
+ }
+
+ if (attrPresent) {
+ // Add getter methods to interface file.
+ try {
+ //Leaf identifier enum.
+ if (leavesPresent) {
+ insertDataIntoJavaFile(file, getInterfaceLeafIdEnumSignature(
+ className) + trimAtLast(replaceLast(
+ getDataFromTempFileHandle(
+ LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK,
+ getBeanFiles(curNode), path),
+ COMMA, SEMI_COLON), NEW_LINE) +
+ getInterfaceLeafIdEnumMethods());
+ }
+
+ insertDataIntoJavaFile(file, NEW_LINE);
+ //Getter methods.
+ insertDataIntoJavaFile(file, getDataFromTempFileHandle(
+ GETTER_FOR_INTERFACE_MASK, getBeanFiles(curNode), path));
+ } catch (IOException e) {
+ throw new IOException(getErrorMsg(className, INTERFACE));
+ }
+ }
+
+ if (curNode instanceof YangAugmentableNode &&
+ !(curNode instanceof YangChoice)) {
+ methods.add(getYangAugmentInfoInterface());
+ }
+
+ if (leavesPresent) {
+ methods.add(isLeafValueSetInterface());
+ if (curNode.isOpTypeReq()) {
+ methods.add(isSelectLeafSetInterface());
+ }
+ }
+ for (String method : methods) {
+ insertDataIntoJavaFile(file, method);
+ }
+ return file;
+ }
+
+ /**
+ * Returns generated builder interface file for current node.
+ *
+ * @param file file
+ * @param curNode current YANG node
+ * @param attrPresent if any attribute is present or not
+ * @return builder interface file
+ * @throws IOException when fails to write in file
+ */
+ public static File generateBuilderInterfaceFile(File file, YangNode curNode,
+ boolean attrPresent)
+ throws IOException {
+
+ JavaFileInfoTranslator fileInfo =
+ ((JavaFileInfoContainer) curNode).getJavaFileInfo();
+
+ boolean leavesPresent;
+ YangLeavesHolder leavesHolder;
+ if (curNode instanceof YangLeavesHolder &&
+ curNode.isOpTypeReq()) {
+ leavesHolder = (YangLeavesHolder) curNode;
+ leavesPresent = leavesPresent(leavesHolder);
+ } else {
+ leavesPresent = false;
+ }
+
+ String className = getCapitalCase(fileInfo.getJavaName());
+ String path;
+ if (curNode instanceof RpcNotificationContainer) {
+ path = fileInfo.getPluginConfig().getCodeGenDir() +
+ fileInfo.getPackageFilePath();
+ } else {
+ path = fileInfo.getBaseCodeGenPath() +
+ fileInfo.getPackageFilePath();
+ }
+
+ initiateJavaFileGeneration(file, BUILDER_INTERFACE_MASK, null, curNode,
+ className);
+ List<String> methods = new ArrayList<>();
+ if (attrPresent) {
+ try {
+ //Getter methods.
+ methods.add(getDataFromTempFileHandle(
+ GETTER_FOR_INTERFACE_MASK,
+ getBeanFiles(curNode), path));
+
+ //Setter methods.
+ methods.add(getDataFromTempFileHandle(
+ SETTER_FOR_INTERFACE_MASK,
+ getBeanFiles(curNode), path));
+
+ //Add to list method.
+ insertDataIntoJavaFile(file, getDataFromTempFileHandle(
+ ADD_TO_LIST_INTERFACE_MASK, getBeanFiles(curNode), path));
+ } catch (IOException e) {
+ throw new IOException(getErrorMsg(className, BUILDER_INTERFACE));
+ }
+ }
+
+ if (curNode instanceof YangAugmentableNode &&
+ !(curNode instanceof YangChoice)) {
+ methods.add(getAddAugmentInfoMethodInterface(className + BUILDER));
+ methods.add(getYangAugmentInfoInterface());
+ }
+
+ if (leavesPresent) {
+ methods.add(setSelectLeafSetInterface(className));
+ }
+ //Add build method to builder interface file.
+ methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
+ .getTempJavaCodeFragmentFiles()
+ .addBuildMethodForInterface());
+
+ //Add getters and setters in builder interface.
+ for (String method : methods) {
+ insertDataIntoJavaFile(file, method);
+ }
+
+ insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
+ return file;
+ }
+
+ /**
+ * Returns generated builder class file for current node.
+ *
+ * @param file file
+ * @param curNode current YANG node
+ * @param attrPresent if any attribute is present or not
+ * @return builder class file
+ * @throws IOException when fails to write in file
+ */
+ public static File generateBuilderClassFile(File file, YangNode curNode,
+ boolean attrPresent)
+ throws IOException {
+
+ JavaFileInfoTranslator fileInfo =
+ ((JavaFileInfoContainer) curNode).getJavaFileInfo();
+
+ boolean leavesPresent;
+ YangLeavesHolder leavesHolder;
+ if (curNode instanceof YangLeavesHolder) {
+ leavesHolder = (YangLeavesHolder) curNode;
+ leavesPresent = leavesPresent(leavesHolder);
+ } else {
+ leavesPresent = false;
+ }
+
+ String className = getCapitalCase(fileInfo.getJavaName());
+ String path;
+ if (curNode instanceof RpcNotificationContainer) {
+ path = fileInfo.getPluginConfig().getCodeGenDir() +
+ fileInfo.getPackageFilePath();
+ } else {
+ path = fileInfo.getBaseCodeGenPath() +
+ fileInfo.getPackageFilePath();
+ }
+
+ initiateJavaFileGeneration(file, BUILDER_CLASS_MASK, null, curNode,
+ className);
+ List<String> methods = new ArrayList<>();
+ if (attrPresent) {
+
+ //Add attribute strings.
+ try {
+ insertDataIntoJavaFile(file, getDataFromTempFileHandle(
+ ATTRIBUTES_MASK, getBeanFiles(curNode), path));
+ } catch (IOException e) {
+ throw new IOException(getErrorMsg(className, BUILDER_CLASS));
+ }
+ try {
+ //Getter methods.
+ methods.add(getDataFromTempFileHandle(
+ GETTER_FOR_CLASS_MASK, getBeanFiles(curNode), path));
+ // Setter methods.
+ methods.add(getDataFromTempFileHandle(
+ SETTER_FOR_CLASS_MASK, getBeanFiles(curNode), path));
+
+ //Add to list impl method.
+ methods.add(getDataFromTempFileHandle(
+ ADD_TO_LIST_IMPL_MASK, getBeanFiles(curNode), path));
+
+ insertDataIntoJavaFile(file, NEW_LINE);
+
+ //Add operation attribute methods.
+ if (leavesPresent && curNode.isOpTypeReq()) {
+ insertDataIntoJavaFile(file, NEW_LINE);
+ methods.add(getSetterForSelectLeaf(className));
+ }
+ } catch (IOException e) {
+ throw new IOException(getErrorMsg(className, BUILDER_CLASS));
+ }
+ } else {
+ insertDataIntoJavaFile(file, NEW_LINE);
+ }
+
+ if (curNode instanceof YangAugmentableNode) {
+ methods.add(getAddAugmentInfoMethodImpl(className + BUILDER));
+ methods.add(getYangAugmentInfoImpl());
+ }
+
+ // Add default constructor and build method impl.
+ methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
+ .getTempJavaCodeFragmentFiles()
+ .addBuildMethodImpl());
+ if (curNode.isOpTypeReq()) {
+ methods.add(generateBuildMethodForSubTree(curNode));
+ }
+ methods.add(addDefaultConstructor(curNode, PUBLIC, BUILDER));
+
+ //Add methods in builder class.
+ for (String method : methods) {
+ insertDataIntoJavaFile(file, method);
+ }
+ insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
+ return file;
+ }
+
+ /**
+ * Returns generated key class file for current list node.
+ *
+ * @param file file
+ * @param curNode current YANG node
+ * @return key class file
+ * @throws IOException when fails to write in file
+ */
+ public static File generateKeyClassFile(File file, YangNode curNode)
+ throws IOException {
+
+ JavaFileInfoTranslator fileInfo =
+ ((JavaFileInfoContainer) curNode).getJavaFileInfo();
+
+ String className = getCapitalCase(fileInfo.getJavaName()) + KEYS;
+ List<String> imports = new ArrayList<>();
+
+ YangNode parent = curNode.getParent();
+ JavaImportData importData = ((JavaCodeGeneratorInfo) parent)
+ .getTempJavaCodeFragmentFiles().getBeanTempFiles()
+ .getJavaImportData();
+ JavaQualifiedTypeInfoTranslator info =
+ new JavaQualifiedTypeInfoTranslator();
+ info.setClassInfo(className);
+ info.setPkgInfo(fileInfo.getPackage());
+ importData.addImportInfo(info, parent.getJavaClassNameOrBuiltInType(),
+ parent.getJavaPackage());
+ List<JavaAttributeInfo> attrs = getListOfAttributesForKey(curNode);
+
+ Iterator<JavaAttributeInfo> attrIt = attrs.iterator();
+ JavaAttributeInfo attr;
+ JavaQualifiedTypeInfoTranslator typeInfo;
+ while (attrIt.hasNext()) {
+ attr = attrIt.next();
+ typeInfo = attr.getImportInfo();
+ if (!typeInfo.getClassInfo().equals(className)) {
+ imports.add(getImportString(attr.getImportInfo().getPkgInfo(),
+ attr.getImportInfo().getClassInfo()));
+ } else {
+ attr.setIsQualifiedAccess(true);
+ }
+ }
+
+ imports.add(getImportString(JAVA_UTIL_PKG,
+ JAVA_UTIL_OBJECTS_IMPORT_CLASS));
+
+ initiateJavaFileGeneration(file, GENERATE_KEY_CLASS, imports, curNode,
+ className);
+ String pkg = null;
+ attrIt = attrs.iterator();
+ while (attrIt.hasNext()) {
+ attr = attrIt.next();
+ if (attr.isQualifiedName()) {
+ pkg = attr.getImportInfo().getPkgInfo();
+ }
+ insertDataIntoJavaFile(file, getJavaAttributeDefinition(
+ pkg, attr.getImportInfo().getClassInfo(),
+ attr.getAttributeName(), false, PROTECTED, null));
+ }
+ attrIt = attrs.iterator();
+ while (attrIt.hasNext()) {
+ attr = attrIt.next();
+ //add getter methods
+ insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, attr
+ .getAttributeName(), false, null));
+ insertDataIntoJavaFile(file, getGetterForClass(
+ attr, GENERATE_KEY_CLASS));
+ insertDataIntoJavaFile(file, NEW_LINE);
+ //Add setter methods.
+ insertDataIntoJavaFile(file, getJavaDoc(MANAGER_SETTER_METHOD, attr
+ .getAttributeName(), false, null));
+ insertDataIntoJavaFile(file, getSetterForClass(
+ attr, className, GENERATE_EVENT_SUBJECT_CLASS));
+ insertDataIntoJavaFile(file, NEW_LINE);
+ }
+ //add hashcode and equals method.
+ insertDataIntoJavaFile(file, getHashCodeMethodOpen());
+ StringBuilder builder = new StringBuilder();
+ for (JavaAttributeInfo att : attrs) {
+ builder.append(getHashCodeMethod(att));
+ }
+ insertDataIntoJavaFile(file, getHashCodeMethodClose(builder.toString()));
+
+ insertDataIntoJavaFile(file, getEqualsMethodOpen(className));
+ StringBuilder builder2 = new StringBuilder();
+ for (JavaAttributeInfo att : attrs) {
+ builder2.append(getEqualsMethod(att)).append(NEW_LINE);
+ }
+ insertDataIntoJavaFile(file, getEqualsMethodClose(builder2.toString()));
+
+ insertDataIntoJavaFile(file, getCompareToForKeyClass(attrs, className));
+
+ insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
+ return file;
+ }
+
+ /**
+ * Returns generated default class file for current node.
+ *
+ * @param file file
+ * @param curNode current YANG node
+ * @param attrPresent if any attribute is present or not
+ * @param imports list of imports
+ * @return impl class file
+ * @throws IOException when fails to write in file
+ */
+ public static File generateDefaultClassFile(File file, YangNode curNode,
+ boolean attrPresent,
+ List<String> imports)
+ throws IOException {
+
+ JavaFileInfoTranslator fileInfo =
+ ((JavaFileInfoContainer) curNode).getJavaFileInfo();
+ boolean leavesPresent;
+ YangLeavesHolder leavesHolder;
+ if (curNode instanceof YangLeavesHolder) {
+ leavesHolder = (YangLeavesHolder) curNode;
+ leavesPresent = leavesPresent(leavesHolder);
+ } else {
+ leavesPresent = false;
+ }
+
+ boolean rootNode = false;
+
+ String className = getCapitalCase(fileInfo.getJavaName());
+ String opParamClassName = className;
+ String name = DEFAULT_CAPS + className;
+ String path;
+ if (curNode instanceof RpcNotificationContainer) {
+ opParamClassName = className + OP_PARAM;
+ name = opParamClassName;
+ rootNode = true;
+ path = fileInfo.getPluginConfig().getCodeGenDir() +
+ fileInfo.getPackageFilePath();
+ } else {
+ path = fileInfo.getBaseCodeGenPath() +
+ fileInfo.getPackageFilePath();
+ }
+
+ initiateJavaFileGeneration(file, DEFAULT_CLASS_MASK, imports, curNode,
+ className);
+
+ List<String> methods = new ArrayList<>();
+ if (attrPresent) {
+ addDefaultClassAttributeInfo(file, curNode, className,
+ opParamClassName, path, methods,
+ rootNode);
+ } else {
+ insertDataIntoJavaFile(file, NEW_LINE);
+ }
+
+ if (curNode instanceof YangAugmentableNode) {
+ methods.add(getYangAugmentInfoImpl());
+ }
+ try {
+ //Constructor.
+ String constructor = getConstructorStart(className, rootNode) +
+ getDataFromTempFileHandle(
+ CONSTRUCTOR_IMPL_MASK, getBeanFiles(curNode), path)
+ + methodClose(FOUR_SPACE);
+ methods.add(constructor);
+ if (curNode.isOpTypeReq()) {
+ String augmentableSubTreeFiltering = EMPTY_STRING;
+ if (curNode instanceof YangAugmentableNode) {
+ // add is filter content match.
+ augmentableSubTreeFiltering = getAugmentableSubTreeFiltering();
+ }
+ methods.add(getProcessSubtreeFilteringStart(curNode) +
+ getProcessSubtreeFunctionBody(curNode) +
+ augmentableSubTreeFiltering +
+ getProcessSubTreeFilteringEnd(name));
+
+ if (curNode instanceof YangLeavesHolder) {
+ if (((YangLeavesHolder) curNode).getListOfLeaf() != null &&
+ !((YangLeavesHolder) curNode).getListOfLeaf().isEmpty()) {
+ methods.add(getProcessLeafSubtreeFiltering(curNode,
+ path));
+ }
+ if (((YangLeavesHolder) curNode).getListOfLeafList() != null &&
+ !((YangLeavesHolder) curNode).getListOfLeafList().isEmpty()) {
+ methods.add(getProcessLeafListSubtreeFiltering(curNode,
+ path));
+ }
+ }
+
+ if (curNode.getChild() != null) {
+ methods.add(getProcessChildNodeSubtreeFiltering(curNode,
+ path));
+ }
+ }
+ } catch (IOException e) {
+ throw new IOException(getErrorMsg(className, IMPL_CLASS));
+ }
+
+ methods.add(addDefaultConstructor(curNode, PROTECTED, DEFAULT));
+
+ methods.add(builderMethod(className));
+ if (leavesPresent) {
+ methods.add(getIsValueLeafSet());
+ if (curNode.isOpTypeReq()) {
+ methods.add(getIsSelectLeafSet());
+ }
+ }
+ // Add methods in impl class.
+ for (String method : methods) {
+ insertDataIntoJavaFile(file, method);
+ }
+
+ return file;
+ }
+
+ /**
+ * Add methods related to attributes.
+ *
+ * @param file file
+ * @param curNode current YANG node
+ * @param className name of the class
+ * @param opParamClassName op param class name
+ * @param path file path
+ * @param methods list of methods string
+ * @param rootNode flag indicating whether node is root node
+ * @throws IOException a violation in IO rule
+ */
+ private static void addDefaultClassAttributeInfo(File file, YangNode curNode,
+ String className,
+ String opParamClassName,
+ String path, List<String> methods,
+ boolean rootNode)
+ throws IOException {
+
+ //Add attribute strings.
+ try {
+ insertDataIntoJavaFile(file, getDataFromTempFileHandle(
+ ATTRIBUTES_MASK, getBeanFiles(curNode), path));
+ } catch (IOException e) {
+ throw new IOException(getErrorMsg(className, IMPL_CLASS));
+ }
+
+ try {
+ //Getter methods.
+ methods.add(getDataFromTempFileHandle(
+ GETTER_FOR_CLASS_MASK, getBeanFiles(curNode), path));
+
+ // Hash code method.
+ methods.add(getHashCodeMethodClose(
+ getHashCodeMethodOpen() + getDataFromTempFileHandle(
+ HASH_CODE_IMPL_MASK, getBeanFiles(curNode), path)
+ .replace(NEW_LINE, EMPTY_STRING)));
+
+ //Equals method.
+ if (rootNode) {
+ methods.add(getEqualsMethodClose(
+ getEqualsMethodOpen(opParamClassName) +
+ getDataFromTempFileHandle(
+ EQUALS_IMPL_MASK,
+ getBeanFiles(curNode), path)));
+ } else {
+ methods.add(getEqualsMethodClose(
+ getEqualsMethodOpen(DEFAULT_CAPS + className) +
+ getDataFromTempFileHandle(EQUALS_IMPL_MASK,
+ getBeanFiles(curNode),
+ path)));
+ }
+ // To string method.
+ methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(
+ TO_STRING_IMPL_MASK, getBeanFiles(curNode), path) +
+ getToStringMethodClose());
+ } catch (IOException e) {
+ throw new IOException(getErrorMsg(className, IMPL_CLASS));
+ }
+ }
+
+ /**
+ * Generates class file for type def.
+ *
+ * @param file generated file
+ * @param curNode current YANG node
+ * @param imports imports for file
+ * @return type def class file
+ * @throws IOException when fails to generate class file
+ */
+ public static File generateTypeDefClassFile(File file, YangNode curNode,
+ List<String> imports)
+ throws IOException {
+
+ JavaFileInfoTranslator fileInfo =
+ ((JavaFileInfoContainer) curNode).getJavaFileInfo();
+ // import
+ String className = getCapitalCase(fileInfo.getJavaName());
+ String path = fileInfo.getBaseCodeGenPath() +
+ fileInfo.getPackageFilePath();
+ initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS,
+ imports, path);
+
+ List<String> methods = new ArrayList<>();
+ insertDataIntoJavaFile(file, NEW_LINE);
+ //Add attribute strings.
+ try {
+ insertDataIntoJavaFile(file, getDataFromTempFileHandle(
+ ATTRIBUTES_MASK, getTypeFiles(curNode), path));
+ } catch (IOException e) {
+ throw new IOException(getErrorMsg(className, TYPEDEF_CLASS));
+ }
+
+ //Default constructor.
+ methods.add(addDefaultConstructor(curNode, PRIVATE, EMPTY_STRING));
+
+ try {
+
+ //Type constructor.
+ methods.add(getDataFromTempFileHandle(
+ CONSTRUCTOR_FOR_TYPE_MASK, getTypeFiles(curNode), path));
+
+ //Of method.
+ methods.add(getDataFromTempFileHandle(
+ OF_STRING_IMPL_MASK, getTypeFiles(curNode), path));
+
+ //Getter methods.
+ methods.add(getDataFromTempFileHandle(
+ GETTER_FOR_CLASS_MASK, getTypeFiles(curNode), path));
+
+ // Hash code method.
+ methods.add(getHashCodeMethodClose(
+ getHashCodeMethodOpen() + getDataFromTempFileHandle(
+ HASH_CODE_IMPL_MASK, getTypeFiles(curNode), path)
+ .replace(NEW_LINE, EMPTY_STRING)));
+
+ //Equals method.
+ methods.add(getEqualsMethodClose(
+ getEqualsMethodOpen(className + EMPTY_STRING) +
+ getDataFromTempFileHandle(EQUALS_IMPL_MASK,
+ getTypeFiles(curNode), path)));
+
+ // To string method.
+ addTypedefToString(curNode, methods);
+
+ JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
+
+ //From string method.
+ methods.add(getFromStringMethodSignature(className) +
+ getDataFromTempFileHandle(
+ FROM_STRING_IMPL_MASK,
+ javaGenInfo.getTempJavaCodeFragmentFiles()
+ .getTypeTempFiles(), path) +
+ getFromStringMethodClose());
+ } catch (IOException e) {
+ throw new IOException(getErrorMsg(className, TYPEDEF_CLASS));
+ }
+
+ for (String method : methods) {
+ insertDataIntoJavaFile(file, method);
+ }
+ insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
+
+ return validateLineLength(file);
+ }
+
+ /**
+ * Adds typedef to string method.
+ *
+ * @param curNode current node
+ * @param methods list of methods string
+ */
+ private static void addTypedefToString(YangNode curNode,
+ List<String> methods) {
+ //To string method.
+
+ List<YangType<?>> types = ((YangTypeDef) curNode).getTypeList();
+ YangType type = types.get(0);
+ methods.add(getToStringForType(getCamelCase(type.getDataTypeName(),
+ null), type));
+ }
+
+ /**
+ * Generates class file for union type.
+ *
+ * @param file generated file
+ * @param curNode current YANG node
+ * @param imports imports for file
+ * @return type def class file
+ * @throws IOException when fails to generate class file
+ */
+ public static File generateUnionClassFile(File file, YangNode curNode,
+ List<String> imports)
+ throws IOException {
+
+ JavaFileInfoTranslator fileInfo =
+ ((JavaFileInfoContainer) curNode).getJavaFileInfo();
+
+ String className = getCapitalCase(fileInfo.getJavaName());
+ String path = fileInfo.getBaseCodeGenPath() +
+ fileInfo.getPackageFilePath();
+
+ TempJavaTypeFragmentFiles tempFiles =
+ ((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles()
+ .getTypeTempFiles();
+
+ boolean intConflict = false;
+ boolean longConflict = false;
+ boolean shortConflict = false;
+ JavaAttributeInfo intAttr = tempFiles.getIntAttribute();
+ if (intAttr == null) {
+ intAttr = tempFiles.getUIntAttribute();
+ }
+
+ JavaAttributeInfo longAttr =
+ tempFiles.getLongAttribute();
+ if (longAttr == null) {
+ longAttr = tempFiles.getULongAttribute();
+ }
+
+ JavaAttributeInfo shortAttr =
+ tempFiles.getShortAttribute();
+ if (shortAttr == null) {
+ shortAttr = tempFiles.getUInt8Attribute();
+ }
+
+ if (intAttr != null) {
+ intConflict = intAttr.isIntConflict();
+ }
+ if (longAttr != null) {
+ longConflict = longAttr.isLongConflict();
+ }
+ if (shortAttr != null) {
+ shortConflict = shortAttr.isShortConflict();
+ }
+ if (longConflict) {
+ String impt = tempFiles.getJavaImportData().getBigIntegerImport();
+ if (!imports.contains(impt)) {
+ imports.add(impt);
+ sort(imports);
+ }
+ }
+
+ initiateJavaFileGeneration(file, className, GENERATE_UNION_CLASS,
+ imports, path);
+
+ List<String> methods = new ArrayList<>();
+
+ // Add attribute strings.
+ try {
+ addUnionClassAttributeInfo(file, curNode, intConflict,
+ longConflict, shortConflict, path, tempFiles);
+ } catch (IOException e) {
+ throw new IOException(getErrorMsg(className, UNION_CLASS));
+ }
+
+ //Default constructor.
+ methods.add(addDefaultConstructor(curNode, PRIVATE, EMPTY_STRING));
+
+ try {
+
+ //Type constructor.
+ methods.add(getDataFromTempFileHandle(
+ CONSTRUCTOR_FOR_TYPE_MASK, getTypeFiles(curNode), path));
+
+ // Of string method.
+ methods.add(getDataFromTempFileHandle(
+ OF_STRING_IMPL_MASK, getTypeFiles(curNode), path));
+
+ //Getter methods.
+ methods.add(getDataFromTempFileHandle(
+ GETTER_FOR_CLASS_MASK, getTypeFiles(curNode), path));
+
+ //Hash code method.
+ methods.add(getHashCodeMethodClose(
+ getHashCodeMethodOpen() +
+ getDataFromTempFileHandle(
+ HASH_CODE_IMPL_MASK, getTypeFiles(curNode),
+ path).replace(NEW_LINE, EMPTY_STRING)));
+
+ //Equals method.
+ methods.add(getEqualsMethodClose(
+ getEqualsMethodOpen(className) +
+ getDataFromTempFileHandle(
+ EQUALS_IMPL_MASK, getTypeFiles(curNode),
+ path)));
+
+ //To string method.
+ methods.add(getUnionToStringMethod(
+ ((YangUnion) curNode).getTypeList()));
+
+ //From string method.
+ methods.add(getFromStringMethodSignature(className) +
+ getDataFromTempFileHandle(
+ FROM_STRING_IMPL_MASK,
+ getTypeFiles(curNode), path) +
+ getFromStringMethodClose());
+
+ if (intConflict) {
+ methods.add(getRangeValidatorMethodForUnion(INT));
+ }
+ if (longConflict) {
+ methods.add(getRangeValidatorMethodForUnion(BIG_INTEGER));
+ }
+ if (shortConflict && !intConflict) {
+ methods.add(getRangeValidatorMethodForUnion(INT));
+ }
+ } catch (IOException e) {
+ throw new IOException(getErrorMsg(className, UNION_CLASS));
+ }
+
+ for (String method : methods) {
+ insertDataIntoJavaFile(file, method);
+ }
+ insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
+
+ return validateLineLength(file);
+ }
+
+ /**
+ * Adds union class attribute information.
+ *
+ * @param file generated file
+ * @param curNode current YANG node
+ * @param intConflict flag to indicate if there is a conflict in int
+ * @param longConflict flag to indicate if there is a conflict in long
+ * @param shortConflict flag to indicate if there is a conflict in short
+ * @param path file path
+ * @param tempFiles temp java type fragment files
+ * @throws IOException a violation in IO rule
+ */
+ private static void addUnionClassAttributeInfo(File file,
+ YangNode curNode,
+ boolean intConflict,
+ boolean longConflict,
+ boolean shortConflict,
+ String path,
+ TempJavaTypeFragmentFiles tempFiles)
+ throws IOException {
+ if (intConflict) {
+ insertDataIntoJavaFile(file,
+ addStaticAttributeIntRange(PRIVATE,
+ tempFiles.getIntIndex() <
+ tempFiles.getUIntIndex()));
+ }
+
+ if (longConflict) {
+ insertDataIntoJavaFile(file,
+ addStaticAttributeLongRange(PRIVATE,
+ tempFiles.getLongIndex() <
+ tempFiles.getULongIndex()));
+ }
+
+ if (shortConflict) {
+ insertDataIntoJavaFile(file,
+ addStaticAttributeShortRange(PRIVATE,
+ tempFiles.getShortIndex() <
+ tempFiles.getUInt8Index()));
+ }
+
+ insertDataIntoJavaFile(file, getDataFromTempFileHandle(
+ ATTRIBUTES_MASK, getTypeFiles(curNode), path));
+ insertDataIntoJavaFile(file, getSetValueParaForUnionClass());
+ }
+
+ /**
+ * Generates class file for type enum.
+ *
+ * @param file generated file
+ * @param curNode current YANG node
+ * @param imports import list
+ * @return class file for type enum
+ * @throws IOException when fails to generate class file
+ */
+ public static File generateEnumClassFile(File file, YangNode curNode, List<String> imports)
+ throws IOException {
+
+ JavaFileInfoTranslator fileInfo =
+ ((JavaFileInfoContainer) curNode).getJavaFileInfo();
+
+ String className = fileInfo.getJavaName();
+ String path = fileInfo.getBaseCodeGenPath() +
+ fileInfo.getPackageFilePath();
+ TempJavaEnumerationFragmentFiles enumFile = ((JavaCodeGeneratorInfo)
+ curNode).getTempJavaCodeFragmentFiles().getEnumTempFiles();
+ JavaImportData data = enumFile.getJavaImportData();
+ if (!enumFile.isEnumClass()) {
+ imports.add(data.getImportForToBitSet());
+ imports.add(data.getImportForPattern());
+ }
+
+ initiateJavaFileGeneration(file, getCapitalCase(className),
+ GENERATE_ENUM_CLASS, imports, path);
+
+ //Add attribute strings.
+ try {
+ JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
+ String[] remove = {COMMA, NEW_LINE};
+ insertDataIntoJavaFile(file, trimAtLast(getDataFromTempFileHandle(
+ ENUM_IMPL_MASK, javaGenInfo.getTempJavaCodeFragmentFiles()
+ .getEnumTempFiles(), path), remove) +
+ signatureClose());
+ } catch (IOException e) {
+ throw new IOException(getErrorMsg(getCapitalCase(className),
+ ENUM_CLASS));
+ }
+
+ insertDataIntoJavaFile(file, NEW_LINE);
+ // Add an attribute to get the enum's values.
+ insertDataIntoJavaFile(file, getEnumsValueAttribute(className));
+
+ // Add a constructor for enum.
+ //TODO: generate javadoc for method.
+ insertDataIntoJavaFile(file, getEnumsConstructor(getCapitalCase(className)) +
+ NEW_LINE);
+
+ insertDataIntoJavaFile(file,
+ getEnumsOfValueMethod(className,
+ (YangEnumeration) curNode,
+ ENUM_METHOD_INT_VALUE));
+ insertDataIntoJavaFile(file,
+ getEnumsOfValueMethod(className,
+ (YangEnumeration) curNode,
+ ENUM_METHOD_STRING_VALUE));
+
+ // Add a getter method for enum.
+ insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, className, false,
+ null) +
+ getGetter(INT, className, GENERATE_ENUM_CLASS) + NEW_LINE);
+
+ if (!enumFile.isEnumClass()) {
+ insertDataIntoJavaFile(file, getBitSetEnumClassFromString
+ (getCapitalCase(className)));
+ insertDataIntoJavaFile(file, getBitSetEnumClassToString(
+ getCapitalCase(className), (YangEnumeration) curNode));
+ } else {
+ insertDataIntoJavaFile(file, getToStringForEnumClass());
+ }
+
+ insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
+
+ return validateLineLength(file);
+ }
+
+ /**
+ * Generates interface file for rpc.
+ *
+ * @param file generated file
+ * @param curNode current YANG node
+ * @param imports imports for file
+ * @return rpc class file
+ * @throws IOException when fails to generate class file
+ */
+ public static File generateServiceInterfaceFile(File file, YangNode curNode,
+ List<String> imports)
+ throws IOException {
+
+ JavaFileInfoTranslator fileInfo =
+ ((JavaFileInfoContainer) curNode).getJavaFileInfo();
+
+ TempJavaServiceFragmentFiles tempFiles =
+ ((JavaCodeGeneratorInfo) curNode)
+ .getTempJavaCodeFragmentFiles().getServiceTempFiles();
+ String className = getCapitalCase(fileInfo.getJavaName()) +
+ SERVICE_METHOD_STRING;
+ String path = fileInfo.getBaseCodeGenPath() +
+ fileInfo.getPackageFilePath();
+ initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports,
+ curNode, className);
+
+ List<String> methods = new ArrayList<>();
+ JavaAttributeInfo rootAttribute =
+ getCurNodeAsAttributeInTarget(curNode, curNode, false,
+ tempFiles);
+
+ try {
+
+ if (isGetSetOfRootNodeRequired(curNode)) {
+ //Getter methods.
+ methods.add(getGetterString(rootAttribute,
+ GENERATE_SERVICE_AND_MANAGER) +
+ NEW_LINE);
+ // Setter methods.
+ methods.add(getSetterString(rootAttribute, className,
+ GENERATE_SERVICE_AND_MANAGER) +
+ NEW_LINE);
+ }
+
+ methods.add(getAugmentsDataMethodForService(curNode));
+
+ if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles()
+ .getServiceTempFiles() != null) {
+ JavaCodeGeneratorInfo javaGenInfo =
+ (JavaCodeGeneratorInfo) curNode;
+
+ // Rpc methods
+ methods.add(getDataFromTempFileHandle(
+ RPC_INTERFACE_MASK,
+ javaGenInfo.getTempJavaCodeFragmentFiles()
+ .getServiceTempFiles(), path));
+ }
+ } catch (IOException e) {
+ throw new IOException(getErrorMsg(className, RPC_CLASS));
+ }
+
+ for (String method : methods) {
+ insertDataIntoJavaFile(file, method);
+ }
+ insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
+
+ return validateLineLength(file);
+ }
+
+ /**
+ * Generates event file.
+ *
+ * @param file generated file
+ * @param curNode current YANG node
+ * @param imports imports for file
+ * @throws IOException when fails to generate class file
+ */
+ public static void generateEventFile(File file, YangNode curNode,
+ List<String> imports)
+ throws IOException {
+
+ String className =
+ getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo()
+ .getJavaName()) + EVENT_STRING;
+
+ TempJavaEventFragmentFiles tempFiles =
+ ((TempJavaCodeFragmentFilesContainer) curNode)
+ .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
+
+ String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo()
+ .getBaseCodeGenPath() +
+ ((JavaFileInfoContainer) curNode).getJavaFileInfo()
+ .getPackageFilePath();
+ initiateJavaFileGeneration(file, GENERATE_EVENT_CLASS, imports, curNode,
+ className);
+ try {
+ insertDataIntoJavaFile(file, getEventEnumTypeStart() +
+ trimAtLast(getDataFromTempFileHandle(EVENT_ENUM_MASK,
+ tempFiles, path),
+ COMMA) + methodClose(FOUR_SPACE));
+
+ insertDataIntoJavaFile(file,
+ getDataFromTempFileHandle(EVENT_METHOD_MASK,
+ tempFiles, path));
+ } catch (IOException e) {
+ throw new IOException(getErrorMsg(className, EVENT_CLASS));
+ }
+
+ insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
+ validateLineLength(file);
+ }
+
+ /**
+ * Generates event listener file.
+ *
+ * @param file generated file
+ * @param curNode current YANG node
+ * @param imports imports for file
+ * @throws IOException when fails to generate class file
+ */
+ public static void generateEventListenerFile(File file, YangNode curNode,
+ List<String> imports)
+ throws IOException {
+
+ String className =
+ getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo()
+ .getJavaName()) + EVENT_LISTENER_STRING;
+
+ initiateJavaFileGeneration(file, GENERATE_EVENT_LISTENER_INTERFACE,
+ imports, curNode, className);
+ insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
+ validateLineLength(file);
+ }
+
+ /**
+ * Generates event subject's file.
+ *
+ * @param file file handle
+ * @param curNode current YANG node
+ * @throws IOException when fails to do IO exceptions
+ */
+ public static void generateEventSubjectFile(File file, YangNode curNode)
+ throws IOException {
+
+ String className =
+ getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo()
+ .getJavaName()) + EVENT_SUBJECT_NAME_SUFFIX;
+
+ initiateJavaFileGeneration(file, GENERATE_EVENT_SUBJECT_CLASS, null,
+ curNode, className);
+
+ String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo()
+ .getBaseCodeGenPath() +
+ ((JavaFileInfoContainer) curNode).getJavaFileInfo()
+ .getPackageFilePath();
+
+ TempJavaEventFragmentFiles tempFiles =
+ ((TempJavaCodeFragmentFilesContainer) curNode)
+ .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
+
+ insertDataIntoJavaFile(file, NEW_LINE);
+ try {
+ insertDataIntoJavaFile(
+ file, getDataFromTempFileHandle(EVENT_SUBJECT_ATTRIBUTE_MASK,
+ tempFiles, path));
+
+ insertDataIntoJavaFile(
+ file, getDataFromTempFileHandle(EVENT_SUBJECT_GETTER_MASK,
+ tempFiles, path));
+
+ insertDataIntoJavaFile(
+ file, getDataFromTempFileHandle(EVENT_SUBJECT_SETTER_MASK,
+ tempFiles, path));
+ } catch (IOException e) {
+ throw new IOException(getErrorMsg(className, EVENT_CLASS));
+ }
+
+ insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
+ validateLineLength(file);
+ }
+
+ /**
+ * Returns error message string.
+ *
+ * @param className name of the class
+ * @param fileType type of file
+ * @return error message string
+ */
+ private static String getErrorMsg(String className, String fileType) {
+ return "No data found in temporary java code fragment files for " +
+ className + " while " + fileType + " file generation.";
+ }
+
+ /**
+ * Checks whether leaf is present in YANG leaves holder.
+ *
+ * @param holder holder of YANG leaves
+ * @return true if leaves are present, false otherwise
+ */
+ private static boolean leavesPresent(YangLeavesHolder holder) {
+ return holder.getListOfLeaf() != null &&
+ !holder.getListOfLeaf().isEmpty();
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/JavaFileGeneratorUtils.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/JavaFileGeneratorUtils.java
new file mode 100644
index 0000000..81c7cb1
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/JavaFileGeneratorUtils.java
@@ -0,0 +1,851 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava.utils;
+
+import org.onosproject.yang.compiler.datamodel.InvalidOpTypeHolder;
+import org.onosproject.yang.compiler.datamodel.YangAtomicPath;
+import org.onosproject.yang.compiler.datamodel.YangAugment;
+import org.onosproject.yang.compiler.datamodel.YangLeafRef;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeIdentifier;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGeneratorInfo;
+import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoContainer;
+import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoTranslator;
+import org.onosproject.yang.compiler.translator.tojava.JavaImportData;
+import org.onosproject.yang.compiler.translator.tojava.JavaQualifiedTypeInfoTranslator;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaBeanFragmentFiles;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaCodeFragmentFiles;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaEnumerationFragmentFiles;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaEventFragmentFiles;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaFragmentFiles;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaServiceFragmentFiles;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaTypeFragmentFiles;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+import org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.DEFAULT_CLASS_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_IDENTITY_CLASS;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_KEY_CLASS;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_IMPL_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_INTERFACE_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.EDIT_CONTENT_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_NODES_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedTypeInfoOfCurNode;
+import static org.onosproject.yang.compiler.translator.tojava.YangJavaModelUtils.getNodesPackage;
+import static org.onosproject.yang.compiler.translator.tojava.utils.ClassDefinitionGenerator.generateClassDefinition;
+import static org.onosproject.yang.compiler.utils.UtilConstants.AUGMENTED;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ERROR_MSG_FOR_GEN_CODE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.LEAFREF;
+import static org.onosproject.yang.compiler.utils.UtilConstants.NEW_LINE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OP_PARAM;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PACKAGE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PERIOD;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SEMI_COLON;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SET_METHOD_PREFIX;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SLASH;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SPACE;
+import static org.onosproject.yang.compiler.utils.io.impl.CopyrightHeader.parseCopyrightHeader;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_CLASS;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_INTERFACE;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.DEFAULT_CLASS;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.ENUM_CLASS;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.EVENT;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.EVENT_LISTENER;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.EVENT_SUBJECT_CLASS;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.INTERFACE;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.RPC_INTERFACE;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.getJavaDoc;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getCamelCase;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getCapitalCase;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getJavaPackageFromPackagePath;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.parsePkg;
+
+/**
+ * Represents utilities for java file generator.
+ */
+public final class JavaFileGeneratorUtils {
+
+ /**
+ * Creates an instance of java file generator util.
+ */
+ private JavaFileGeneratorUtils() {
+ }
+
+ /**
+ * Returns a file object for generated file.
+ *
+ * @param filePath file package path
+ * @param fileName file name
+ * @param extension file extension
+ * @param handler cached file handle
+ * @return file object
+ */
+ public static File getFileObject(String filePath, String fileName,
+ String extension,
+ JavaFileInfoTranslator handler) {
+ return new File(handler.getBaseCodeGenPath() + filePath + SLASH +
+ fileName + extension);
+ }
+
+ /**
+ * Returns data stored in temporary files.
+ *
+ * @param tempFiles temporary file types
+ * @param tempHandle temp java fragment files
+ * @param path absolute path
+ * @return data stored in temporary files
+ * @throws IOException when failed to get the data from temporary file handle
+ */
+ static String getDataFromTempFileHandle(
+ int tempFiles, TempJavaFragmentFiles tempHandle, String path)
+ throws IOException {
+
+ TempJavaTypeFragmentFiles typeHandle = null;
+ if (tempHandle instanceof TempJavaTypeFragmentFiles) {
+ typeHandle = (TempJavaTypeFragmentFiles) tempHandle;
+ }
+
+ TempJavaBeanFragmentFiles beanHandle = null;
+ if (tempHandle instanceof TempJavaBeanFragmentFiles) {
+ beanHandle = (TempJavaBeanFragmentFiles) tempHandle;
+ }
+
+ TempJavaServiceFragmentFiles serviceHandle = null;
+ if (tempHandle instanceof TempJavaServiceFragmentFiles) {
+ serviceHandle = (TempJavaServiceFragmentFiles) tempHandle;
+ }
+
+ TempJavaEventFragmentFiles eventHandle = null;
+ if (tempHandle instanceof TempJavaEventFragmentFiles) {
+ eventHandle = (TempJavaEventFragmentFiles) tempHandle;
+ }
+
+ if ((tempFiles & ATTRIBUTES_MASK) != 0) {
+ return tempHandle.getTemporaryDataFromFileHandle(
+ tempHandle.getAttributesTempFileHandle(),
+ path);
+ }
+ if ((tempFiles & GETTER_FOR_INTERFACE_MASK) != 0) {
+ return tempHandle.getTemporaryDataFromFileHandle(
+ tempHandle.getGetterInterfaceTempFileHandle(),
+ path);
+ }
+ if ((tempFiles & SETTER_FOR_INTERFACE_MASK) != 0) {
+ return tempHandle.getTemporaryDataFromFileHandle(
+ tempHandle.getSetterInterfaceTempFileHandle(),
+ path);
+ }
+ if ((tempFiles & GETTER_FOR_CLASS_MASK) != 0) {
+ return tempHandle.getTemporaryDataFromFileHandle(
+ tempHandle.getGetterImplTempFileHandle(),
+ path);
+ }
+ if ((tempFiles & SETTER_FOR_CLASS_MASK) != 0) {
+ return tempHandle.getTemporaryDataFromFileHandle(
+ tempHandle.getSetterImplTempFileHandle(),
+ path);
+ }
+ if ((tempFiles & ADD_TO_LIST_INTERFACE_MASK) != 0) {
+ return tempHandle.getTemporaryDataFromFileHandle(
+ tempHandle.getAddToListInterfaceTempFileHandle(),
+ path);
+ }
+ if ((tempFiles & ADD_TO_LIST_IMPL_MASK) != 0) {
+ return tempHandle.getTemporaryDataFromFileHandle(
+ tempHandle.getAddToListImplTempFileHandle(),
+ path);
+ }
+ if ((tempFiles & FILTER_CONTENT_MATCH_FOR_LEAF_MASK) != 0) {
+ return tempHandle.getTemporaryDataFromFileHandle(
+ tempHandle.getSubtreeFilteringForLeafTempFileHandle(),
+ path);
+ }
+ if ((tempFiles & FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK) != 0) {
+ return tempHandle.getTemporaryDataFromFileHandle(
+ tempHandle.getGetSubtreeFilteringForListTempFileHandle(),
+ path);
+ }
+ if ((tempFiles & FILTER_CONTENT_MATCH_FOR_NODES_MASK) != 0) {
+ return tempHandle.getTemporaryDataFromFileHandle(
+ tempHandle.getGetSubtreeFilteringForChildNodeTempFileHandle(),
+ path);
+ }
+ if ((tempFiles & EDIT_CONTENT_MASK) != 0) {
+ return tempHandle.getTemporaryDataFromFileHandle(
+ tempHandle.getEditContentTempFileHandle(),
+ path);
+ }
+ if ((tempFiles & LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK) != 0) {
+ return tempHandle.getTemporaryDataFromFileHandle(
+ tempHandle.getLeafIdAttributeTempFileHandle(),
+ path);
+ }
+ if ((tempFiles & CONSTRUCTOR_IMPL_MASK) != 0) {
+ if (beanHandle == null) {
+ throw new TranslatorException("Required constructor info is" +
+ " missing.");
+ }
+ return beanHandle.getTemporaryDataFromFileHandle(
+ beanHandle.getConstructorImplTempFileHandle(),
+ path);
+ }
+ if ((tempFiles & HASH_CODE_IMPL_MASK) != 0) {
+ return tempHandle.getTemporaryDataFromFileHandle(
+ tempHandle.getHashCodeImplTempFileHandle(),
+ path);
+ }
+ if ((tempFiles & EQUALS_IMPL_MASK) != 0) {
+ return tempHandle.getTemporaryDataFromFileHandle(
+ tempHandle.getEqualsImplTempFileHandle(),
+ path);
+ }
+ if ((tempFiles & TO_STRING_IMPL_MASK) != 0) {
+ return tempHandle.getTemporaryDataFromFileHandle(
+ tempHandle.getToStringImplTempFileHandle(),
+ path);
+ }
+ if ((tempFiles & OF_STRING_IMPL_MASK) != 0) {
+ if (typeHandle == null) {
+ throw new TranslatorException("Required of string implementation" +
+ " info is missing.");
+ }
+ return typeHandle.getTemporaryDataFromFileHandle(
+ typeHandle.getOfStringImplTempFileHandle(), path);
+ }
+ if ((tempFiles & CONSTRUCTOR_FOR_TYPE_MASK) != 0) {
+ if (typeHandle == null) {
+ throw new TranslatorException("Required constructor implementation" +
+ " info is missing.");
+ }
+ return typeHandle.getTemporaryDataFromFileHandle(
+ typeHandle.getConstructorForTypeTempFileHandle(),
+ path);
+ }
+ if ((tempFiles & FROM_STRING_IMPL_MASK) != 0) {
+ return tempHandle.getTemporaryDataFromFileHandle(
+ tempHandle.getFromStringImplTempFileHandle(),
+ path);
+ }
+ if ((tempFiles & ENUM_IMPL_MASK) != 0) {
+ if (!(tempHandle instanceof TempJavaEnumerationFragmentFiles)) {
+ throw new TranslatorException("Required enum info is missing.");
+ }
+ TempJavaEnumerationFragmentFiles enumHandle =
+ (TempJavaEnumerationFragmentFiles) tempHandle;
+ return enumHandle.getTemporaryDataFromFileHandle(
+ enumHandle.getEnumClassTempFileHandle(), path);
+ }
+ if ((tempFiles & RPC_INTERFACE_MASK) != 0) {
+ if (serviceHandle == null) {
+ throw new TranslatorException("Required rpc interface info is" +
+ " missing.");
+ }
+ return serviceHandle.getTemporaryDataFromFileHandle(
+ serviceHandle.getRpcInterfaceTempFileHandle(),
+ path);
+ }
+ if ((tempFiles & EVENT_ENUM_MASK) != 0) {
+ if (eventHandle == null) {
+ throw new TranslatorException(
+ "Required event enum implementation info is missing.");
+ }
+ return eventHandle.getTemporaryDataFromFileHandle(
+ eventHandle.getEventEnumTempFileHandle(),
+ path);
+ }
+ if ((tempFiles & EVENT_METHOD_MASK) != 0) {
+ if (eventHandle == null) {
+ throw new TranslatorException(
+ "Required event method implementation info is missing.");
+ }
+ return eventHandle.getTemporaryDataFromFileHandle(
+ eventHandle.getEventMethodTempFileHandle(),
+ path);
+ }
+ if ((tempFiles & EVENT_SUBJECT_GETTER_MASK) != 0) {
+ if (eventHandle == null) {
+ throw new TranslatorException(
+ "Required event subject getter implementation info is" +
+ " missing.");
+ }
+ return eventHandle.getTemporaryDataFromFileHandle(
+ eventHandle.getEventSubjectGetterTempFileHandle(),
+ path);
+ }
+ if ((tempFiles & EVENT_SUBJECT_SETTER_MASK) != 0) {
+ if (eventHandle == null) {
+ throw new TranslatorException(
+ "Required event subject setter implementation info is" +
+ " missing.");
+ }
+ return eventHandle.getTemporaryDataFromFileHandle(
+ eventHandle.getEventSubjectSetterTempFileHandle(),
+ path);
+ }
+ if ((tempFiles & EVENT_SUBJECT_ATTRIBUTE_MASK) != 0) {
+ if (eventHandle == null) {
+ throw new TranslatorException(
+ "Required event subject attribute implementation info is" +
+ " missing.");
+ }
+ return eventHandle.getTemporaryDataFromFileHandle(
+ eventHandle.getEventSubjectAttributeTempFileHandle(),
+ path);
+ }
+ return null;
+ }
+
+ /**
+ * Initiates generation of file based on generated file type.
+ *
+ * @param file generated file
+ * @param className generated file class name
+ * @param genType generated file type
+ * @param imports imports for the file
+ * @param pkg generated file package
+ * @throws IOException when fails to generate a file
+ */
+ public static void initiateJavaFileGeneration(File file, String className,
+ int genType, List<String> imports,
+ String pkg)
+ throws IOException {
+
+ if (file.exists()) {
+ throw new IOException(" file " + file.getName() + " is already generated." +
+ ERROR_MSG_FOR_GEN_CODE);
+ }
+
+ boolean isFileCreated;
+ try {
+ isFileCreated = file.createNewFile();
+ if (!isFileCreated) {
+ throw new IOException("Failed to create " + file.getName() +
+ " class file.");
+ }
+ appendContents(file, className, genType, imports, pkg);
+ } catch (IOException e) {
+ throw new IOException("Failed to append contents in " + file.getName() +
+ " class file.");
+ }
+ }
+
+ /**
+ * Initiates generation of file based on generated file type.
+ *
+ * @param file generated file
+ * @param genType generated file type
+ * @param imports imports for the file
+ * @param curNode current YANG node
+ * @param name class name
+ * @throws IOException when fails to generate a file
+ */
+ public static void initiateJavaFileGeneration(File file, int genType,
+ List<String> imports,
+ YangNode curNode, String name)
+ throws IOException {
+
+ if (file.exists()) {
+ throw new IOException(" file " + file.getName() + " is already generated." +
+ ERROR_MSG_FOR_GEN_CODE);
+ }
+ boolean isFileCreated;
+ try {
+ isFileCreated = file.createNewFile();
+ if (!isFileCreated) {
+ throw new IOException("Failed to create " + file.getName() +
+ " class file.");
+ }
+ appendContents(file, genType, imports, curNode, name);
+ } catch (IOException e) {
+ throw new IOException("Failed to append contents in " + file.getName() +
+ " class file.");
+ }
+ }
+
+ /**
+ * Appends all the contents into a generated java file.
+ *
+ * @param file generated file
+ * @param genType generated file type
+ * @param importsList list of java imports
+ * @param curNode current YANG node
+ * @param className class name
+ * @throws IOException when fails to do IO operations
+ */
+ private static void appendContents(File file, int genType,
+ List<String> importsList, YangNode curNode,
+ String className)
+ throws IOException {
+
+ JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode)
+ .getJavaFileInfo();
+
+ String name = javaFileInfo.getJavaName();
+ String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo
+ .getPackageFilePath();
+
+ String pkgString;
+ if (genType == GENERATE_EVENT_CLASS ||
+ genType == GENERATE_EVENT_LISTENER_INTERFACE ||
+ genType == GENERATE_EVENT_SUBJECT_CLASS) {
+ pkgString = parsePackageString((path + PERIOD + name)
+ .toLowerCase(), importsList);
+ } else {
+ pkgString = parsePackageString(path, importsList);
+ }
+ switch (genType) {
+ case INTERFACE_MASK:
+ appendHeaderContents(file, pkgString, importsList);
+ write(file, genType, INTERFACE, curNode, className, false);
+ break;
+ case GENERATE_KEY_CLASS:
+ appendHeaderContents(file, pkgString, importsList);
+ write(file, genType, DEFAULT_CLASS, curNode, className, false);
+ break;
+ case DEFAULT_CLASS_MASK:
+ appendHeaderContents(file, pkgString, importsList);
+ write(file, genType, DEFAULT_CLASS, curNode, className,
+ curNode.isOpTypeReq());
+ break;
+ case BUILDER_CLASS_MASK:
+ write(file, genType, BUILDER_CLASS, curNode, className, false);
+ break;
+ case BUILDER_INTERFACE_MASK:
+ write(file, genType, BUILDER_INTERFACE, curNode, className, false);
+ break;
+ case GENERATE_SERVICE_AND_MANAGER:
+ appendHeaderContents(file, pkgString, importsList);
+ write(file, genType, RPC_INTERFACE, curNode, className, false);
+ break;
+ case GENERATE_EVENT_CLASS:
+ appendHeaderContents(file, pkgString, importsList);
+ write(file, genType, EVENT, curNode, className, false);
+ break;
+ case GENERATE_EVENT_LISTENER_INTERFACE:
+ appendHeaderContents(file, pkgString, importsList);
+ write(file, genType, EVENT_LISTENER, curNode, className, false);
+ break;
+ case GENERATE_EVENT_SUBJECT_CLASS:
+ appendHeaderContents(file, pkgString, importsList);
+ write(file, genType, EVENT_SUBJECT_CLASS, curNode, className, false);
+ break;
+ case GENERATE_IDENTITY_CLASS:
+ appendHeaderContents(file, pkgString, importsList);
+ write(file, genType, EVENT_SUBJECT_CLASS, curNode, className, false);
+ break;
+ default:
+ break;
+ }
+ }
+
+ /**
+ * Appends all the contents into a generated java file.
+ *
+ * @param file generated file
+ * @param fileName generated file name
+ * @param genType generated file type
+ * @param importsList list of java imports
+ * @param pkg generated file package
+ * @throws IOException when fails to append contents
+ */
+ private static void appendContents(File file, String fileName, int genType,
+ List<String> importsList, String pkg)
+ throws IOException {
+
+ String pkgString = parsePackageString(pkg, importsList);
+
+ switch (genType) {
+ case GENERATE_TYPEDEF_CLASS:
+ appendHeaderContents(file, pkgString, importsList);
+ write(file, fileName, genType, DEFAULT_CLASS);
+ break;
+ case GENERATE_UNION_CLASS:
+ appendHeaderContents(file, pkgString, importsList);
+ write(file, fileName, genType, DEFAULT_CLASS);
+ break;
+ case GENERATE_ENUM_CLASS:
+ appendHeaderContents(file, pkgString, importsList);
+ write(file, fileName, genType, ENUM_CLASS);
+ break;
+ default:
+ break;
+ }
+ }
+
+ /**
+ * Removes base directory path from package and generates package string for file.
+ *
+ * @param javaPkg generated java package
+ * @param importsList list of imports
+ * @return package string
+ */
+ private static String parsePackageString(String javaPkg,
+ List<String> importsList) {
+
+ javaPkg = parsePkg(getJavaPackageFromPackagePath(javaPkg));
+ if (importsList != null) {
+ if (!importsList.isEmpty()) {
+ return PACKAGE + SPACE + javaPkg + SEMI_COLON + NEW_LINE;
+ } else {
+ return PACKAGE + SPACE + javaPkg + SEMI_COLON;
+ }
+ } else {
+ return PACKAGE + SPACE + javaPkg + SEMI_COLON;
+ }
+ }
+
+ /**
+ * Appends other contents to interface, impl and typedef classes.
+ * for example : ONOS copyright, imports and package.
+ *
+ * @param file generated file
+ * @param pkg generated package
+ * @param importsList list of imports
+ * @throws IOException when fails to append contents
+ */
+ private static void appendHeaderContents(File file, String pkg,
+ List<String> importsList)
+ throws IOException {
+
+ insertDataIntoJavaFile(file, parseCopyrightHeader());
+ insertDataIntoJavaFile(file, pkg);
+
+ /*
+ * TODO: add the file header using comments for snippet of yang file.
+ * JavaCodeSnippetGen.getFileHeaderComment
+ */
+
+ if (importsList != null) {
+ insertDataIntoJavaFile(file, NEW_LINE);
+ for (String imports : importsList) {
+ insertDataIntoJavaFile(file, imports);
+ }
+ }
+ }
+
+ /**
+ * Writes data to the specific generated file.
+ *
+ * @param file generated file
+ * @param genType generated file type
+ * @param javaDocType java doc type
+ * @param curNode current YANG node
+ * @param fileName file name
+ * @param isForClass is for default class
+ * @throws IOException when fails to write into a file
+ */
+ private static void write(File file, int genType, JavaDocType javaDocType,
+ YangNode curNode, String fileName, boolean isForClass)
+ throws IOException {
+ insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName,
+ isForClass, null));
+ insertDataIntoJavaFile(file, generateClassDefinition(genType,
+ fileName, curNode));
+ }
+
+ /**
+ * Writes data to the specific generated file.
+ *
+ * @param file generated file
+ * @param fileName file name
+ * @param genType generated file type
+ * @param javaDocType java doc type
+ * @throws IOException when fails to write into a file
+ */
+ private static void write(File file, String fileName, int genType,
+ JavaDocType javaDocType) throws IOException {
+ insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false,
+ null));
+ insertDataIntoJavaFile(file, generateClassDefinition(genType, fileName));
+ }
+
+ /**
+ * Returns set of node identifiers.
+ *
+ * @param parent parent node
+ * @return set of node identifiers
+ */
+ static List<YangAtomicPath> getSetOfNodeIdentifiers(YangNode parent) {
+
+ List<YangAtomicPath> targets = new ArrayList<>();
+ YangNodeIdentifier nodeId;
+ List<YangAugment> augments = getListOfAugments(parent);
+ for (YangAugment augment : augments) {
+ nodeId = augment.getTargetNode().get(0).getNodeIdentifier();
+ augment.setSetterMethodName(getAugmentSetterName(augment));
+ if (validateNodeIdentifierInSet(nodeId, targets)) {
+ targets.add(augment.getTargetNode().get(0));
+ }
+ }
+ return targets;
+ }
+
+ /* Returns list of augments.*/
+ private static List<YangAugment> getListOfAugments(YangNode parent) {
+ List<YangAugment> augments = new ArrayList<>();
+ YangNode child = parent.getChild();
+ while (child != null) {
+ if (child instanceof YangAugment) {
+ augments.add((YangAugment) child);
+ }
+ child = child.getNextSibling();
+ }
+ return augments;
+ }
+
+ /* Returns setter method name for augment.*/
+ private static String getAugmentSetterName(YangAugment augment) {
+ YangAtomicPath atomicPath = augment.getTargetNode().get(0);
+ YangNode augmentedNode = atomicPath.getResolvedNode();
+ String setterName = SET_METHOD_PREFIX + AUGMENTED
+ + getCapitalCase(((JavaFileInfoContainer) augmentedNode.getParent())
+ .getJavaFileInfo().getJavaName())
+ + getCapitalCase(((JavaFileInfoContainer) augmentedNode)
+ .getJavaFileInfo().getJavaName());
+ return setterName;
+ }
+
+ /*Validates the set for duplicate names of node identifiers.*/
+ private static boolean validateNodeIdentifierInSet(
+ YangNodeIdentifier nodeId, List<YangAtomicPath> targets) {
+ boolean isPresent = true;
+ for (YangAtomicPath target : targets) {
+ if (target.getNodeIdentifier().getName().equals(nodeId.getName())) {
+ if (target.getNodeIdentifier().getPrefix() != null) {
+ isPresent = !target.getNodeIdentifier().getPrefix()
+ .equals(nodeId.getPrefix());
+ } else {
+ isPresent = nodeId.getPrefix() != null;
+ }
+ }
+ }
+ return isPresent;
+ }
+
+ /**
+ * Adds resolved augmented node imports to manager class.
+ *
+ * @param parent parent node
+ */
+ public static void addResolvedAugmentedDataNodeImports(YangNode parent) {
+ List<YangAtomicPath> targets = getSetOfNodeIdentifiers(parent);
+ if (targets.isEmpty()) {
+ return;
+ }
+
+ YangNode node = targets.get(0).getResolvedNode();
+ if (node instanceof InvalidOpTypeHolder) {
+ return;
+ }
+
+ TempJavaCodeFragmentFiles tempJavaCodeFragmentFiles = (
+ (JavaCodeGeneratorInfo) parent)
+ .getTempJavaCodeFragmentFiles();
+ YangNode augmentedNode;
+ JavaQualifiedTypeInfoTranslator typeInfo;
+ String curNodeName;
+ JavaFileInfoTranslator parentInfo = ((JavaFileInfoContainer) parent)
+ .getJavaFileInfo();
+ for (YangAtomicPath nodeId : targets) {
+ augmentedNode = nodeId.getResolvedNode().getParent();
+ curNodeName = getCurNodeName(augmentedNode, parentInfo
+ .getPluginConfig());
+
+ typeInfo =
+ getQTypeInfoOfNode(
+ augmentedNode, curNodeName + OP_PARAM,
+ parentInfo.getPluginConfig());
+
+ tempJavaCodeFragmentFiles.getServiceTempFiles()
+ .getJavaImportData().addImportInfo(
+ typeInfo, parentInfo.getJavaName(),
+ parentInfo.getPackage());
+ typeInfo =
+ getQTypeInfoOfNode(
+ augmentedNode, curNodeName, parentInfo
+ .getPluginConfig());
+
+ tempJavaCodeFragmentFiles.getServiceTempFiles()
+ .getJavaImportData().addImportInfo(
+ typeInfo, parentInfo.getJavaName(),
+ parentInfo.getPackage());
+ }
+ }
+
+ /**
+ * Returns qualified type info of augmented node.
+ *
+ * @param augmentedNode augmented node
+ * @param curNodeName current node name
+ * @param pluginConfig plugin configurations
+ * @return qualified type info of augmented node
+ */
+ private static JavaQualifiedTypeInfoTranslator getQTypeInfoOfNode(
+ YangNode augmentedNode, String curNodeName, YangPluginConfig pluginConfig) {
+ JavaQualifiedTypeInfoTranslator javaQualifiedTypeInfo =
+ getQualifiedTypeInfoOfCurNode(augmentedNode,
+ curNodeName);
+ if (javaQualifiedTypeInfo.getPkgInfo() == null) {
+ javaQualifiedTypeInfo.setPkgInfo(getNodesPackage(augmentedNode,
+ pluginConfig));
+ }
+ return javaQualifiedTypeInfo;
+ }
+
+ /**
+ * Validates if augmented node is imported in parent node.
+ *
+ * @param javaQualifiedTypeInfo qualified type info
+ * @param importData import data
+ * @return true if present in imports
+ */
+ private static boolean validateQualifiedInfoOfAugmentedNode(
+ JavaQualifiedTypeInfoTranslator javaQualifiedTypeInfo,
+ JavaImportData importData) {
+ for (JavaQualifiedTypeInfoTranslator curImportInfo : importData
+ .getImportSet()) {
+ if (curImportInfo.getClassInfo()
+ .contentEquals(javaQualifiedTypeInfo.getClassInfo())) {
+ return curImportInfo.getPkgInfo()
+ .contentEquals(javaQualifiedTypeInfo.getPkgInfo());
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Return augmented class name for data methods in manager and service.
+ *
+ * @param augmentedNode augmented node
+ * @param parent parent node
+ * @return augmented class name for data methods in manager and service
+ */
+ static String getAugmentedClassNameForDataMethods(YangNode augmentedNode,
+ YangNode parent) {
+ String curNodeName;
+ JavaQualifiedTypeInfoTranslator javaQualifiedTypeInfo;
+ JavaFileInfoTranslator parentInfo = ((JavaFileInfoContainer) parent)
+ .getJavaFileInfo();
+ YangPluginConfig pluginConfig = parentInfo.getPluginConfig();
+ TempJavaServiceFragmentFiles tempJavaServiceFragmentFiles = (
+ (JavaCodeGeneratorInfo) parent).getTempJavaCodeFragmentFiles()
+ .getServiceTempFiles();
+ curNodeName = getCurNodeName(augmentedNode, pluginConfig);
+
+ javaQualifiedTypeInfo = getQTypeInfoOfNode(augmentedNode,
+ getCapitalCase(curNodeName),
+ parentInfo.getPluginConfig());
+ if (validateQualifiedInfoOfAugmentedNode(javaQualifiedTypeInfo,
+ tempJavaServiceFragmentFiles
+ .getJavaImportData())) {
+ return javaQualifiedTypeInfo.getClassInfo();
+ } else {
+ return javaQualifiedTypeInfo.getPkgInfo() + PERIOD +
+ javaQualifiedTypeInfo.getClassInfo();
+ }
+ }
+
+ //Returns class name of current node
+ static String getCurNodeName(YangNode node, YangPluginConfig config) {
+ if (((JavaFileInfoContainer) node).getJavaFileInfo()
+ .getJavaName() != null) {
+ return getCapitalCase(((JavaFileInfoContainer) node)
+ .getJavaFileInfo()
+ .getJavaName());
+ } else {
+ return getCapitalCase(getCamelCase(node.getName(), config
+ .getConflictResolver()));
+ }
+ }
+
+ /**
+ * Checks if the type name is leafref and returns the effective type name.
+ *
+ * @param attributeName name of the current type
+ * @param attributeType effective type
+ * @return name of the effective type
+ */
+ public static String isTypeNameLeafref(String attributeName,
+ YangType<?> attributeType) {
+ if (attributeName.equalsIgnoreCase(LEAFREF)) {
+ YangLeafRef leafRef = (YangLeafRef) attributeType.getDataTypeExtendedInfo();
+ if (leafRef != null && !leafRef.isInGrouping()) {
+ return attributeType.getDataTypeName();
+ }
+ }
+ return attributeName;
+ // TODO handle union scenario, having multiple leafref.
+ }
+
+ /**
+ * Checks if the type is leafref and returns the effective type.
+ *
+ * @param attributeType current type
+ * @return effective type
+ */
+ public static YangType isTypeLeafref(YangType<?> attributeType) {
+ if (attributeType.getDataType() == YangDataTypes.LEAFREF) {
+ YangLeafRef leafRef = (YangLeafRef) attributeType
+ .getDataTypeExtendedInfo();
+ if (!leafRef.isInGrouping()) {
+ return leafRef.getEffectiveDataType();
+ }
+ }
+ return attributeType;
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/JavaIdentifierSyntax.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/JavaIdentifierSyntax.java
new file mode 100644
index 0000000..0a065d6
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/JavaIdentifierSyntax.java
@@ -0,0 +1,257 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava.utils;
+
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangRevision;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoContainer;
+import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoTranslator;
+import org.onosproject.yang.compiler.utils.io.YangToJavaNamingConflictUtil;
+
+import java.io.File;
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.getParentNodeInGenCode;
+import static org.onosproject.yang.compiler.utils.UtilConstants.COLON;
+import static org.onosproject.yang.compiler.utils.UtilConstants.DEFAULT_BASE_PKG;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EMPTY_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.HYPHEN;
+import static org.onosproject.yang.compiler.utils.UtilConstants.JAVA_KEY_WORDS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PERIOD;
+import static org.onosproject.yang.compiler.utils.UtilConstants.QUOTES;
+import static org.onosproject.yang.compiler.utils.UtilConstants.REGEX_FOR_FIRST_DIGIT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.REGEX_WITH_ALL_SPECIAL_CHAR;
+import static org.onosproject.yang.compiler.utils.UtilConstants.REVISION_PREFIX;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SLASH;
+import static org.onosproject.yang.compiler.utils.UtilConstants.UNDER_SCORE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.VERSION_PREFIX;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.addPackageInfo;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.createDirectories;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getAbsolutePackagePath;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getJavaPackageFromPackagePath;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getPackageDirPathFromJavaJPackage;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getPrefixForIdentifier;
+
+/**
+ * Represents an utility Class for translating the name from YANG to java convention.
+ */
+public final class JavaIdentifierSyntax {
+
+ private static final int INDEX_ZERO = 0;
+ private static final int INDEX_ONE = 1;
+ private static final int VALUE_CHECK = 10;
+ private static final String ZERO = "0";
+ private static final String DATE_FORMAT = "yyyy-MM-dd";
+
+ /**
+ * Create instance of java identifier syntax.
+ */
+ private JavaIdentifierSyntax() {
+ }
+
+ /**
+ * Returns the root package string.
+ *
+ * @param version YANG version
+ * @param nameSpace name space of the module
+ * @param revision revision of the module defined
+ * @param resolver object of YANG to java naming conflict util
+ * @return the root package string
+ */
+ public static String getRootPackage(byte version, String nameSpace,
+ YangRevision revision,
+ YangToJavaNamingConflictUtil resolver) {
+
+ StringBuilder pkg = new StringBuilder(DEFAULT_BASE_PKG)
+ .append(PERIOD)
+ .append(getYangVersion(version))
+ .append(PERIOD)
+ .append(getPkgFromNameSpace(nameSpace, resolver));
+ if (revision != null) {
+ pkg.append(PERIOD)
+ .append(getYangRevisionStr(revision.getRevDate()));
+ }
+ return pkg.toString().toLowerCase();
+ }
+
+
+ /**
+ * Returns version.
+ *
+ * @param ver YANG version
+ * @return version
+ */
+ private static String getYangVersion(byte ver) {
+ return VERSION_PREFIX + ver;
+ }
+
+ /**
+ * Returns package name from name space.
+ *
+ * @param nameSpace name space of YANG module
+ * @param resolver object of YANG to java naming conflict util
+ * @return java package name as per java rules
+ */
+ private static String getPkgFromNameSpace(String nameSpace,
+ YangToJavaNamingConflictUtil resolver) {
+
+ ArrayList<String> pkgArr = new ArrayList<>();
+ nameSpace = nameSpace.replace(QUOTES, EMPTY_STRING);
+ String properNameSpace = nameSpace.replaceAll
+ (REGEX_WITH_ALL_SPECIAL_CHAR, COLON);
+ String[] nameSpaceArr = properNameSpace.split(COLON);
+
+ Collections.addAll(pkgArr, nameSpaceArr);
+ return getPkgFrmArr(pkgArr, resolver);
+ }
+
+ /**
+ * Returns revision string array.
+ *
+ * @param date YANG module revision
+ * @return revision string
+ */
+ private static String getYangRevisionStr(Date date) {
+ SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
+ String dateInString = sdf.format(date);
+ String[] revisionArr = dateInString.split(HYPHEN);
+
+ StringBuilder rev = new StringBuilder(REVISION_PREFIX)
+ .append(revisionArr[INDEX_ZERO]);
+
+ for (int i = INDEX_ONE; i < revisionArr.length; i++) {
+ Integer val = Integer.parseInt(revisionArr[i]);
+ if (val < VALUE_CHECK) {
+ rev.append(ZERO);
+ }
+ rev.append(val);
+ }
+ return rev.toString();
+ }
+
+ /**
+ * Returns the package string.
+ *
+ * @param pkgArr package array
+ * @param conflictResolver object of YANG to java naming conflict util
+ * @return package string
+ */
+ private static String getPkgFrmArr(ArrayList<String> pkgArr, YangToJavaNamingConflictUtil conflictResolver) {
+
+ StringBuilder pkg = new StringBuilder();
+ int size = pkgArr.size();
+ int i = 0;
+ for (String member : pkgArr) {
+ boolean presenceOfKeyword = JAVA_KEY_WORDS.contains(member.toLowerCase());
+ if (presenceOfKeyword || member.matches(REGEX_FOR_FIRST_DIGIT)) {
+ String prefix = getPrefixForIdentifier(conflictResolver);
+ member = prefix + member;
+ }
+ pkg.append(member);
+ if (i != size - 1) {
+ pkg.append(PERIOD);
+ }
+ i++;
+ }
+ return pkg.toString();
+ }
+
+ /**
+ * Returns enum's java name.
+ *
+ * @param name enum's name
+ * @return enum's java name
+ */
+ public static String getEnumJavaAttribute(String name) {
+
+ name = name.replaceAll(REGEX_WITH_ALL_SPECIAL_CHAR, COLON);
+ String[] strArray = name.split(COLON);
+ StringBuilder output = new StringBuilder();
+ if (strArray[0].isEmpty()) {
+ List<String> stringArrangement = new ArrayList<>();
+ stringArrangement.addAll(Arrays.asList(strArray).subList(1, strArray.length));
+ strArray = stringArrangement.toArray(new String[stringArrangement.size()]);
+ }
+ for (int i = 0; i < strArray.length; i++) {
+ if (i > 0 && i < strArray.length) {
+ output.append(UNDER_SCORE);
+ }
+ output.append(strArray[i]);
+ }
+ return output.toString();
+ }
+
+ /**
+ * Creates a package structure with package info java file if not present.
+ *
+ * @param yangNode YANG node for which code is being generated
+ * @throws IOException any IO exception
+ */
+ public static void createPackage(YangNode yangNode)
+ throws IOException {
+ if (!(yangNode instanceof JavaFileInfoContainer)) {
+ throw new TranslatorException("current node must have java file info " +
+ yangNode.getName() + " in " +
+ yangNode.getLineNumber() + " at " +
+ yangNode.getCharPosition() +
+ " in " + yangNode.getFileName());
+ }
+ String pkgInfo;
+ JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) yangNode)
+ .getJavaFileInfo();
+ String pkg = getAbsolutePackagePath(javaFileInfo.getBaseCodeGenPath(),
+ javaFileInfo.getPackageFilePath());
+ JavaFileInfoTranslator parentInfo;
+ if (!doesPackageExist(pkg)) {
+ try {
+ File pack = createDirectories(pkg);
+ YangNode parent = getParentNodeInGenCode(yangNode);
+ if (parent != null) {
+ parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
+ pkgInfo = parentInfo.getJavaName();
+ addPackageInfo(pack, pkgInfo, getJavaPackageFromPackagePath(pkg),
+ true);
+ } else {
+ pkgInfo = javaFileInfo.getJavaName();
+ addPackageInfo(pack, pkgInfo, getJavaPackageFromPackagePath(pkg),
+ false);
+ }
+ } catch (IOException e) {
+ throw new IOException("failed to create package-info file");
+ }
+ }
+ }
+
+ /**
+ * Checks if the package directory structure created.
+ *
+ * @param pkg Package to check if it is created
+ * @return existence status of package
+ */
+ public static boolean doesPackageExist(String pkg) {
+ File pkgDir = new File(getPackageDirPathFromJavaJPackage(pkg));
+ File pkgWithFile = new File(pkgDir + SLASH + "package-info.java");
+ return pkgDir.exists() && pkgWithFile.isFile();
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/MethodBodyTypes.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/MethodBodyTypes.java
new file mode 100644
index 0000000..a5fcef3
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/MethodBodyTypes.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava.utils;
+
+/**
+ * Represents method body types.
+ */
+enum MethodBodyTypes {
+
+ //Getter method body.
+ GETTER,
+
+ //Setter method body.
+ SETTER,
+
+ //Build method body.
+ BUILD,
+
+ //Constructor method body.
+ CONSTRUCTOR,
+
+ //Default constructor method body.
+ DEFAULT_CONSTRUCTOR,
+
+ //Hash code method body.
+ HASH_CODE,
+
+ //To string method body.
+ TO_STRING,
+
+ //Equals method body.
+ EQUALS,
+
+ //add to list method body.
+ ADD_TO_LIST,
+
+ //Augment map getter for full map.
+ AUGMENTED_MAP_GETTER,
+
+ //Augment map getter for value.
+ AUGMENTED_MAP_GET_VALUE,
+
+ //Augment map add
+ AUGMENTED_MAP_ADD,
+
+ //Manager methods
+ MANAGER_METHODS,
+
+ //Of method.
+ OF_METHOD,
+
+ //Hash code method
+ HASH_CODE_METHOD,
+
+ //Equals method.
+ EQUALS_METHOD,
+
+ //To string method
+ TO_STRING_METHOD,
+
+ //Enum method int value.
+ ENUM_METHOD_INT_VALUE,
+
+ //Enum method string value.
+ ENUM_METHOD_STRING_VALUE
+
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/MethodClassTypes.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/MethodClassTypes.java
new file mode 100644
index 0000000..54322cb
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/MethodClassTypes.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava.utils;
+
+/**
+ * Represents java method types for classes.
+ */
+enum MethodClassTypes {
+
+ //Method for interface files.
+ INTERFACE_TYPE,
+
+ //Method for implementation classes.
+ CLASS_TYPE
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/MethodsGenerator.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/MethodsGenerator.java
new file mode 100644
index 0000000..81e86a7
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/MethodsGenerator.java
@@ -0,0 +1,2107 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava.utils;
+
+import org.onosproject.yang.compiler.datamodel.InvalidOpTypeHolder;
+import org.onosproject.yang.compiler.datamodel.RpcNotificationContainer;
+import org.onosproject.yang.compiler.datamodel.YangAppDataStructure;
+import org.onosproject.yang.compiler.datamodel.YangAtomicPath;
+import org.onosproject.yang.compiler.datamodel.YangCompilerAnnotation;
+import org.onosproject.yang.compiler.datamodel.YangDataStructure;
+import org.onosproject.yang.compiler.datamodel.YangEnum;
+import org.onosproject.yang.compiler.datamodel.YangEnumeration;
+import org.onosproject.yang.compiler.datamodel.YangIdentity;
+import org.onosproject.yang.compiler.datamodel.YangIdentityRef;
+import org.onosproject.yang.compiler.datamodel.YangLeafRef;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.translator.tojava.JavaAttributeInfo;
+import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoContainer;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+import org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.IDENTITYREF;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
+import static org.onosproject.yang.compiler.translator.tojava.utils.BracketType.OPEN_CLOSE_BRACKET;
+import static org.onosproject.yang.compiler.translator.tojava.utils.IndentationType.EIGHT_SPACE;
+import static org.onosproject.yang.compiler.translator.tojava.utils.IndentationType.FOUR_SPACE;
+import static org.onosproject.yang.compiler.translator.tojava.utils.IndentationType.TWELVE_SPACE;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaFileGeneratorUtils.getAugmentedClassNameForDataMethods;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaFileGeneratorUtils.getCurNodeName;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaFileGeneratorUtils.getSetOfNodeIdentifiers;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaIdentifierSyntax.getEnumJavaAttribute;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodBodyTypes.AUGMENTED_MAP_ADD;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodBodyTypes.AUGMENTED_MAP_GET_VALUE;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodBodyTypes.GETTER;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodBodyTypes.MANAGER_METHODS;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodBodyTypes.SETTER;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodBodyTypes.TO_STRING;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodClassTypes.CLASS_TYPE;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodClassTypes.INTERFACE_TYPE;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.brackets;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getBitSetAttr;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getCatchSubString;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getCompareToString;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getExceptionThrowString;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getForLoopString;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getGreaterThanCondition;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getIfConditionBegin;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getLeafFlagSetString;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getLesserThanCondition;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getListAttribute;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getNewInstance;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getNewLineAndSpace;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getOmitNullValueString;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getOpenCloseParaWithValue;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getOverRideString;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getParseFromStringMethod;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getPatternQuoteString;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getQuotedString;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getReturnOfSubString;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getReturnString;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getSetValueParaCondition;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getStringBuilderAttr;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getToStringCall;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getTrySubString;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getTwoParaEqualsString;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.ifAndAndCondition;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.ifConditionForIntInTypeDefConstructor;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.ifEqualEqualCondition;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.methodBody;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.methodClose;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.methodSignature;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.methodSignatureClose;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.multiAttrMethodSignature;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.signatureClose;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ADD;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ADD_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.AND;
+import static org.onosproject.yang.compiler.utils.UtilConstants.APPEND;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ARRAY_LIST_INIT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.AUGMENTED;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BASE64;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BIG_INTEGER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BITS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BIT_SET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BOOLEAN_DATA_TYPE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BUILD;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BUILDER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BUILDER_LOWER_CASE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BUILD_FOR_FILTER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.CASE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.CLASS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.CLASS_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.CLOSE_CURLY_BRACKET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.CLOSE_PARENTHESIS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.COLON;
+import static org.onosproject.yang.compiler.utils.UtilConstants.COMMA;
+import static org.onosproject.yang.compiler.utils.UtilConstants.COMPARE_TO;
+import static org.onosproject.yang.compiler.utils.UtilConstants.DECODE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.DEFAULT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.DEFAULT_CAPS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.DIAMOND_CLOSE_BRACKET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.DIAMOND_OPEN_BRACKET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ELSE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EMPTY_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ENCODE_TO_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ENUM;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EQUAL;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EQUALS_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EXTEND;
+import static org.onosproject.yang.compiler.utils.UtilConstants.FALSE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.FOR;
+import static org.onosproject.yang.compiler.utils.UtilConstants.FOR_TYPE_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.FOUR_SPACE_INDENTATION;
+import static org.onosproject.yang.compiler.utils.UtilConstants.FROM_STRING_METHOD_NAME;
+import static org.onosproject.yang.compiler.utils.UtilConstants.FROM_STRING_PARAM_NAME;
+import static org.onosproject.yang.compiler.utils.UtilConstants.GET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.GET_DECODER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.GET_ENCODER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.GET_METHOD_PREFIX;
+import static org.onosproject.yang.compiler.utils.UtilConstants.GOOGLE_MORE_OBJECT_METHOD_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.HASH;
+import static org.onosproject.yang.compiler.utils.UtilConstants.HASH_CODE_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.IF;
+import static org.onosproject.yang.compiler.utils.UtilConstants.INSTANCE_OF;
+import static org.onosproject.yang.compiler.utils.UtilConstants.INT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.IS_EMPTY;
+import static org.onosproject.yang.compiler.utils.UtilConstants.IS_SELECT_LEAF;
+import static org.onosproject.yang.compiler.utils.UtilConstants.KEYS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.LEAF;
+import static org.onosproject.yang.compiler.utils.UtilConstants.LEAF_IDENTIFIER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.LINKED_HASH_MAP;
+import static org.onosproject.yang.compiler.utils.UtilConstants.LINKED_HASH_SET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.LONG;
+import static org.onosproject.yang.compiler.utils.UtilConstants.MAX_RANGE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.MIN_RANGE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.NEG_ONE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.NEW;
+import static org.onosproject.yang.compiler.utils.UtilConstants.NEW_LINE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.NOT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.NULL;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OBJ;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OBJECT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OBJECT_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OF;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OF_CAPS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ONE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OPEN_CLOSE_BRACKET_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OPEN_CURLY_BRACKET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OPEN_PARENTHESIS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OPERATION_TYPE_ATTRIBUTE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OP_PARAM;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OTHER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OVERRIDE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PERIOD;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PRIORITY_QUEUE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PRIVATE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PROCESS_SUBTREE_FILTERING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PROTECTED;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PUBLIC;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PUT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.QUESTION_MARK;
+import static org.onosproject.yang.compiler.utils.UtilConstants.QUOTES;
+import static org.onosproject.yang.compiler.utils.UtilConstants.RETURN;
+import static org.onosproject.yang.compiler.utils.UtilConstants.RPC_INPUT_VAR_NAME;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SCHEMA_NAME;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SELECT_ALL_CHILD;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SEMI_COLON;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SET_METHOD_PREFIX;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SET_SELECT_LEAF;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SET_VALUE_PARA;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SIXTEEN_SPACE_INDENTATION;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SPACE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SPLIT_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SQUARE_BRACKETS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.STATIC;
+import static org.onosproject.yang.compiler.utils.UtilConstants.STRING_BUILDER_VAR;
+import static org.onosproject.yang.compiler.utils.UtilConstants.STRING_DATA_TYPE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SUBTREE_FILTERED;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SUFFIX_S;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SWITCH;
+import static org.onosproject.yang.compiler.utils.UtilConstants.THIS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.TMP_VAL;
+import static org.onosproject.yang.compiler.utils.UtilConstants.TO_CAPS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.TO_STRING_METHOD;
+import static org.onosproject.yang.compiler.utils.UtilConstants.TRIM_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.TRUE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.TWELVE_SPACE_INDENTATION;
+import static org.onosproject.yang.compiler.utils.UtilConstants.VALIDATE_RANGE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.VALUE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.VALUE_CAPS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.VALUE_LEAF;
+import static org.onosproject.yang.compiler.utils.UtilConstants.VALUE_LEAF_SET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.VOID;
+import static org.onosproject.yang.compiler.utils.UtilConstants.YANG_AUGMENTED_INFO;
+import static org.onosproject.yang.compiler.utils.UtilConstants.YANG_AUGMENTED_INFO_LOWER_CASE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ZERO;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.BUILD_METHOD;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.CONSTRUCTOR;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.DEFAULT_CONSTRUCTOR;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.FROM_METHOD;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.MANAGER_SETTER_METHOD;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.OF_METHOD;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.SETTER_METHOD;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.TYPE_CONSTRUCTOR;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.generateForAddAugmentation;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.generateForBuilderMethod;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.generateForGetAugmentation;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.generateForGetMethodWithAttribute;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.generateForValidatorMethod;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.getJavaDoc;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getCamelCase;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getCapitalCase;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getSmallCase;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.trimAtLast;
+
+/**
+ * Represents generator for methods of generated files based on the file type.
+ */
+public final class MethodsGenerator {
+ private static final String BIT_NAMES_VAR = "bitNames";
+ private static final String BIT_NAME_VAR = "bitName";
+
+ /**
+ * Creates an instance of method generator.
+ */
+ private MethodsGenerator() {
+ }
+
+ /**
+ * Returns the methods strings for builder interface.
+ *
+ * @param name attribute name
+ * @return method string for builder interface
+ */
+ public static String parseBuilderInterfaceBuildMethodString(String name) {
+ return getJavaDoc(BUILD_METHOD, name, false, null) +
+ getBuildForInterface(name);
+ }
+
+ /**
+ * Returns getter string.
+ *
+ * @param attr attribute info
+ * @param genType generated java files
+ * @return getter string
+ */
+ public static String getGetterString(JavaAttributeInfo attr, int genType) {
+
+ String returnType = getReturnType(attr);
+ String attributeName = attr.getAttributeName();
+ String appDataStructure = null;
+ StringBuilder builder = new StringBuilder();
+ if (attr.getCompilerAnnotation() != null) {
+ YangDataStructure data = getYangDataStructure(
+ attr.getCompilerAnnotation());
+ if (data != null) {
+ appDataStructure = data.name();
+ }
+ }
+ if (genType == GENERATE_SERVICE_AND_MANAGER) {
+ builder.append(generateForGetMethodWithAttribute(returnType))
+ .append(getGetterForInterface(
+ attributeName, returnType, attr.isListAttr(),
+ genType, attr.getCompilerAnnotation()));
+
+ return builder.toString();
+ }
+
+ builder.append(getJavaDoc(GETTER_METHOD, attributeName, attr
+ .isListAttr(), appDataStructure))
+ .append(getGetterForInterface(
+ attributeName, returnType, attr.isListAttr(),
+ genType, attr.getCompilerAnnotation()));
+
+ return builder.toString();
+ }
+
+ /**
+ * Returns setter string.
+ *
+ * @param attr attribute info
+ * @param className java class name
+ * @param genType generated java files
+ * @return setter string
+ */
+ public static String getSetterString(JavaAttributeInfo attr,
+ String className, int genType) {
+
+ String attrType = getReturnType(attr);
+ String attributeName = attr.getAttributeName();
+ JavaDocType type;
+ StringBuilder builder = new StringBuilder();
+ if (genType == GENERATE_SERVICE_AND_MANAGER) {
+ type = MANAGER_SETTER_METHOD;
+ } else {
+ type = SETTER_METHOD;
+ }
+
+ String appDataStructure = null;
+ YangDataStructure ds = getYangDataStructure(
+ attr.getCompilerAnnotation());
+ if (ds != null) {
+ appDataStructure = ds.name();
+ }
+ builder.append(getJavaDoc(type, attributeName, attr.isListAttr(),
+ appDataStructure))
+ .append(getSetterForInterface(attributeName, attrType, className,
+ attr.isListAttr(), genType,
+ attr.getCompilerAnnotation()));
+ return builder.toString();
+ }
+
+ /**
+ * Returns constructor method string.
+ *
+ * @param name class name
+ * @return constructor string
+ */
+ private static String getConstructorString(String name) {
+ return getJavaDoc(CONSTRUCTOR, name, false, null);
+ }
+
+ /**
+ * Returns default constructor method string.
+ *
+ * @param name class name
+ * @param modifierType modifier type
+ * @return default constructor string
+ */
+ public static String getDefaultConstructorString(String name,
+ String modifierType) {
+ return getJavaDoc(DEFAULT_CONSTRUCTOR, name, false, null)
+ + getDefaultConstructor(name, modifierType) + NEW_LINE;
+ }
+
+ /**
+ * Returns build method string.
+ *
+ * @param name class name
+ * @param isRoot true if root node
+ * @return build string
+ */
+ public static String getBuildString(String name, boolean isRoot) {
+ return FOUR_SPACE_INDENTATION + OVERRIDE + NEW_LINE +
+ getBuild(name, isRoot);
+ }
+
+ /**
+ * Returns the getter method strings for class file.
+ *
+ * @param attr attribute info
+ * @param generatedJavaFiles for the type of java file being generated
+ * @return getter method for class
+ */
+ public static String getGetterForClass(JavaAttributeInfo attr,
+ int generatedJavaFiles) {
+
+ String attrQualifiedType = getReturnType(attr);
+ String attributeName = attr.getAttributeName();
+
+ if (!attr.isListAttr()) {
+ return getGetter(attrQualifiedType, attributeName,
+ generatedJavaFiles);
+ }
+ String attrParam = getListAttribute(attrQualifiedType,
+ attr.getCompilerAnnotation());
+ return getGetter(attrParam, attributeName, generatedJavaFiles);
+ }
+
+ /**
+ * Returns getter for attribute.
+ *
+ * @param type return type
+ * @param name attribute name
+ * @param genType generated java files
+ * @return getter for attribute
+ */
+ static String getGetter(String type, String name, int genType) {
+ StringBuilder builder = new StringBuilder();
+ if (genType == GENERATE_SERVICE_AND_MANAGER) {
+ //Append method signature.
+ builder.append(methodSignature(getCapitalCase(name), GET,
+ PUBLIC, null, type, null,
+ CLASS_TYPE))
+ //Append method body.
+ .append(methodBody(MANAGER_METHODS, null, null,
+ EIGHT_SPACE_INDENTATION, null,
+ type, false, null))
+ .append(signatureClose())
+ //Append method close.
+ .append(methodClose(FOUR_SPACE));
+ return builder.toString();
+ }
+ builder.append(methodSignature(name, EMPTY_STRING,
+ PUBLIC, null, type, null,
+ CLASS_TYPE))
+ //Append method body.
+ .append(methodBody(GETTER, name, name,
+ EIGHT_SPACE_INDENTATION, null,
+ type, false, null))
+ .append(signatureClose())
+ //Append method close.
+ .append(methodClose(FOUR_SPACE));
+ return builder.toString();
+ }
+
+ /**
+ * Returns the setter method strings for class file.
+ *
+ * @param attr attribute info
+ * @param className name of the class
+ * @param generatedJavaFiles generated java files
+ * @return setter method for class
+ */
+ public static String getSetterForClass(JavaAttributeInfo attr,
+ String className,
+ int generatedJavaFiles) {
+ String attrQualifiedType = getReturnType(attr);
+ String attributeName = attr.getAttributeName();
+ boolean isTypeNull = false;
+ if (attr.getAttributeType() == null) {
+ isTypeNull = true;
+ }
+ if (!attr.isListAttr()) {
+ return getSetter(className, attributeName, attrQualifiedType,
+ generatedJavaFiles, isTypeNull, false);
+ }
+ String attrParam = getListAttribute(attrQualifiedType,
+ attr.getCompilerAnnotation());
+ return getSetter(className, attributeName, attrParam,
+ generatedJavaFiles, isTypeNull, true);
+ }
+
+ /**
+ * Returns setter for attribute.
+ *
+ * @param className class name
+ * @param name attribute name
+ * @param type return type
+ * @param isTypeNull if attribute type is null
+ * @param isList true if leaf-list
+ * @return setter for attribute
+ */
+ private static String getSetter(String className, String name, String type,
+ int genType,
+ boolean isTypeNull, boolean isList) {
+ StringBuilder builder = new StringBuilder();
+ if (genType == GENERATE_SERVICE_AND_MANAGER) {
+ //Append method signature.
+ builder.append(methodSignature(getCapitalCase(name),
+ SET_METHOD_PREFIX,
+ PUBLIC, name, VOID, type,
+ CLASS_TYPE))
+ //Append method body.
+ .append(methodBody(MANAGER_METHODS, null, null,
+ EIGHT_SPACE_INDENTATION, null, null,
+ false, null))
+ .append(methodClose(FOUR_SPACE));
+ return builder.toString();
+ }
+ if (genType == GENERATE_EVENT_SUBJECT_CLASS) {
+ builder.append(methodSignature(name, EMPTY_STRING, PUBLIC, name, VOID,
+ type, CLASS_TYPE))
+
+ //Append method body.
+ .append(methodBody(SETTER, name, name,
+ EIGHT_SPACE_INDENTATION, null, null,
+ false, null))
+ .append(methodClose(FOUR_SPACE));
+ return builder.toString();
+ }
+ builder.append(methodSignature(name, EMPTY_STRING,
+ PUBLIC, name, getCapitalCase(className) +
+ BUILDER, type, CLASS_TYPE));
+ if (!isTypeNull && !isList) {
+ builder.append(getLeafFlagSetString(name, VALUE_LEAF, EIGHT_SPACE_INDENTATION,
+ SET_METHOD_PREFIX)).append(signatureClose());
+ } else {
+ builder.append(EMPTY_STRING);
+ }
+ //Append method body.
+ builder.append(methodBody(SETTER, name, name,
+ EIGHT_SPACE_INDENTATION, null, null,
+ true, null))
+ //Append method close.
+ .append(methodClose(FOUR_SPACE));
+ return builder.toString();
+ }
+
+ /**
+ * Returns the setter method strings for class file.
+ *
+ * @param attr attribute info
+ * @return setter method for class
+ */
+ static String getSetterForTypeDefClass(JavaAttributeInfo attr) {
+
+ String attrQualifiedType = getReturnType(attr);
+ String attributeName = attr.getAttributeName();
+ return getTypeDefSetter(attrQualifiedType, attributeName);
+ }
+
+ /**
+ * Returns type def's setter for attribute.
+ *
+ * @param type data type
+ * @param name attribute name
+ * @return setter for type def's attribute
+ */
+ private static String getTypeDefSetter(String type, String name) {
+ return methodSignature(getCapitalCase(name), SET_METHOD_PREFIX, PUBLIC,
+ name, VOID, type, CLASS_TYPE) +
+ methodBody(SETTER, name, name, EIGHT_SPACE_INDENTATION, null,
+ null, false, null) + methodClose(FOUR_SPACE);
+ }
+
+ /**
+ * Returns the getter method strings for interface file.
+ *
+ * @param yangName name of the attribute
+ * @param returnType return type of attribute
+ * @param isList is list attribute
+ * @param genType generated java files
+ * @param annotation compiler annotation
+ * @return getter method for interface
+ */
+ static String getGetterForInterface(String yangName, String returnType,
+ boolean isList,
+ int genType,
+ YangCompilerAnnotation annotation) {
+ if (!isList) {
+ return getGetterInterfaceString(returnType, yangName,
+ genType);
+ }
+ String listAttr = getListAttribute(returnType, annotation);
+ return getGetterInterfaceString(listAttr, yangName, genType);
+ }
+
+ /**
+ * Returns getter for attribute in interface.
+ *
+ * @param returnType return type
+ * @param yangName attribute name
+ * @return getter for interface
+ */
+ private static String getGetterInterfaceString(String returnType,
+ String yangName,
+ int genType) {
+ switch (genType) {
+ case GENERATE_SERVICE_AND_MANAGER:
+ return getGetMethodWithArgument(returnType, yangName);
+ default:
+ return methodSignature(yangName, EMPTY_STRING, null,
+ null, returnType, null, INTERFACE_TYPE);
+ }
+ }
+
+ /**
+ * Returns the setter method strings for interface file.
+ *
+ * @param attrName name of the attribute
+ * @param attrType return type of attribute
+ * @param className name of the java class being generated
+ * @param isList is list attribute
+ * @param genType generated java files
+ * @param annotation compiler annotations
+ * @return setter method for interface
+ */
+ static String getSetterForInterface(String attrName, String attrType,
+ String className,
+ boolean isList, int genType,
+ YangCompilerAnnotation annotation) {
+ if (!isList) {
+ return getSetterInterfaceString(className, attrName, attrType,
+ genType);
+ }
+
+ String listAttr = getListAttribute(attrType, annotation);
+ return getSetterInterfaceString(className, attrName, listAttr, genType);
+ }
+
+ /**
+ * Returns setter string for interface.
+ *
+ * @param name class name
+ * @param attrName attribute name
+ * @param attrType attribute type
+ * @return setter string
+ */
+ private static String getSetterInterfaceString(String name,
+ String attrName,
+ String attrType,
+ int genType) {
+ if (genType == GENERATE_SERVICE_AND_MANAGER) {
+ return methodSignature(getCapitalCase(attrName),
+ SET_METHOD_PREFIX,
+ null, attrName, VOID, attrType +
+ OP_PARAM, INTERFACE_TYPE);
+ }
+ return methodSignature(attrName, EMPTY_STRING, null,
+ attrName, name + BUILDER, attrType, INTERFACE_TYPE);
+ }
+
+ /**
+ * Returns return type for attribute.
+ *
+ * @param attr attribute info
+ * @return return type
+ */
+ private static String getReturnType(JavaAttributeInfo attr) {
+ StringBuilder builder = new StringBuilder();
+
+ if (attr.isQualifiedName() &&
+ attr.getImportInfo().getPkgInfo() != null) {
+ builder.append(attr.getImportInfo().getPkgInfo()).append(PERIOD);
+ }
+ builder.append(attr.getImportInfo().getClassInfo());
+
+ if (attr.getAttributeType() != null &&
+ attr.getAttributeType().getDataType() == IDENTITYREF) {
+ return CLASS_STRING + DIAMOND_OPEN_BRACKET +
+ QUESTION_MARK + SPACE + EXTEND + SPACE +
+ builder.toString() + DIAMOND_CLOSE_BRACKET;
+ }
+ return builder.toString();
+ }
+
+ /**
+ * Returns the build method strings for interface file.
+ *
+ * @param yangName name of the interface
+ * @return build method for interface
+ */
+ static String getBuildForInterface(String yangName) {
+ return methodSignature(BUILD, EMPTY_STRING, null, null,
+ yangName, null, INTERFACE_TYPE);
+ }
+
+ /**
+ * Returns constructor string for impl class.
+ *
+ * @param yangName class name
+ * @param isRootNode if root node
+ * @return constructor string
+ */
+ static String getConstructorStart(String yangName,
+ boolean isRootNode) {
+ StringBuilder builder = new StringBuilder(
+ getConstructorString(yangName));
+
+ String name = getCapitalCase(yangName);
+ String returnType = DEFAULT_CAPS + name;
+ if (isRootNode) {
+ returnType = name + OP_PARAM;
+ }
+ builder.append(methodSignature(
+ returnType, EMPTY_STRING, PROTECTED, BUILDER_LOWER_CASE + OBJECT,
+ null, name + BUILDER, CLASS_TYPE));
+ return builder.toString();
+ }
+
+ /**
+ * Returns the constructor strings for class file.
+ *
+ * @param attr attribute info
+ * @param genType generated java files
+ * @return constructor for class
+ */
+ public static String getConstructor(JavaAttributeInfo attr, int genType) {
+ String attrName = attr.getAttributeName();
+ String attrCaps = getCapitalCase(attrName);
+ switch (genType) {
+ case GENERATE_SERVICE_AND_MANAGER:
+ return methodBody(MethodBodyTypes.CONSTRUCTOR, attrName,
+ attrCaps, EIGHT_SPACE_INDENTATION, GET, null,
+ false, null);
+ default:
+ return methodBody(MethodBodyTypes.CONSTRUCTOR, attrName,
+ attrName, EIGHT_SPACE_INDENTATION, EMPTY_STRING,
+ null, false, null);
+ }
+ }
+
+ /**
+ * Returns the rpc strings for service interface.
+ *
+ * @param rpcName name of the rpc
+ * @param input name of input
+ * @param output name of output
+ * @return rpc method string
+ */
+ public static String getRpcServiceMethod(String rpcName, String input,
+ String output) {
+ String inputVal = null;
+ if (input != null) {
+ inputVal = RPC_INPUT_VAR_NAME;
+ }
+ return methodSignature(rpcName, EMPTY_STRING, null,
+ inputVal, output, input, INTERFACE_TYPE) +
+ NEW_LINE;
+ }
+
+ /**
+ * Returns the build method strings for class file.
+ *
+ * @param yangName class name
+ * @param isRootNode if root node
+ * @return build method string for class
+ */
+ static String getBuild(String yangName, boolean isRootNode) {
+ String type = DEFAULT_CAPS + yangName;
+ if (isRootNode) {
+ type = yangName + OP_PARAM;
+ }
+ return methodSignature(BUILD, EMPTY_STRING, PUBLIC, null,
+ yangName, null,
+ CLASS_TYPE) +
+ methodBody(MethodBodyTypes.BUILD, type, BUILD,
+ EIGHT_SPACE_INDENTATION, EMPTY_STRING,
+ null, false, null) +
+ methodClose(FOUR_SPACE);
+ }
+
+ /**
+ * Returns the Default constructor strings for class file.
+ *
+ * @param name name of the class
+ * @param modifierType modifier type for default constructor
+ * @return Default constructor for class
+ */
+ private static String getDefaultConstructor(String name,
+ String modifierType) {
+ return methodSignature(name, EMPTY_STRING, modifierType, null,
+ null, null, CLASS_TYPE) +
+ methodClose(FOUR_SPACE);
+ }
+
+ /**
+ * Returns to string method's open strings.
+ *
+ * @return string method's open string
+ */
+ static String getToStringMethodOpen() {
+ StringBuilder builder = new StringBuilder(getOverRideString());
+ builder.append(methodSignature(TO_STRING_METHOD, EMPTY_STRING,
+ PUBLIC, null, STRING_DATA_TYPE, null,
+ CLASS_TYPE));
+ builder.append(getReturnString(GOOGLE_MORE_OBJECT_METHOD_STRING,
+ EIGHT_SPACE_INDENTATION)).append(NEW_LINE)
+ .append(getOmitNullValueString());
+ return builder.toString();
+ }
+
+ /**
+ * Returns to string method's close string.
+ *
+ * @return to string method close string
+ */
+ static String getToStringMethodClose() {
+ return TWELVE_SPACE_INDENTATION + PERIOD + TO_STRING_METHOD +
+ brackets(OPEN_CLOSE_BRACKET, null, null) + signatureClose() +
+ methodClose(FOUR_SPACE);
+ }
+
+ /**
+ * Returns to string method for class.
+ *
+ * @param attr java attribute
+ * @return to string method for class
+ */
+ public static String getToStringMethod(JavaAttributeInfo attr) {
+ return methodBody(TO_STRING, attr.getAttributeName(), null,
+ TWELVE_SPACE_INDENTATION, null, null, false, null);
+ }
+
+ /**
+ * Returns from string method's open string.
+ *
+ * @param className name of the class
+ * @return from string method's open string
+ */
+ static String getFromStringMethodSignature(String className) {
+ return getJavaDoc(FROM_METHOD, className, false, null) +
+ methodSignature(FROM_STRING_METHOD_NAME, EMPTY_STRING, PUBLIC +
+ SPACE + STATIC, FROM_STRING_PARAM_NAME,
+ className, STRING_DATA_TYPE,
+ CLASS_TYPE);
+ }
+
+ /**
+ * Return from string method's close string.
+ *
+ * @return from string method's close string
+ */
+ static String getFromStringMethodClose() {
+ return methodClose(FOUR_SPACE);
+ }
+
+ /**
+ * Return from string method's body string.
+ *
+ * @param attr attribute info
+ * @param fromAttr attribute info for the from string wrapper
+ * type
+ * @return from string method's body string
+ */
+ public static String getFromStringMethod(JavaAttributeInfo attr,
+ JavaAttributeInfo fromAttr) {
+
+ return EIGHT_SPACE_INDENTATION + getTrySubString() +
+ getNewLineAndSpace(TWELVE_SPACE_INDENTATION) +
+ getParsedSubString(attr, fromAttr) +
+ getReturnOfSubString() + EIGHT_SPACE_INDENTATION +
+ getCatchSubString(attr.getCurHolderOrCount());
+ }
+
+ /**
+ * Returns sub string with parsed statement for union's from string method.
+ *
+ * @param attr attribute info
+ * @return sub string with parsed statement for union's from string method
+ */
+ private static String getParsedSubString(JavaAttributeInfo attr,
+ JavaAttributeInfo fromStringAttr) {
+
+ String targetDataType = getReturnType(attr);
+ YangDataTypes types = fromStringAttr.getAttributeType()
+ .getDataType();
+ StringBuilder method = new StringBuilder();
+ switch (types) {
+ case BITS:
+ return targetDataType + SPACE + TMP_VAL + SPACE + EQUAL +
+ SPACE + getCapitalCase(attr.getAttributeName()) +
+ PERIOD + FROM_STRING_METHOD_NAME +
+ getOpenCloseParaWithValue(FROM_STRING_PARAM_NAME) +
+ signatureClose();
+ case BINARY:
+ return method.append(targetDataType).append(SPACE).append(TMP_VAL)
+ .append(SPACE).append(EQUAL).append(SPACE).append(
+ geStringConverterForBinary(FROM_STRING_PARAM_NAME))
+ .append(signatureClose()).toString();
+ default:
+ return targetDataType + SPACE + TMP_VAL + SPACE + EQUAL +
+ SPACE + getParseFromStringMethod(
+ targetDataType, fromStringAttr.getAttributeType()) +
+ getOpenCloseParaWithValue(FROM_STRING_PARAM_NAME) +
+ signatureClose();
+ }
+ }
+
+ /**
+ * Returns from string converter for binary type.
+ *
+ * @param var variable name
+ * @return to string method body
+ */
+ private static String geStringConverterForBinary(String var) {
+ StringBuilder builder = new StringBuilder();
+ return builder.append(BASE64).append(PERIOD)
+ .append(GET_DECODER).append(OPEN_CLOSE_BRACKET_STRING).append(PERIOD)
+ .append(DECODE).append(getOpenCloseParaWithValue(var)).toString();
+ }
+
+ /**
+ * Returns to string converter for binary type.
+ *
+ * @param var variable name
+ * @return to string method body
+ */
+ private static String getToStringForBinary(String var) {
+ StringBuilder builder = new StringBuilder();
+ return builder.append(BASE64).append(PERIOD)
+ .append(GET_ENCODER).append(OPEN_CLOSE_BRACKET_STRING)
+ .append(PERIOD).append(ENCODE_TO_STRING)
+ .append(getOpenCloseParaWithValue(var)).toString();
+ }
+
+ /**
+ * Returns hash code method open strings.
+ *
+ * @return hash code method open string
+ */
+ static String getHashCodeMethodOpen() {
+ String line;
+ StringBuilder builder = new StringBuilder(getOverRideString());
+ builder.append(methodSignature(HASH_CODE_STRING, EMPTY_STRING, PUBLIC,
+ null, INT, null, CLASS_TYPE));
+ line = getReturnString(OBJECT_STRING + SUFFIX_S + PERIOD + HASH +
+ OPEN_PARENTHESIS, EIGHT_SPACE_INDENTATION);
+ builder.append(line);
+ return builder.toString();
+ }
+
+ /**
+ * Returns hash code methods close string.
+ *
+ * @param hashcodeString hash code string
+ * @return to hash code method close string
+ */
+ static String getHashCodeMethodClose(String hashcodeString) {
+ String[] array = {SPACE, COMMA};
+ hashcodeString = trimAtLast(hashcodeString, array);
+ return hashcodeString + CLOSE_PARENTHESIS + signatureClose() +
+ methodClose(FOUR_SPACE);
+ }
+
+ /**
+ * Returns hash code method for class.
+ *
+ * @param attr attribute info
+ * @return hash code method
+ */
+ public static String getHashCodeMethod(JavaAttributeInfo attr) {
+ return attr.getAttributeName() + COMMA + SPACE;
+ }
+
+ /**
+ * Returns equals method open strings.
+ *
+ * @param className class name
+ * @return equals method open string
+ */
+ static String getEqualsMethodOpen(String className) {
+ return getOverRideString() +
+ methodSignature(EQUALS_STRING, EMPTY_STRING, PUBLIC, OBJ,
+ BOOLEAN_DATA_TYPE, OBJECT_STRING,
+ CLASS_TYPE) +
+ getEqualsMethodsCommonIfCondition() +
+ getEqualsMethodsSpecificIfCondition(className);
+ }
+
+ /**
+ * Returns equal methods if condition string.
+ *
+ * @return if condition string
+ */
+ private static String getEqualsMethodsCommonIfCondition() {
+ return getIfConditionBegin(EIGHT_SPACE_INDENTATION, THIS + SPACE +
+ EQUAL + EQUAL + SPACE + OBJ) + getReturnString(
+ TRUE, TWELVE_SPACE_INDENTATION) + signatureClose()
+ + methodClose(EIGHT_SPACE);
+ }
+
+ /**
+ * Returns if condition for specific class object in equals method.
+ *
+ * @param className class name
+ * @return if condition string
+ */
+ private static String getEqualsMethodsSpecificIfCondition(String className) {
+ return EIGHT_SPACE_INDENTATION + IF + SPACE + OPEN_PARENTHESIS + OBJ +
+ INSTANCE_OF + className + CLOSE_PARENTHESIS + SPACE +
+ OPEN_CURLY_BRACKET + NEW_LINE + TWELVE_SPACE_INDENTATION +
+ className + SPACE + OTHER + SPACE + EQUAL + SPACE +
+ OPEN_PARENTHESIS + className + CLOSE_PARENTHESIS + SPACE + OBJ +
+ SEMI_COLON + NEW_LINE + TWELVE_SPACE_INDENTATION + RETURN +
+ NEW_LINE;
+ }
+
+ /**
+ * Returns equals methods close string.
+ *
+ * @param equalMethodString equal method string
+ * @return equals method close string
+ */
+ static String getEqualsMethodClose(String equalMethodString) {
+ String[] array = {NEW_LINE, AND, AND, SPACE};
+ equalMethodString = trimAtLast(equalMethodString, array) +
+ signatureClose();
+ return equalMethodString + methodClose(EIGHT_SPACE) +
+ getReturnString(FALSE, EIGHT_SPACE_INDENTATION) +
+ signatureClose() + methodClose(FOUR_SPACE);
+ }
+
+ /**
+ * Returns equals method for class.
+ *
+ * @param attr attribute info
+ * @return equals method
+ */
+ public static String getEqualsMethod(JavaAttributeInfo attr) {
+ String attributeName = attr.getAttributeName();
+ if (attributeName.contains(OPERATION_TYPE_ATTRIBUTE)) {
+ return SIXTEEN_SPACE_INDENTATION + OBJECT_STRING + SUFFIX_S +
+ NEW_LINE + SIXTEEN_SPACE_INDENTATION +
+ PERIOD + EQUALS_STRING + OPEN_PARENTHESIS + attributeName +
+ COMMA + NEW_LINE + SIXTEEN_SPACE_INDENTATION + SPACE + OTHER
+ + PERIOD + attributeName + CLOSE_PARENTHESIS + SPACE + AND +
+ AND;
+ }
+ return SIXTEEN_SPACE_INDENTATION + OBJECT_STRING + SUFFIX_S +
+ PERIOD + EQUALS_STRING + OPEN_PARENTHESIS + attributeName +
+ COMMA + SPACE + OTHER + PERIOD + attributeName +
+ CLOSE_PARENTHESIS + SPACE + AND + AND;
+ }
+
+ /**
+ * Returns of method's string and java doc for special type.
+ *
+ * @param attr attribute info
+ * @param className class name
+ * @return of method's string and java doc for special type
+ */
+
+ public static String getOfMethodStringAndJavaDoc(JavaAttributeInfo attr,
+ String className) {
+ String attrType = getReturnType(attr);
+ String attrName = attr.getAttributeName();
+
+ return getJavaDoc(OF_METHOD, className + FOR_TYPE_STRING + attrName,
+ false, null) + getOfMethodString(attrType, className);
+ }
+
+ /**
+ * Returns of method's string.
+ *
+ * @param type data type
+ * @param name class name
+ * @return of method's string
+ */
+ private static String getOfMethodString(String type, String name) {
+ return methodSignature(OF, EMPTY_STRING, PUBLIC + SPACE + STATIC,
+ VALUE, name, type, CLASS_TYPE) +
+ methodBody(MethodBodyTypes.OF_METHOD, name, null,
+ EIGHT_SPACE_INDENTATION, EMPTY_STRING, null, false, null) +
+ methodClose(FOUR_SPACE);
+ }
+
+ /**
+ * Returns string and java doc for constructor of type class.
+ *
+ * @param attr attribute info
+ * @param className class name
+ * @param genType generate file type
+ * @param count type count
+ * @return string and java doc for constructor of type class
+ */
+ public static String getTypeConstructorStringAndJavaDoc(
+ JavaAttributeInfo attr, String className, int genType, int count) {
+ String attrType = getReturnType(attr);
+ String attrName = attr.getAttributeName();
+ return getJavaDoc(TYPE_CONSTRUCTOR, attrName, false, null) +
+ getTypeConstructorString(attrType, attrName, className,
+ genType, count);
+ }
+
+ /**
+ * Returns string and java doc for constructor of type class.
+ *
+ * @param attr1 first attribute info
+ * @param attr2 second attribute info
+ * @param genType class name
+ * @param type conflict validate type
+ * @param addFirst whether int came first or uInt came first
+ * @param count type count
+ * @return string and java doc for constructor of type class
+ */
+ public static String getTypeConstructorStringAndJavaDoc(
+ JavaAttributeInfo attr1, JavaAttributeInfo attr2, String genType,
+ ValidatorTypeForUnionTypes type, boolean addFirst, int count) {
+
+ String attrType = getReturnType(attr1);
+ String attrName1 = "";
+ String attrName2 = "";
+ if (attr1 != null) {
+ if (addFirst) {
+ attrName1 = attr1.getAttributeName();
+ } else {
+ attrName2 = attr1.getAttributeName();
+ }
+ }
+ if (attr2 != null) {
+ if (addFirst) {
+ attrName2 = attr2.getAttributeName();
+ } else {
+ attrName1 = attr2.getAttributeName();
+ }
+ }
+
+ String appDataStructure = null;
+ if (attr1 != null && attr1.getCompilerAnnotation() != null) {
+ appDataStructure =
+ attr1.getCompilerAnnotation().getYangAppDataStructure()
+ .getDataStructure().name();
+ }
+ String doc;
+ if (attrName1.isEmpty()) {
+ doc = attrName2;
+ } else {
+ doc = attrName1;
+ }
+ return getJavaDoc(TYPE_CONSTRUCTOR, doc, false, appDataStructure) +
+ getTypeConstructorString(attrType, attrName1,
+ attrName2, genType,
+ type, addFirst, count);
+ }
+
+ /**
+ * Returns type constructor string.
+ *
+ * @param type data type
+ * @param name attribute name
+ * @param className class name
+ * @param genType generated file type
+ * @param count type count
+ * @return type constructor string
+ */
+ private static String getTypeConstructorString(String type, String name,
+ String className, int genType, int count) {
+ StringBuilder builder = new StringBuilder();
+ builder.append(
+ methodSignature(className, EMPTY_STRING, PUBLIC, name,
+ null, type, CLASS_TYPE));
+ if (genType == GENERATE_UNION_CLASS) {
+ builder.append(EIGHT_SPACE_INDENTATION).append(SET_VALUE_PARA)
+ .append(PERIOD).append(SET_METHOD_PREFIX).append(
+ getOpenCloseParaWithValue(count + EMPTY_STRING))
+ .append(signatureClose());
+ }
+ builder.append(methodBody(SETTER, name, null, EIGHT_SPACE_INDENTATION,
+ EMPTY_STRING, null, false, null))
+ .append(methodClose(FOUR_SPACE));
+ return builder.toString();
+ }
+
+ /**
+ * Returns type constructor string.
+ *
+ * @param type data type
+ * @param attr1 attribute attr1
+ * @param className class attr1
+ * @param count type count
+ * @return type constructor string
+ */
+ private static String getTypeConstructorString(
+ String type, String attr1, String attr2, String className,
+ ValidatorTypeForUnionTypes validatorType, boolean addInt, int count) {
+ StringBuilder constructor = new StringBuilder(
+ methodSignature(className, EMPTY_STRING, PUBLIC, attr1,
+ null, type, CLASS_TYPE))
+ .append(EIGHT_SPACE_INDENTATION).append(SET_VALUE_PARA)
+ .append(PERIOD).append(SET_METHOD_PREFIX).append(
+ getOpenCloseParaWithValue(count + EMPTY_STRING))
+ .append(signatureClose())
+ .append(ifConditionForIntInTypeDefConstructor(validatorType,
+ addInt, attr1))
+ .append(methodBody(SETTER, attr1, null,
+ TWELVE_SPACE_INDENTATION, EMPTY_STRING,
+ null, false, attr1));
+ String str = EIGHT_SPACE_INDENTATION + CLOSE_CURLY_BRACKET +
+ ELSE + OPEN_CURLY_BRACKET + NEW_LINE;
+ constructor.append(str)
+ .append(methodBody(SETTER, attr2, null,
+ TWELVE_SPACE_INDENTATION, EMPTY_STRING,
+ null, false, attr1))
+ .append(methodClose(FOUR_SPACE))
+ .append(methodClose(EIGHT_SPACE));
+
+ return constructor.toString();
+ }
+
+ /**
+ * Returns interface of add augmentation.
+ *
+ * @param className class name
+ * @return interface of add augmentation
+ */
+ static String getAddAugmentInfoMethodInterface(String className) {
+ StringBuilder builder = new StringBuilder(generateForAddAugmentation(className));
+ LinkedHashMap<String, String> map = new LinkedHashMap<>();
+ map.put(VALUE, OBJECT_STRING);
+ map.put(CLASS + OBJECT_STRING, CLASS_STRING);
+ builder.append(multiAttrMethodSignature(ADD_STRING + YANG_AUGMENTED_INFO,
+ null, null, className, map,
+ INTERFACE_TYPE));
+ return builder.toString();
+ }
+
+ /**
+ * Returns implementation of add augmentation.
+ *
+ * @param className class name
+ * @return implementation of add augmentation
+ */
+ static String getAddAugmentInfoMethodImpl(String className) {
+ StringBuilder builder = new StringBuilder(getOverRideString());
+ LinkedHashMap<String, String> map = new LinkedHashMap<>();
+ map.put(VALUE, OBJECT_STRING);
+ map.put(CLASS + OBJECT_STRING, CLASS_STRING);
+ builder.append(multiAttrMethodSignature(ADD_STRING + YANG_AUGMENTED_INFO,
+ null, PUBLIC,
+ className, map, CLASS_TYPE))
+ .append(methodBody(AUGMENTED_MAP_ADD, null, null,
+ EIGHT_SPACE_INDENTATION, null, null, false, null))
+ .append(getReturnString(THIS, EIGHT_SPACE_INDENTATION))
+ .append(signatureClose())
+ .append(methodClose(FOUR_SPACE));
+ return builder.toString();
+ }
+
+ /**
+ * Returns interface of get YANG augment info.
+ *
+ * @return interface of get YANG augment info
+ */
+ static String getYangAugmentInfoInterface() {
+ return generateForGetAugmentation() +
+ methodSignature(YANG_AUGMENTED_INFO_LOWER_CASE, EMPTY_STRING,
+ null, CLASS + OBJECT_STRING,
+ OBJECT_STRING, CLASS_STRING, INTERFACE_TYPE);
+ }
+
+ /**
+ * Returns implementation of get YANG augment info.
+ *
+ * @return implementation of get YANG augment info
+ */
+ static String getYangAugmentInfoImpl() {
+ return getOverRideString() +
+ methodSignature(YANG_AUGMENTED_INFO_LOWER_CASE, EMPTY_STRING,
+ PUBLIC, CLASS + OBJECT_STRING, OBJECT_STRING,
+ CLASS_STRING, CLASS_TYPE) +
+ methodBody(AUGMENTED_MAP_GET_VALUE, null, null,
+ EIGHT_SPACE_INDENTATION, null, null, false, null) +
+ methodClose(FOUR_SPACE);
+ }
+
+ /**
+ * Returns enum's constructor.
+ *
+ * @param className enum's class name
+ * @return enum's constructor
+ */
+ static String getEnumsConstructor(String className) {
+ StringBuilder builder = new StringBuilder(
+ getJavaDoc(TYPE_CONSTRUCTOR, className, false, null));
+ String clsName = getSmallCase(className);
+ LinkedHashMap<String, String> map = new LinkedHashMap<>();
+ map.put(clsName, INT);
+ map.put(SCHEMA_NAME, STRING_DATA_TYPE);
+ builder.append(multiAttrMethodSignature(className, EMPTY_STRING,
+ EMPTY_STRING, null,
+ map, CLASS_TYPE))
+ .append(methodBody(SETTER, clsName, EMPTY_STRING,
+ EIGHT_SPACE_INDENTATION, EMPTY_STRING,
+ EMPTY_STRING, false, null))
+ .append(methodBody(SETTER, SCHEMA_NAME, EMPTY_STRING,
+ EIGHT_SPACE_INDENTATION, EMPTY_STRING,
+ EMPTY_STRING, false, null))
+ .append(methodClose(FOUR_SPACE));
+
+ return builder.toString();
+ }
+
+ /**
+ * Returns of method for enum class.
+ *
+ * @param className class name
+ * @param type method body type
+ * @return of method
+ */
+ static String getEnumsOfValueMethod(String className,
+ YangEnumeration enumeration,
+ MethodBodyTypes type) {
+ String name = getCapitalCase(className);
+ StringBuilder builder = new StringBuilder(getJavaDoc(
+ OF_METHOD, name + SPACE + FOR,
+ false, null));
+ //Switch statement.
+ String sw = EIGHT_SPACE_INDENTATION + SWITCH + SPACE +
+ getOpenCloseParaWithValue(VALUE) +
+ methodSignatureClose(CLASS_TYPE);
+ String str;
+ switch (type) {
+ case ENUM_METHOD_INT_VALUE:
+ builder.append(getEnumValueMethodSignature(name, INT))
+ .append(sw);
+ for (YangEnum yangEnum : enumeration.getEnumSet()) {
+ str = getEnumJavaAttribute(yangEnum.getNamedValue())
+ .toUpperCase();
+ builder.append(getEnumValueMethodCases(
+ EMPTY_STRING + yangEnum.getValue(), str, name));
+ }
+ break;
+ case ENUM_METHOD_STRING_VALUE:
+ builder.append(getEnumValueMethodSignature(name,
+ STRING_DATA_TYPE))
+ .append(sw);
+ for (YangEnum yangEnum : enumeration.getEnumSet()) {
+ str = getEnumJavaAttribute(yangEnum.getNamedValue())
+ .toUpperCase();
+ builder.append(getEnumValueMethodCases(
+ QUOTES + yangEnum.getNamedValue() + QUOTES, str,
+ name));
+ }
+ break;
+ default:
+ return null;
+ }
+
+ String method = TWELVE_SPACE_INDENTATION + DEFAULT + SPACE + COLON +
+ NEW_LINE;
+ builder.append(method)
+ .append(getExceptionThrowString(SIXTEEN_SPACE_INDENTATION))
+ .append(methodClose(EIGHT_SPACE))
+ .append(methodClose(FOUR_SPACE));
+
+ return builder.toString();
+ }
+
+ /**
+ * Returns enum value method signature.
+ *
+ * @param name method name
+ * @param type param type
+ * @return enum value method signature
+ */
+ private static String getEnumValueMethodSignature(String name, String type) {
+ return methodSignature(OF, EMPTY_STRING, PUBLIC + SPACE +
+ STATIC, VALUE, name, type, CLASS_TYPE);
+ }
+
+ /**
+ * Returns enum value method's cases.
+ *
+ * @param caseType case type
+ * @param value return value
+ * @param name name of class
+ * @return enum value method's cases
+ */
+ private static String getEnumValueMethodCases(String caseType, String value,
+ String name) {
+ return TWELVE_SPACE_INDENTATION + CASE + SPACE + caseType +
+ COLON + NEW_LINE + getReturnString(name,
+ SIXTEEN_SPACE_INDENTATION) +
+ PERIOD + value + signatureClose();
+ }
+
+ /**
+ * Returns augmented data getter and setter methods for service class.
+ *
+ * @param parent parent node
+ * @return augmented data getter and setter methods for service class
+ */
+ static String getAugmentsDataMethodForService(YangNode parent) {
+ List<YangAtomicPath> targets = getSetOfNodeIdentifiers(parent);
+ if (targets.isEmpty()) {
+ return EMPTY_STRING;
+ }
+ YangNode first = targets.get(0).getResolvedNode();
+ //If target path is for notification then no need to generate get/set
+ // for that augment in service class.
+ if (first instanceof InvalidOpTypeHolder) {
+ return EMPTY_STRING;
+ }
+ YangNode augmentedNode;
+ String curNodeName;
+ String method;
+ StringBuilder methods = new StringBuilder();
+ String parentName;
+ String returnType;
+ YangNode methodNode;
+ YangPluginConfig pluginConfig =
+ ((JavaFileInfoContainer) parent).getJavaFileInfo()
+ .getPluginConfig();
+ for (YangAtomicPath nodeId : targets) {
+ augmentedNode = nodeId.getResolvedNode().getParent();
+ methodNode = nodeId.getResolvedNode();
+ if (((JavaFileInfoContainer) methodNode).getJavaFileInfo()
+ .getJavaName() != null) {
+ curNodeName =
+ ((JavaFileInfoContainer) methodNode).getJavaFileInfo()
+ .getJavaName();
+ } else {
+ curNodeName = getCapitalCase(
+ getCamelCase(methodNode.getName(),
+ pluginConfig.getConflictResolver()));
+ }
+ returnType =
+ getAugmentedClassNameForDataMethods(augmentedNode, parent);
+ parentName = getCurNodeName(augmentedNode,
+ pluginConfig);
+ method = generateForGetMethodWithAttribute(returnType) +
+ getGetMethodWithArgument(returnType, AUGMENTED +
+ parentName + getCapitalCase(curNodeName)) + NEW_LINE;
+ methods.append(method);
+
+ method = getJavaDoc(MANAGER_SETTER_METHOD,
+ AUGMENTED + getCapitalCase(parentName) +
+ getCapitalCase(curNodeName), false,
+ null) +
+ getSetterForInterface(getSmallCase(AUGMENTED) + parentName +
+ getCapitalCase(curNodeName),
+ returnType, parentName, false,
+ GENERATE_SERVICE_AND_MANAGER, null) +
+ NEW_LINE;
+ methods.append(method);
+ }
+ return methods.toString();
+ }
+
+ /**
+ * Returns validator method for range in union class.
+ *
+ * @param type type
+ * @return validator method for range in union class
+ */
+ static String getRangeValidatorMethodForUnion(String type) {
+ String newType;
+ if (type.contentEquals(BIG_INTEGER)) {
+ newType = LONG;
+ } else {
+ newType = INT;
+ }
+ StringBuilder builder = new StringBuilder(generateForValidatorMethod());
+ String var = getSmallCase(BIG_INTEGER);
+ LinkedHashMap<String, String> map = new LinkedHashMap<>();
+ map.put(MIN_RANGE, type);
+ map.put(MAX_RANGE, type);
+ map.put(VALUE, newType);
+ builder.append(multiAttrMethodSignature(VALIDATE_RANGE, EMPTY_STRING,
+ PRIVATE, BOOLEAN_DATA_TYPE, map,
+ CLASS_TYPE));
+ if (type.contentEquals(BIG_INTEGER)) {
+ //Create new instance of big integer.
+ builder.append(getNewInstance(BIG_INTEGER, var, EIGHT_SPACE_INDENTATION,
+ QUOTES + SPACE + QUOTES + SPACE +
+ ADD + SPACE + VALUE))
+ //Add return string.
+ .append(getReturnString(var, EIGHT_SPACE_INDENTATION))
+ //Add compareTo string
+ .append(getCompareToString())
+ //Add && condition.
+ .append(ifAndAndCondition(
+ //Add == condition
+ ifEqualEqualCondition(
+ getOpenCloseParaWithValue(MIN_RANGE), ONE),
+ var))
+ //Add compareTo string.
+ .append(getCompareToString())
+ //Add == condition.
+ .append(ifEqualEqualCondition(
+ getOpenCloseParaWithValue(MAX_RANGE), ONE))
+ .append(signatureClose());
+ } else {
+ builder.append(getReturnString(VALUE, EIGHT_SPACE_INDENTATION))
+ .append(getGreaterThanCondition())
+ .append(ifAndAndCondition(MIN_RANGE, VALUE))
+ .append(getLesserThanCondition())
+ .append(MAX_RANGE)
+ .append(signatureClose());
+ }
+ builder.append(methodClose(FOUR_SPACE));
+ return builder.toString();
+ }
+
+ //Get method with arguments.
+ private static String getGetMethodWithArgument(String returnType,
+ String yangName) {
+ return methodSignature(getCapitalCase(yangName), GET_METHOD_PREFIX,
+ null, getSmallCase(returnType),
+ returnType, returnType + OP_PARAM,
+ INTERFACE_TYPE);
+ }
+
+ /**
+ * Returns add to list method interface.
+ *
+ * @param attr java attribute
+ * @param className name of the class
+ * @return add to list method interface
+ */
+ public static String getAddToListMethodInterface(JavaAttributeInfo attr,
+ String className) {
+
+ String methodName = ADD_STRING + TO_CAPS + getCapitalCase(
+ attr.getAttributeName());
+ String retType = getReturnType(attr);
+ YangDataStructure struct = getYangDataStructure(attr.getCompilerAnnotation());
+ if (struct != null) {
+ switch (struct) {
+ case MAP:
+ Map<String, String> param = new LinkedHashMap<>();
+ param.put(attr.getAttributeName() + KEYS, retType + KEYS);
+ param.put(attr.getAttributeName() + VALUE_CAPS, retType);
+ return multiAttrMethodSignature(methodName, null, null,
+ className + BUILDER, param,
+ INTERFACE_TYPE);
+ default:
+ return methodSignature(methodName, null, null, ADD_STRING + TO_CAPS,
+ className + BUILDER, retType,
+ INTERFACE_TYPE);
+ }
+ }
+ return methodSignature(methodName, null, null, ADD_STRING + TO_CAPS,
+ className + BUILDER, getReturnType(attr),
+ INTERFACE_TYPE);
+ }
+
+ /**
+ * Returns YANG data structure from java attribute.
+ *
+ * @param annotation compiler annotation
+ * @return YANG data structure from java attribute
+ */
+ public static YangDataStructure getYangDataStructure(
+ YangCompilerAnnotation annotation) {
+ if (annotation != null) {
+ YangAppDataStructure data = annotation.getYangAppDataStructure();
+ if (data != null) {
+ return data.getDataStructure();
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns add to list method impl.
+ *
+ * @param attr java attribute
+ * @param name class name
+ * @return add to list method impl
+ */
+ public static String getAddToListMethodImpl(JavaAttributeInfo attr,
+ String name) {
+ String attrName = attr.getAttributeName();
+ String retString = getOverRideString();
+ String methodName = ADD_STRING + TO_CAPS + getCapitalCase(attrName);
+ StringBuilder builder = new StringBuilder(retString);
+ String retType = getReturnType(attr);
+ YangDataStructure struct = getYangDataStructure(attr.getCompilerAnnotation());
+ if (struct != null) {
+ switch (struct) {
+ case MAP:
+ Map<String, String> param = new LinkedHashMap<>();
+ param.put(attr.getAttributeName() + KEYS, retType + KEYS);
+ param.put(attr.getAttributeName() + VALUE_CAPS, retType);
+ builder.append(multiAttrMethodSignature(methodName,
+ null, PUBLIC,
+ name + BUILDER, param,
+ CLASS_TYPE))
+ .append(getIfConditionForAddToListMethod(attr));
+ retString = EIGHT_SPACE_INDENTATION + attrName + PERIOD +
+ PUT + getOpenCloseParaWithValue(
+ attrName + KEYS + COMMA + SPACE + attrName +
+ VALUE_CAPS);
+ break;
+ default:
+ builder.append(methodSignature(methodName,
+ null, PUBLIC,
+ ADD_STRING + TO_CAPS,
+ name + BUILDER, retType,
+ CLASS_TYPE))
+ .append(getIfConditionForAddToListMethod(attr));
+ retString = EIGHT_SPACE_INDENTATION + attrName + PERIOD + ADD_STRING +
+ OPEN_PARENTHESIS + ADD_STRING + TO_CAPS + CLOSE_PARENTHESIS;
+ }
+ } else {
+ builder.append(methodSignature(ADD_STRING + TO_CAPS +
+ getCapitalCase(attrName),
+ null, PUBLIC, ADD_STRING + TO_CAPS,
+ name + BUILDER, retType,
+ CLASS_TYPE))
+ .append(getIfConditionForAddToListMethod(attr));
+ retString = EIGHT_SPACE_INDENTATION + attrName + PERIOD + ADD_STRING +
+ OPEN_PARENTHESIS + ADD_STRING + TO_CAPS + CLOSE_PARENTHESIS;
+ }
+ builder.append(retString)
+ .append(signatureClose())
+ .append(getReturnString(THIS, EIGHT_SPACE_INDENTATION))
+ .append(signatureClose())
+ .append(methodClose(FOUR_SPACE));
+ return builder.toString();
+ }
+
+ // Returns if condition for add to list method.
+
+ private static String getIfConditionForAddToListMethod(JavaAttributeInfo attr) {
+ String name = attr.getAttributeName();
+ String type;
+ YangDataStructure struct = getYangDataStructure(attr.getCompilerAnnotation());
+ if (struct != null) {
+ switch (struct) {
+ case QUEUE:
+ type = PRIORITY_QUEUE;
+ break;
+
+ case LIST:
+ type = ARRAY_LIST_INIT;
+ break;
+
+ case MAP:
+ type = LINKED_HASH_MAP;
+ break;
+
+ case SET:
+ type = LINKED_HASH_SET;
+ break;
+
+ default:
+ type = ARRAY_LIST_INIT;
+ break;
+ }
+ } else {
+ type = ARRAY_LIST_INIT;
+ }
+ return getIfConditionBegin(EIGHT_SPACE_INDENTATION, name + SPACE + EQUAL +
+ EQUAL + SPACE + NULL) + TWELVE_SPACE_INDENTATION +
+ name + SPACE + EQUAL + SPACE +
+ NEW + SPACE + type + signatureClose() + methodClose(
+ EIGHT_SPACE);
+ }
+
+ /**
+ * Returns builder method for class.
+ *
+ * @param name name of class
+ * @return builder method for class
+ */
+ static String builderMethod(String name) {
+ return generateForBuilderMethod(name) +
+ methodSignature(BUILDER_LOWER_CASE,
+ EMPTY_STRING, PUBLIC + SPACE +
+ STATIC, null, name + BUILDER, null, CLASS_TYPE) +
+ getReturnString(NEW + SPACE + name + BUILDER,
+ EIGHT_SPACE_INDENTATION) +
+ brackets(OPEN_CLOSE_BRACKET, null, null) + signatureClose() +
+ methodClose(FOUR_SPACE);
+ }
+
+ /**
+ * Returns is value set interface.
+ *
+ * @return is value set interface
+ */
+ static String isLeafValueSetInterface() {
+ String method = "\n /**\n" +
+ " * Checks if the leaf value is set.\n" +
+ " *\n" +
+ " * @param leaf leaf whose value status needs to checked\n" +
+ " * @return result of leaf value set in object\n" +
+ " */\n";
+ return method + methodSignature(VALUE_LEAF_SET, EMPTY_STRING, null,
+ LEAF, BOOLEAN_DATA_TYPE,
+ LEAF_IDENTIFIER, INTERFACE_TYPE);
+ }
+
+ /**
+ * Returns is select leaf set interface.
+ *
+ * @return is select leaf set interface
+ */
+ static String isSelectLeafSetInterface() {
+ String method = "\n /**\n" +
+ " * Checks if the leaf is set to be a selected leaf.\n" +
+ " *\n" +
+ " * @param leaf if leaf needs to be selected\n" +
+ " * @return result of leaf value set in object\n" +
+ " */\n";
+ return method + methodSignature(IS_SELECT_LEAF, EMPTY_STRING, null,
+ LEAF, BOOLEAN_DATA_TYPE, LEAF_IDENTIFIER,
+ INTERFACE_TYPE);
+ }
+
+ /**
+ * Returns set select leaf set interface.
+ *
+ * @param name node name
+ * @return set select leaf set interface
+ */
+ static String setSelectLeafSetInterface(String name) {
+ String method = " /**\n" +
+ " * Set a leaf to be selected.\n" +
+ " *\n" +
+ " * @param leaf leaf needs to be selected\n" +
+ " * @return builder object for select leaf\n" +
+ " */\n";
+ return method + methodSignature(SET_SELECT_LEAF, EMPTY_STRING,
+ null, LEAF, name +
+ BUILDER, LEAF_IDENTIFIER,
+ INTERFACE_TYPE) + NEW_LINE;
+ }
+
+ /**
+ * Returns leaf identifier interface enum signature.
+ *
+ * @param name name of node
+ * @return leaf identifier interface enum signature
+ */
+ static String getInterfaceLeafIdEnumSignature(String name) {
+ String start = "\n /**\n" +
+ " * Identify the leaf of " + name + PERIOD + NEW_LINE +
+ " */\n";
+ return start + FOUR_SPACE_INDENTATION + PUBLIC + SPACE + ENUM + SPACE +
+ LEAF_IDENTIFIER + SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
+ }
+
+ /**
+ * Returns setter for select leaf.
+ *
+ * @param name name of node
+ * @return setter for select leaf
+ */
+ static String getSetterForSelectLeaf(String name) {
+ return "\n" +
+ " " + OVERRIDE + "\n" +
+ " public " + name + BUILDER +
+ " selectLeaf(LeafIdentifier leaf) {\n" +
+ " selectLeafFlags.set(leaf.getLeafIndex());\n" +
+ " return this;\n" +
+ " }\n";
+ }
+
+ /**
+ * Generates fromString code for bits.
+ *
+ * @return generated fromString code for bits.
+ */
+ private static String getFromStringForBits(String bitClassName) {
+ /* generate code will look like this.
+ public static BitSet fromString(String valInString) {
+ BitSet tmpVal = new BitSet();
+ String[] bitNames = valInString.trim().split(Pattern.quote(" "));
+ for (String bitName : bitNames) {
+ Bits bits = of(bitName);
+ if (bits != null) {
+ tmpVal.set(bits.bits());
+ }
+ }
+ if (tmpVal.isEmpty()) {
+ throw new NoSuchElementException("no such element found in bits");
+ }
+ return tmpVal;
+ }*/
+ StringBuilder sBuild = new StringBuilder();
+ sBuild.append(methodSignature(FROM_STRING_METHOD_NAME, null,
+ PUBLIC + SPACE + STATIC,
+ FROM_STRING_PARAM_NAME,
+ BIT_SET, STRING_DATA_TYPE, CLASS_TYPE))
+ .append(EIGHT_SPACE_INDENTATION)
+ .append(getBitSetAttr(EMPTY_STRING));
+ // Split the input string and check each bit name falls in configured yang file
+ sBuild.append(EIGHT_SPACE_INDENTATION).append(STRING_DATA_TYPE)
+ .append(SQUARE_BRACKETS).append(SPACE).append(BIT_NAMES_VAR)
+ .append(SPACE).append(EQUAL).append(SPACE).append(FROM_STRING_PARAM_NAME)
+ .append(PERIOD).append(TRIM_STRING).append(OPEN_CLOSE_BRACKET_STRING)
+ .append(PERIOD).append(SPLIT_STRING).append(getOpenCloseParaWithValue(
+ getPatternQuoteString(SPACE))).append(signatureClose()).append(
+ getForLoopString(EIGHT_SPACE_INDENTATION, STRING_DATA_TYPE, BIT_NAME_VAR,
+ BIT_NAMES_VAR));
+
+ String small = getSmallCase(bitClassName);
+ sBuild.append(TWELVE_SPACE_INDENTATION).append(bitClassName).append(
+ SPACE).append(small).append(SPACE).append(EQUAL).append(
+ SPACE).append(OF).append(
+ getOpenCloseParaWithValue(BIT_NAME_VAR)).append(signatureClose());
+ String condition = small + SPACE + NOT + EQUAL + SPACE + NULL;
+ sBuild.append(getIfConditionBegin(TWELVE_SPACE_INDENTATION, condition))
+ .append(SIXTEEN_SPACE_INDENTATION)
+ .append(TMP_VAL).append(PERIOD).append(SET_METHOD_PREFIX)
+ .append(OPEN_PARENTHESIS)
+ .append(small).append(PERIOD).append(small).append(
+ OPEN_CLOSE_BRACKET_STRING).append(CLOSE_PARENTHESIS)
+ .append(signatureClose()).append(methodClose(TWELVE_SPACE))
+ .append(methodClose(EIGHT_SPACE));
+
+ condition = TMP_VAL + PERIOD + IS_EMPTY;
+ sBuild.append(getIfConditionBegin(EIGHT_SPACE_INDENTATION, condition));
+ sBuild.append(getExceptionThrowString(TWELVE_SPACE_INDENTATION))
+ .append(methodClose(EIGHT_SPACE))
+ .append(getReturnString(TMP_VAL, EIGHT_SPACE_INDENTATION))
+ .append(signatureClose()).append(methodClose(FOUR_SPACE));
+ return sBuild.toString();
+ }
+
+
+ /**
+ * Returns to string method for typedef.
+ *
+ * @param attr attribute name
+ * @return to string method for typedef
+ */
+ static String getToStringForType(String attr, YangType type) {
+ StringBuilder builder = new StringBuilder(getOverRideString())
+ .append(methodSignature(TO_STRING_METHOD, null, PUBLIC, null,
+ STRING_DATA_TYPE, null, CLASS_TYPE));
+ builder.append(getReturnString(
+ getToStringForSpecialType(type, attr), EIGHT_SPACE_INDENTATION))
+ .append(signatureClose()).append(methodClose(FOUR_SPACE));
+ return builder.toString();
+ }
+
+ /**
+ * Returns to string method body for type class.
+ *
+ * @param type type of attribute
+ * @param name @return to string method body for typedef class
+ */
+ private static String getToStringForSpecialType(YangType type, String name) {
+ switch (type.getDataType()) {
+ case INT8:
+ case INT16:
+ case INT32:
+ case INT64:
+ case UINT8:
+ case UINT16:
+ case UINT32:
+ return STRING_DATA_TYPE + PERIOD + VALUE + OF_CAPS +
+ getOpenCloseParaWithValue(name);
+
+ case BINARY:
+ return getToStringCall(getToStringForBinary(name));
+
+ case BITS:
+ return getCapitalCase(name) + PERIOD +
+ TO_STRING_METHOD + getOpenCloseParaWithValue(name);
+
+ case BOOLEAN:
+ case EMPTY:
+ return name + SPACE + QUESTION_MARK + SPACE + getQuotedString(TRUE)
+ + SPACE + COLON + SPACE + getQuotedString(FALSE);
+
+ case LEAFREF:
+ YangLeafRef<?> lri = (YangLeafRef<?>) type.getDataTypeExtendedInfo();
+ YangType<?> rt = lri.isInGrouping() ? null : lri
+ .getEffectiveDataType();
+ return rt == null ? getToStringCall(name) :
+ getToStringForSpecialType(rt, name);
+
+ case IDENTITYREF:
+ YangIdentityRef ir = (YangIdentityRef) type
+ .getDataTypeExtendedInfo();
+ YangIdentity identity = ir.getReferredIdentity();
+ String idName = getCamelCase(identity.getName(), null);
+ return getCapitalCase(idName) + PERIOD + idName + TO_CAPS +
+ STRING_DATA_TYPE + OPEN_CLOSE_BRACKET_STRING;
+ case ENUMERATION:
+ case INSTANCE_IDENTIFIER:
+ case UINT64:
+ case DECIMAL64:
+ case DERIVED:
+ case UNION:
+ return getToStringCall(name);
+
+ default:
+ return name;
+ }
+ }
+
+ /**
+ * Returns union class's to string method.
+ *
+ * @param types list of types
+ * @return union class's to string method
+ */
+ static String getUnionToStringMethod(List<YangType<?>> types) {
+
+ StringBuilder builder = new StringBuilder(getOverRideString());
+ builder.append(methodSignature(TO_STRING_METHOD, null, PUBLIC, null,
+ STRING_DATA_TYPE, null, CLASS_TYPE));
+ for (YangType type : types) {
+ builder.append(getIfConditionBegin(
+ EIGHT_SPACE_INDENTATION, getSetValueParaCondition(
+ types.indexOf(type)))).append(getReturnString(
+ getToStringForSpecialType(type,
+ getCamelCase(type.getDataTypeName(), null)),
+ TWELVE_SPACE_INDENTATION))
+ .append(signatureClose()).append(methodClose(EIGHT_SPACE));
+ }
+ builder.append(getReturnString(NULL, EIGHT_SPACE_INDENTATION)).append(signatureClose())
+ .append(methodClose(FOUR_SPACE));
+ return builder.toString();
+ }
+
+ /**
+ * Returns from string method for bits class.
+ *
+ * @param className bits class name
+ * @return from string method for bits class
+ */
+ static String getBitSetEnumClassFromString(String className) {
+ return getJavaDoc(FROM_METHOD, className, false, null) +
+ getFromStringForBits(className);
+ }
+
+ /**
+ * Returns to string method for bits type.
+ *
+ * @param className class name
+ * @param enumeration enumeration
+ * @return to string method
+ */
+ static String getBitSetEnumClassToString(String className,
+ YangEnumeration enumeration) {
+
+ StringBuilder builder = new StringBuilder();
+ builder.append(methodSignature(TO_STRING_METHOD, null,
+ PUBLIC + SPACE + STATIC, BITS,
+ STRING_DATA_TYPE, BIT_SET, CLASS_TYPE))
+ .append(getStringBuilderAttr(EMPTY_STRING, EIGHT_SPACE_INDENTATION));
+ String condition;
+ String name;
+ for (YangEnum yangEnum : enumeration.getEnumSet()) {
+ name = yangEnum.getNamedValue();
+ condition = BITS + PERIOD + GET + OPEN_PARENTHESIS +
+ className + PERIOD + getEnumJavaAttribute(name).toUpperCase()
+ + PERIOD + getSmallCase(className)
+ + OPEN_CLOSE_BRACKET_STRING + CLOSE_PARENTHESIS;
+
+ builder.append(getIfConditionBegin(
+ EIGHT_SPACE_INDENTATION, condition))
+ .append(TWELVE_SPACE_INDENTATION).append(STRING_BUILDER_VAR).append(
+ PERIOD).append(APPEND).append(OPEN_PARENTHESIS)
+ .append(getQuotedString(name)).append(CLOSE_PARENTHESIS)
+ .append(signatureClose())
+ .append(TWELVE_SPACE_INDENTATION).append(STRING_BUILDER_VAR).append(
+ PERIOD).append(APPEND).append(OPEN_PARENTHESIS)
+ .append(getQuotedString(SPACE)).append(CLOSE_PARENTHESIS)
+ .append(signatureClose()).append(methodClose(EIGHT_SPACE));
+ }
+ builder.append(getReturnString(STRING_BUILDER_VAR, EIGHT_SPACE_INDENTATION))
+ .append(PERIOD).append(TO_STRING_METHOD)
+ .append(OPEN_CLOSE_BRACKET_STRING).append(signatureClose())
+ .append(methodClose(FOUR_SPACE));
+ return builder.toString();
+ }
+
+ /**
+ * Returns to string method for enum class.
+ *
+ * @return to string method for enum class
+ */
+ static String getToStringForEnumClass() {
+ StringBuilder builder = new StringBuilder(getOverRideString());
+ builder.append(methodSignature(TO_STRING_METHOD, EMPTY_STRING,
+ PUBLIC, null, STRING_DATA_TYPE, null,
+ CLASS_TYPE));
+ builder.append(getReturnString(SCHEMA_NAME, EIGHT_SPACE_INDENTATION))
+ .append(signatureClose()).append(methodClose(FOUR_SPACE));
+ return builder.toString();
+ }
+
+ /**
+ * Returns is filter content match interface.
+ *
+ * @param name name of node
+ * @return is filter content match interface
+ */
+ static String processSubtreeFilteringInterface(String name) {
+ String method = " /**\n" +
+ " * Checks if the passed " + name +
+ " maps the content match query condition.\n" +
+ " *\n" +
+ " * @param " + getSmallCase(name) + SPACE +
+ getSmallCase(name) + SPACE + "being passed to check" +
+ " for" +
+ " content match\n" +
+ " * @param isSelectAllSchemaChild is select all schema child\n" +
+ " * @return match result\n" +
+ " */\n";
+ LinkedHashMap<String, String> map = new LinkedHashMap<>();
+ map.put(getSmallCase(name), name);
+ map.put(SELECT_ALL_CHILD, BOOLEAN_DATA_TYPE);
+
+ return method + multiAttrMethodSignature(PROCESS_SUBTREE_FILTERING,
+ EMPTY_STRING, EMPTY_STRING,
+ name, map, INTERFACE_TYPE);
+ }
+
+ /**
+ * Returns build method for subtree filtering in class.
+ *
+ * @param node YANG node
+ * @return build method for subtree filtering in class
+ */
+ static String generateBuildMethodForSubTree(YangNode node) {
+ String name = getCapitalCase(node.getJavaClassNameOrBuiltInType());
+ StringBuilder builder = new StringBuilder(getJavaDoc(BUILD_METHOD,
+ name, false, null));
+ String def = DEFAULT_CAPS + name;
+ if (node instanceof RpcNotificationContainer) {
+ def = name + OP_PARAM;
+ }
+ builder.append(methodSignature(BUILD_FOR_FILTER, null, PUBLIC, null,
+ name, null, CLASS_TYPE))
+ .append(EIGHT_SPACE_INDENTATION).append(SUBTREE_FILTERED)
+ .append(SPACE).append(EQUAL).append(SPACE).append(TRUE)
+ .append(signatureClose()).append(methodBody(
+ MethodBodyTypes.BUILD, def, null, EIGHT_SPACE_INDENTATION,
+ null, null, false, null)).append(methodClose(FOUR_SPACE));
+ return builder.toString();
+ }
+
+ /**
+ * To string method for identity.
+ *
+ * @param name name of identity
+ * @return to string method
+ */
+ public static String getToStringMethodForIdentity(String name) {
+ StringBuilder builder = new StringBuilder(NEW_LINE);
+ builder.append(getJavaDoc(GETTER_METHOD, name, false, null));
+ String returnVal = getQuotedString(name);
+ String methodName = getCamelCase(name, null) + TO_CAPS + STRING_DATA_TYPE;
+ builder.append(methodSignature(methodName, null, PUBLIC + SPACE + STATIC,
+ null, STRING_DATA_TYPE, null, CLASS_TYPE))
+ .append(getReturnString(returnVal, EIGHT_SPACE_INDENTATION))
+ .append(signatureClose()).append(methodClose(FOUR_SPACE));
+ return builder.toString();
+ }
+
+ /**
+ * Returns from string method for identity class.
+ *
+ * @param name name of identity
+ * @param schemaName schema name
+ * @return from string method
+ */
+ public static String getFromStringMethodForIdentity(String name,
+ String schemaName) {
+ StringBuilder builder = new StringBuilder(NEW_LINE);
+ builder.append(getJavaDoc(FROM_METHOD, name, false, null));
+ String caps = getCapitalCase(name);
+ String returnVal = caps + PERIOD + CLASS;
+ String cond = getTwoParaEqualsString(FROM_STRING_PARAM_NAME,
+ getQuotedString(schemaName));
+ builder.append(methodSignature(FROM_STRING_METHOD_NAME, null,
+ PUBLIC + SPACE + STATIC,
+ FROM_STRING_PARAM_NAME, CLASS_STRING,
+ STRING_DATA_TYPE, CLASS_TYPE))
+ .append(getIfConditionBegin(EIGHT_SPACE_INDENTATION, cond))
+ .append(getReturnString(returnVal, TWELVE_SPACE_INDENTATION))
+ .append(signatureClose()).append(methodClose(EIGHT_SPACE))
+ .append(getExceptionThrowString(EIGHT_SPACE_INDENTATION))
+ .append(methodClose(FOUR_SPACE));
+ return builder.toString();
+ }
+
+ /**
+ * Returns compare to method for key class.
+ *
+ * @param attrs attribute list
+ * @param className class name
+ * @return compare to method
+ */
+ public static String getCompareToForKeyClass(
+ List<JavaAttributeInfo> attrs, String className) {
+
+ StringBuilder builder = new StringBuilder(getOverRideString());
+ builder.append(methodSignature(COMPARE_TO, null, PUBLIC, VALUE, INT,
+ className, CLASS_TYPE));
+ String cond;
+ String attrName;
+ String para;
+ StringBuilder space = new StringBuilder();
+ List<String> spaces = new ArrayList<>();
+ int count = 1;
+ for (JavaAttributeInfo attr : attrs) {
+ attrName = attr.getAttributeName();
+ para = VALUE + PERIOD + attrName;
+ cond = getTwoParaEqualsString(attrName, para);
+ if (count == 1) {
+ space.append(EIGHT_SPACE_INDENTATION);
+ } else {
+ space.append(FOUR_SPACE_INDENTATION);
+ }
+ spaces.add(space.toString());
+ count++;
+ builder.append(getIfConditionBegin(space.toString(), cond));
+ }
+ space.append(FOUR_SPACE_INDENTATION);
+ builder.append(getReturnString(ZERO, space.toString()))
+ .append(signatureClose());
+ for (int i = spaces.size() - 1; i >= 0; i--) {
+ builder.append(spaces.get(i)).append(CLOSE_CURLY_BRACKET)
+ .append(NEW_LINE);
+ }
+ builder.append(getReturnString(NEG_ONE, EIGHT_SPACE_INDENTATION))
+ .append(signatureClose()).append(methodClose(FOUR_SPACE));
+ return builder.toString();
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/StringGenerator.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/StringGenerator.java
new file mode 100644
index 0000000..2befdde
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/StringGenerator.java
@@ -0,0 +1,1347 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava.utils;
+
+import org.onosproject.yang.compiler.datamodel.YangCompilerAnnotation;
+import org.onosproject.yang.compiler.datamodel.YangDataStructure;
+import org.onosproject.yang.compiler.datamodel.YangIdentity;
+import org.onosproject.yang.compiler.datamodel.YangIdentityRef;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.BOOLEAN;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.DECIMAL64;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.EMPTY;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.INT16;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.INT32;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.INT64;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.INT8;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.UINT16;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.UINT32;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.UINT64;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.UINT8;
+import static org.onosproject.yang.compiler.translator.tojava.utils.BracketType.OPEN_CLOSE_BRACKET;
+import static org.onosproject.yang.compiler.translator.tojava.utils.BracketType.OPEN_CLOSE_BRACKET_WITH_VALUE;
+import static org.onosproject.yang.compiler.translator.tojava.utils.BracketType.OPEN_CLOSE_BRACKET_WITH_VALUE_AND_RETURN_TYPE;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodClassTypes.CLASS_TYPE;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getYangDataStructure;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ADD_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.AND;
+import static org.onosproject.yang.compiler.utils.UtilConstants.APPEND;
+import static org.onosproject.yang.compiler.utils.UtilConstants.APP_INSTANCE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.AT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BIG_DECIMAL;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BIG_INTEGER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BITSET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BOOLEAN_DATA_TYPE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BOOLEAN_WRAPPER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BUILDER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BUILDER_LOWER_CASE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BYTE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BYTE_WRAPPER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.CATCH;
+import static org.onosproject.yang.compiler.utils.UtilConstants.CHECK_NOT_NULL_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.CLASS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.CLOSE_CURLY_BRACKET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.CLOSE_PARENTHESIS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.COLON;
+import static org.onosproject.yang.compiler.utils.UtilConstants.COMMA;
+import static org.onosproject.yang.compiler.utils.UtilConstants.COMPARE_TO;
+import static org.onosproject.yang.compiler.utils.UtilConstants.DEFAULT_CAPS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.DIAMOND_CLOSE_BRACKET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.DIAMOND_OPEN_BRACKET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.DOUBLE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ELSE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EMPTY_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EQUAL;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EQUALS_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EXCEPTION;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EXCEPTION_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EXCEPTION_VAR;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EXTEND;
+import static org.onosproject.yang.compiler.utils.UtilConstants.FALSE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.FOR;
+import static org.onosproject.yang.compiler.utils.UtilConstants.FOUR_SPACE_INDENTATION;
+import static org.onosproject.yang.compiler.utils.UtilConstants.FROM_STRING_METHOD_NAME;
+import static org.onosproject.yang.compiler.utils.UtilConstants.GET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.GOOGLE_MORE_OBJECT_METHOD_STATIC_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.IF;
+import static org.onosproject.yang.compiler.utils.UtilConstants.IMPLEMENTS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.IMPORT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.IN;
+import static org.onosproject.yang.compiler.utils.UtilConstants.INT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.INTEGER_WRAPPER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.INT_MAX_RANGE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.INT_MIN_RANGE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.KEYS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.LEAF_IDENTIFIER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.LIST;
+import static org.onosproject.yang.compiler.utils.UtilConstants.LONG;
+import static org.onosproject.yang.compiler.utils.UtilConstants.LONG_MAX_RANGE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.LONG_MIN_RANGE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.LONG_WRAPPER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.MAP;
+import static org.onosproject.yang.compiler.utils.UtilConstants.MORE_OBJ_ATTR;
+import static org.onosproject.yang.compiler.utils.UtilConstants.NEW;
+import static org.onosproject.yang.compiler.utils.UtilConstants.NEW_LINE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OBJECT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OBJECT_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OF;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OMIT_NULL_VALUE_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OPEN_CLOSE_BRACKET_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OPEN_CURLY_BRACKET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OPEN_PARENTHESIS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OVERRIDE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PARSE_BOOLEAN;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PARSE_BYTE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PARSE_INT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PARSE_LONG;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PARSE_SHORT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PATTERN;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PERIOD;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PUT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.QUEUE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.QUOTES;
+import static org.onosproject.yang.compiler.utils.UtilConstants.QUOTE_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.RETURN;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SEMI_COLON;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SET_VALUE_PARA;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SHORT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SHORT_MAX_RANGE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SHORT_MIN_RANGE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SHORT_WRAPPER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SIXTEEN_SPACE_INDENTATION;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SPACE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.STRING_BUILDER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.STRING_BUILDER_VAR;
+import static org.onosproject.yang.compiler.utils.UtilConstants.THIS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.THROW_NEW;
+import static org.onosproject.yang.compiler.utils.UtilConstants.TMP_VAL;
+import static org.onosproject.yang.compiler.utils.UtilConstants.TO_STRING_METHOD;
+import static org.onosproject.yang.compiler.utils.UtilConstants.TRY;
+import static org.onosproject.yang.compiler.utils.UtilConstants.TWELVE_SPACE_INDENTATION;
+import static org.onosproject.yang.compiler.utils.UtilConstants.TWENTY_SPACE_INDENTATION;
+import static org.onosproject.yang.compiler.utils.UtilConstants.UINT8_MAX_RANGE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.UINT8_MIN_RANGE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.UINT_MAX_RANGE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.UINT_MIN_RANGE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ULONG_MAX_RANGE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ULONG_MIN_RANGE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.VALIDATE_RANGE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.VALUE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.YANG_AUGMENTED_INFO_MAP;
+import static org.onosproject.yang.compiler.utils.UtilConstants.YANG_UTILS_TODO;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ZERO;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getCamelCase;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getCapitalCase;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.trimAtLast;
+
+/**
+ * Represents string generator for translator.
+ */
+public final class StringGenerator {
+
+ private static final Set<YangDataTypes> PRIMITIVE_TYPES =
+ new HashSet<>(Arrays.asList(INT8, INT16, INT32, INT64, UINT8,
+ UINT16, UINT32, UINT64, DECIMAL64,
+ BOOLEAN, EMPTY));
+
+ // No instantiation.
+ private StringGenerator() {
+ }
+
+ /**
+ * Returns compare to string.
+ *
+ * @return compare to string
+ */
+ static String getCompareToString() {
+ return PERIOD + COMPARE_TO;
+ }
+
+ /**
+ * Returns lesser than and equals condition.
+ *
+ * @return lesser than and equals condition
+ */
+ static String getLesserThanCondition() {
+ return SPACE + DIAMOND_OPEN_BRACKET + EQUAL + SPACE;
+ }
+
+ /**
+ * Returns greater than and equals condition.
+ *
+ * @return greater than and equals condition
+ */
+ static String getGreaterThanCondition() {
+ return SPACE + DIAMOND_CLOSE_BRACKET + EQUAL + SPACE;
+ }
+
+ /**
+ * Returns && conditional string.
+ *
+ * @param cond1 condition one
+ * @param cond2 condition two
+ * @return && conditional string
+ */
+ static String ifAndAndCondition(String cond1, String cond2) {
+ return cond1 + SPACE + AND + AND + SPACE + cond2;
+ }
+
+ /**
+ * Returns equal equal conditional string.
+ *
+ * @param cond1 condition one
+ * @param cond2 condition two
+ * @return equal equal conditional string
+ */
+ static String ifEqualEqualCondition(String cond1, String cond2) {
+ return cond1 + SPACE + EQUAL + EQUAL + SPACE + cond2;
+ }
+
+ /**
+ * Returns new instance string.
+ *
+ * @param returnType return type
+ * @param varName variable name
+ * @param space spaces
+ * @param value value
+ * @return new instance string
+ */
+ static String getNewInstance(String returnType, String varName,
+ String space, String value) {
+ return space + returnType + SPACE + varName + SPACE + EQUAL + SPACE +
+ NEW + SPACE + returnType + getOpenCloseParaWithValue(value) +
+ signatureClose();
+ }
+
+ /**
+ * Returns return string.
+ *
+ * @param value value to be returned
+ * @param space spaces
+ * @return return string
+ */
+ static String getReturnString(String value, String space) {
+ return space + RETURN + SPACE + value;
+ }
+
+ /**
+ * Returns illegal argument exception string.
+ *
+ * @param space indentation
+ * @return illegal argument exception string
+ */
+ static String getExceptionThrowString(String space) {
+ return space + THROW_NEW + EXCEPTION_STRING;
+ }
+
+ /**
+ * Returns new line string with spaces.
+ *
+ * @param space spaces
+ * @return new line string with spaces
+ */
+ static String getNewLineAndSpace(String space) {
+ return NEW_LINE + space;
+ }
+
+ /**
+ * Returns method close string.
+ *
+ * @param type indentation type
+ * @return method close string
+ */
+ public static String methodClose(IndentationType type) {
+ switch (type) {
+ case EIGHT_SPACE:
+ return EIGHT_SPACE_INDENTATION + CLOSE_CURLY_BRACKET +
+ NEW_LINE;
+ case TWELVE_SPACE:
+ return TWELVE_SPACE_INDENTATION + CLOSE_CURLY_BRACKET +
+ NEW_LINE;
+ case SIXTEEN_SPACE:
+ return SIXTEEN_SPACE_INDENTATION + CLOSE_CURLY_BRACKET +
+ NEW_LINE;
+ case TWENTY_SPACE:
+ return TWENTY_SPACE_INDENTATION + CLOSE_CURLY_BRACKET +
+ NEW_LINE;
+ case TWENTY_EIGHT_SPACE:
+ return TWENTY_SPACE_INDENTATION + EIGHT_SPACE_INDENTATION +
+ CLOSE_CURLY_BRACKET + NEW_LINE;
+ case TWENTY_FOUR_SPACE:
+ return TWENTY_SPACE_INDENTATION + FOUR_SPACE_INDENTATION +
+ CLOSE_CURLY_BRACKET + NEW_LINE;
+ case FOUR_SPACE:
+ return FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET +
+ NEW_LINE;
+ default:
+ return CLOSE_CURLY_BRACKET + NEW_LINE;
+ }
+ }
+
+ /**
+ * Returns body of the method.
+ *
+ * @param type type of method body
+ * @param paraName parameter name
+ * @param methodName method name
+ * @param space space to be given before body
+ * @param prefix prefix for internal method
+ * @param paramType parameter type
+ * @param isBuilderSetter is for builder setter
+ * @param setterVal value to set in setter
+ * @return body of the method
+ */
+ static String methodBody(MethodBodyTypes type, String paraName,
+ String methodName,
+ String space, String prefix,
+ String paramType, boolean isBuilderSetter, String setterVal) {
+ StringBuilder builder = new StringBuilder();
+ String body;
+ switch (type) {
+ case GETTER:
+ return getReturnString(paraName, space);
+ case SETTER:
+ if (setterVal == null) {
+ setterVal = paraName;
+ }
+ body = space + THIS + PERIOD + paraName + SPACE + EQUAL + SPACE +
+ setterVal + signatureClose();
+ builder.append(body);
+ if (isBuilderSetter) {
+ body = getReturnString(THIS + signatureClose(), space);
+ builder.append(body);
+ }
+ return builder.toString();
+ case BUILD:
+ return getReturnString(
+ NEW + SPACE + paraName + getOpenCloseParaWithValue(
+ THIS) + signatureClose(), space);
+ case CONSTRUCTOR:
+ return space + paraName + SPACE +
+ EQUAL + SPACE + BUILDER_LOWER_CASE + OBJECT + PERIOD +
+ prefix + methodName +
+ brackets(OPEN_CLOSE_BRACKET, null, null) +
+ signatureClose();
+ case DEFAULT_CONSTRUCTOR:
+ return EMPTY_STRING;
+ case AUGMENTED_MAP_ADD:
+ return space + YANG_AUGMENTED_INFO_MAP +
+ PERIOD + PUT + OPEN_PARENTHESIS + CLASS +
+ OBJECT_STRING + COMMA + SPACE + VALUE +
+ CLOSE_PARENTHESIS + signatureClose();
+ case AUGMENTED_MAP_GET_VALUE:
+ return getReturnString(
+ YANG_AUGMENTED_INFO_MAP + PERIOD + GET + getOpenCloseParaWithValue(
+ CLASS + OBJECT_STRING) + signatureClose(), space);
+ case AUGMENTED_MAP_GETTER:
+ return getReturnString(YANG_AUGMENTED_INFO_MAP +
+ signatureClose(), space);
+ case MANAGER_METHODS:
+ body = space + YANG_UTILS_TODO + NEW_LINE;
+ builder.append(body);
+ if (paramType != null) {
+ body = getReturnString(parseTypeForReturnValue(paramType),
+ space);
+ builder.append(body)
+ .append(signatureClose());
+ }
+ return builder.toString();
+ case OF_METHOD:
+ return getReturnString(
+ NEW + SPACE + paraName + getOpenCloseParaWithValue(
+ VALUE) + signatureClose(), space);
+ case TO_STRING:
+ return getToStringMethodsAddString(space, paraName) + paraName +
+ CLOSE_PARENTHESIS;
+ case EQUALS_METHOD:
+ default:
+ return null;
+ }
+ }
+
+ /**
+ * Returns to string method's add string.
+ *
+ * @param space indentation
+ * @param paraName parameter name
+ * @return to string method's add string
+ */
+ static String getToStringMethodsAddString(String space, String paraName) {
+ return space + PERIOD + ADD_STRING + OPEN_PARENTHESIS +
+ getQuotedString(paraName) + COMMA + SPACE;
+ }
+
+ /**
+ * Returns end of line.
+ *
+ * @return end of line
+ */
+ static String signatureClose() {
+ return SEMI_COLON + NEW_LINE;
+ }
+
+
+ /**
+ * Returns value assignment.
+ *
+ * @return value assignment
+ */
+ static String valueAssign(String param, String value, String indentation) {
+ return indentation + param + SPACE + EQUAL + SPACE + value +
+ signatureClose();
+ }
+
+ /**
+ * Returns method signature close for method class type.
+ *
+ * @param type method class type
+ * @return method signature close for method class type
+ */
+ static String methodSignatureClose(MethodClassTypes type) {
+ switch (type) {
+ case INTERFACE_TYPE:
+ return signatureClose();
+ case CLASS_TYPE:
+ return SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
+ default:
+ return null;
+ }
+ }
+
+ /**
+ * Returns method param.
+ *
+ * @param type type of param
+ * @param name name of param
+ * @return method param
+ */
+ private static String methodParam(String type, String name) {
+ return type + SPACE + name;
+ }
+
+ /**
+ * Returns comma followed by a space.
+ *
+ * @return comma followed by a space
+ */
+ private static String commaWithSpace() {
+ return COMMA + SPACE;
+ }
+
+ /**
+ * Returns bracket string for the given type.
+ *
+ * @param type bracket type
+ * @param value value to be added in brackets
+ * @param returnType returns type to be added for value
+ * @return bracket for the given type.
+ */
+ static String brackets(BracketType type, String value,
+ String returnType) {
+ String ret = EMPTY_STRING;
+ switch (type) {
+ case OPEN_CLOSE_BRACKET:
+ return OPEN_PARENTHESIS + CLOSE_PARENTHESIS;
+ case OPEN_CLOSE_BRACKET_WITH_VALUE:
+ return OPEN_PARENTHESIS + value + CLOSE_PARENTHESIS;
+ case OPEN_CLOSE_BRACKET_WITH_VALUE_AND_RETURN_TYPE:
+ if (returnType != null) {
+ ret = returnType + SPACE;
+ }
+ return OPEN_PARENTHESIS + ret + value +
+ CLOSE_PARENTHESIS;
+ case OPEN_BRACKET_WITH_VALUE:
+ ret = EMPTY_STRING;
+ if (returnType != null) {
+ ret = returnType + SPACE;
+ }
+ return OPEN_PARENTHESIS + ret + value +
+ COMMA;
+ case CLOSE_BRACKET_WITH_VALUE:
+ ret = EMPTY_STRING;
+ if (returnType != null) {
+ ret = returnType + SPACE;
+ }
+ return SPACE + ret + value +
+ CLOSE_PARENTHESIS;
+ case OPEN_CLOSE_DIAMOND:
+ return DIAMOND_OPEN_BRACKET + DIAMOND_CLOSE_BRACKET;
+ case OPEN_CLOSE_DIAMOND_WITH_VALUE:
+ return DIAMOND_OPEN_BRACKET + value + DIAMOND_CLOSE_BRACKET;
+ default:
+ return null;
+ }
+ }
+
+ /**
+ * Returns method signature for multi attribute methods.
+ *
+ * @param methodName method name
+ * @param prefix prefix for method
+ * @param modifier modifier for method
+ * @param methodReturnType method's return type
+ * @param params parameters
+ * @param type type of method
+ * @return method signature for multi attribute methods
+ */
+ static String multiAttrMethodSignature(String methodName, String
+ prefix, String modifier, String methodReturnType,
+ Map<String, String> params,
+ MethodClassTypes type) {
+ StringBuilder methodBuilder = new StringBuilder(FOUR_SPACE_INDENTATION);
+ String method = EMPTY_STRING;
+ if (modifier != null) {
+ method = modifier + SPACE;
+ }
+ methodBuilder.append(method);
+ if (prefix == null) {
+ prefix = EMPTY_STRING;
+ }
+ if (methodReturnType != null) {
+ method = methodReturnType + SPACE + prefix + methodName;
+ } else {
+ method = prefix + methodName;
+ }
+ //Append method beginning.
+ methodBuilder.append(method)
+ .append(OPEN_PARENTHESIS);
+ for (Map.Entry<String, String> param : params.entrySet()) {
+ methodBuilder.append(methodParam(param.getValue(), param.getKey()));
+ methodBuilder.append(commaWithSpace());
+ }
+ String para = methodBuilder.toString();
+ String[] array = {SPACE, COMMA};
+ para = trimAtLast(para, array);
+ methodBuilder = new StringBuilder(para)
+ .append(CLOSE_PARENTHESIS)
+ .append(methodSignatureClose(type));
+
+ return methodBuilder.toString();
+ }
+
+ /**
+ * Returns method signature for interface and implementation classes.
+ *
+ * @param methodName name of the method
+ * @param prefix prefix which needs to be added for method
+ * @param modifier modifier which needs to be added for method
+ * @param paraVal value which needs to be added as parameter
+ * @param methodReturnType returns type to be added for method
+ * @param paraReturnType return type to be added for parameter
+ * @param type method class type
+ * @return method signature for interface and implementation classes
+ */
+ static String methodSignature(
+ String methodName, String prefix, String modifier, String paraVal,
+ String methodReturnType, String paraReturnType,
+ MethodClassTypes type) {
+ StringBuilder methodBuilder = new StringBuilder(FOUR_SPACE_INDENTATION);
+ String method = EMPTY_STRING;
+ if (modifier != null) {
+ method = modifier + SPACE;
+ }
+ if (prefix == null) {
+ prefix = EMPTY_STRING;
+ }
+ methodBuilder.append(method);
+ if (methodReturnType != null) {
+ method = methodReturnType + SPACE + prefix + methodName;
+ } else {
+ method = prefix + methodName;
+ }
+ //Append method beginning.
+ methodBuilder.append(method);
+
+ if (paraVal != null) {
+ methodBuilder.append(brackets(
+ OPEN_CLOSE_BRACKET_WITH_VALUE_AND_RETURN_TYPE,
+ paraVal, paraReturnType));
+ } else {
+ methodBuilder.append(brackets(OPEN_CLOSE_BRACKET, null,
+ null));
+ }
+
+ methodBuilder.append(methodSignatureClose(type));
+
+ return methodBuilder.toString();
+ }
+
+ /**
+ * Returns list attribute.
+ *
+ * @param attrType attribute type
+ * @param compilerAnnotation compiler annotations
+ * @return list attribute
+ */
+
+ static String getListAttribute(String attrType,
+ YangCompilerAnnotation compilerAnnotation) {
+ String listAttr;
+ YangDataStructure ds = getYangDataStructure(compilerAnnotation);
+ if (ds != null) {
+ switch (ds) {
+ case QUEUE: {
+ listAttr = QUEUE + DIAMOND_OPEN_BRACKET + attrType +
+ DIAMOND_CLOSE_BRACKET;
+ break;
+ }
+ case SET: {
+ listAttr = SET + DIAMOND_OPEN_BRACKET + attrType +
+ DIAMOND_CLOSE_BRACKET;
+ break;
+ }
+ case LIST: {
+ listAttr = getListString() + attrType +
+ DIAMOND_CLOSE_BRACKET;
+ break;
+ }
+ case MAP:
+ listAttr = MAP + DIAMOND_OPEN_BRACKET + attrType + KEYS +
+ COMMA + attrType + DIAMOND_CLOSE_BRACKET;
+ break;
+ default: {
+ listAttr = getListString() + attrType +
+ DIAMOND_CLOSE_BRACKET;
+ }
+ }
+ } else {
+ listAttr = getListString() + attrType + DIAMOND_CLOSE_BRACKET;
+ }
+ return listAttr;
+ }
+
+ /**
+ * Returns getters for value and select leaf.
+ *
+ * @return getters for value and select leaf
+ */
+ static String getIsValueLeafSet() {
+ return "\n" +
+ " @Override\n" +
+ " public boolean isLeafValueSet(LeafIdentifier leaf) {\n" +
+ " return valueLeafFlags.get(leaf.getLeafIndex());\n" +
+ " }\n" +
+ "\n";
+ }
+
+ /**
+ * Returns is select leaf set.
+ *
+ * @return is select leaf set
+ */
+ static String getIsSelectLeafSet() {
+ return " @Override\n" +
+ " public boolean isSelectLeaf(LeafIdentifier leaf) {\n" +
+ " return selectLeafFlags.get(leaf.getLeafIndex());\n" +
+ " }\n";
+ }
+
+ /**
+ * Returns getter methods for operation attributes.
+ *
+ * @return getter methods for operation attributes
+ */
+ static String getValueLeafGetters() {
+ return "\n" +
+ " /**\n" +
+ " * Returns the valueLeafFlags.\n" +
+ " *\n" +
+ " * @return value of valueLeafFlags\n" +
+ " */\n" +
+ " public BitSet getValueLeafFlags() {\n" +
+ " return valueLeafFlags;\n" +
+ " }\n" +
+ "\n";
+ }
+
+ /**
+ * Returns getter methods for operation attributes.
+ *
+ * @return getter methods for operation attributes
+ */
+ static String getSelectLeafGetters() {
+ return " /**\n" +
+ " * Returns the selectLeafFlags.\n" +
+ " *\n" +
+ " * @return value of selectLeafFlags\n" +
+ " */\n" +
+ " public BitSet getSelectLeafFlags() {\n" +
+ " return selectLeafFlags;\n" +
+ " }\n" +
+ "\n";
+ }
+
+ /**
+ * Returns interface leaf identifier enum method.
+ *
+ * @return interface leaf identifier enum method
+ */
+ static String getInterfaceLeafIdEnumMethods() {
+ return "\n\n private int leafIndex;\n" +
+ "\n" +
+ " public int getLeafIndex() {\n" +
+ " return leafIndex;\n" +
+ " }\n" +
+ "\n" +
+ " LeafIdentifier(int value) {\n" +
+ " this.leafIndex = value;\n" +
+ " }\n" +
+ " }\n";
+ }
+
+ /**
+ * Returns if condition string for typedef constructor.
+ *
+ * @param type type of conflict
+ * @param addFirst true int/long need to be added first
+ * @param val value to set
+ * @return if condition string for typedef constructor
+ */
+ static String ifConditionForIntInTypeDefConstructor(ValidatorTypeForUnionTypes type,
+ boolean addFirst, String val) {
+ String condition =
+ EIGHT_SPACE_INDENTATION + IF + SPACE + OPEN_PARENTHESIS +
+ VALIDATE_RANGE + OPEN_PARENTHESIS;
+
+ switch (type) {
+ case INT_TYPE_CONFLICT:
+ if (addFirst) {
+ condition = condition + INT_MIN_RANGE + COMMA + SPACE +
+ INT_MAX_RANGE + COMMA + SPACE + val;
+ } else {
+ condition = condition + UINT_MIN_RANGE + COMMA + SPACE +
+ UINT_MAX_RANGE + COMMA + SPACE + val;
+ }
+ break;
+ case LONG_TYPE_CONFLICT:
+ if (addFirst) {
+ condition = condition + LONG_MIN_RANGE + COMMA + SPACE +
+ LONG_MAX_RANGE + COMMA + SPACE + val;
+ } else {
+ condition = condition + ULONG_MIN_RANGE + COMMA + SPACE +
+ ULONG_MAX_RANGE + COMMA + SPACE + val;
+ }
+ break;
+ case SHORT_TYPE_CONFLICT:
+ if (addFirst) {
+ condition = condition + SHORT_MIN_RANGE + COMMA + SPACE +
+ SHORT_MAX_RANGE + COMMA + SPACE + val;
+ } else {
+ condition = condition + UINT8_MIN_RANGE + COMMA + SPACE +
+ UINT8_MAX_RANGE + COMMA + SPACE + val;
+ }
+ break;
+ default:
+ return null;
+ }
+
+ return condition + CLOSE_PARENTHESIS + CLOSE_PARENTHESIS + SPACE +
+ OPEN_CURLY_BRACKET + NEW_LINE;
+ }
+
+ /**
+ * Returns from string method parsed string.
+ *
+ * @param targetDataType target data type
+ * @param yangType YANG type
+ * @return parsed string
+ */
+ static String getParseFromStringMethod(String targetDataType,
+ YangType<?> yangType) {
+
+ YangDataTypes type = yangType.getDataType();
+ switch (type) {
+ case INT8:
+ return BYTE_WRAPPER + PERIOD + PARSE_BYTE;
+
+ case INT16:
+ return SHORT_WRAPPER + PERIOD + PARSE_SHORT;
+
+ case INT32:
+ return INTEGER_WRAPPER + PERIOD + PARSE_INT;
+
+ case INT64:
+ return LONG_WRAPPER + PERIOD + PARSE_LONG;
+
+ case UINT8:
+ return SHORT_WRAPPER + PERIOD + PARSE_SHORT;
+
+ case UINT16:
+ return INTEGER_WRAPPER + PERIOD + PARSE_INT;
+
+ case UINT32:
+ return LONG_WRAPPER + PERIOD + PARSE_LONG;
+
+ case UINT64:
+ return NEW + SPACE + BIG_INTEGER;
+
+ case DECIMAL64:
+ return NEW + SPACE + BIG_DECIMAL;
+
+ case INSTANCE_IDENTIFIER:
+ case STRING:
+ return EMPTY_STRING;
+ case EMPTY:
+ case BOOLEAN:
+ return BOOLEAN_WRAPPER + PERIOD + PARSE_BOOLEAN;
+
+ case ENUMERATION:
+ return targetDataType + PERIOD + OF;
+
+ case IDENTITYREF:
+ YangIdentityRef ir = (YangIdentityRef) yangType
+ .getDataTypeExtendedInfo();
+ YangIdentity identity = ir.getReferredIdentity();
+ return getCapitalCase(getCamelCase(identity.getName(), null))
+ + PERIOD + FROM_STRING_METHOD_NAME;
+ case DERIVED:
+ case UNION:
+ return targetDataType + PERIOD + FROM_STRING_METHOD_NAME;
+
+ default:
+ throw new TranslatorException(
+ "Given data type is not supported. " +
+ yangType.getDataTypeName() + " in " +
+ yangType.getLineNumber() + " at " +
+ yangType.getCharPosition() + " in " +
+ yangType.getFileName());
+ }
+ }
+
+ /**
+ * Returns sub string with catch statement for union's from string method.
+ *
+ * @param attrHolder attribute holder/count for from string
+ * @return sub string with catch statement for union's from string method
+ */
+ static String getCatchSubString(String attrHolder) {
+ StringBuilder builder = new StringBuilder();
+ builder.append(CLOSE_CURLY_BRACKET).append(SPACE).append(CATCH)
+ .append(SPACE).append(
+ brackets(OPEN_CLOSE_BRACKET_WITH_VALUE_AND_RETURN_TYPE, EXCEPTION_VAR,
+ EXCEPTION)).append(SPACE).append(OPEN_CURLY_BRACKET)
+ .append(NEW_LINE);
+ if (attrHolder != null) {
+ builder.append(getExceptionThrowString(TWELVE_SPACE_INDENTATION));
+ }
+ builder.append(EIGHT_SPACE_INDENTATION).append(CLOSE_CURLY_BRACKET);
+ return builder.toString();
+ }
+
+ /**
+ * Returns sub string with return statement for union's from string method.
+ *
+ * @return sub string with return statement for union's from string method
+ */
+ static String getReturnOfSubString() {
+ return getReturnString(OF, TWELVE_SPACE_INDENTATION) +
+ getOpenCloseParaWithValue(TMP_VAL) + signatureClose();
+ }
+
+ /**
+ * Returns sub string with try statement for union's from string method.
+ *
+ * @return sub string with try statement for union's from string method
+ */
+ static String getTrySubString() {
+ return TRY + SPACE + OPEN_CURLY_BRACKET;
+ }
+
+ /*
+ * Returns omit null value string.
+ *
+ * @return omit null value string
+ */
+ static String getOmitNullValueString() {
+ return TWELVE_SPACE_INDENTATION + PERIOD + OMIT_NULL_VALUE_STRING +
+ NEW_LINE;
+ }
+
+ /**
+ * Returns collection's iterator method.
+ *
+ * @param indentation indentation
+ * @param loopVar loop variable
+ * @param collection collection
+ * @return collection's iterator method
+ */
+ static String getCollectionIteratorForLoopBegin(String indentation,
+ String loopVar,
+ String collection) {
+ return indentation + FOR + SPACE + OPEN_PARENTHESIS + loopVar + SPACE +
+ COLON + SPACE + collection + CLOSE_PARENTHESIS + SPACE +
+ OPEN_CURLY_BRACKET + NEW_LINE;
+ }
+
+ /**
+ * Returns if else condition's signature.
+ *
+ * @param indentation indentation
+ * @param condition conditions
+ * @return if else condition's signature
+ */
+ static String getElseIfConditionBegin(String indentation,
+ String condition) {
+ return indentation + CLOSE_CURLY_BRACKET + ELSE +
+ getIfConditionBegin(EMPTY_STRING, condition);
+ }
+
+ /**
+ * Returns if condition's signature.
+ *
+ * @param indentation indentation
+ * @param condition conditions
+ * @return if condition's signature
+ */
+ static String getIfConditionBegin(String indentation, String condition) {
+ return indentation + IF + SPACE + getOpenCloseParaWithValue(condition) +
+ methodSignatureClose(CLASS_TYPE);
+ }
+
+ /**
+ * Returns true, if the data type is primitive; false otherwise.
+ *
+ * @param dataType data type
+ * @return true if the data type is primitive; false otherwise
+ */
+ public static boolean isPrimitiveDataType(YangDataTypes dataType) {
+ return PRIMITIVE_TYPES.contains(dataType);
+ }
+
+ /**
+ * Returns list string.
+ *
+ * @return list string
+ */
+ private static String getListString() {
+ return LIST + DIAMOND_OPEN_BRACKET;
+ }
+
+ /**
+ * Returns override string.
+ *
+ * @return override string
+ */
+ public static String getOverRideString() {
+ return NEW_LINE + FOUR_SPACE_INDENTATION + OVERRIDE + NEW_LINE;
+ }
+
+ /**
+ * Returns value leaf flag setter.
+ *
+ * @param name name of leaf
+ * @param flag flag to set values
+ * @param indentation indentation
+ * @param prefix prefix of method
+ * @return value leaf flag setter
+ */
+ static String getLeafFlagSetString(String name, String flag, String indentation, String prefix) {
+ return indentation + flag + PERIOD + prefix +
+ getOpenCloseParaWithValue(LEAF_IDENTIFIER + PERIOD + name
+ .toUpperCase() + ".getLeafIndex()");
+ }
+
+ /*Provides string to return for type.*/
+ private static String parseTypeForReturnValue(String type) {
+ switch (type) {
+ case BYTE:
+ case INT:
+ case SHORT:
+ case LONG:
+ case DOUBLE:
+ return ZERO;
+ case BOOLEAN_DATA_TYPE:
+ return FALSE;
+ default:
+ return null;
+ }
+ }
+
+ /**
+ * Returns check not null string.
+ *
+ * @param name attribute name
+ * @return check not null string
+ */
+ static String getCheckNotNull(String name) {
+ return EIGHT_SPACE_INDENTATION + CHECK_NOT_NULL_STRING +
+ OPEN_PARENTHESIS + name + COMMA + SPACE + name +
+ CLOSE_PARENTHESIS + SEMI_COLON + NEW_LINE;
+ }
+
+ /**
+ * Returns definition close string.
+ *
+ * @return definition close string
+ */
+ private static String defCloseString() {
+ return SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
+ }
+
+ /**
+ * Returns default class definition for java file when extends a
+ * interface.
+ *
+ * @param classType class type
+ * @param name name of class
+ * @param modifier modifier for class
+ * @param extend extends class name
+ * @return class definition
+ */
+ static String getDefaultDefinitionWithExtends(String classType,
+ String name, String
+ modifier,
+ String extend) {
+ String mod = EMPTY_STRING;
+ if (modifier != null) {
+ mod = modifier + SPACE;
+ }
+ return mod + classType + SPACE + name + SPACE + EXTEND + SPACE
+ + extend + defCloseString();
+ }
+
+ /**
+ * Returns default class definition for java file when implements a
+ * interface.
+ *
+ * @param classType class type
+ * @param name name of class
+ * @param modifier modifier for class
+ * @param impl implements class name
+ * @return class definition
+ */
+ static String getDefaultDefinitionWithImpl(String classType,
+ String name, String
+ modifier,
+ String impl) {
+ String mod = EMPTY_STRING;
+ if (modifier != null) {
+ mod = modifier + SPACE;
+ }
+ return mod + classType + SPACE + name + SPACE + IMPLEMENTS +
+ SPACE + impl + defCloseString();
+ }
+
+ /**
+ * Returns default class definition for java file.
+ *
+ * @param classType class type
+ * @param name name of class
+ * @param modifier modifier for class
+ * @return class definition
+ */
+ static String getDefaultDefinition(String classType,
+ String name, String modifier) {
+ String mod = EMPTY_STRING;
+ if (modifier != null) {
+ mod = modifier + SPACE;
+ }
+ return mod + classType + SPACE + name + defCloseString();
+ }
+
+ /**
+ * Returns class definition for implements.
+ *
+ * @param classType class type
+ * @param name name of class
+ * @param modifier modifier
+ * @param implClass implements class
+ * @return class definition
+ */
+ static String getDefinitionWithImplements(String classType, String name,
+ String modifier, String
+ implClass) {
+ String mod = EMPTY_STRING;
+ if (modifier != null) {
+ mod = modifier + SPACE;
+ }
+ return mod + classType + SPACE + name + SPACE + IMPLEMENTS + SPACE +
+ implClass + defCloseString();
+ }
+
+ /**
+ * Returns string for service class.
+ *
+ * @param name1 name of even listener class
+ * @param name2 name of even class
+ * @return listener service string for service class
+ */
+ static String getEventExtendsString(String name1, String type,
+ String name2) {
+ StringBuilder builder = new StringBuilder();
+ builder.append(type).append(DIAMOND_OPEN_BRACKET).append(name1)
+ .append(COMMA).append(SPACE).append(name2).append
+ (DIAMOND_CLOSE_BRACKET);
+ return builder.toString();
+ }
+
+ /**
+ * Returns import string.
+ *
+ * @param pkg package
+ * @param cls class
+ * @return import string
+ */
+ public static String getImportString(String pkg, String cls) {
+ StringBuilder builder = new StringBuilder()
+ .append(IMPORT).append(pkg).append(PERIOD).append(cls)
+ .append(signatureClose());
+ return builder.toString();
+ }
+
+ /**
+ * Returns static modifier string.
+ *
+ * @param modifier modifier
+ * @return static modifier string
+ */
+ static String getSpecificModifier(String modifier, String keyWord) {
+ return new StringBuilder(modifier).append(SPACE).append(keyWord)
+ .toString();
+ }
+
+ /**
+ * Returns builder string for class definition.
+ *
+ * @param yangName class name
+ * @return builder string for class definition
+ */
+ static String getBuilderImplStringClassDef(String yangName) {
+ return new StringBuilder(yangName).append(PERIOD).append(yangName)
+ .append(BUILDER).toString();
+ }
+
+ /**
+ * Returns default name string.
+ *
+ * @param yangName class name
+ * @return default name string
+ */
+ static String getDefaultName(String yangName) {
+ return new StringBuilder(DEFAULT_CAPS).append(yangName).toString();
+ }
+
+ /**
+ * Returns suffixed name string.
+ *
+ * @param yangName class name
+ * @param suffix suffix to append to name
+ * @return suffixed name string
+ */
+ static String getSuffixedName(String yangName, String suffix) {
+ return new StringBuilder(yangName).append(suffix).toString();
+ }
+
+ /**
+ * Returns error msg string.
+ *
+ * @param msg message
+ * @param name name of node
+ * @param line line number
+ * @param position char position
+ * @param fileName file name
+ * @return error message string
+ */
+ static String getErrorMsg(String msg, String name, int line, int position,
+ String fileName) {
+ return new StringBuilder().append(msg).append(name).append(IN)
+ .append(line).append(AT).append(position).append(IN)
+ .append(fileName).toString();
+ }
+
+ /**
+ * Returns string builder attribute string;
+ *
+ * @param init first param to be appended to string builder
+ * @param space indentation space
+ * @return string builder attribute
+ */
+ static String getStringBuilderAttr(String init, String space) {
+ StringBuilder builder = new StringBuilder(space);
+ builder.append(STRING_BUILDER).append(SPACE).append(STRING_BUILDER_VAR)
+ .append(SPACE).append(EQUAL).append(SPACE).append(NEW)
+ .append(SPACE).append(STRING_BUILDER).append(
+ getOpenCloseParaWithValue(getQuotedString(init)))
+ .append(signatureClose());
+ return builder.toString();
+ }
+
+ /**
+ * Returns quoted string.
+ *
+ * @param name name to be quoted
+ * @return quoted string
+ */
+ static String getQuotedString(String name) {
+ return QUOTES + name + QUOTES;
+ }
+
+ /**
+ * Returns string builder's append string.
+ *
+ * @param append data to be append
+ * @param space indentation
+ * @return string builder's append string
+ */
+ static String getStringBuilderAppendString(String append, String space) {
+ return space + STRING_BUILDER_VAR + PERIOD + APPEND + OPEN_PARENTHESIS +
+ append + CLOSE_PARENTHESIS + signatureClose();
+ }
+
+ /**
+ * Returns pattern quote string.
+ *
+ * @param type type for pattern is needed
+ * @return pattern quote string
+ */
+ static String getPatternQuoteString(String type) {
+ return PATTERN + PERIOD + QUOTE_STRING + getOpenCloseParaWithValue(
+ getQuotedString(type));
+ }
+
+ /**
+ * Returns bitset attribute.
+ *
+ * @param indentation indentation
+ * @return bitset attribute
+ */
+ static String getBitSetAttr(String indentation) {
+ StringBuilder builder = new StringBuilder(indentation);
+ return builder.append(BITSET).append(SPACE).append(TMP_VAL)
+ .append(SPACE).append(EQUAL).append(SPACE).append(NEW)
+ .append(SPACE).append(BITSET).append(OPEN_CLOSE_BRACKET_STRING)
+ .append(signatureClose()).toString();
+ }
+
+ /**
+ * Returns for loop string
+ *
+ * @param space indentation
+ * @param type data type
+ * @param var variable
+ * @param data data variable/collection
+ * @return for loop string
+ */
+ static String getForLoopString(String space, String type, String var,
+ String data) {
+ return space + FOR + SPACE + OPEN_PARENTHESIS + type + SPACE + var +
+ SPACE + COLON + SPACE + data + CLOSE_PARENTHESIS +
+ methodSignatureClose(CLASS_TYPE);
+ }
+
+ /**
+ * Returns set value parameter's get string for union to string method.
+ *
+ * @param count count of type
+ * @return get string
+ */
+ static String getSetValueParaCondition(int count) {
+ return SET_VALUE_PARA + PERIOD + GET + getOpenCloseParaWithValue(
+ count + EMPTY_STRING);
+ }
+
+ /**
+ * Returns more object attr for union to string method.
+ *
+ * @param name name of generate class
+ * @return more object attr for union to string method
+ */
+ static String getMoreObjectAttr(String name) {
+ String cls = name + PERIOD + CLASS;
+ StringBuilder attr = new StringBuilder(EIGHT_SPACE_INDENTATION);
+ String[] array = {NEW_LINE};
+ attr.append(MORE_OBJ_ATTR).append(GOOGLE_MORE_OBJECT_METHOD_STATIC_STRING)
+ .append(getOpenCloseParaWithValue(cls)).append(NEW_LINE)
+ .append(FOUR_SPACE_INDENTATION).append(trimAtLast(
+ getOmitNullValueString(), array)).append(signatureClose());
+ return attr.toString();
+ }
+
+ /**
+ * Returns to string call.
+ *
+ * @param name name of attribute
+ * @return to string call for attribute
+ */
+ static String getToStringCall(String name) {
+ return name + PERIOD +
+ TO_STRING_METHOD + OPEN_CLOSE_BRACKET_STRING;
+ }
+
+ /**
+ * Returns value in brackets.
+ *
+ * @param name value
+ * @return value in brackets
+ */
+ static String getOpenCloseParaWithValue(String name) {
+ return brackets(OPEN_CLOSE_BRACKET_WITH_VALUE, name, null);
+ }
+
+ /**
+ * Returns equals comparision.
+ *
+ * @param para1 param
+ * @param para2 param
+ * @return equals comparision
+ */
+ static String getTwoParaEqualsString(String para1, String para2) {
+ return para1 + PERIOD + EQUALS_STRING + getOpenCloseParaWithValue(para2);
+ }
+
+ /**
+ * Returns equal equal condition.
+ *
+ * @param para param
+ * @param val value
+ * @return equal equal condition
+ */
+ static String getEqualEqualString(String para, String val) {
+ return para + SPACE + EQUAL + EQUAL + SPACE + val;
+ }
+
+ /**
+ * Returns app instance method call.
+ *
+ * @param name attr name
+ * @return app instance method call
+ */
+ static String getAppInstanceAttrString(String name) {
+ return APP_INSTANCE + PERIOD + name + OPEN_CLOSE_BRACKET_STRING;
+ }
+
+ /**
+ * Returns qualified name.
+ *
+ * @param pkg package
+ * @param cls class info
+ * @return qualified name
+ */
+ static String getQualifiedString(String pkg, String cls) {
+ return pkg + PERIOD + cls;
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/SubtreeFilteringMethodsGenerator.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/SubtreeFilteringMethodsGenerator.java
new file mode 100644
index 0000000..51f236d
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/SubtreeFilteringMethodsGenerator.java
@@ -0,0 +1,1238 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava.utils;
+
+import org.onosproject.yang.compiler.datamodel.RpcNotificationContainer;
+import org.onosproject.yang.compiler.datamodel.YangAugment;
+import org.onosproject.yang.compiler.datamodel.YangCase;
+import org.onosproject.yang.compiler.datamodel.YangChoice;
+import org.onosproject.yang.compiler.datamodel.YangDataStructure;
+import org.onosproject.yang.compiler.datamodel.YangLeafRef;
+import org.onosproject.yang.compiler.datamodel.YangLeavesHolder;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+import org.onosproject.yang.compiler.translator.tojava.JavaAttributeInfo;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGeneratorInfo;
+import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoContainer;
+import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoTranslator;
+
+import java.io.IOException;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.IDENTITYREF;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.LEAFREF;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_NODES_MASK;
+import static org.onosproject.yang.compiler.translator.tojava.utils.IndentationType.EIGHT_SPACE;
+import static org.onosproject.yang.compiler.translator.tojava.utils.IndentationType.FOUR_SPACE;
+import static org.onosproject.yang.compiler.translator.tojava.utils.IndentationType.SIXTEEN_SPACE;
+import static org.onosproject.yang.compiler.translator.tojava.utils.IndentationType.TWELVE_SPACE;
+import static org.onosproject.yang.compiler.translator.tojava.utils.IndentationType.TWENTY_EIGHT_SPACE;
+import static org.onosproject.yang.compiler.translator.tojava.utils.IndentationType.TWENTY_FOUR_SPACE;
+import static org.onosproject.yang.compiler.translator.tojava.utils.IndentationType.TWENTY_SPACE;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodClassTypes.CLASS_TYPE;
+import static org.onosproject.yang.compiler.translator.tojava.utils.MethodsGenerator.getYangDataStructure;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getAppInstanceAttrString;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getElseIfConditionBegin;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getEqualEqualString;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getForLoopString;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getIfConditionBegin;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getLeafFlagSetString;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getNewInstance;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getOpenCloseParaWithValue;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getReturnString;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.getTwoParaEqualsString;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.methodClose;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.multiAttrMethodSignature;
+import static org.onosproject.yang.compiler.translator.tojava.utils.StringGenerator.signatureClose;
+import static org.onosproject.yang.compiler.translator.tojava.utils.TranslatorUtils.getBeanFiles;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ADD_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.AND_OPERATION;
+import static org.onosproject.yang.compiler.utils.UtilConstants.APP_INSTANCE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BIT_SET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BOOLEAN_DATA_TYPE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BREAK;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BUILDER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BUILDER_LOWER_CASE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.BUILD_FOR_FILTER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.CLASS_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.CLOSE_CURLY_BRACKET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.CLOSE_PARENTHESIS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.COMMA;
+import static org.onosproject.yang.compiler.utils.UtilConstants.DEFAULT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.DEFAULT_CAPS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.DIAMOND_CLOSE_BRACKET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.DIAMOND_OPEN_BRACKET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ELSE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EMPTY_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ENTRY;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ENTRY_SET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EQUAL;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EQUALS_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EXTEND;
+import static org.onosproject.yang.compiler.utils.UtilConstants.FALSE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.FLAG;
+import static org.onosproject.yang.compiler.utils.UtilConstants.GET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.GET_KEY;
+import static org.onosproject.yang.compiler.utils.UtilConstants.GET_VALUE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.INSTANCE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG;
+import static org.onosproject.yang.compiler.utils.UtilConstants.IS_EMPTY;
+import static org.onosproject.yang.compiler.utils.UtilConstants.IS_SELECT_ALL_SCHEMA_CHILD_FLAG;
+import static org.onosproject.yang.compiler.utils.UtilConstants.KEYS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.LEAF_IDENTIFIER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.MAP;
+import static org.onosproject.yang.compiler.utils.UtilConstants.NEW_LINE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.NOT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.NULL;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OPEN_CLOSE_BRACKET_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OPEN_CURLY_BRACKET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OPEN_PARENTHESIS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OP_PARAM;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OR_OPERATION;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PERIOD;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PRIVATE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PROCESS_CHILD_NODE_STF_PARAM;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PROCESS_LEAF_LIST_STF_PARAM;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PROCESS_LEAF_STF_PARAM;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PROCESS_SUBTREE_FILTERING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PUBLIC;
+import static org.onosproject.yang.compiler.utils.UtilConstants.QUESTION_MARK;
+import static org.onosproject.yang.compiler.utils.UtilConstants.RESULT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SELECT_ALL_CHILD;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SELECT_ALL_CHILD_SCHEMA_PARAM;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SELECT_LEAF;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SELECT_OR_CONTAINMENT_NODE_PARAM;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SEMI_COLON;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SET_METHOD_PREFIX;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SIXTEEN_SPACE_INDENTATION;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SPACE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.STF_BUILDER_PARAM;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SUBTREE_FILTERED;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SUBTREE_FILTERING_RESULT_BUILDER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.THIRTY_TWO_SPACE_INDENTATION;
+import static org.onosproject.yang.compiler.utils.UtilConstants.TO;
+import static org.onosproject.yang.compiler.utils.UtilConstants.TRUE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.TWELVE_SPACE_INDENTATION;
+import static org.onosproject.yang.compiler.utils.UtilConstants.TWENTY_EIGHT_SPACE_INDENTATION;
+import static org.onosproject.yang.compiler.utils.UtilConstants.TWENTY_FOUR_SPACE_INDENTATION;
+import static org.onosproject.yang.compiler.utils.UtilConstants.TWENTY_SPACE_INDENTATION;
+import static org.onosproject.yang.compiler.utils.UtilConstants.TWO;
+import static org.onosproject.yang.compiler.utils.UtilConstants.VALUE_LEAF;
+import static org.onosproject.yang.compiler.utils.UtilConstants.VALUE_LEAF_SET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ZERO;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getCamelCase;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getCapitalCase;
+
+/**
+ * Represents generator for subtree filtering methods of generated files
+ * based on the file type.
+ */
+public final class SubtreeFilteringMethodsGenerator {
+
+ /**
+ * private to make it a util.
+ */
+ private SubtreeFilteringMethodsGenerator() {
+ }
+
+ /**
+ * Returns process sub tree for choice interface class.
+ *
+ * @param node choice node
+ * @return process sub tree for choice interface class
+ */
+ static String getProcessSubTreeForChoiceInterface(YangNode node) {
+ if (!(node instanceof YangChoice)) {
+ throw new TranslatorException("process sub tree for interface is " +
+ "only allowed in choice " +
+ "node.");
+ }
+ JavaFileInfoTranslator info = ((JavaCodeGeneratorInfo) node)
+ .getJavaFileInfo();
+
+ String name = info.getJavaName();
+ String returnType = getCapitalCase(name);
+
+ String javadoc = "\n /**\n" +
+ " * Applications need not to implement process subtree " +
+ "of " + name + "\n * it will be overridden by " +
+ "corresponding case class.\n" +
+ " *\n" +
+ " * @param " + APP_INSTANCE + SPACE +
+ APP_INSTANCE + SPACE + "being passed to check" +
+ " for" +
+ " content match\n" +
+ " * @param isSelectAllSchemaChild is select all schema child\n" +
+ " * @return match result\n" +
+ " */\n";
+ StringBuilder builder = new StringBuilder(javadoc);
+ Map<String, String> param = new LinkedHashMap<>();
+ param.put(APP_INSTANCE, returnType);
+ param.put(SELECT_ALL_CHILD_SCHEMA_PARAM, BOOLEAN_DATA_TYPE);
+ builder.append(multiAttrMethodSignature(PROCESS_SUBTREE_FILTERING, null,
+ DEFAULT, returnType, param,
+ CLASS_TYPE))
+ .append(getReturnString(NULL, EIGHT_SPACE_INDENTATION))
+ .append(signatureClose()).append(methodClose(FOUR_SPACE));
+ return builder.toString();
+ }
+
+ /**
+ * Returns is filter content match for leaf.
+ *
+ * @param javaAttributeInfo java attribute
+ * @param type data type
+ * @return is filter content match for leaf
+ */
+ public static String getSubtreeFilteringForLeaf(
+ JavaAttributeInfo javaAttributeInfo, YangType<?> type) {
+ String attrQualifiedType;
+ String attributeName = javaAttributeInfo.getAttributeName();
+ attrQualifiedType = getIfFilterContentMatchMethodImpl(attributeName,
+ type);
+ /* if (valueLeafFlags.get(LeafIdentifier.LEAF.getLeafIndex())) {
+ * if (appInstance.leaf() != leaf()) {
+ * return false;
+ * } else {
+ * subTreeFilteringResultBuilder.leaf(appInstance.leaf());
+ * }
+ * } else if (selectLeafFlags.get(LeafIdentifier.LEAF.getLeafIndex()) ||
+ * isSelectAllSchemaChild) {
+ * isAnySelectOrContainmentNode = true;
+ * subTreeFilteringResultBuilder.leaf(appInstance.leaf());
+ * }*/
+
+/* if (isSubTreeFiltered && !appInstance.isLeafValueSet(
+ LeafIdentifier.LEAF2)) {
+ subTreeFilteringResultBuilder.leaf2(leaf2());
+ } else {
+ return false;
+ }*/
+ String condition = SUBTREE_FILTERED + SPACE + AND_OPERATION + SPACE + NOT +
+ APP_INSTANCE + PERIOD + VALUE_LEAF_SET +
+ getOpenCloseParaWithValue(
+ LEAF_IDENTIFIER + PERIOD + attributeName.toUpperCase());
+ return getIfConditionBegin(EIGHT_SPACE_INDENTATION, getLeafFlagSetString(
+ attributeName, VALUE_LEAF, EMPTY_STRING, GET)) +
+ getIfConditionBegin(TWELVE_SPACE_INDENTATION, attrQualifiedType) +
+ getIfConditionBegin(SIXTEEN_SPACE_INDENTATION, condition) +
+ TWENTY_SPACE_INDENTATION + SUBTREE_FILTERING_RESULT_BUILDER +
+ PERIOD + attributeName + getOpenCloseParaWithValue(
+ attributeName + OPEN_CLOSE_BRACKET_STRING) + signatureClose() +
+ SIXTEEN_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + ELSE +
+ OPEN_CURLY_BRACKET + NEW_LINE + getReturnString(
+ FALSE, TWENTY_SPACE_INDENTATION) + signatureClose() +
+ SIXTEEN_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE +
+ TWELVE_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + ELSE +
+ OPEN_CURLY_BRACKET + NEW_LINE +
+ getSubTreeBuilderCallString(SIXTEEN_SPACE_INDENTATION, attributeName,
+ TWELVE_SPACE) +
+ getElseIfConditionBegin(EIGHT_SPACE_INDENTATION, getLeafFlagSetString(
+ attributeName, SELECT_LEAF, EMPTY_STRING, GET) + SPACE +
+ OR_OPERATION + SPACE + IS_SELECT_ALL_SCHEMA_CHILD_FLAG) +
+ getSelectOrContainmentAssignString() +
+ getSubTreeBuilderCallString(TWELVE_SPACE_INDENTATION, attributeName,
+ EIGHT_SPACE);
+ }
+
+ private static String getSubTreeBuilderCallString(String indent, String
+ name, IndentationType type) {
+ return indent + SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + name +
+ getOpenCloseParaWithValue(APP_INSTANCE + PERIOD + name +
+ OPEN_CLOSE_BRACKET_STRING) +
+ signatureClose() + methodClose(type);
+ }
+
+ private static String getAttrTypeForFcmWhenPrimitiveDataType(
+ String attributeName) {
+ return/* TODO: Need to check if we can expose the value leaf flag in
+ interface.
+ NOT + APP_INSTANCE + PERIOD + GET_VALUE_LEAF_FLAGS +
+ OPEN_PARENTHESIS + CLOSE_PARENTHESIS +
+ GET_METHOD_PREFIX + OPEN_PARENTHESIS + LEAF_IDENTIFIER +
+ PERIOD + attributeName.toUpperCase() + PERIOD
+ + GET_LEAF_INDEX + OR_OPERATION +*/
+ APP_INSTANCE + PERIOD + attributeName + OPEN_PARENTHESIS +
+ CLOSE_PARENTHESIS + SPACE + NOT + EQUAL + SPACE +
+ attributeName + OPEN_PARENTHESIS +
+ CLOSE_PARENTHESIS;
+ }
+
+ private static String attrTypeForFcmWhenNonPrimitiveDataTypes(String name) {
+ /*
+ * appInstance.name() == null || name().equals(appInstance.name())
+ */
+ return getEqualEqualString(getAppInstanceAttrString(name), NULL) +
+ SPACE + OR_OPERATION + SPACE + NOT + OPEN_PARENTHESIS +
+ getTwoParaEqualsString(name + OPEN_CLOSE_BRACKET_STRING,
+ getAppInstanceAttrString(name))
+ + CLOSE_PARENTHESIS;
+ }
+
+ private static String getIfFilterContentMatchMethodImpl(
+ String name, YangType dataType) {
+ String attrQualifiedType;
+ if (dataType.getDataType().isPrimitiveDataType()) {
+ attrQualifiedType = getAttrTypeForFcmWhenPrimitiveDataType(name);
+ } else if (dataType.getDataType() == LEAFREF) {
+
+ // When leafref in grouping.
+ if (((YangLeafRef) dataType.getDataTypeExtendedInfo())
+ .isInGrouping()) {
+ attrQualifiedType = attrTypeForFcmWhenNonPrimitiveDataTypes(name);
+ } else {
+ YangType type = ((YangLeafRef) dataType.getDataTypeExtendedInfo())
+ .getEffectiveDataType();
+ if (type.getDataType().isPrimitiveDataType()) {
+ attrQualifiedType = getAttrTypeForFcmWhenPrimitiveDataType(name);
+ } else {
+ attrQualifiedType = attrTypeForFcmWhenNonPrimitiveDataTypes(
+ name);
+ }
+ }
+ } else {
+ attrQualifiedType = attrTypeForFcmWhenNonPrimitiveDataTypes(name);
+ }
+ return attrQualifiedType;
+ }
+
+ /**
+ * Returns is filter content match for leaf.
+ *
+ * @param javaAttributeInfo java attribute
+ * @return is filter content match for leaf
+ */
+ public static String getSubtreeFilteringForLeafList(
+ JavaAttributeInfo javaAttributeInfo) {
+ return getSubtreeFilteringForList(javaAttributeInfo, true, null);
+ }
+
+ /**
+ * Returns is filter content match for child node.
+ *
+ * @param curNode current node
+ * @param path path of temp file
+ * @return is filter content match for child node
+ */
+ static String getProcessChildNodeSubtreeFiltering(YangNode curNode, String path)
+ throws IOException {
+ /* Generate code will look like this.
+ private boolean processChildNodesSubTreeFiltering(Link
+ appInstance, LinkBuilder subTreeFilteringResultBuilder,
+ Boolean isAnySelectOrContainmentNode, boolean isSelectAllSchemaChild) {
+ if (isSelectAllSchemaChild) {
+ for (Areas areas : appInstance.areas()) {
+ subTreeFilteringResultBuilder.addToAreas(areas);
+ }
+ } else if (areas() != null) {
+ isAnySelectOrContainmentNode = true;
+ if (!areas().isEmpty()) {
+ if (appInstance.areas() != null && !appInstance.areas().isEmpty()) {
+ for (Areas areas : areas()) {
+ for (Areas areas2 : appInstance.areas()) {
+ Areas result = areas.processSubtreeFiltering(areas2, false);
+ if (result != null) {
+ subTreeFilteringResultBuilder.addToAreas(result);
+ }
+ }
+ }
+ }
+ } else {
+ if (appInstance.areas() != null && !appInstance.areas().isEmpty()) {
+ for (Areas areas : appInstance.areas()) {
+ subTreeFilteringResultBuilder.addToAreas(areas);
+ }
+ }
+ }
+ }
+
+ return true;
+ }*/
+ return getProcessStfMethods(PROCESS_CHILD_NODE_STF_PARAM, curNode,
+ path, FILTER_CONTENT_MATCH_FOR_NODES_MASK);
+ }
+
+ /**
+ * Returns is filter content match for leaf list.
+ *
+ * @param curNode current node
+ * @param path path of temp file
+ * @return is filter content match for leaf list
+ */
+ static String getProcessLeafListSubtreeFiltering(YangNode curNode, String path)
+ throws IOException {
+ /* Generate code will look like this.
+ private boolean processLeafListSubTreeFiltering(Link appInstance, LinkBuilder subTreeFilteringResultBuilder,
+ Boolean isAnySelectOrContainmentNode, boolean isSelectAllSchemaChild) {
+ if (isSelectAllSchemaChild) {
+ for (String portId : appInstance.portId()) {
+ subTreeFilteringResultBuilder.addToPortId(portId);
+ }
+ } else if (portId() != null) {
+ if (!portId().isEmpty()) {
+ if (appInstance.portId() == null || appInstance.portId().isEmpty()) {
+ return false;
+ }
+ for (String portId : portId()) {
+ boolean flag = false;
+ for (String portId2 : appInstance.portId()) {
+ if (portId.equals(portId2)) {
+ flag = true;
+ subTreeFilteringResultBuilder.addToPortId(portId2);
+ break;
+ }
+ }
+ if (!flag) {
+ return false;
+ }
+ }
+ } else {
+ isAnySelectOrContainmentNode = true;
+ if (appInstance.portId() != null && !appInstance.portId().isEmpty()) {
+ for (String portId : appInstance.portId()) {
+ subTreeFilteringResultBuilder.addToPortId(portId);
+ }
+ }
+ }
+ }
+
+ return true;
+ }*/
+ return getProcessStfMethods(PROCESS_LEAF_LIST_STF_PARAM, curNode, path,
+ FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK);
+ }
+
+ /**
+ * Returns is filter content match for leaf.
+ *
+ * @param curNode current node
+ * @param path path of temp file
+ * @return is filter content match for leaf
+ */
+ static String getProcessLeafSubtreeFiltering(YangNode curNode, String path)
+ throws IOException {
+ /* Generate code will look like this.
+ private boolean processLeafSubtreeFiltering(Link appInstance, LinkBuilder subTreeFilteringResultBuilder,
+ Boolean isAnySelectOrContainmentNode, boolean isSelectAllSchemaChild) {
+ if (valueLeafFlags.get(LeafIdentifier.PORT.getLeafIndex())) {
+ if (appInstance.port() != port()) {
+ return false;
+ } else {
+ subTreeFilteringResultBuilder.port(appInstance.port());
+ }
+ } else if (selectLeafFlags.get(LeafIdentifier.PORT.getLeafIndex()) || isSelectAllSchemaChild) {
+ isAnySelectOrContainmentNode = true;
+ subTreeFilteringResultBuilder.port(appInstance.port());
+ }
+
+ return true;
+ }*/
+ return getProcessStfMethods(PROCESS_LEAF_STF_PARAM, curNode, path,
+ FILTER_CONTENT_MATCH_FOR_LEAF_MASK);
+ }
+
+ /**
+ * Returns is filter content match for leaf.
+ *
+ * @param curNode current node
+ * @return is filter content match for leaf
+ */
+ static String getProcessSubtreeFilteringStart(YangNode curNode) {
+
+ /* Generate code will look like this.
+ public Link processSubtreeFiltering(Link appInstance, boolean isSelectAllSchemaChild) {
+ LinkBuilder subTreeFilteringResultBuilder = new LinkBuilder();
+ Boolean isAnySelectOrContainmentNode = false;
+ */
+ StringBuilder builder = new StringBuilder();
+ JavaFileInfoTranslator javaFileInfo =
+ ((JavaFileInfoContainer) curNode).getJavaFileInfo();
+ String instance = APP_INSTANCE;
+ String name = getCapitalCase(javaFileInfo.getJavaName());
+ String builderNamePrefix = getCapitalCase(javaFileInfo.getJavaName());
+ String caseName = getNameOfClassForIfCase(curNode);
+ String returnType;
+ if (curNode instanceof RpcNotificationContainer) {
+ returnType = name + OP_PARAM;
+ } else {
+ returnType = DEFAULT_CAPS + name;
+ }
+ if (caseName != null) {
+ instance = INSTANCE;
+ name = caseName;
+ }
+
+ String javadoc = "\n /**\n" +
+ " * Checks if the passed " + name + " maps the content " +
+ "match query condition.\n" +
+ " *\n" +
+ " * @param " + instance + SPACE + instance + SPACE +
+ "being passed to check for content match\n" +
+ " * @param isSelectAllSchemaChild is select all schema " +
+ "child\n" +
+ " * @return match result\n" +
+ " */\n";
+ Map<String, String> param = new LinkedHashMap<>();
+ param.put(instance, name);
+ param.put(SELECT_ALL_CHILD_SCHEMA_PARAM, BOOLEAN_DATA_TYPE);
+ builder.append(javadoc)
+ .append(multiAttrMethodSignature(PROCESS_SUBTREE_FILTERING, null,
+ PUBLIC, returnType, param,
+ CLASS_TYPE));
+
+ builder.append(getNewInstance(builderNamePrefix + BUILDER,
+ SUBTREE_FILTERING_RESULT_BUILDER,
+ EIGHT_SPACE_INDENTATION, EMPTY_STRING));
+ builder.append(getNewInstance(BIT_SET,
+ IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG,
+ EIGHT_SPACE_INDENTATION, EMPTY_STRING));
+ if (caseName != null) {
+ builder.append(getCaseCastString(javaFileInfo, instance, curNode));
+ }
+
+ return builder.toString();
+ }
+
+ /**
+ * Returns all process sub tree method implementations.
+ *
+ * @param methodName method name
+ * @param curNode current node
+ * @param path path for temporary file
+ * @param file temp file
+ * @return method implementations
+ * @throws IOException when fails to fetch data from temp files
+ */
+ private static String getProcessStfMethods(
+ String methodName, YangNode curNode, String path, int file)
+ throws IOException {
+ StringBuilder builder = new StringBuilder(EMPTY_STRING);
+ JavaFileInfoTranslator javaFileInfo =
+ ((JavaFileInfoContainer) curNode).getJavaFileInfo();
+ String instance = APP_INSTANCE;
+ String name = getCapitalCase(javaFileInfo.getJavaName());
+ String builderNamePrefix = getCapitalCase(javaFileInfo.getJavaName());
+ String caseName = getNameOfClassForIfCase(curNode);
+ if (caseName != null) {
+ instance = INSTANCE;
+ name = caseName;
+ }
+
+ Map<String, String> param = new LinkedHashMap<>();
+ param.put(instance, name);
+ param.put(STF_BUILDER_PARAM, builderNamePrefix + BUILDER);
+ param.put(SELECT_OR_CONTAINMENT_NODE_PARAM, BIT_SET);
+ param.put(SELECT_ALL_CHILD_SCHEMA_PARAM, BOOLEAN_DATA_TYPE);
+
+ builder.append(multiAttrMethodSignature(methodName, null,
+ PRIVATE, BOOLEAN_DATA_TYPE, param, CLASS_TYPE));
+
+ if (caseName != null) {
+ builder.append(getCaseCastString(javaFileInfo, instance, curNode));
+ }
+ builder.append(getDataFromTempFileHandle(file,
+ getBeanFiles(curNode), path))
+ .append(getReturnString(TRUE, EIGHT_SPACE_INDENTATION)).append(
+ signatureClose()).append(methodClose(FOUR_SPACE))
+ .append(NEW_LINE);
+ return builder.toString();
+ }
+
+ /**
+ * Returns the body for process subtree filtering.
+ *
+ * @param curNode node for which the code is being generated
+ * @return body of subtree filtering
+ */
+ static String getProcessSubtreeFunctionBody(YangNode curNode) {
+ StringBuilder builder = new StringBuilder();
+
+ /* if (!processLeafSubtreeFiltering(appInstance, subTreeFilteringResultBuilder,
+ isAnySelectOrContainmentNode, isSelectAllSchemaChild)) {
+ return null;
+ }
+ if (!processLeafListSubTreeFiltering(appInstance, subTreeFilteringResultBuilder,
+ isAnySelectOrContainmentNode, isSelectAllSchemaChild)) {
+ return null;
+ }
+ if (!processChildNodesSubTreeFiltering(appInstance, subTreeFilteringResultBuilder,
+ isAnySelectOrContainmentNode, isSelectAllSchemaChild)) {
+ return null;
+ }
+ */
+ if (curNode instanceof YangLeavesHolder) {
+ YangLeavesHolder holder = (YangLeavesHolder) curNode;
+ if (!holder.getListOfLeaf().isEmpty()) {
+ builder.append(getInnerStfMethodClass(PROCESS_LEAF_STF_PARAM));
+ }
+ if (!holder.getListOfLeafList().isEmpty()) {
+ builder.append(getInnerStfMethodClass(PROCESS_LEAF_LIST_STF_PARAM));
+ }
+ }
+ if (curNode.getChild() != null) {
+ builder.append(getInnerStfMethodClass(PROCESS_CHILD_NODE_STF_PARAM));
+ }
+
+ return builder.toString();
+ }
+
+ //Method calls for process subtree filtering method.
+ private static String getInnerStfMethodClass(String name) {
+ StringBuilder builder = new StringBuilder()
+ .append(getIfConditionBegin(EIGHT_SPACE_INDENTATION,
+ getMethodCallsConditionsForStfMethods(name)))
+ .append(getReturnString(NULL, TWELVE_SPACE_INDENTATION)).append(
+ signatureClose()).append(methodClose(EIGHT_SPACE));
+ return builder.toString();
+ }
+
+ // Condition for if check in process sub tree method.
+ private static String getMethodCallsConditionsForStfMethods(String name) {
+ return NOT + name + getOpenCloseParaWithValue(getConditionString());
+ }
+
+ //variable call for conditional method call
+ private static String getConditionString() {
+ return APP_INSTANCE + COMMA + SPACE + SUBTREE_FILTERING_RESULT_BUILDER +
+ COMMA + SPACE + SELECT_OR_CONTAINMENT_NODE_PARAM + COMMA + SPACE +
+ SELECT_ALL_CHILD;
+ }
+
+ /**
+ * Returns is filter content match for node.
+ *
+ * @param attr attribute info
+ * @param node YANG node
+ * @return is filter content match for node
+ */
+ public static String getSubtreeFilteringForNode(JavaAttributeInfo attr, YangNode node) {
+ boolean isList = attr.isListAttr();
+ if (isList) {
+ return getSubtreeFilteringForList(attr, false, node);
+ } else {
+ return getSubtreeFilteringForChildNode(attr, node);
+ }
+ }
+
+ /**
+ * Returns is filter content match close.
+ *
+ * @param name name of class
+ * @return is filter content match close
+ */
+ static String getProcessSubTreeFilteringEnd(String name) {
+ /* generate code will look like this.
+ if (!isSelectAllSchemaChild && !isAnySelectOrContainmentNode) {
+ return processSubtreeFiltering(appInstance, true);
+ }
+ return subTreeFilteringResultBuilder.build();
+ */
+
+ StringBuilder builder = new StringBuilder();
+ String cond1 = NOT + IS_SELECT_ALL_SCHEMA_CHILD_FLAG + SPACE + AND_OPERATION +
+ SPACE + NOT + IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG +
+ PERIOD + GET + getOpenCloseParaWithValue(ZERO);
+ String call = PROCESS_SUBTREE_FILTERING + getOpenCloseParaWithValue(
+ APP_INSTANCE + COMMA + SPACE + TRUE);
+ builder.append(getIfConditionBegin(EIGHT_SPACE_INDENTATION, cond1))
+ .append(getReturnString(call, TWELVE_SPACE_INDENTATION))
+ .append(signatureClose()).append(methodClose(EIGHT_SPACE));
+
+ call = getOpenCloseParaWithValue(name) + SPACE +
+ SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + BUILD_FOR_FILTER +
+ OPEN_CLOSE_BRACKET_STRING;
+ builder.append(getReturnString(call, EIGHT_SPACE_INDENTATION))
+ .append(signatureClose()).append(methodClose(FOUR_SPACE))
+ .append(NEW_LINE);
+ return builder.toString();
+ }
+
+ /**
+ * Returns filter content match for child nodes.
+ *
+ * @param attr attribute to be added
+ * @param node YANG node
+ * @return filter content match for child nodes
+ */
+ private static String getSubtreeFilteringForChildNode(JavaAttributeInfo attr,
+ YangNode node) {
+ StringBuilder builder = new StringBuilder();
+ String name = attr.getAttributeName();
+ String clsInfo = attr.getImportInfo()
+ .getClassInfo();
+ String type = DEFAULT_CAPS + attr.getImportInfo()
+ .getClassInfo();
+ if (attr.isQualifiedName()) {
+ type = attr.getImportInfo().getPkgInfo() + PERIOD +
+ type;
+ clsInfo = attr.getImportInfo().getPkgInfo() + PERIOD +
+ clsInfo;
+ }
+ String classCast = getOpenCloseParaWithValue(type) + SPACE;
+ String cast = getOpenCloseParaWithValue(classCast + name);
+ if (node != null && node instanceof YangChoice) {
+ cast = name;
+ }
+
+ String resultString = cast + NEW_LINE + TWENTY_EIGHT_SPACE_INDENTATION +
+ PERIOD + PROCESS_SUBTREE_FILTERING + OPEN_PARENTHESIS
+ + APP_INSTANCE + PERIOD + name + OPEN_CLOSE_BRACKET_STRING
+ + COMMA + SPACE + FALSE + CLOSE_PARENTHESIS + SEMI_COLON +
+ NEW_LINE;
+
+ String cond1 = name + OPEN_CLOSE_BRACKET_STRING + SPACE + NOT + EQUAL +
+ SPACE + NULL + SPACE + OR_OPERATION + SPACE + SELECT_ALL_CHILD;
+ builder.append(getIfConditionBegin(EIGHT_SPACE_INDENTATION, cond1))
+ .append(getSelectOrContainmentAssignString());
+
+ builder.append(getIfConditionBegin(TWELVE_SPACE_INDENTATION,
+ getAppInstanceCondition(name, NOT)));
+
+ String assignment = SIXTEEN_SPACE_INDENTATION + clsInfo + SPACE + RESULT +
+ SPACE + EQUAL + SPACE + NULL + signatureClose();
+
+ builder.append(assignment)
+ .append(getIfConditionBegin(SIXTEEN_SPACE_INDENTATION,
+ SELECT_ALL_CHILD));
+/*
+ result = ((DefaultInterfaces)(DefaultInterfaces.builder()
+ .build())).processSubtreeFiltering(appInstance.interfaces(),
+ true);*/
+
+ assignment = getDummyObjectCreation(node, name, clsInfo, type,
+ classCast, false, false);
+ builder.append(assignment).append(SIXTEEN_SPACE_INDENTATION).append(
+ CLOSE_CURLY_BRACKET).append(ELSE).append(OPEN_CURLY_BRACKET)
+ .append(NEW_LINE);
+
+ assignment = TWENTY_SPACE_INDENTATION + RESULT + SPACE + EQUAL + SPACE
+ + resultString;
+ cond1 = RESULT + SPACE + NOT + EQUAL + SPACE + NULL;
+
+ builder.append(assignment).append(methodClose(SIXTEEN_SPACE))
+ .append(getIfConditionBegin(SIXTEEN_SPACE_INDENTATION, cond1));
+
+ assignment = TWENTY_SPACE_INDENTATION + SUBTREE_FILTERING_RESULT_BUILDER +
+ PERIOD + name + getOpenCloseParaWithValue(RESULT) +
+ signatureClose();
+ builder.append(assignment).append(methodClose(SIXTEEN_SPACE)).append(
+ TWELVE_SPACE_INDENTATION).append(CLOSE_CURLY_BRACKET)
+ .append(getSubTreeFilteredCondition(name)).append(methodClose(EIGHT_SPACE));
+ return builder.toString();
+ }
+
+ private static String getAppInstanceCondition(String name, String condition) {
+ return APP_INSTANCE + PERIOD + name + OPEN_CLOSE_BRACKET_STRING + SPACE +
+ condition + EQUAL + SPACE + NULL;
+ }
+
+ private static String getSelectOrContainmentAssignString() {
+ return TWELVE_SPACE_INDENTATION + IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG +
+ PERIOD + SET_METHOD_PREFIX + getOpenCloseParaWithValue(ZERO) +
+ signatureClose();
+ }
+
+ /**
+ * Returns filter content match for list types.
+ *
+ * @param javaAttributeInfo attribute information
+ * @param isLeafList if for leaf list
+ * @param node YANG node
+ * @return filter content match for list types
+ */
+ private static String getSubtreeFilteringForList(
+ JavaAttributeInfo javaAttributeInfo, boolean isLeafList,
+ YangNode node) {
+ StringBuilder builder = new StringBuilder();
+ String caps = getCapitalCase(javaAttributeInfo.getAttributeName());
+ String name = javaAttributeInfo.getAttributeName();
+ String type = javaAttributeInfo.getImportInfo().getClassInfo();
+ if (javaAttributeInfo.getAttributeType() != null && javaAttributeInfo
+ .getAttributeType().getDataType() == IDENTITYREF) {
+ type = CLASS_STRING + DIAMOND_OPEN_BRACKET +
+ QUESTION_MARK + SPACE + EXTEND + SPACE +
+ type + DIAMOND_CLOSE_BRACKET;
+ }
+
+ YangDataStructure struct =
+ getYangDataStructure(javaAttributeInfo.getCompilerAnnotation());
+
+ boolean isMap = false;
+ if (struct != null && struct == YangDataStructure.MAP) {
+ isMap = true;
+ }
+
+ String clsInfo = DEFAULT_CAPS + type;
+ if (javaAttributeInfo.isQualifiedName()) {
+ if (javaAttributeInfo.getAttributeType() != null && javaAttributeInfo
+ .getAttributeType().getDataType() == IDENTITYREF) {
+ type = CLASS_STRING + DIAMOND_OPEN_BRACKET +
+ QUESTION_MARK + SPACE + EXTEND + SPACE +
+ javaAttributeInfo.getImportInfo().getPkgInfo() + PERIOD +
+ type + DIAMOND_CLOSE_BRACKET;
+ } else {
+ type = javaAttributeInfo.getImportInfo().getPkgInfo() + PERIOD +
+ type;
+ }
+ clsInfo = javaAttributeInfo.getImportInfo().getPkgInfo() + PERIOD +
+ clsInfo;
+ }
+
+ String classCast = getOpenCloseParaWithValue(clsInfo) + SPACE;
+ String cast = getOpenCloseParaWithValue(classCast + name);
+
+ if (node != null && node instanceof YangChoice) {
+ cast = name;
+ }
+ String validPass;
+ //If map is in DS then need to pass name.getValue() to processSubTree.
+ if (isMap) {
+ validPass = name + TWO + PERIOD + GET_VALUE;
+ } else {
+ validPass = name + TWO;
+ }
+ String resultString = cast + NEW_LINE + TWENTY_EIGHT_SPACE_INDENTATION +
+ PERIOD + PROCESS_SUBTREE_FILTERING + OPEN_PARENTHESIS +
+ validPass + COMMA + SPACE + FALSE + CLOSE_PARENTHESIS + SEMI_COLON +
+ NEW_LINE;
+ /*
+ * If select all schema child
+ */
+ String forCondition;
+ String mapEntry;
+ String para;
+ //If map is there in DS the for loop should run for map entry.
+ if (!isMap) {
+ forCondition = getForLoopString(SIXTEEN_SPACE_INDENTATION, type, name,
+ getAppInstanceAttrString(name));
+ } else {
+ mapEntry = MAP + PERIOD + ENTRY + DIAMOND_OPEN_BRACKET + type +
+ KEYS + COMMA + SPACE + type + DIAMOND_CLOSE_BRACKET + SPACE;
+ para = getAppInstanceAttrString(name) + PERIOD + ENTRY_SET;
+ forCondition = getForLoopString(SIXTEEN_SPACE_INDENTATION,
+ mapEntry, name, para);
+ }
+ builder.append(getIfConditionBegin(EIGHT_SPACE_INDENTATION,
+ IS_SELECT_ALL_SCHEMA_CHILD_FLAG))
+ .append(getIfConditionBegin(TWELVE_SPACE_INDENTATION,
+ getAppInstanceCondition(name, NOT)))
+ .append(forCondition);
+ String assignment;
+ String result;
+ //If map is added then while creating dummy object need to used name
+ // .getValue() and to add the result in subTreeBuilder need to pass
+ // using key and value, key will be name.getKey() and value will be
+ // result.
+ if (isMap) {
+ result = getOpenCloseParaWithValue(name + PERIOD + GET_KEY + COMMA +
+ SPACE + RESULT);
+ } else {
+ result = getOpenCloseParaWithValue(RESULT);
+ }
+ if (!isLeafList) {
+ builder.append(TWENTY_SPACE_INDENTATION).append(type).append(SPACE)
+ .append(RESULT).append(signatureClose());
+ assignment = getDummyObjectCreation(node, name, type, clsInfo,
+ classCast, true, isMap);
+ builder.append(assignment);
+ assignment = TWENTY_SPACE_INDENTATION +
+ SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING +
+ getCapitalCase(TO) + caps + result +
+ signatureClose();
+ builder.append(assignment);
+ } else {
+ assignment = TWENTY_SPACE_INDENTATION +
+ SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING +
+ getCapitalCase(TO) + caps + getOpenCloseParaWithValue(name) +
+ signatureClose();
+ builder.append(assignment);
+ }
+ builder.append(methodClose(SIXTEEN_SPACE))
+ .append(TWELVE_SPACE_INDENTATION).append(CLOSE_CURLY_BRACKET);
+
+/* } else {
+ if (isSubTreeFiltered && leafList2() != null) {
+ subTreeFilteringResultBuilder.addToLeafList2(leafList2());
+ }
+ }*/
+ builder.append(getSubTreeFilteredCondition(name));
+
+ String cond = name + OPEN_CLOSE_BRACKET_STRING + SPACE + NOT + EQUAL +
+ SPACE + NULL;
+
+ //If need to explicitly participate in query
+ builder.append(getElseIfConditionBegin(EIGHT_SPACE_INDENTATION, cond));
+
+ if (!isLeafList) {
+ builder.append(getSelectOrContainmentAssignString());
+ }
+
+ //If there is any parameter in the query condition
+ cond = NOT + name + OPEN_CLOSE_BRACKET_STRING + PERIOD + IS_EMPTY;
+ builder.append(getIfConditionBegin(TWELVE_SPACE_INDENTATION, cond));
+
+ if (isLeafList) {
+ cond = getAppInstanceCondition(name, EQUAL) + SPACE + OR_OPERATION +
+ SPACE + APP_INSTANCE + PERIOD + name +
+ OPEN_CLOSE_BRACKET_STRING + PERIOD + IS_EMPTY;
+ /*
+ * If there is no app instance to perform content match
+ */
+ builder.append(getIfConditionBegin(SIXTEEN_SPACE_INDENTATION, cond))
+ .append(getReturnString(FALSE, TWENTY_SPACE_INDENTATION))
+ .append(signatureClose())
+ .append(methodClose(SIXTEEN_SPACE))
+ // for instance iterator
+ .append(getForLoopString(SIXTEEN_SPACE_INDENTATION, type, name,
+ name + OPEN_CLOSE_BRACKET_STRING));
+
+ assignment = TWENTY_SPACE_INDENTATION + BOOLEAN_DATA_TYPE + SPACE +
+ FLAG + SPACE + EQUAL + SPACE + FALSE + signatureClose();
+ builder.append(assignment)
+ // for app instance iterator
+ .append(getForLoopString(TWENTY_SPACE_INDENTATION, type,
+ name + TWO,
+ getAppInstanceAttrString(name)));
+
+ cond = name + PERIOD + EQUALS_STRING
+ + OPEN_PARENTHESIS + name + TWO + CLOSE_PARENTHESIS;
+ //the content match leaf list attribute value matches
+ builder.append(getIfConditionBegin(TWENTY_FOUR_SPACE_INDENTATION,
+ cond));
+
+ assignment = TWENTY_EIGHT_SPACE_INDENTATION + FLAG + SPACE + EQUAL +
+ SPACE + TRUE + SEMI_COLON + NEW_LINE;
+ builder.append(assignment);
+ assignment = TWENTY_EIGHT_SPACE_INDENTATION +
+ SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING +
+ getCapitalCase(TO) + caps + getOpenCloseParaWithValue(name + TWO) +
+ signatureClose();
+ builder.append(assignment).append(TWENTY_EIGHT_SPACE_INDENTATION)
+ .append(BREAK).append(signatureClose())
+ //the content match leaf list attribute value matches
+ .append(methodClose(TWENTY_FOUR_SPACE))
+ // for app instance iterator
+ .append(methodClose(TWENTY_SPACE))
+ //if the content match failed
+ .append(getIfConditionBegin(TWENTY_SPACE_INDENTATION, NOT +
+ FLAG))
+ .append(getReturnString(FALSE, TWENTY_FOUR_SPACE_INDENTATION))
+ .append(signatureClose()).append(methodClose(TWENTY_SPACE))// if flag == false
+ .append(methodClose(SIXTEEN_SPACE)); // for instance iterator
+ } else {
+ cond = getAppInstanceCondition(name, NOT) + SPACE + AND_OPERATION +
+ SPACE + NOT + getAppInstanceAttrString(name) +
+ PERIOD + IS_EMPTY;
+ //Same here for loop for map entry.
+ if (!isMap) {
+ forCondition = getForLoopString(TWENTY_SPACE_INDENTATION, type,
+ name + TWO,
+ getAppInstanceAttrString(name));
+ } else {
+ mapEntry = MAP + PERIOD + ENTRY + DIAMOND_OPEN_BRACKET + type +
+ KEYS + COMMA + SPACE + type + DIAMOND_CLOSE_BRACKET + SPACE;
+ para = getAppInstanceAttrString(name) + PERIOD + ENTRY_SET;
+ forCondition = getForLoopString(TWENTY_SPACE_INDENTATION,
+ mapEntry, name + TWO, para);
+ }
+ String forCondition2;
+ //Same here for loop for map entry.
+ if (!isMap) {
+ forCondition2 = getForLoopString(SIXTEEN_SPACE_INDENTATION, type, name,
+ name + OPEN_CLOSE_BRACKET_STRING);
+ } else {
+ mapEntry = MAP + PERIOD + ENTRY + DIAMOND_OPEN_BRACKET + type +
+ KEYS + COMMA + SPACE + type + DIAMOND_CLOSE_BRACKET + SPACE;
+ para = name + OPEN_CLOSE_BRACKET_STRING + PERIOD + ENTRY_SET;
+ forCondition2 = getForLoopString(SIXTEEN_SPACE_INDENTATION,
+ mapEntry, name, para);
+ }
+ /*if there is any app instance entry*/
+ builder.append(getIfConditionBegin(SIXTEEN_SPACE_INDENTATION,
+ cond))
+ //loop all the app instance(s)
+ .append(forCondition2)
+ .append(forCondition);
+
+ assignment = TWENTY_EIGHT_SPACE_INDENTATION + type + SPACE +
+ RESULT + SPACE + EQUAL + SPACE + resultString;
+ builder.append(assignment);
+ cond = RESULT + SPACE + NOT + EQUAL + SPACE + NULL;
+ builder.append(getIfConditionBegin(TWENTY_EIGHT_SPACE_INDENTATION, cond));
+
+ //If map is added then while creating dummy object need to used name
+ // .getValue() and to add the result in subTreeBuilder need to pass
+ // using key and value, key will be name.getKey() and value will be
+ // result.
+ if (isMap) {
+ result = getOpenCloseParaWithValue(name + TWO + PERIOD + GET_KEY +
+ COMMA +
+ SPACE + RESULT);
+ } else {
+ result = getOpenCloseParaWithValue(RESULT);
+ }
+ assignment = THIRTY_TWO_SPACE_INDENTATION +
+ SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING +
+ getCapitalCase(TO) + caps + result + signatureClose();
+ builder.append(assignment).append(methodClose(TWENTY_EIGHT_SPACE))
+ //loop all the app instance(s)
+ .append(methodClose(TWENTY_FOUR_SPACE))
+ //loop all the query condition instance(s)
+ .append(methodClose(TWENTY_SPACE))
+ .append(SIXTEEN_SPACE_INDENTATION).append(CLOSE_CURLY_BRACKET)
+ .append(getSubTreeFilteredCondition(name));
+ //if there is any app instance entry
+ }
+
+ cond = TWELVE_SPACE_INDENTATION + CLOSE_CURLY_BRACKET
+ + ELSE + OPEN_CURLY_BRACKET + NEW_LINE;
+ builder.append(cond);
+
+ if (isLeafList) {
+ builder.append(getSelectOrContainmentAssignString());
+ }
+
+ //need to pass name.getKey() and name.getValue() while adding to
+ // subtree builder.
+ if (!isMap) {
+ forCondition = getForLoopString(SIXTEEN_SPACE_INDENTATION, type,
+ name, getAppInstanceAttrString(name));
+ } else {
+ mapEntry = MAP + PERIOD + ENTRY + DIAMOND_OPEN_BRACKET + type +
+ KEYS + COMMA + SPACE + type + DIAMOND_CLOSE_BRACKET + SPACE;
+ para = getAppInstanceAttrString(name) + PERIOD + ENTRY_SET;
+ forCondition = getForLoopString(SIXTEEN_SPACE_INDENTATION,
+ mapEntry, name, para);
+ }
+ cond = getAppInstanceCondition(name, NOT) + SPACE + AND_OPERATION +
+ SPACE + NOT + getAppInstanceAttrString(name) + PERIOD + IS_EMPTY;
+ builder.append(getIfConditionBegin(SIXTEEN_SPACE_INDENTATION, cond))
+ .append(forCondition);
+ if (isMap) {
+ result = getOpenCloseParaWithValue(name + PERIOD + GET_KEY + COMMA +
+ SPACE + name + PERIOD +
+ GET_VALUE);
+ } else {
+ result = getOpenCloseParaWithValue(name);
+ }
+ assignment = TWENTY_FOUR_SPACE_INDENTATION +
+ SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING +
+ getCapitalCase(TO) + caps + result + signatureClose();
+ builder.append(assignment).append(methodClose(TWENTY_SPACE))// Close collection Iteration loop
+ // close if condition
+ .append(methodClose(SIXTEEN_SPACE))
+ .append(methodClose(TWELVE_SPACE))// close else condition
+ .append(methodClose(EIGHT_SPACE));// close else if condition
+
+ return builder.toString();
+ }
+
+ public static String getAugmentableSubTreeFiltering() {
+ return " if (yangAugmentedInfoMap.isEmpty()) {\n" +
+ " java.util.Set<Map.Entry<Class<?>, Object>> " +
+ "augment =" +
+ " appInstance.yangAugmentedInfoMap().entrySet();\n" +
+ " if (augment != null && !augment.isEmpty()) {\n" +
+ " java.util.Iterator<Map.Entry<Class<?>, " +
+ "Object>> augItr =" +
+ " augment.iterator();\n" +
+ " while (augItr.hasNext()) {\n" +
+ " Map.Entry<Class<?>, Object> aug =" +
+ " augItr.next();\n" +
+ " Class<?> augClass = aug.getKey();\n" +
+ " String augClassName = augClass.getName();\n" +
+ " int index = augClassName.lastIndexOf('.');\n" +
+ " String classPackage = augClassName.substring(0, index) +\n" +
+ " \".\" + \"Default\" + augClass.getSimpleName() + \"$\"\n" +
+ " + augClass.getSimpleName() + \"Builder\";\n" +
+ " ClassLoader classLoader = augClass.getClassLoader();\n" +
+ " try {\n" +
+ " Class<?> builderClass;\n" +
+ " builderClass = classLoader.loadClass(classPackage);\n" +
+ " Object builderObj = builderClass.newInstance();\n" +
+ " java.lang.reflect.Method method = " +
+ "builderClass.getMethod(\"build\");\n" +
+ " Object defaultObj = method.invoke(builderObj);\n" +
+ " Class<?> defaultClass = defaultObj.getClass();\n" +
+ " method = defaultClass.getMethod(" +
+ "\"processSubtreeFiltering\", augClass, boolean.class);\n" +
+ " Object result = method.invoke(" +
+ "defaultObj, aug.getValue(), true);\n" +
+ " subTreeFilteringResultBuilder." +
+ "addYangAugmentedInfo(result, augClass);\n" +
+ " } catch (ClassNotFoundException | InstantiationException\n" +
+ " | NoSuchMethodException |\n" +
+ " InvocationTargetException | IllegalAccessException e) {\n" +
+ " }\n" +
+ " }\n" +
+ " }\n" +
+ " } else {\n" +
+ " java.util.Set<Map.Entry<Class<?>, Object>> augment = yangAugmentedInfoMap\n" +
+ " .entrySet();\n" +
+ " java.util.Iterator<Map.Entry<Class<?>, Object>> augItr = augment.iterator();\n" +
+ " while (augItr.hasNext()) {\n" +
+ " Map.Entry<Class<?>, Object> aug = augItr.next();\n" +
+ " Class<?> augClass = aug.getKey();\n" +
+ " Object appInstanceInfo = appInstance." +
+ "yangAugmentedInfo(augClass);\n" +
+ " if (appInstanceInfo == null) {\n" +
+ " subTreeFilteringResultBuilder." +
+ "addYangAugmentedInfo(aug.getValue(), aug.getKey());\n" +
+ " } else {\n" +
+ " Object processSubtreeFiltering;\n" +
+ " try {\n" +
+ " processSubtreeFiltering = " +
+ "aug.getValue().getClass()\n" +
+ " .getMethod(\"processSubtreeFiltering\"," +
+ " aug.getKey(), boolean.class)\n" +
+ " .invoke(aug.getValue(), appInstanceInfo, true);\n" +
+ " if (processSubtreeFiltering != null) {\n" +
+ " subTreeFilteringResultBuilder\n" +
+ " .addYangAugmentedInfo(" +
+ "processSubtreeFiltering, aug.getKey());\n" +
+ " }\n" +
+ " } catch (NoSuchMethodException | InvocationTargetException |\n" +
+ " IllegalAccessException e) {\n" +
+ " }\n" +
+ " }\n" +
+ " }\n" +
+ " }\n";
+ }
+
+ private static String getSubTreeFilteredCondition(String name) {
+ StringBuilder builder = new StringBuilder();
+ String cond = SUBTREE_FILTERED + SPACE + AND_OPERATION + SPACE + name +
+ OPEN_CLOSE_BRACKET_STRING + SPACE + NOT + EQUAL + SPACE + NULL;
+
+ builder.append(ELSE).append(OPEN_CURLY_BRACKET).append(NEW_LINE)
+ .append(getIfConditionBegin(SIXTEEN_SPACE_INDENTATION, cond))
+ .append(TWENTY_SPACE_INDENTATION)
+ .append(SUBTREE_FILTERING_RESULT_BUILDER).append(PERIOD)
+ .append(name).append(getOpenCloseParaWithValue(name)).append(
+ signatureClose()).append(SIXTEEN_SPACE_INDENTATION).append(
+ CLOSE_CURLY_BRACKET).append(NEW_LINE).append(TWELVE_SPACE_INDENTATION)
+ .append(CLOSE_CURLY_BRACKET).append(NEW_LINE);
+ return builder.toString();
+ }
+
+ private static String getNameOfClassForIfCase(YangNode curNode) {
+ String name = null;
+ JavaFileInfoTranslator parentInfo;
+ if (curNode instanceof YangCase) {
+ YangNode parent = curNode.getParent();
+ if (parent instanceof YangChoice) {
+ parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
+ name = getCapitalCase(parentInfo.getJavaName());
+ } else if (parent instanceof YangAugment) {
+ parentInfo = ((JavaFileInfoContainer) ((YangAugment) parent)
+ .getAugmentedNode()).getJavaFileInfo();
+ if (parentInfo != null) {
+ name = getCapitalCase(parentInfo.getJavaName());
+ } else {
+ name = getCapitalCase(getCamelCase(
+ ((YangAugment) parent).getAugmentedNode().getName(),
+ null));
+ }
+ }
+ }
+ return name;
+ }
+
+ private static String getCaseCastString(
+ JavaFileInfoTranslator javaFileInfo, String instance, YangNode curNode) {
+ if (curNode instanceof YangCase) {
+ String caseName = DEFAULT_CAPS + getCapitalCase(
+ javaFileInfo.getJavaName());
+ return EIGHT_SPACE_INDENTATION + caseName + SPACE + APP_INSTANCE + SPACE +
+ EQUAL + SPACE + OPEN_PARENTHESIS + caseName +
+ CLOSE_PARENTHESIS + SPACE + instance + signatureClose();
+ }
+ return null;
+ }
+
+ private static String getDummyObjectCreation(YangNode node, String name,
+ String clsInfo, String type,
+ String classCast, boolean isList,
+ boolean isMap) {
+ String para = getAppInstanceAttrString(name);
+ if (isList) {
+ if (isMap) {
+ para = name + PERIOD + GET_VALUE;
+ } else {
+ para = name;
+ }
+ }
+ if (node != null && node instanceof YangChoice) {
+ return getChoiceReflectionResult(name, clsInfo);
+ }
+ return TWENTY_SPACE_INDENTATION + RESULT + SPACE + EQUAL + SPACE +
+ getOpenCloseParaWithValue(
+ classCast + type + PERIOD + BUILDER_LOWER_CASE +
+ OPEN_CLOSE_BRACKET_STRING + NEW_LINE +
+ TWENTY_EIGHT_SPACE_INDENTATION + PERIOD +
+ BUILD_FOR_FILTER + OPEN_CLOSE_BRACKET_STRING) +
+ PERIOD + PROCESS_SUBTREE_FILTERING + getOpenCloseParaWithValue(
+ para + COMMA + SPACE + TRUE) + signatureClose();
+ }
+
+ private static String getChoiceReflectionResult(String name, String returnType) {
+ String call = "appInstance." + name + "()";
+ return " Class<?>[] classArray = " + call + "" +
+ ".getClass()" +
+ ".getInterfaces();\n" +
+ " Class<?> caseIntf = classArray[0];\n" +
+ " try {\n" +
+ " ClassLoader classLoader = this" +
+ ".getClass().getClassLoader();\n" +
+ " String className = \"Default\" + " +
+ "caseIntf.getSimpleName();\n" +
+ " className = caseIntf.getPackage()" +
+ ".getName() + \".\" + className;\n" +
+ " Class<?> caseClass = classLoader" +
+ ".loadClass(className);\n" +
+ " java.lang.reflect.Constructor<?> " +
+ "constructor = caseClass.getDeclaredConstructor();\n" +
+ " constructor.setAccessible(true);\n" +
+ " Object obj1 = constructor" +
+ ".newInstance();\n" +
+ " java.lang.reflect.Method method =" +
+ " caseClass.getMethod(\"builder\");\n" +
+ " Object obj = method.invoke(obj1);\n" +
+ " Class<?> builderClass = obj.getClass();\n" +
+ " method = builderClass.getMethod(\"build\");\n" +
+ " Object obj2 = method.invoke(obj);\n" +
+ " Class<?> input = this.getClass()" +
+ ".getMethod(" + "\"" + name + "\").getReturnType();\n" +
+ " method = caseClass.getMethod" +
+ "(\"processSubtreeFiltering\", input,\n" +
+ " boolean.class);\n" +
+ " result = (" + returnType + ") method.invoke" +
+ "(obj2, " + call + ", true);\n" +
+ " } catch (NoSuchMethodException | InstantiationException |\n" +
+ " IllegalAccessException | " +
+ "InvocationTargetException |\n" +
+ " ClassNotFoundException e) {\n" +
+ " e.printStackTrace();\n" +
+ " }\n";
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/TranslatorErrorType.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/TranslatorErrorType.java
new file mode 100644
index 0000000..d9d5e70
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/TranslatorErrorType.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava.utils;
+
+/**
+ * Represents translator error type.
+ */
+public enum TranslatorErrorType {
+ /**
+ * Represents the invalid node for translation.
+ */
+ INVALID_TRANSLATION_NODE("Invalid node for translation"),
+
+ /**
+ * Represents the missing parent node.
+ */
+ MISSING_PARENT_NODE("Missing parent node to get current node's java " +
+ "information"),
+
+ /**
+ * Represents the invalid parent node.
+ */
+ INVALID_PARENT_NODE("Invalid parent node to get current node's java " +
+ "information"),
+
+ /**
+ * Represents the invalid holder of leaf.
+ */
+ INVALID_LEAF_HOLDER("Invalid holder of leaf"),
+
+ /**
+ * Represents the invalid child node.
+ */
+ INVALID_CHILD_NODE("Invalid child of node "),
+
+ /**
+ * Represents the invalid leaf list without JAVA information.
+ */
+ INVALID_LEAF_LIST("Leaf-list does not have java information"),
+
+ /**
+ * Represents the invalid leaf without JAVA information.
+ */
+ INVALID_LEAF("Leaf does not have java information"),
+
+ /**
+ * Represents the invalid node without JAVA information.
+ */
+ INVALID_NODE("Missing java file information to get the package details " +
+ "of attribute corresponding to child node"),
+
+ /**
+ * Represents that code generation failed for a node at exit.
+ */
+ FAIL_AT_EXIT("Failed to generate code for "),
+
+ /**
+ * Represents that code generation preparation failed for a node at entry.
+ */
+ FAIL_AT_ENTRY("Failed to prepare generate code entry for ");
+
+ // Prefix of an error type.
+ private final String prefix;
+
+ /**
+ * Creates translator error type.
+ *
+ * @param p prefix string
+ */
+ TranslatorErrorType(String p) {
+ prefix = p;
+ }
+
+ /**
+ * Returns prefix for a given enum type.
+ *
+ * @return prefix
+ */
+ public String prefix() {
+ return prefix;
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/TranslatorUtils.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/TranslatorUtils.java
new file mode 100644
index 0000000..fb5fd20
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/TranslatorUtils.java
@@ -0,0 +1,146 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava.utils;
+
+import org.onosproject.yang.compiler.datamodel.LocationInfo;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangSchemaNode;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGeneratorInfo;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaBeanFragmentFiles;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaCodeFragmentFilesContainer;
+import org.onosproject.yang.compiler.translator.tojava.TempJavaTypeFragmentFiles;
+
+import java.io.IOException;
+
+import static org.onosproject.yang.compiler.utils.UtilConstants.AT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.IN;
+
+/**
+ * Represents common translator utilities.
+ */
+public final class TranslatorUtils {
+
+ // No instantiation
+ private TranslatorUtils() {
+ }
+
+ /**
+ * Returns translator error message string with location information for
+ * YANG schema node with localized message.
+ *
+ * @param errorType type of translator error
+ * @param node YANG schema node
+ * @param localizedMsg localized message
+ * @return translator error message
+ */
+ public static String getErrorMsg(TranslatorErrorType errorType,
+ YangSchemaNode node,
+ String localizedMsg) {
+ return getErrorMsg(errorType, node) + localizedMsg;
+ }
+
+ /**
+ * Returns translator error message string with location information for
+ * YANG schema node.
+ *
+ * @param errorType type of translator error
+ * @param node YANG schema node
+ * @return translator error message
+ */
+ public static String getErrorMsg(TranslatorErrorType errorType,
+ YangSchemaNode node) {
+ return errorType.prefix() + IN + node.getName() + getLocationMsg(node);
+ }
+
+ /**
+ * Returns translator error message string with location information for
+ * JAVA code generator info.
+ *
+ * @param errorType type of translator error
+ * @param location node with location info
+ * @return translator error message
+ */
+ public static String getErrorMsgForCodeGenerator(TranslatorErrorType errorType,
+ LocationInfo location) {
+ return errorType.prefix() + getLocationMsg(location);
+ }
+
+ /**
+ * Returns location message string.
+ *
+ * @param location location info node
+ * @return location message string
+ */
+ private static String getLocationMsg(LocationInfo location) {
+ return AT + location.getLineNumber() + AT +
+ location.getCharPosition() + IN + location.getFileName();
+ }
+
+ /**
+ * Returns bean temp files for YANG node.
+ *
+ * @param curNode current YANG node
+ * @return bean files
+ */
+ public static TempJavaBeanFragmentFiles getBeanFiles(YangNode curNode) {
+ return ((TempJavaCodeFragmentFilesContainer) curNode)
+ .getTempJavaCodeFragmentFiles().getBeanTempFiles();
+ }
+
+ /**
+ * Returns bean temp files for JAVA code generator info.
+ *
+ * @param info JAVA code generator info
+ * @return bean files
+ */
+ public static TempJavaBeanFragmentFiles getBeanFiles(JavaCodeGeneratorInfo
+ info) {
+ return info.getTempJavaCodeFragmentFiles().getBeanTempFiles();
+ }
+
+ /**
+ * Returns type temp files for YANG node.
+ *
+ * @param curNode current YANG node
+ * @return type files
+ */
+ public static TempJavaTypeFragmentFiles getTypeFiles(YangNode curNode) {
+ return ((TempJavaCodeFragmentFilesContainer) curNode)
+ .getTempJavaCodeFragmentFiles().getTypeTempFiles();
+ }
+
+ /**
+ * Adds default constructor to a given YANG node.
+ *
+ * @param node YANG node
+ * @param modifier modifier for constructor.
+ * @param toAppend string which need to be appended with the class name
+ * @return default constructor for class
+ * @throws IOException when fails to append to file
+ */
+ static String addDefaultConstructor(YangNode node, String modifier,
+ String toAppend)
+ throws IOException {
+ return ((TempJavaCodeFragmentFilesContainer) node)
+ .getTempJavaCodeFragmentFiles()
+ .addDefaultConstructor(modifier, toAppend);
+ /*
+ * TODO update addDefaultConstructor, it doesn't need YANG node as an
+ * input.
+ */
+ }
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/ValidatorTypeForUnionTypes.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/ValidatorTypeForUnionTypes.java
new file mode 100644
index 0000000..d3e068a
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/ValidatorTypeForUnionTypes.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava.utils;
+
+/**
+ * Validator types for union when there is conflict between two types.
+ */
+public enum ValidatorTypeForUnionTypes {
+
+ /**
+ * When conflict is there for int32 and uInt16.
+ */
+ INT_TYPE_CONFLICT,
+
+ /**
+ * When conflict is there for int16 and uInt8.
+ */
+ SHORT_TYPE_CONFLICT,
+
+ /**
+ * When conflict is there for int64 and uInt32.
+ */
+ LONG_TYPE_CONFLICT
+}
diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/package-info.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/package-info.java
new file mode 100644
index 0000000..28d0329
--- /dev/null
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+/**
+ * Translator's utils for YANG plugin.
+ */
+package org.onosproject.yang.compiler.translator.tojava.utils;
diff --git a/compiler/base/translator/src/test/java/org/onosproject/yang/compiler/translator/tojava/javamodel/AttributesJavaDataTypeTest.java b/compiler/base/translator/src/test/java/org/onosproject/yang/compiler/translator/tojava/javamodel/AttributesJavaDataTypeTest.java
new file mode 100644
index 0000000..7ae5564
--- /dev/null
+++ b/compiler/base/translator/src/test/java/org/onosproject/yang/compiler/translator/tojava/javamodel/AttributesJavaDataTypeTest.java
@@ -0,0 +1,199 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava.javamodel;
+
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangDerivedInfo;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.translator.tojava.JavaFileInfoTranslator;
+import org.onosproject.yang.compiler.utils.UtilConstants;
+import org.onosproject.yang.compiler.utils.io.YangToJavaNamingConflictUtil;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+
+import static org.hamcrest.core.Is.is;
+import static org.hamcrest.core.IsNot.not;
+import static org.junit.Assert.assertThat;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.BOOLEAN;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.INT32;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.STRING;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.UINT8;
+
+/**
+ * Unit test case for attribute java data type.
+ */
+public class AttributesJavaDataTypeTest {
+
+ private static final YangDataTypes TYPE1 = STRING;
+ private static final YangDataTypes TYPE2 = INT32;
+ private static final YangDataTypes TYPE3 = BOOLEAN;
+ private static final YangDataTypes TYPE4 = UINT8;
+ private static final YangDataTypes TYPE_DEF = DERIVED;
+ private static final String CLASS_INFO1 = "String";
+ private static final String CLASS_INFO2 = "int";
+ private static final String CLASS_INFO3 = "boolean";
+ private static final String CLASS_INFO4 = "short";
+ 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.
+ *
+ * @throws SecurityException if any security violation is observed
+ * @throws NoSuchMethodException if when the method is not found
+ * @throws IllegalArgumentException if there is illegal argument found
+ * @throws InstantiationException if instantiation is provoked for the private constructor
+ * @throws IllegalAccessException if instance is provoked or a method is provoked
+ * @throws InvocationTargetException when an exception occurs by the method or constructor
+ */
+ @Test
+ public void callPrivateConstructors()
+ throws SecurityException, NoSuchMethodException, IllegalArgumentException,
+ InstantiationException, IllegalAccessException, InvocationTargetException {
+
+ Class<?>[] classesToConstruct = {AttributesJavaDataType.class};
+ for (Class<?> clazz : classesToConstruct) {
+ Constructor<?> constructor = clazz.getDeclaredConstructor();
+ constructor.setAccessible(true);
+ assertThat(null, not(constructor.newInstance()));
+ }
+ }
+
+ /**
+ * Unit test for java class info method test.
+ */
+ @Test
+ public void testgetJavaClassInfo() {
+ test = AttributesJavaDataType.getJavaImportClass(getStubYangType(TYPE1), false, pluginConfig);
+ assertThat(true, is(test.equals(CLASS_INFO1)));
+
+ test = AttributesJavaDataType.getJavaImportClass(getStubYangType(TYPE2), true, pluginConfig);
+ assertThat(true, is(test.equals(CLASS_INFO5)));
+
+ test = AttributesJavaDataType.getJavaImportClass(getStubYangType(TYPE3), false, pluginConfig);
+ assertThat(null, is(test));
+
+ test = AttributesJavaDataType.getJavaImportClass(getStubYangType(TYPE4), false, pluginConfig);
+ assertThat(null, is(test));
+ }
+
+ /**
+ * Unit test for java data type method.
+ */
+ @Test
+ public void testgetJavaDataType() {
+ test = AttributesJavaDataType.getJavaDataType(getStubYangType(TYPE1));
+ assertThat(true, is(test.equals(CLASS_INFO1)));
+
+ test = AttributesJavaDataType.getJavaDataType(getStubYangType(TYPE2));
+ assertThat(true, is(test.equals(CLASS_INFO2)));
+
+ test = AttributesJavaDataType.getJavaDataType(getStubYangType(TYPE3));
+ assertThat(true, is(test.equals(CLASS_INFO3)));
+
+ test = AttributesJavaDataType.getJavaDataType(getStubYangType(TYPE4));
+ assertThat(true, is(test.equals(CLASS_INFO4)));
+ }
+
+ /**
+ * Unit test for java package info method.
+ */
+ @Test
+ public void testgetJavaPkgInfo() {
+ test = AttributesJavaDataType.getJavaImportPackage(getStubYangType(TYPE1), false, pluginConfig);
+ assertThat(true, is(test.equals(UtilConstants.JAVA_LANG)));
+
+ test = AttributesJavaDataType.getJavaImportPackage(getStubYangType(TYPE2), true, pluginConfig);
+ assertThat(true, is(test.equals(UtilConstants.JAVA_LANG)));
+
+ test = AttributesJavaDataType.getJavaImportPackage(getStubYangType(TYPE3), false, pluginConfig);
+ assertThat(null, is(test));
+
+ test = AttributesJavaDataType.getJavaImportPackage(getStubYangType(TYPE4), false, pluginConfig);
+ assertThat(null, is(test));
+ }
+
+ /**
+ * Unit test case for typedef.
+ *
+ * @throws DataModelException when fails to do data model operations
+ */
+ @Test
+ public void testForTypeDef() throws DataModelException {
+ test = AttributesJavaDataType.getJavaImportPackage(getStubExtendedInfo(getStubYangType(TYPE_DEF)), false, pluginConfig);
+ assertThat(true, is(test.equals(TYPE_DEF_PKG)));
+ }
+
+ /**
+ * Returns stub YANG type for test.
+ *
+ * @param dataTypes YANG data types
+ * @return YANG type
+ */
+ private YangType<?> getStubYangType(YangDataTypes dataTypes) {
+ YangType<?> type = new YangType<>();
+ type.setDataType(dataTypes);
+ return type;
+ }
+
+ /**
+ * Returns YANG type with extended info.
+ *
+ * @param type YANG type
+ * @return YANG type with extended info
+ * @throws DataModelException when fails to do data model operations
+ */
+ @SuppressWarnings("unchecked")
+ private YangType<?> getStubExtendedInfo(YangType<?> type) throws DataModelException {
+ YangJavaTypeDefTranslator typedef = new YangJavaTypeDefTranslator();
+ getStubParent().addChild(typedef);
+ YangDerivedInfo<?> derInfo = new YangDerivedInfo<>();
+ derInfo.setReferredTypeDef(typedef);
+ ((YangType<YangDerivedInfo<?>>) type).setDataTypeExtendedInfo(derInfo);
+ return type;
+ }
+
+ /**
+ * Returns java file info.
+ *
+ * @return java file info
+ */
+ private JavaFileInfoTranslator addStubJavaFileInfo() {
+ JavaFileInfoTranslator fileInfo = new JavaFileInfoTranslator();
+ fileInfo.setJavaName("test");
+ fileInfo.setPackage("target");
+ return fileInfo;
+ }
+
+ /**
+ * Adds stub parent module for typedef.
+ *
+ * @return stub parent module
+ */
+ private YangNode getStubParent() {
+ YangJavaModuleTranslator parent = new YangJavaModuleTranslator();
+ parent.setJavaFileInfo(addStubJavaFileInfo());
+ return parent;
+ }
+}
diff --git a/compiler/base/translator/src/test/java/org/onosproject/yang/compiler/translator/tojava/utils/JavaCodeSnippetGenTest.java b/compiler/base/translator/src/test/java/org/onosproject/yang/compiler/translator/tojava/utils/JavaCodeSnippetGenTest.java
new file mode 100644
index 0000000..92c1177
--- /dev/null
+++ b/compiler/base/translator/src/test/java/org/onosproject/yang/compiler/translator/tojava/utils/JavaCodeSnippetGenTest.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava.utils;
+
+import org.junit.Test;
+import org.onosproject.yang.compiler.translator.tojava.JavaQualifiedTypeInfoTranslator;
+import org.onosproject.yang.compiler.utils.UtilConstants;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+import static org.hamcrest.core.IsNot.not;
+
+/**
+ * Unit test cases for java code snippet generator.
+ */
+public class JavaCodeSnippetGenTest {
+
+ private static final String PKG_INFO = "org.onosproject.unittest";
+ private static final String CLASS_INFO = "JavaCodeSnippetGenTest";
+ private static final String YANG_NAME = "Test";
+
+ /**
+ * Unit test for private constructor.
+ *
+ * @throws SecurityException if any security violation is observed
+ * @throws NoSuchMethodException if when the method is not found
+ * @throws IllegalArgumentException if there is illegal argument found
+ * @throws InstantiationException if instantiation is provoked for the private constructor
+ * @throws IllegalAccessException if instance is provoked or a method is provoked
+ * @throws InvocationTargetException when an exception occurs by the method or constructor
+ */
+ @Test
+ public void callPrivateConstructors()
+ throws SecurityException, NoSuchMethodException, IllegalArgumentException,
+ InstantiationException, IllegalAccessException, InvocationTargetException {
+
+ Class<?>[] classesToConstruct = {JavaCodeSnippetGen.class};
+ for (Class<?> clazz : classesToConstruct) {
+ Constructor<?> constructor = clazz.getDeclaredConstructor();
+ constructor.setAccessible(true);
+ assertThat(null, not(constructor.newInstance()));
+ }
+ }
+
+ /**
+ * Unit test case for import text.
+ */
+ @Test
+ public void testForImportText() {
+ JavaQualifiedTypeInfoTranslator importInfo = new JavaQualifiedTypeInfoTranslator();
+ importInfo.setPkgInfo(PKG_INFO);
+ importInfo.setClassInfo(CLASS_INFO);
+
+ String imports = JavaCodeSnippetGen.getImportText(importInfo);
+
+ assertThat(true, is(imports.equals(UtilConstants.IMPORT + PKG_INFO + UtilConstants.PERIOD + CLASS_INFO + UtilConstants.SEMI_COLON + UtilConstants.NEW_LINE)));
+ }
+
+ /**
+ * Unit test case for java attribute info.
+ */
+ @Test
+ public void testForJavaAttributeInfo() {
+
+ String attributeWithoutTypePkg = JavaCodeSnippetGen.getJavaAttributeDefinition(null, UtilConstants.STRING_DATA_TYPE, YANG_NAME,
+ false, UtilConstants.PRIVATE, null);
+ assertThat(true, is(attributeWithoutTypePkg.contains(
+ UtilConstants.PRIVATE + UtilConstants.SPACE + UtilConstants.STRING_DATA_TYPE + UtilConstants.SPACE + YANG_NAME + UtilConstants.SEMI_COLON + UtilConstants.NEW_LINE)));
+
+ String attributeWithTypePkg = JavaCodeSnippetGen.getJavaAttributeDefinition(UtilConstants.JAVA_LANG, UtilConstants.STRING_DATA_TYPE, YANG_NAME,
+ false, UtilConstants.PRIVATE, null);
+ assertThat(true, is(attributeWithTypePkg.contains(UtilConstants.PRIVATE + UtilConstants.SPACE + UtilConstants.JAVA_LANG + UtilConstants.PERIOD
+ + UtilConstants.STRING_DATA_TYPE + UtilConstants.SPACE + YANG_NAME + UtilConstants.SEMI_COLON + UtilConstants.NEW_LINE)));
+
+ String attributeWithListPkg = JavaCodeSnippetGen.getJavaAttributeDefinition(UtilConstants.JAVA_LANG, UtilConstants.STRING_DATA_TYPE, YANG_NAME,
+ true, UtilConstants.PRIVATE, null);
+ assertThat(true, is(attributeWithListPkg.contains(
+ UtilConstants.PRIVATE + UtilConstants.SPACE + UtilConstants.LIST + UtilConstants.DIAMOND_OPEN_BRACKET + UtilConstants.JAVA_LANG + UtilConstants.PERIOD + UtilConstants.STRING_DATA_TYPE
+ + UtilConstants.DIAMOND_CLOSE_BRACKET + UtilConstants.SPACE + YANG_NAME)));
+
+ String attributeWithListWithoutPkg = JavaCodeSnippetGen.getJavaAttributeDefinition(null, UtilConstants.STRING_DATA_TYPE, YANG_NAME,
+ true, UtilConstants.PRIVATE, null);
+ assertThat(true, is(attributeWithListWithoutPkg.contains(
+ UtilConstants.PRIVATE + UtilConstants.SPACE + UtilConstants.LIST + UtilConstants.DIAMOND_OPEN_BRACKET + UtilConstants.STRING_DATA_TYPE + UtilConstants.DIAMOND_CLOSE_BRACKET + UtilConstants.SPACE
+ + YANG_NAME)));
+ }
+}
diff --git a/compiler/base/translator/src/test/java/org/onosproject/yang/compiler/translator/tojava/utils/JavaIdentifierSyntaxTest.java b/compiler/base/translator/src/test/java/org/onosproject/yang/compiler/translator/tojava/utils/JavaIdentifierSyntaxTest.java
new file mode 100644
index 0000000..d21cfba
--- /dev/null
+++ b/compiler/base/translator/src/test/java/org/onosproject/yang/compiler/translator/tojava/utils/JavaIdentifierSyntaxTest.java
@@ -0,0 +1,335 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava.utils;
+
+import org.hamcrest.core.Is;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangRevision;
+import org.onosproject.yang.compiler.translator.exception.TranslatorException;
+import org.onosproject.yang.compiler.utils.UtilConstants;
+import org.onosproject.yang.compiler.utils.io.YangToJavaNamingConflictUtil;
+
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import static org.apache.commons.io.FileUtils.deleteDirectory;
+import static org.hamcrest.core.Is.is;
+import static org.hamcrest.core.IsNot.not;
+import static org.junit.Assert.assertThat;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaIdentifierSyntax.doesPackageExist;
+import static org.onosproject.yang.compiler.translator.tojava.utils.JavaIdentifierSyntax.getRootPackage;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getCamelCase;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getCapitalCase;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getJavaPackageFromPackagePath;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getPackageDirPathFromJavaJPackage;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getSmallCase;
+
+/**
+ * Unit tests for java identifier syntax.
+ */
+public final class JavaIdentifierSyntaxTest {
+
+ 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";
+ private static final String DATE2 = "1992-01-25";
+ private static final String PARENT_WITH_PERIOD = "test5.test6.test7";
+ private static final String CHILD_WITH_PERIOD = "test1.test2.test3";
+ 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 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";
+ private static final String WITH_CAMEL_CASE1 = "try123";
+ private static final String WITHOUT_CAMEL_CASE2 = "_try";
+ private static final String WITH_CAMEL_CASE2 = "yangAutoPrefixTry";
+ private static final String WITHOUT_CAMEL_CASE3 = "-1-123g-123ga-a";
+ private static final String WITH_CAMEL_CASE3 = "yangAutoPrefix1123G123Gaa";
+ private static final String WITHOUT_CAMEL_CASE4 = "a-b-c-d-e-f-g-h";
+ private static final String WITH_CAMEL_CASE4 = "aBcDeFgh";
+ private static final String WITHOUT_CAMEL_CASE5 = "TestName";
+ private static final String WITH_CAMEL_CASE5 = "testName";
+ private static final String WITHOUT_CAMEL_CASE6 = "TEST-NAME";
+ private static final String WITH_CAMEL_CASE6 = "testName";
+ private static final String WITHOUT_CAMEL_CASE7 = "TESTNAME";
+ private static final String WITH_CAMEL_CASE7 = "testname";
+ private static final String WITHOUT_CAMEL_CASE8 = "TE-ST-NA-ME";
+ private static final String WITH_CAMEL_CASE8 = "teStNaMe";
+ private static final String WITHOUT_CAMEL_CASE9 = "TEST3NAME";
+ private static final String WITH_CAMEL_CASE9 = "test3Name";
+ private static final String WITHOUT_CAMEL_CASE10 = "TEST3";
+ private static final String WITH_CAMEL_CASE10 = "test3";
+ private static final String WITHOUT_CAMEL_CASE11 = "TEST3nAMe";
+ 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 final String DATE_FORMAT = "yyyy-MM-dd";
+ private static final String BASE_DIR_PKG = "target.UnitTestCase.";
+ private static final String DIR_PATH = "exist1.exist2.exist3";
+ private static final String PKG_INFO = "package-info.java";
+ private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATE_FORMAT);
+ private static YangToJavaNamingConflictUtil conflictResolver = new YangToJavaNamingConflictUtil();
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ /**
+ * Unit test for private constructor.
+ *
+ * @throws SecurityException if any security violation is observed.
+ * @throws NoSuchMethodException if when the method is not found.
+ * @throws IllegalArgumentException if there is illegal argument found.
+ * @throws InstantiationException if instantiation is provoked for the
+ * private constructor.
+ * @throws IllegalAccessException if instance is provoked or a method is
+ * provoked.
+ * @throws InvocationTargetException when an exception occurs by the method
+ * or constructor.
+ */
+ @Test
+ public void callPrivateConstructors()
+ throws SecurityException, NoSuchMethodException, IllegalArgumentException,
+ InstantiationException, IllegalAccessException, InvocationTargetException {
+
+ Class<?>[] classesToConstruct = {JavaIdentifierSyntax.class};
+ for (Class<?> clazz : classesToConstruct) {
+ Constructor<?> constructor = clazz.getDeclaredConstructor();
+ constructor.setAccessible(true);
+ assertThat(null, not(constructor.newInstance()));
+ }
+ }
+
+ /**
+ * Unit test for root package generation with revision complexity.
+ */
+ @Test
+ public void getRootPackageTest()
+ throws ParseException {
+ conflictResolver.setPrefixForIdentifier(null);
+ String rootPackage = getRootPackage((byte) 1, CHILD_PACKAGE, getYangRevision(DATE1), conflictResolver);
+ assertThat(rootPackage.equals(UtilConstants.DEFAULT_BASE_PKG + UtilConstants.PERIOD + VERSION_NUMBER
+ + UtilConstants.PERIOD + CHILD_WITH_PERIOD + UtilConstants.PERIOD + DATE_WITH_REV1), is(true));
+ }
+
+ /**
+ * Unit test for root package generation with invalid prefix.
+ */
+ @Test
+ public void getRootPackageWithInvalidPrefix()
+ throws TranslatorException, ParseException {
+ thrown.expect(ArrayIndexOutOfBoundsException.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, getYangRevision(DATE1),
+ conflictResolver);
+ }
+
+ /**
+ * Unit test for root package generation with special characters presence.
+ */
+ @Test
+ public void getRootPackageWithSpecialCharactersTest()
+ throws ParseException {
+ conflictResolver.setPrefixForIdentifier(VALID_PREFIX);
+ String rootPackage = getRootPackage((byte) 1, INVALID_NAME_SPACE1, getYangRevision(DATE1), conflictResolver);
+ assertThat(rootPackage.equals(UtilConstants.DEFAULT_BASE_PKG + UtilConstants.PERIOD + VERSION_NUMBER
+ + UtilConstants.PERIOD + VALID_NAME_SPACE1 + UtilConstants.PERIOD + DATE_WITH_REV1), is(true));
+ conflictResolver.setPrefixForIdentifier(null);
+ String rootPackage1 = getRootPackage((byte) 1, INVALID_NAME_SPACE2, getYangRevision(DATE1), conflictResolver);
+ assertThat(rootPackage1.equals(UtilConstants.DEFAULT_BASE_PKG + UtilConstants.PERIOD + VERSION_NUMBER
+ + UtilConstants.PERIOD + VALID_NAME_SPACE2 + UtilConstants.PERIOD + DATE_WITH_REV1), is(true));
+ String rootPackage2 = getRootPackage((byte) 1, INVALID_NAME_SPACE3, getYangRevision(DATE1), conflictResolver);
+ assertThat(rootPackage2.equals(UtilConstants.DEFAULT_BASE_PKG + UtilConstants.PERIOD + VERSION_NUMBER
+ + UtilConstants.PERIOD + VALID_NAME_SPACE4 + UtilConstants.PERIOD + DATE_WITH_REV1), is(true));
+ conflictResolver.setPrefixForIdentifier(INVALID_PREFIX1);
+ String rootPackage3 = getRootPackage((byte) 1, INVALID_NAME_SPACE2, getYangRevision(DATE1), conflictResolver);
+ assertThat(rootPackage3.equals(UtilConstants.DEFAULT_BASE_PKG + UtilConstants.PERIOD + VERSION_NUMBER
+ + UtilConstants.PERIOD + VALID_NAME_SPACE3 + UtilConstants.PERIOD + DATE_WITH_REV1), is(true));
+ }
+
+ /**
+ * Unit test for root package generation without complexity in revision.
+ */
+ @Test
+ public void getRootPackageWithRevTest()
+ throws ParseException {
+ Date date = simpleDateFormat.parse(DATE2);
+ String rootPkgWithRev = getRootPackage((byte) 1, CHILD_PACKAGE, getYangRevision(DATE2), null);
+ assertThat(rootPkgWithRev.equals(
+ UtilConstants.DEFAULT_BASE_PKG + UtilConstants.PERIOD + VERSION_NUMBER + UtilConstants.PERIOD + CHILD_WITH_PERIOD + UtilConstants.PERIOD + DATE_WITH_REV2),
+ is(true));
+ }
+
+ /**
+ * Unit test for capitalizing the incoming string.
+ */
+ @Test
+ public void getCapitalCaseTest() {
+ String capitalCase = getCapitalCase(WITHOUT_CAPITAL);
+ assertThat(capitalCase.equals(WITH_CAPITAL), is(true));
+ }
+
+ /**
+ * Unit test for getting the camel case for the received string.
+ */
+ @Test
+ public void getCamelCaseTest() {
+ conflictResolver.setPrefixForIdentifier(null);
+ String camelCase = getCamelCase(WITHOUT_CAMEL_CASE, conflictResolver);
+ assertThat(camelCase.equals(WITH_CAMEL_CASE), is(true));
+ String camelCase1 = getCamelCase(WITHOUT_CAMEL_CASE1, conflictResolver);
+ assertThat(camelCase1.equals(WITH_CAMEL_CASE1), is(true));
+ String camelCase2 = getCamelCase(WITHOUT_CAMEL_CASE2, conflictResolver);
+ assertThat(camelCase2.equals(WITH_CAMEL_CASE2), is(true));
+ String camelCase3 = getCamelCase(WITHOUT_CAMEL_CASE3, conflictResolver);
+ assertThat(camelCase3.equals(WITH_CAMEL_CASE3), is(true));
+ String camelCase4 = getCamelCase(WITHOUT_CAMEL_CASE4, conflictResolver);
+ assertThat(camelCase4.equals(WITH_CAMEL_CASE4), is(true));
+ String camelCase5 = getCamelCase(WITHOUT_CAMEL_CASE5, conflictResolver);
+ assertThat(camelCase5.equals(WITH_CAMEL_CASE5), is(true));
+ String camelCase6 = getCamelCase(WITHOUT_CAMEL_CASE6, conflictResolver);
+ assertThat(camelCase6.equals(WITH_CAMEL_CASE6), is(true));
+ String camelCase7 = getCamelCase(WITHOUT_CAMEL_CASE7, conflictResolver);
+ assertThat(camelCase7.equals(WITH_CAMEL_CASE7), is(true));
+ String camelCase8 = getCamelCase(WITHOUT_CAMEL_CASE8, conflictResolver);
+ assertThat(camelCase8.equals(WITH_CAMEL_CASE8), is(true));
+ String camelCase9 = getCamelCase(WITHOUT_CAMEL_CASE9, conflictResolver);
+ assertThat(camelCase9.equals(WITH_CAMEL_CASE9), is(true));
+ String camelCase10 = getCamelCase(WITHOUT_CAMEL_CASE10, conflictResolver);
+ assertThat(camelCase10.equals(WITH_CAMEL_CASE10), is(true));
+ String camelCase11 = getCamelCase(WITHOUT_CAMEL_CASE11, conflictResolver);
+ assertThat(camelCase11.equals(WITH_CAMEL_CASE11), is(true));
+ 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(ArrayIndexOutOfBoundsException.class);
+ thrown.expectMessage("The given prefix in pom.xml is invalid.");
+ conflictResolver.setPrefixForIdentifier(INVALID_PREFIX);
+ String camelCase = getCamelCase(WITHOUT_CAMEL_CASE3, conflictResolver);
+ }
+
+ /**
+ * Unit test for getting the camel case for the received string.
+ */
+ @Test
+ public void getSmallCaseTest() {
+ String smallCase = getSmallCase(WITHOUT_CAPITAL);
+ assertThat(smallCase.equals(WITH_SMALL), is(true));
+ }
+
+ /**
+ * Unit test for getting the camel case for the received string.
+ */
+ @Test
+ public void getPackageFromPathTest() {
+ String pkg = getJavaPackageFromPackagePath(PARENT_PACKAGE);
+ assertThat(pkg.equals(PARENT_WITH_PERIOD), is(true));
+ }
+
+ /**
+ * Unit test for getting the camel case for the received string.
+ */
+ @Test
+ public void getPathFromPackageTest() {
+ String path = getPackageDirPathFromJavaJPackage(PARENT_WITH_PERIOD);
+ assertThat(path.equals(PARENT_PACKAGE), is(true));
+ }
+
+
+ /**
+ * This test case checks whether the package is existing.
+ *
+ * @throws IOException when failed to create a test file
+ */
+ @Test
+ public void packageExistTest()
+ throws IOException {
+
+ String strPath = BASE_DIR_PKG + DIR_PATH;
+ File createDir = new File(strPath.replace(UtilConstants.PERIOD, UtilConstants.SLASH));
+ createDir.mkdirs();
+ File createFile = new File(createDir + UtilConstants.SLASH + PKG_INFO);
+ createFile.createNewFile();
+ assertThat(true, Is.is(doesPackageExist(strPath)));
+ createDir.delete();
+ deleteDirectory(createDir);
+ deleteDirectory(new File(BASE_DIR_PKG.replace(UtilConstants.PERIOD, UtilConstants.SLASH)));
+ }
+
+ private YangRevision getYangRevision(String date) {
+ YangRevision revision = new YangRevision();
+ try {
+ revision.setRevDate(simpleDateFormat.parse(date));
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+ return revision;
+ }
+}
diff --git a/compiler/base/translator/src/test/java/org/onosproject/yang/compiler/translator/tojava/utils/MethodsGeneratorTest.java b/compiler/base/translator/src/test/java/org/onosproject/yang/compiler/translator/tojava/utils/MethodsGeneratorTest.java
new file mode 100644
index 0000000..45fd00e
--- /dev/null
+++ b/compiler/base/translator/src/test/java/org/onosproject/yang/compiler/translator/tojava/utils/MethodsGeneratorTest.java
@@ -0,0 +1,326 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.translator.tojava.utils;
+
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.translator.tojava.GeneratedJavaFileType;
+import org.onosproject.yang.compiler.translator.tojava.JavaAttributeInfo;
+import org.onosproject.yang.compiler.translator.tojava.JavaQualifiedTypeInfoTranslator;
+import org.onosproject.yang.compiler.utils.UtilConstants;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.hamcrest.core.Is.is;
+import static org.hamcrest.core.IsNot.not;
+import static org.junit.Assert.assertThat;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.STRING;
+
+/**
+ * Unit tests for generated methods from the file type.
+ */
+public final class MethodsGeneratorTest {
+
+ private static final String CLASS_NAME = "Testname";
+ private static final String ATTRIBUTE_NAME = "testname";
+ private static final String SET = "setValue.set(0);\n";
+ private static final String UNION = " @Override\n" +
+ " public String toString() {\n" +
+ " if (setValue.get(0)) {\n" +
+ " return string;\n" +
+ " }\n" +
+ " return null;\n" +
+ " }";
+
+ /**
+ * Unit test for private constructor.
+ *
+ * @throws SecurityException if any security violation is observed
+ * @throws NoSuchMethodException if when the method is not found
+ * @throws IllegalArgumentException if there is illegal argument found
+ * @throws InstantiationException if instantiation is provoked for the private constructor
+ * @throws IllegalAccessException if instance is provoked or a method is provoked
+ * @throws InvocationTargetException when an exception occurs by the method or constructor
+ */
+ @Test
+ public void callPrivateConstructors()
+ throws SecurityException, NoSuchMethodException, IllegalArgumentException,
+ InstantiationException, IllegalAccessException, InvocationTargetException {
+
+ Class<?>[] classesToConstruct = {MethodsGenerator.class};
+ for (Class<?> clazz : classesToConstruct) {
+ Constructor<?> constructor = clazz.getDeclaredConstructor();
+ constructor.setAccessible(true);
+ assertThat(null, not(constructor.newInstance()));
+ }
+ }
+
+ /**
+ * Unit test case for checking the parse builder and type constructor.
+ */
+ @Test
+ public void getTypeConstructorTest() {
+
+ JavaAttributeInfo testAttr = getTestAttribute();
+ String test = MethodsGenerator.getTypeConstructorStringAndJavaDoc(
+ testAttr, CLASS_NAME, GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS, 0);
+ assertThat(true, is(test.contains(UtilConstants.PUBLIC + UtilConstants.SPACE + CLASS_NAME +
+ UtilConstants.OPEN_PARENTHESIS)));
+ }
+
+ /**
+ * Unit test case for checking the parse builder and type constructor.
+ */
+ @Test
+ public void getTypeConstructorForUnionTest() {
+ JavaAttributeInfo testAttr = getTestAttribute();
+ String test = MethodsGenerator.getTypeConstructorStringAndJavaDoc(
+ testAttr, CLASS_NAME, GeneratedJavaFileType.GENERATE_UNION_CLASS, 0);
+ assertThat(true, is(test.contains(UtilConstants.PUBLIC + UtilConstants.SPACE + CLASS_NAME +
+ UtilConstants.OPEN_PARENTHESIS)));
+ assertThat(true, is(test.contains(SET)));
+ }
+
+ /**
+ * Test for build method for class.
+ */
+ @Test
+ public void getBuildTest() {
+ String method = MethodsGenerator.getBuild(CLASS_NAME, false);
+ assertThat(true, is(method.equals(
+ UtilConstants.FOUR_SPACE_INDENTATION + UtilConstants.PUBLIC + UtilConstants.SPACE + CLASS_NAME + UtilConstants.SPACE +
+ UtilConstants.BUILD + UtilConstants.OPEN_PARENTHESIS + UtilConstants.CLOSE_PARENTHESIS + UtilConstants.SPACE +
+ UtilConstants.OPEN_CURLY_BRACKET + UtilConstants.NEW_LINE + UtilConstants.EIGHT_SPACE_INDENTATION +
+ UtilConstants.RETURN + UtilConstants.SPACE + UtilConstants.NEW + UtilConstants.SPACE + UtilConstants.DEFAULT_CAPS + CLASS_NAME +
+ UtilConstants.OPEN_PARENTHESIS + UtilConstants.THIS + UtilConstants.CLOSE_PARENTHESIS +
+ UtilConstants.SEMI_COLON + UtilConstants.NEW_LINE + UtilConstants.FOUR_SPACE_INDENTATION +
+ UtilConstants.CLOSE_CURLY_BRACKET + UtilConstants.NEW_LINE)));
+ }
+
+ /**
+ * Test for build method of interface.
+ */
+ @Test
+ public void getBuildForInterfaceTest() {
+ String method = MethodsGenerator.getBuildForInterface(CLASS_NAME);
+ assertThat(true, is(method.equals(
+ UtilConstants.FOUR_SPACE_INDENTATION + CLASS_NAME + UtilConstants.SPACE + UtilConstants.BUILD +
+ UtilConstants.OPEN_PARENTHESIS + UtilConstants.CLOSE_PARENTHESIS + UtilConstants.SEMI_COLON +
+ UtilConstants.NEW_LINE)));
+ }
+
+ /**
+ * Test for check not null method.
+ */
+ @Test
+ public void getCheckNotNullTest() {
+ String method = StringGenerator.getCheckNotNull(CLASS_NAME);
+ assertThat(true, is(method.equals(
+ UtilConstants.EIGHT_SPACE_INDENTATION + UtilConstants.CHECK_NOT_NULL_STRING +
+ UtilConstants.OPEN_PARENTHESIS + CLASS_NAME + UtilConstants.COMMA + UtilConstants.SPACE +
+ CLASS_NAME + UtilConstants.CLOSE_PARENTHESIS + UtilConstants.SEMI_COLON + UtilConstants.NEW_LINE)));
+ }
+
+ /**
+ * Test case for constructor.
+ */
+ @Test
+ public void getConstructorTest() {
+ JavaAttributeInfo testAttr = getTestAttribute();
+ String method = MethodsGenerator.getConstructor(testAttr, GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER
+ );
+ assertThat(true, is(method.contains(
+ ATTRIBUTE_NAME + UtilConstants.SPACE + UtilConstants.EQUAL + UtilConstants.SPACE +
+ UtilConstants.BUILDER_LOWER_CASE + UtilConstants.OBJECT + UtilConstants.PERIOD +
+ UtilConstants.GET_METHOD_PREFIX + CLASS_NAME + UtilConstants.OPEN_PARENTHESIS +
+ UtilConstants.CLOSE_PARENTHESIS + UtilConstants.SEMI_COLON)));
+ }
+
+ /**
+ * Test for constructor start method.
+ */
+ @Test
+ public void getConstructorStartTest() {
+ String method = MethodsGenerator.getConstructorStart(CLASS_NAME, false);
+ assertThat(true, is(method.contains(
+ UtilConstants.PROTECTED + UtilConstants.SPACE + UtilConstants.DEFAULT_CAPS + CLASS_NAME +
+ UtilConstants.OPEN_PARENTHESIS + CLASS_NAME + UtilConstants.BUILDER + UtilConstants.SPACE +
+ UtilConstants.BUILDER_LOWER_CASE + UtilConstants.OBJECT + UtilConstants.CLOSE_PARENTHESIS + UtilConstants.SPACE +
+ UtilConstants.OPEN_CURLY_BRACKET)));
+ }
+
+ /**
+ * Test case for equals method.
+ */
+ @Test
+ public void getEqualsMethodTest() {
+ JavaAttributeInfo testAttr = getTestAttribute();
+ String method = MethodsGenerator.getEqualsMethod(testAttr);
+ assertThat(true, is(method.contains(
+ UtilConstants.SIXTEEN_SPACE_INDENTATION + UtilConstants.OBJECT_STRING + UtilConstants.SUFFIX_S +
+ UtilConstants.PERIOD + UtilConstants.EQUALS_STRING + UtilConstants.OPEN_PARENTHESIS)));
+ }
+
+ /**
+ * Test for to string method.
+ */
+ @Test
+ public void getToStringMethodTest() {
+ JavaAttributeInfo testAttr = getTestAttribute();
+ String method = MethodsGenerator.getToStringMethod(testAttr);
+ assertThat(true, is(method.equals(
+ UtilConstants.TWELVE_SPACE_INDENTATION + UtilConstants.PERIOD + UtilConstants.ADD_STRING +
+ UtilConstants.OPEN_PARENTHESIS + UtilConstants.QUOTES + testAttr.getAttributeName() +
+ UtilConstants.QUOTES + UtilConstants.COMMA + UtilConstants.SPACE + testAttr.getAttributeName() +
+ UtilConstants.CLOSE_PARENTHESIS)));
+ }
+
+ /**
+ * Test for to string method.
+ */
+ @Test
+ public void getToStringMethodForUnionTest() {
+ JavaAttributeInfo testAttr = getTestAttribute();
+ List<YangType<?>> types = new ArrayList<>();
+ types.add(testAttr.getAttributeType());
+ String method = MethodsGenerator.getUnionToStringMethod(types);
+ assertThat(true, is(method.contains(UNION)));
+ }
+
+ /**
+ * Test for getter method of class.
+ */
+ @Test
+ public void getGetterForClassTest() {
+ JavaAttributeInfo testAttr = getTestAttribute();
+ String method = MethodsGenerator.getGetterForClass(testAttr, GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER);
+ assertThat(true, is(method.contains(UtilConstants.PUBLIC + UtilConstants.SPACE + UtilConstants.STRING_DATA_TYPE +
+ UtilConstants.SPACE + UtilConstants.GET_METHOD_PREFIX)));
+ }
+
+ /**
+ * Test for getter of interface.
+ */
+ @Test
+ public void getGetterForInterfaceTest() {
+ String method = MethodsGenerator.getGetterForInterface(CLASS_NAME, UtilConstants.STRING_DATA_TYPE, false,
+ GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER, null);
+ assertThat(true, is(method.contains(UtilConstants.STRING_DATA_TYPE + UtilConstants.SPACE +
+ UtilConstants.GET_METHOD_PREFIX)));
+ }
+
+ /**
+ * Test case for setter method of class.
+ */
+ @Test
+ public void getSetterForClassTest() {
+ JavaAttributeInfo testAttr = getTestAttribute();
+ String method = MethodsGenerator.getSetterForClass(testAttr, CLASS_NAME,
+ GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER);
+ assertThat(true, is(
+ method.contains(UtilConstants.PUBLIC + UtilConstants.SPACE + UtilConstants.VOID + UtilConstants.SPACE + UtilConstants.SET_METHOD_PREFIX +
+ CLASS_NAME + UtilConstants.OPEN_PARENTHESIS +
+ UtilConstants.STRING_DATA_TYPE + UtilConstants.SPACE +
+ ATTRIBUTE_NAME)));
+ }
+
+ /**
+ * Test for setter method of interface.
+ */
+ @Test
+ public void getSetterForInterfaceTest() {
+ String method = MethodsGenerator.getSetterForInterface(CLASS_NAME, UtilConstants.STRING_DATA_TYPE,
+ CLASS_NAME, false,
+ GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER, null);
+ assertThat(true, is(method.contains(UtilConstants.VOID + UtilConstants.SPACE + UtilConstants.SET_METHOD_PREFIX +
+ CLASS_NAME)));
+ }
+
+ /**
+ * Test case for of method.
+ */
+ @Test
+ public void getOfMethodTest() {
+ JavaAttributeInfo testAttr = getTestAttribute();
+ String method = MethodsGenerator.getOfMethodStringAndJavaDoc(testAttr, CLASS_NAME);
+ assertThat(true, is(method.contains(
+ UtilConstants.PUBLIC + UtilConstants.SPACE + UtilConstants.STATIC + UtilConstants.SPACE + CLASS_NAME + UtilConstants.SPACE + UtilConstants.OF +
+ UtilConstants.OPEN_PARENTHESIS + UtilConstants.STRING_DATA_TYPE + UtilConstants.SPACE + UtilConstants.VALUE +
+ UtilConstants.CLOSE_PARENTHESIS)));
+ }
+
+ /**
+ * Test case for setter in type def class.
+ */
+ @Test
+ public void getSetterForTypeDefClassTest() {
+ JavaAttributeInfo testAttr = getTestAttribute();
+ String method = MethodsGenerator.getSetterForTypeDefClass(testAttr);
+ assertThat(true, is(method.contains(UtilConstants.PUBLIC + UtilConstants.SPACE + UtilConstants.VOID + UtilConstants.SPACE +
+ UtilConstants.SET_METHOD_PREFIX)));
+ }
+
+ /**
+ * Test case for over ride string.
+ */
+ @Test
+ public void getOverRideStringTest() {
+ String method = StringGenerator.getOverRideString();
+ assertThat(true, is(method.contains(UtilConstants.OVERRIDE)));
+ }
+
+ /**
+ * Returns java attribute.
+ *
+ * @return java attribute
+ */
+ private JavaAttributeInfo getTestAttribute() {
+ JavaAttributeInfo testAttr = new JavaAttributeInfo(
+ getTestYangType(), ATTRIBUTE_NAME, false, false);
+ testAttr.setAttributeName(ATTRIBUTE_NAME);
+ testAttr.setAttributeType(getTestYangType());
+ testAttr.setImportInfo(getTestJavaQualifiedTypeInfo());
+ return testAttr;
+ }
+
+ /**
+ * Returns java qualified info.
+ *
+ * @return java qualified info
+ */
+ private JavaQualifiedTypeInfoTranslator getTestJavaQualifiedTypeInfo() {
+ JavaQualifiedTypeInfoTranslator info = new JavaQualifiedTypeInfoTranslator();
+ info.setPkgInfo(UtilConstants.JAVA_LANG);
+ info.setClassInfo(UtilConstants.STRING_DATA_TYPE);
+ return info;
+ }
+
+ /**
+ * Returns stub YANG type.
+ *
+ * @return test YANG type
+ */
+ private YangType<?> getTestYangType() {
+ YangType<?> attrType = new YangType<>();
+ attrType.setDataTypeName(UtilConstants.STRING_DATA_TYPE);
+ attrType.setDataType(STRING);
+ return attrType;
+ }
+}
diff --git a/compiler/base/utils/pom.xml b/compiler/base/utils/pom.xml
new file mode 100644
index 0000000..7d67558
--- /dev/null
+++ b/compiler/base/utils/pom.xml
@@ -0,0 +1,59 @@
+<!--
+ ~ Copyright 2016-present Open Networking Laboratory
+ ~
+ ~ Licensed 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
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License 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.
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-compiler-base</artifactId>
+ <version>1.12-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>onos-yang-compiler-utils</artifactId>
+ <packaging>jar</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.8.2</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>3.0.2</version>
+ <configuration>
+ <skipIfEmpty>true</skipIfEmpty>
+ </configuration>
+ <executions>
+ <execution>
+ <id>default</id>
+ <goals>
+ <goal>test-jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/UtilConstants.java b/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/UtilConstants.java
new file mode 100644
index 0000000..05073fc
--- /dev/null
+++ b/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/UtilConstants.java
@@ -0,0 +1,1941 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.utils;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Represents utilities constants which are used while generating java files.
+ */
+public final class UtilConstants {
+
+ /**
+ * JavaDocs for impl class.
+ */
+ public static final String IMPL_CLASS_JAVA_DOC =
+ " * Represents the implementation of ";
+
+ /**
+ * JavaDocs for builder class.
+ */
+ public static final String BUILDER_CLASS_JAVA_DOC =
+ " * Represents the builder implementation of ";
+
+ /**
+ * JavaDocs for interface class.
+ */
+ public static final String INTERFACE_JAVA_DOC =
+ " * Abstraction of an entity which represents the functionality " +
+ "of ";
+
+ /**
+ * JavaDocs for event.
+ */
+ public static final String EVENT_JAVA_DOC =
+ " * Represents event implementation of ";
+
+ /**
+ * JavaDocs for op param class.
+ */
+ public static final String OP_PARAM_JAVA_DOC =
+ " * Represents operation parameter implementation of ";
+
+ /**
+ * JavaDocs for event listener.
+ */
+ public static final String EVENT_LISTENER_JAVA_DOC =
+ " * Abstraction for event listener of ";
+
+ /**
+ * JavaDocs for builder interface class.
+ */
+ public static final String BUILDER_INTERFACE_JAVA_DOC = " * Builder for ";
+
+ /**
+ * JavaDocs for enum class.
+ */
+ public static final String ENUM_CLASS_JAVADOC =
+ " * Represents ENUM data of ";
+
+ /**
+ * JavaDocs for enum attribute.
+ */
+ public static final String ENUM_ATTRIBUTE_JAVADOC = " * Represents ";
+
+ /**
+ * JavaDocs for package info class.
+ */
+ public static final String PACKAGE_INFO_JAVADOC =
+ " * Implementation of YANG node ";
+
+ /**
+ * JavaDocs for package info class.
+ */
+ public static final String PACKAGE_INFO_JAVADOC_OF_CHILD =
+ "'s children nodes";
+
+ /**
+ * JavaDocs's first line.
+ */
+ public static final String JAVA_DOC_FIRST_LINE = "/**\n";
+
+ /**
+ * JavaDocs's last line.
+ */
+ public static final String JAVA_DOC_END_LINE = " */\n";
+
+ /**
+ * JavaDocs's param annotation.
+ */
+ public static final String JAVA_DOC_PARAM = " * @param ";
+
+ /**
+ * JavaDocs's return annotation.
+ */
+ public static final String JAVA_DOC_RETURN = " * @return ";
+
+ /**
+ * JavaDocs's description for setter method.
+ */
+ public static final String JAVA_DOC_SETTERS =
+ " * Returns the builder object of ";
+
+ /**
+ * JavaDocs's description for add to list method.
+ */
+ public static final String JAVA_DOC_ADD_TO_LIST = " * Adds to the list of ";
+
+ /**
+ * JavaDocs's description for setter method.
+ */
+ public static final String JAVA_DOC_MANAGER_SETTERS =
+ " * Sets the value to attribute ";
+
+ /**
+ * JavaDocs's description for OF method.
+ */
+ public static final String JAVA_DOC_OF = " * Returns the object of ";
+
+ /**
+ * JavaDocs's description for typedef' setter method.
+ */
+ public static final String JAVA_DOC_SETTERS_COMMON =
+ " * Sets the value of ";
+
+ /**
+ * JavaDocs's description for getter method.
+ */
+ public static final String JAVA_DOC_GETTERS = " * Returns the attribute ";
+
+ /**
+ * JavaDocs's description for getter method.
+ */
+ public static final String JAVA_DOC_FOR_VALIDATOR =
+ " * Validates if value is in given range.";
+
+ /**
+ * JavaDocs's description for getter method.
+ */
+ public static final String JAVA_DOC_FOR_VALIDATOR_RETURN =
+ " true if value is in range";
+
+ /**
+ * JavaDocs's description for constructor.
+ */
+ public static final String JAVA_DOC_CONSTRUCTOR =
+ " * Creates an instance of ";
+
+ /**
+ * JavaDocs's description for build method.
+ */
+ public static final String JAVA_DOC_BUILD = " * Builds object of ";
+
+ /**
+ * JavaDocs's statement for builder object.
+ */
+ public static final String BUILDER_OBJECT = "builder object of ";
+
+ /**
+ * JavaDocs's statement for rpc method.
+ */
+ public static final String JAVA_DOC_RPC = " * Service interface of ";
+
+ /**
+ * JavaDocs's statement for rpc's input string.
+ */
+ public static final String RPC_INPUT_STRING = "input of service interface ";
+
+ /**
+ * JavaDocs's statement for rpc's output string.
+ */
+ public static final String RPC_OUTPUT_STRING =
+ "output of service interface ";
+
+ /**
+ * Static attribute for new line.
+ */
+ public static final String NEW_LINE = "\n";
+
+ /**
+ * Static attribute for default.
+ */
+ public static final String DEFAULT = "default";
+
+ /**
+ * Static attribute for default.
+ */
+ public static final String DEFAULT_CAPS = "Default";
+
+ /**
+ * Static attribute for java code generation for sbi.
+ */
+ public static final String SBI = "sbi";
+
+ /**
+ * Static attribute for multiple new line.
+ */
+ public static final String MULTIPLE_NEW_LINE = "\n\n";
+
+ /**
+ * Static attribute for empty line.
+ */
+ public static final String EMPTY_STRING = "";
+
+ /**
+ * Static attribute for new line with asterisk.
+ */
+ public static final String NEW_LINE_ASTERISK = " *\n";
+
+ /**
+ * Static attribute for period.
+ */
+ public static final String PERIOD = ".";
+
+ /**
+ * Static attribute for lib.
+ */
+ public static final String LIB = "lib__";
+
+ /**
+ * Static attribute for lib path.
+ */
+ public static final String LIB_PATH = "//lib:";
+
+ /**
+ * Static attribute for output.
+ */
+ public static final String OUT = "__output";
+
+ /**
+ * Static attribute for period.
+ */
+ public static final String ENTRY = "Entry";
+
+ /**
+ * Static attribute for period.
+ */
+ public static final String ENTRY_SET = "entrySet()";
+
+ /**
+ * Static attribute for compare to.
+ */
+ public static final String COMPARE_TO = "compareTo";
+
+ /**
+ * Static attribute for parse byte.
+ */
+ public static final String PARSE_BYTE = "parseByte";
+
+ /**
+ * Static attribute for parse boolean.
+ */
+ public static final String PARSE_BOOLEAN = "parseBoolean";
+
+ /**
+ * Static attribute for parse short.
+ */
+ public static final String PARSE_SHORT = "parseShort";
+
+ /**
+ * Static attribute for parse int.
+ */
+ public static final String PARSE_INT = "parseInt";
+
+ /**
+ * Static attribute for parse long.
+ */
+ public static final String PARSE_LONG = "parseLong";
+
+ /**
+ * Static attribute for base64.
+ */
+ public static final String BASE64 = "Base64";
+
+ /**
+ * Static attribute for getEncoder.
+ */
+ public static final String GET_ENCODER = "getEncoder";
+
+ /**
+ * Static attribute for encodeToString.
+ */
+ public static final String ENCODE_TO_STRING = "encodeToString";
+
+ /**
+ * Static attribute for getDecoder.
+ */
+ public static final String GET_DECODER = "getDecoder";
+
+ /**
+ * Static attribute for decode.
+ */
+ public static final String DECODE = "decode";
+
+ /**
+ * Static attribute for omit null value.
+ */
+ public static final String OMIT_NULL_VALUE_STRING = "omitNullValues()";
+
+ /**
+ * Static attribute for underscore.
+ */
+ public static final String UNDER_SCORE = "_";
+
+ /**
+ * Static attribute for semi-colan.
+ */
+ public static final String SEMI_COLON = ";";
+
+ /**
+ * Static attribute for hyphen.
+ */
+ public static final String HYPHEN = "-";
+
+ /**
+ * Static attribute for space.
+ */
+ public static final String SPACE = " ";
+ /**
+ * Static attribute for space.
+ */
+ public static final String TWO = "2";
+ /**
+ * Static attribute for space.
+ */
+ public static final String FLAG = "flag";
+ /**
+ * Static attribute for result.
+ */
+ public static final String RESULT = "result";
+
+ /**
+ * Static attribute for isSelectAllSchemaChild.
+ */
+ public static final String SELECT_ALL_CHILD = "isSelectAllSchemaChild";
+
+ /**
+ * Static attribute for schema name.
+ */
+ public static final String SCHEMA_NAME = "schemaName";
+
+ /**
+ * Static attribute for validateRange.
+ */
+ public static final String VALIDATE_RANGE = "validateRange";
+
+ /**
+ * Static attribute for minRange.
+ */
+ public static final String MIN_RANGE = "minRange";
+
+ /**
+ * Static attribute for maxRange.
+ */
+ public static final String MAX_RANGE = "maxRange";
+
+ /**
+ * Static attribute for minRange.
+ */
+ public static final String SHORT_MIN_RANGE_ATTR =
+ "static final int INT16_MIN_RANGE = -32768;\n";
+
+ /**
+ * Static attribute for minRange.
+ */
+ public static final String SHORT_MIN_RANGE = "INT16_MIN_RANGE";
+
+ /**
+ * Static attribute for minRange.
+ */
+ public static final String SHORT_MAX_RANGE = "INT16_MAX_RANGE";
+
+ /**
+ * Static attribute for maxRange.
+ */
+ public static final String SHORT_MAX_RANGE_ATTR =
+ "static final int INT16_MAX_RANGE = 32767;";
+
+
+ /**
+ * Static attribute for minRange.
+ */
+ public static final String UINT8_MIN_RANGE_ATTR =
+ "static final int UINT8_MIN_RANGE = 0;\n";
+
+ /**
+ * Static attribute for maxRange.
+ */
+ public static final String UINT8_MAX_RANGE_ATTR =
+ "static final int UINT8_MAX_RANGE = 32767;";
+
+
+ /**
+ * Static attribute for minRange.
+ */
+ public static final String UINT8_MIN_RANGE = "UINT8_MIN_RANGE";
+
+ /**
+ * Static attribute for maxRange.
+ */
+ public static final String UINT8_MAX_RANGE = "UINT8_MAX_RANGE";
+
+ /**
+ * Static attribute for minRange.
+ */
+ public static final String INT_MIN_RANGE_ATTR =
+ "static final int INT32_MIN_RANGE = -2147483648;\n";
+
+ /**
+ * Static attribute for minRange.
+ */
+ public static final String INT_MIN_RANGE = "INT32_MIN_RANGE";
+
+ /**
+ * Static attribute for minRange.
+ */
+ public static final String INT_MAX_RANGE = "INT32_MAX_RANGE";
+
+ /**
+ * Static attribute for maxRange.
+ */
+ public static final String INT_MAX_RANGE_ATTR =
+ "static final int INT32_MAX_RANGE = 2147483647;";
+
+
+ /**
+ * Static attribute for minRange.
+ */
+ public static final String UINT_MIN_RANGE_ATTR =
+ "static final int UINT16_MIN_RANGE = 0;\n";
+
+ /**
+ * Static attribute for maxRange.
+ */
+ public static final String UINT_MAX_RANGE_ATTR =
+ "static final int UINT16_MAX_RANGE = 2147483647;";
+
+
+ /**
+ * Static attribute for minRange.
+ */
+ public static final String UINT_MIN_RANGE = "UINT16_MIN_RANGE";
+
+ /**
+ * Static attribute for maxRange.
+ */
+ public static final String UINT_MAX_RANGE = "UINT16_MAX_RANGE";
+
+ /**
+ * Static attribute for minRange.
+ */
+ public static final String LONG_MIN_RANGE_ATTR =
+ "static final BigInteger INT64_MIN_RANGE =" +
+ " new BigInteger(\"-9223372036854775808\");\n";
+
+ /**
+ * Static attribute for maxRange.
+ */
+ public static final String LONG_MAX_RANGE_ATTR =
+ "static final BigInteger INT64_MAX_RANGE =" +
+ " new BigInteger(\"9223372036854775807\");";
+
+ /**
+ * Static attribute for minRange.
+ */
+ public static final String LONG_MIN_RANGE = "INT64_MIN_RANGE";
+
+ /**
+ * Static attribute for maxRange.
+ */
+ public static final String LONG_MAX_RANGE = "INT64_MAX_RANGE";
+
+ /**
+ * Static attribute for minRange.
+ */
+ public static final String ULONG_MIN_RANGE_ATTR =
+ "static final BigInteger UINT32_MIN_RANGE =" +
+ " new BigInteger(\"0\");\n";
+
+ /**
+ * Static attribute for maxRange.
+ */
+ public static final String ULONG_MAX_RANGE_ATTR =
+ "static final BigInteger UINT32_MAX_RANGE =" +
+ " new BigInteger(\"9223372036854775807\");";
+
+
+ /**
+ * Static attribute for minRange.
+ */
+ public static final String ULONG_MIN_RANGE = "UINT32_MIN_RANGE";
+
+ /**
+ * Static attribute for maxRange.
+ */
+ public static final String ULONG_MAX_RANGE = "UINT32_MAX_RANGE";
+
+ /**
+ * Static attribute for subject.
+ */
+ public static final String SUBJECT = "Subject";
+
+ /**
+ * Static attribute for ListenerService.
+ */
+ public static final String LISTENER_SERVICE = "ListenerService";
+
+ /**
+ * Static attribute for listener package.
+ */
+ public static final String ONOS_EVENT_PKG = "org.onosproject.event";
+
+ /**
+ * Static attribute for colon.
+ */
+ public static final String COLON = ":";
+
+ /**
+ * Static attribute for caret.
+ */
+ public static final String CARET = "^";
+
+ /**
+ * Static attribute for input string.
+ */
+ public static final String INPUT = "input";
+
+ /**
+ * Static attribute for output string.
+ */
+ public static final String OUTPUT = "output";
+
+ /**
+ * Static attribute for current string.
+ */
+ public static final String CURRENT = "current";
+
+ /**
+ * Static attribute for leafref string.
+ */
+ public static final String LEAFREF = "leafref";
+
+ /**
+ * Static attribute for output variable of rpc.
+ */
+ public static final String RPC_INPUT_VAR_NAME = "inputVar";
+
+ /**
+ * Static attribute for new line.
+ */
+ public static final String EQUAL = "=";
+
+ /**
+ * Static attribute for slash syntax.
+ */
+ public static final String SLASH = File.separator;
+
+ /**
+ * Static attribute for add syntax.
+ */
+ public static final String ADD = "+";
+
+ /**
+ * Static attribute for quotes.
+ */
+ public static final String QUOTES = "\"";
+
+ /**
+ * Static attribute for zero.
+ */
+ public static final String ZERO = "0";
+
+ /**
+ * Static attribute for ampersand.
+ */
+ public static final String AND = "&";
+
+ /**
+ * Static attribute for comma.
+ */
+ public static final String COMMA = ",";
+
+ /**
+ * Static attribute for class.
+ */
+ public static final String CLASS_STRING = "Class";
+
+ /**
+ * Static attribute for put.
+ */
+ public static final String PUT = "put";
+
+ /**
+ * Static attribute for get.
+ */
+ public static final String GET = "get";
+
+ /**
+ * Static attribute for slash character.
+ */
+ public static final char CHAR_OF_SLASH = '/';
+
+ /**
+ * Static attribute for open square bracket character.
+ */
+ public static final char CHAR_OF_OPEN_SQUARE_BRACKET = '[';
+
+ /**
+ * Static attribute for slash string.
+ */
+ public static final String SLASH_FOR_STRING = "/";
+
+ /**
+ * Static attribute for open square bracket.
+ */
+ public static final String OPEN_SQUARE_BRACKET = "[";
+
+ /**
+ * Static attribute for ancestor accessor.
+ */
+ public static final String ANCESTOR = "..";
+
+ /**
+ * Static attribute for ancestor accessor along with path.
+ */
+ public static final String SLASH_ANCESTOR = "../";
+
+ /**
+ * Static attribute for add syntax.
+ */
+ public static final String ADD_STRING = "add";
+
+ /**
+ * Static attribute for key syntax.
+ */
+ public static final String KEYS = "Keys";
+
+ /**
+ * Static attribute for key syntax.
+ */
+ public static final String GET_KEY = "getKey()";
+
+ /**
+ * Static attribute for key syntax.
+ */
+ public static final String GET_VALUE = "getValue()";
+
+ /**
+ * Static attribute for -1 to syntax.
+ */
+ public static final String NEG_ONE = "-1";
+
+ /**
+ * Static attribute for Comparable to syntax.
+ */
+ public static final String COMPARABLE = "Comparable";
+
+ /**
+ * Static attribute for string trim syntax.
+ */
+ public static final String TRIM_STRING = "trim";
+
+ /**
+ * Static attribute for string split syntax.
+ */
+ public static final String SPLIT_STRING = "split";
+
+ /**
+ * Static attribute for Pattern.
+ */
+ public static final String PATTERN = "Pattern";
+
+ /**
+ * Static attribute for Quote.
+ */
+ public static final String QUOTE_STRING = "quote";
+
+ /**
+ * Static attribute for from syntax.
+ */
+ public static final String FROM_STRING_METHOD_NAME = "fromString";
+
+ /**
+ * Static attribute for check not null syntax.
+ */
+ public static final String CHECK_NOT_NULL_STRING = "checkNotNull";
+
+ /**
+ * Static attribute for hash code syntax.
+ */
+ public static final String HASH_CODE_STRING = "hashCode";
+
+ /**
+ * Static attribute for equals syntax.
+ */
+ public static final String EQUALS_STRING = "equals";
+
+ /**
+ * Static attribute for object.
+ */
+ public static final String OBJECT_STRING = "Object";
+
+ /**
+ * Static attribute for instance of syntax.
+ */
+ public static final String INSTANCE_OF = " instanceof ";
+
+ /**
+ * Static attribute for value syntax.
+ */
+ public static final String VALUE = "value";
+
+ /**
+ * Static attribute for value syntax.
+ */
+ public static final String VALUE_CAPS = "Value";
+
+ /**
+ * Static attribute for suffix s.
+ */
+ public static final String SUFFIX_S = "s";
+
+ /**
+ * Static attribute for string builder var.
+ */
+ public static final String STRING_BUILDER_VAR = "sBuild";
+ /**
+ * Static attribute for string builder var.
+ */
+ public static final String APPEND = "append";
+
+ /**
+ * Static attribute for if.
+ */
+ public static final String IF = "if";
+
+ /**
+ * Static attribute for of.
+ */
+ public static final String OF = "of";
+ /**
+ * Static attribute for of.
+ */
+ public static final String OF_CAPS = "Of";
+
+ /**
+ * Static attribute for other.
+ */
+ public static final String OTHER = "other";
+
+ /**
+ * Static attribute for obj syntax.
+ */
+ public static final String OBJ = "obj";
+
+ /**
+ * Static attribute for hash syntax.
+ */
+ public static final String HASH = "hash";
+
+ /**
+ * Static attribute for to syntax.
+ */
+ public static final String TO = "to";
+
+ /**
+ * Static attribute for to syntax.
+ */
+ public static final String TO_CAPS = "To";
+
+ /**
+ * Static attribute for true syntax.
+ */
+ public static final String TRUE = "true";
+
+ /**
+ * Static attribute for false syntax.
+ */
+ public static final String FALSE = "false";
+
+ /**
+ * Static attribute for org.
+ */
+ public static final String ORG = "org";
+
+ /**
+ * Static attribute for temp.
+ */
+ public static final String TEMP = "Temp";
+
+ /**
+ * Static attribute for YANG file directory.
+ */
+ public static final String YANG_RESOURCES = "yang/resources";
+
+ /**
+ * Static attribute for diamond close bracket syntax.
+ */
+ public static final String DIAMOND_OPEN_BRACKET = "<";
+
+ /**
+ * Static attribute for diamond close bracket syntax.
+ */
+ public static final String DIAMOND_CLOSE_BRACKET = ">";
+
+ /**
+ * Static attribute for event type.
+ */
+ public static final String EVENT_TYPE = ".Type";
+
+ /**
+ * Static attribute for exception syntax.
+ */
+ public static final String EXCEPTION = "Exception";
+
+ /**
+ * Static attribute for exception variable syntax.
+ */
+ public static final String EXCEPTION_VAR = "e";
+
+ /**
+ * Static attribute for open parenthesis syntax.
+ */
+ public static final String OPEN_PARENTHESIS = "(";
+
+ /**
+ * Static attribute for switch syntax.
+ */
+ public static final String SWITCH = "switch";
+
+ /**
+ * Static attribute for case syntax.
+ */
+ public static final String CASE = "case";
+
+ /**
+ * Static attribute for temp val syntax.
+ */
+ public static final String TMP_VAL = "tmpVal";
+
+ /**
+ * Static attribute for close curly bracket syntax.
+ */
+ public static final String ELSE = " else ";
+
+ /**
+ * From string parameter name.
+ */
+ public static final String FROM_STRING_PARAM_NAME = "valInString";
+
+ /**
+ * Static attribute for close parenthesis syntax.
+ */
+ public static final String CLOSE_PARENTHESIS = ")";
+
+ /**
+ * Static attribute for empty parameter function call.
+ */
+ public static final String OPEN_CLOSE_BRACKET_STRING = "()";
+
+ /**
+ * Static attribute for empty parameter function call.
+ */
+ public static final String OPEN_CLOSE_DIAMOND_STRING = "<>";
+
+ /**
+ * Static attribute for open curly bracket syntax.
+ */
+ public static final String OPEN_CURLY_BRACKET = "{";
+
+ /**
+ * Static attribute for close curly bracket syntax.
+ */
+ public static final String CLOSE_CURLY_BRACKET = "}";
+
+ /**
+ * Static attribute for square brackets syntax.
+ */
+ public static final String SQUARE_BRACKETS = "[]";
+
+ /**
+ * Static attribute for getter method prefix.
+ */
+ public static final String GET_METHOD_PREFIX = "get";
+
+ /**
+ * Static attribute for setter method prefix.
+ */
+ public static final String SET_METHOD_PREFIX = "set";
+
+ /**
+ * Static attribute for op param.
+ */
+ public static final String OP_PARAM = "OpParam";
+
+
+ /**
+ * Static attribute for is filter content match method prefix.
+ */
+ public static final String PROCESS_SUBTREE_FILTERING =
+ "processSubtreeFiltering";
+
+ /**
+ * variable name of the subtree filtering result builder.
+ */
+ public static final String SUBTREE_FILTERING_RESULT_BUILDER =
+ "subTreeFilteringResultBuilder";
+
+ /**
+ * variable name of the subtree filtering result flag.
+ */
+ public static final String IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG =
+ "isAnySelectOrContainmentNode";
+
+ /**
+ * variable name of the subtree filtering to select all child.
+ */
+ public static final String IS_SELECT_ALL_SCHEMA_CHILD_FLAG =
+ "isSelectAllSchemaChild";
+
+ /**
+ * Static attribute for break prefix.
+ */
+ public static final String BREAK = "break";
+
+ /**
+ * Static attribute for isEmpty.
+ */
+ public static final String IS_EMPTY = "isEmpty()";
+ /**
+ * Static attribute for exception string in bits enum class.
+ */
+ public static final String EXCEPTION_STRING = "IllegalArgumentException" +
+ "(\"not a valid input element\");\n";
+
+ /**
+ * Static attribute for priority queue.
+ */
+ public static final String PRIORITY_QUEUE = "java.util.PriorityQueue<>()";
+
+ /**
+ * Static attribute for linked hash set.
+ */
+ public static final String LINKED_HASH_SET = "java.util.LinkedHashSet<>()";
+
+ /**
+ * Static attribute for priority queue.
+ */
+ public static final String LINKED_HASH_MAP = "java.util.LinkedHashMap<>()";
+
+ /**
+ * Static attribute for "throw new ".
+ */
+ public static final String THROW_NEW = "throw new ";
+
+ /**
+ * Static attribute for is isLeafValueSet method prefix.
+ */
+ public static final String VALUE_LEAF_SET = "isLeafValueSet";
+
+ /**
+ * Static attribute for is valueLeafFlags method prefix.
+ */
+ public static final String VALUE_LEAF = "valueLeafFlags";
+
+ /**
+ * Static attribute for is selectLeafFlags method prefix.
+ */
+ public static final String SELECT_LEAF = "selectLeafFlags";
+
+ /**
+ * Static attribute for is isSelectLeaf method prefix.
+ */
+ public static final String IS_SELECT_LEAF = "isSelectLeaf";
+
+ /**
+ * Static attribute for is selectLeaf method prefix.
+ */
+ public static final String SET_SELECT_LEAF = "selectLeaf";
+
+ /**
+ * Static attribute for is LeafIdentifier enum prefix.
+ */
+ public static final String LEAF_IDENTIFIER = "LeafIdentifier";
+ /**
+ * Static attribute for is leaf.
+ */
+ public static final String LEAF = "leaf";
+
+ /**
+ * Static attribute for four space indentation.
+ */
+ public static final String FOUR_SPACE_INDENTATION = " ";
+
+ /**
+ * Static attribute for not syntax.
+ */
+ public static final String NOT = "!";
+
+ /**
+ * Static attribute for try syntax.
+ */
+ public static final String TRY = "try";
+
+ /**
+ * Static attribute for catch syntax.
+ */
+ public static final String CATCH = "catch";
+
+ /**
+ * Static attribute for eight space indentation.
+ */
+ public static final String EIGHT_SPACE_INDENTATION =
+ FOUR_SPACE_INDENTATION + FOUR_SPACE_INDENTATION;
+
+ /**
+ * Static attribute for twelve space indentation.
+ */
+ public static final String TWELVE_SPACE_INDENTATION =
+ EIGHT_SPACE_INDENTATION + FOUR_SPACE_INDENTATION;
+
+ /**
+ * Static attribute for sixteen space indentation.
+ */
+ public static final String SIXTEEN_SPACE_INDENTATION =
+ TWELVE_SPACE_INDENTATION + FOUR_SPACE_INDENTATION;
+
+ /**
+ * Static attribute for twenty space indentation.
+ */
+ public static final String TWENTY_SPACE_INDENTATION =
+ SIXTEEN_SPACE_INDENTATION + FOUR_SPACE_INDENTATION;
+
+ /**
+ * Static attribute for twenty four space indentation.
+ */
+ public static final String TWENTY_FOUR_SPACE_INDENTATION =
+ TWENTY_SPACE_INDENTATION + FOUR_SPACE_INDENTATION;
+
+ /**
+ * Static attribute for twenty eight space indentation.
+ */
+ public static final String TWENTY_EIGHT_SPACE_INDENTATION =
+ TWENTY_FOUR_SPACE_INDENTATION + FOUR_SPACE_INDENTATION;
+
+ /**
+ * Static attribute for thirty two space indentation.
+ */
+ public static final String THIRTY_TWO_SPACE_INDENTATION =
+ TWENTY_EIGHT_SPACE_INDENTATION + FOUR_SPACE_INDENTATION;
+
+ /**
+ * Static attribute for generated code path.
+ */
+ public static final String YANG_GEN_DIR = "src/main/java/";
+
+ /**
+ * Static attribute for base package.
+ */
+ public static final String DEFAULT_BASE_PKG = "org.onosproject.yang.gen";
+
+ /**
+ * Static attribute for YANG date prefix.
+ */
+ public static final String REVISION_PREFIX = "rev";
+
+ /**
+ * Static attribute for YANG automatic prefix for identifiers with keywords
+ * and beginning with digits.
+ */
+ public static final String YANG_AUTO_PREFIX = "yangAutoPrefix";
+
+ /**
+ * Static attribute for YANG version prefix.
+ */
+ public static final String VERSION_PREFIX = "v";
+
+ /**
+ * Static attribute for private modifier.
+ */
+ public static final String PRIVATE = "private";
+
+ /**
+ * Static attribute for public modifier.
+ */
+ public static final String PUBLIC = "public";
+
+ /**
+ * Static attribute for abstract modifier.
+ */
+ public static final String ABSTRACT = "abstract";
+
+ /**
+ * Static attribute for protected modifier.
+ */
+ public static final String PROTECTED = "protected";
+
+ /**
+ * Void java type.
+ */
+ public static final String VOID = "void";
+
+ /**
+ * String built in java type.
+ */
+ public static final String STRING_DATA_TYPE = "String";
+
+ /**
+ * String built in java type.
+ */
+ public static final String STRING_BUILDER = "StringBuilder";
+ /**
+ * Java.lang.* packages.
+ */
+ public static final String JAVA_LANG = "java.lang";
+
+ /**
+ * Java.math.* packages.
+ */
+ public static final String JAVA_MATH = "java.math";
+
+ /**
+ * Boolean built in java type.
+ */
+ public static final String BOOLEAN_DATA_TYPE = "boolean";
+
+ /**
+ * BigInteger built in java type.
+ */
+ public static final String BIG_INTEGER = "BigInteger";
+
+ /**
+ * BigDecimal built in java type.
+ */
+ public static final String BIG_DECIMAL = "BigDecimal";
+
+ /**
+ * BitSet built in java type.
+ */
+ public static final String BIT_SET = "BitSet";
+
+ /**
+ * Flag for subtree filtering in augment.
+ */
+ public static final String SUBTREE_FILTERED = "isSubTreeFiltered";
+
+ /**
+ * Augment map type.
+ */
+ public static final String AUGMENT_MAP_TYPE = "Map<Class<?>, Object>";
+
+ /**
+ * Byte java built in type.
+ */
+ public static final String BYTE = "byte";
+
+ /**
+ * Short java built in type.
+ */
+ public static final String SHORT = "short";
+
+ /**
+ * Int java built in type.
+ */
+ public static final String INT = "int";
+
+ /**
+ * Long java built in type.
+ */
+ public static final String LONG = "long";
+
+ /**
+ * Double java built in type.
+ */
+ public static final String DOUBLE = "double";
+
+ /**
+ * Boolean built in java wrapper type.
+ */
+ public static final String BOOLEAN_WRAPPER = "Boolean";
+
+ /**
+ * Byte java built in wrapper type.
+ */
+ public static final String BYTE_WRAPPER = "Byte";
+
+ /**
+ * Short java built in wrapper type.
+ */
+ public static final String SHORT_WRAPPER = "Short";
+
+ /**
+ * Integer java built in wrapper type.
+ */
+ public static final String INTEGER_WRAPPER = "Integer";
+
+ /**
+ * Long java built in wrapper type.
+ */
+ public static final String LONG_WRAPPER = "Long";
+
+ /**
+ * Static variable for question mark.
+ */
+ public static final String QUESTION_MARK = "?";
+
+ /**
+ * Static variable for forType string.
+ */
+ public static final String FOR_TYPE_STRING = " for type ";
+
+ /**
+ * List of keywords in java, this is used for checking if the input does not
+ * contain these keywords.
+ */
+ public static final List<String> JAVA_KEY_WORDS =
+ Arrays.asList("abstract", "assert", "boolean", "break", "byte",
+ "case", "catch", "char", "class", "const", "continue",
+ "default", "do", "double", "else", "extends", "false",
+ "final", "finally", "float", "for", "goto", "if",
+ "implements", "import", "instanceof", "enum", "int",
+ "interface", "long", "native", "new", "null",
+ "package", "private", "protected", "public", "return",
+ "short", "static", "strictfp", "super", "switch",
+ "synchronized", "this", "throw", "throws", "transient",
+ "true", "try", "void", "volatile", "while", "list",
+ "map", "arrayList", "hashMap", "linkedList", "notify",
+ "notifyAll", "Method",
+ "collections");
+
+ /**
+ * Static attribute for regex for all the special characters.
+ */
+ public static final String REGEX_WITH_ALL_SPECIAL_CHAR = "\\p{Punct}+";
+
+ /**
+ * Static attribute for regex for three special characters used in
+ * identifier.
+ */
+ public static final String REGEX_FOR_IDENTIFIER_SPECIAL_CHAR = "[. _ -]+";
+
+ /**
+ * Static attribute for regex for period.
+ */
+ public static final String REGEX_FOR_PERIOD = "[.]";
+
+ /**
+ * Static attribute for regex for underscore.
+ */
+ public static final String REGEX_FOR_UNDERSCORE = "[_]";
+
+ /**
+ * Static attribute for regex for hyphen.
+ */
+ public static final String REGEX_FOR_HYPHEN = "[-]";
+
+ /**
+ * Static attribute for regex for digits.
+ */
+ public static final String REGEX_FOR_FIRST_DIGIT = "\\d.*";
+
+ /**
+ * Static attribute for regex with digits.
+ */
+ public static final String REGEX_WITH_DIGITS = "(?=\\d+)";
+
+ /**
+ * Static attribute for regex for single letter.
+ */
+ public static final String REGEX_FOR_SINGLE_LETTER = "[a-zA-Z]";
+
+ /**
+ * Static attribute for regex for digits with single letter.
+ */
+ public static final String REGEX_FOR_DIGITS_WITH_SINGLE_LETTER =
+ "[0-9]+[a-zA-Z]";
+
+ /**
+ * Static attribute for regex with uppercase.
+ */
+ public static final String REGEX_WITH_UPPERCASE = "(?=\\p{Upper})";
+
+ /**
+ * Static attribute for regex for single capital case letter.
+ */
+ public static final String REGEX_WITH_SINGLE_CAPITAL_CASE = "[A-Z]";
+
+ /**
+ * Static attribute for regex for capital case letter with any number of
+ * digits and small case letters.
+ */
+ public static final String
+ REGEX_WITH_SINGLE_CAPITAL_CASE_AND_DIGITS_SMALL_CASES =
+ "[A-Z][0-9a-z]+";
+
+ /**
+ * Static attribute for regex for any string ending with service.
+ */
+ public static final String REGEX_FOR_ANY_STRING_ENDING_WITH_SERVICE =
+ ".+Service";
+
+ /**
+ * Static attribute for class syntax.
+ */
+ public static final String CLASS = "class";
+
+ /**
+ * Static attribute for builder syntax.
+ */
+ public static final String BUILDER = "Builder";
+
+ /**
+ * Static attribute for builder syntax.
+ */
+ public static final String BUILDER_LOWER_CASE = "builder";
+
+ /**
+ * Static attribute for service syntax.
+ */
+ public static final String SERVICE = "Service";
+
+ /**
+ * Static attribute for interface syntax.
+ */
+ public static final String INTERFACE = "interface";
+
+ /**
+ * Static attribute for enum syntax.
+ */
+ public static final String ENUM = "enum";
+
+ /**
+ * Static attribute for type syntax.
+ */
+ public static final String TYPE = "Type";
+
+ /**
+ * Static attribute for static syntax.
+ */
+ public static final String STATIC = "static";
+
+ /**
+ * Static attribute for final syntax.
+ */
+ public static final String FINAL = "final";
+
+ /**
+ * Static attribute for package syntax.
+ */
+ public static final String PACKAGE = "package";
+
+ /**
+ * Static attribute for import syntax.
+ */
+ public static final String IMPORT = "import ";
+
+ /**
+ * Static attribute for null syntax.
+ */
+ public static final String NULL = "null";
+
+ /**
+ * Static attribute for return syntax.
+ */
+ public static final String RETURN = "return";
+
+ /**
+ * Static attribute for java new syntax.
+ */
+ public static final String NEW = "new";
+
+ /**
+ * Static attribute for java new syntax.
+ */
+ public static final String TO_STRING_METHOD = "toString";
+
+ /**
+ * Static attribute for this syntax.
+ */
+ public static final String THIS = "this";
+
+ /**
+ * Static attribute for implements syntax.
+ */
+ public static final String IMPLEMENTS = "implements";
+
+ /**
+ * Static attribute for extends syntax.
+ */
+ public static final String EXTEND = "extends";
+
+ /**
+ * Static attribute for service interface suffix syntax.
+ */
+ public static final String SERVICE_METHOD_STRING = "Service";
+
+ /**
+ * For event file generation.
+ */
+ public static final String EVENT_STRING = "Event";
+
+ /**
+ * For event listener file generation.
+ */
+ public static final String EVENT_LISTENER_STRING = "EventListener";
+
+ /**
+ * For event subject file generation.
+ */
+ public static final String EVENT_SUBJECT_NAME_SUFFIX = "EventSubject";
+
+ /**
+ * Static attribute for build method syntax.
+ */
+ public static final String BUILD = "build";
+
+ /**
+ * Static attribute for build for filter in augment method syntax.
+ */
+ public static final String BUILD_FOR_FILTER = "buildForFilter";
+
+ /**
+ * Static attribute for object.
+ */
+ public static final String OBJECT = "Object";
+
+ /**
+ * Static attribute for app instance.
+ */
+ public static final String APP_INSTANCE = "appInstance";
+
+ /**
+ * Static attribute for instance.
+ */
+ public static final String INSTANCE = "instance";
+
+ /**
+ * Static attribute for override annotation.
+ */
+ public static final String OVERRIDE = "@Override";
+
+ /**
+ * Static attribute for collections.
+ */
+ public static final String COLLECTION_IMPORTS = "java.util";
+
+ /**
+ * Static attribute for reflect.
+ */
+ public static final String REFLECT_IMPORTS = "java.lang.reflect";
+
+ /**
+ * Static attribute for map.
+ */
+ public static final String MAP = "Map";
+
+ /**
+ * Static attribute for hash map.
+ */
+ public static final String HASH_MAP = "HashMap";
+
+
+ /**
+ * Static attribute for more object import package.
+ */
+ public static final String GOOGLE_MORE_OBJECT_IMPORT_PKG =
+ "com.google.common.base";
+
+ /**
+ * Static attribute for more object import class.
+ */
+ public static final String GOOGLE_MORE_OBJECT_IMPORT_CLASS =
+ "MoreObjects";
+
+ /**
+ * Static attribute for more object import class.
+ */
+ public static final String MORE_OBJ_ATTR =
+ "MoreObjects.ToStringHelper helper = ";
+
+ /**
+ * Static attribute for to string method.
+ */
+ public static final String GOOGLE_MORE_OBJECT_METHOD_STRING =
+ "MoreObjects.toStringHelper(getClass())";
+
+ /**
+ * Static attribute for to string method.
+ */
+ public static final String GOOGLE_MORE_OBJECT_METHOD_STATIC_STRING =
+ "MoreObjects.toStringHelper";
+
+ /**
+ * Static attribute for java utilities import package.
+ */
+ public static final String JAVA_UTIL_PKG = "java.util";
+
+ /**
+ * Static attribute for java utilities import package.
+ */
+ public static final String JAVA_UTIL_REGEX_PKG = "java.util.regex";
+
+ /**
+ * Static attribute for java utilities import package.
+ */
+ public static final String SET_VALUE_PARA = "setValue";
+
+ /**
+ * Static attribute for Method.
+ */
+ public static final String METHOD = "Method";
+
+ /**
+ * Static attribute for bitset.
+ */
+ public static final String BITSET = "BitSet";
+
+ /**
+ * Static attribute for java utilities objects import class.
+ */
+ public static final String JAVA_UTIL_OBJECTS_IMPORT_CLASS = "Objects";
+
+ /**
+ * Static attribute for AugmentedInfo class.
+ */
+ public static final String YANG_AUGMENTED_INFO = "YangAugmentedInfo";
+
+ /**
+ * Static attribute for AugmentedInfo class.
+ */
+ public static final String YANG_AUGMENTED_INFO_LOWER_CASE =
+ "yangAugmentedInfo";
+
+ /**
+ * Static attribute for AugmentedInfo class.
+ */
+ public static final String YANG_AUGMENTED_INFO_MAP =
+ "yangAugmentedInfoMap";
+
+ /**
+ * Static attribute for augmented.
+ */
+ public static final String AUGMENTED = "Augmented";
+
+ /**
+ * Static attribute for list.
+ */
+ public static final String LIST = "List";
+
+ /**
+ * Static attribute for queue.
+ */
+ public static final String QUEUE = "Queue";
+
+ /**
+ * Static attribute for set.
+ */
+ public static final String SET = "Set";
+
+ /**
+ * Comment to be added for auto generated impl methods.
+ */
+ public static final String YANG_UTILS_TODO =
+ "//TODO: YANG utils generated code";
+
+ /**
+ * Static attribute for AbstractEvent.
+ */
+ public static final String ABSTRACT_EVENT = "AbstractEvent";
+
+ /**
+ * Static attribute for EventListener.
+ */
+ public static final String EVENT_LISTENER = "EventListener";
+
+ /**
+ * Static attribute for or operator.
+ */
+ public static final String OR_OPERATION = "||";
+
+ /**
+ * Static attribute for or operator.
+ */
+ public static final String AND_OPERATION = "&&";
+
+ /**
+ * Static attribute for YANG file error.
+ */
+ public static final String YANG_FILE_ERROR = "YANG file error : ";
+
+ /**
+ * Static attribute for unsupported error information.
+ */
+ public static final String UNSUPPORTED_YANG_CONSTRUCT =
+ " is not supported.";
+
+ /**
+ * Static attribute for "is invalid" information.
+ */
+ public static final String IS_INVALID = " is invalid.";
+
+ /**
+ * Static attribute for data model tree error information.
+ */
+ public static final String INVALID_TREE = "Internal datamodel error: " +
+ "Datamodel tree is not correct";
+
+ /**
+ * Static attribute for currently unsupported error information.
+ */
+ public static final String CURRENTLY_UNSUPPORTED =
+ " is not supported in current version, please check wiki" +
+ " for YANG utils road map.";
+
+ /**
+ * Static attribute for leaf ref target node error information.
+ */
+ public static final String LEAFREF_ERROR = "YANG file error: The target" +
+ " node, in the leafref path ";
+
+ /**
+ * Static attribute for leaf holder error information.
+ */
+ public static final String LEAF_HOLDER_ERROR = "Referred node should be of" +
+ " type leaves holder in ";
+
+ /**
+ * Static attribute for invalid resolve entity error information.
+ */
+ public static final String INVALID_RESOLVED_ENTITY = "Data Model " +
+ "Exception: Entity to resolved is other than type/uses";
+
+ /**
+ * Static attribute for invalid resolve entity error information.
+ */
+ public static final String INVALID_ENTITY = "Data Model Exception: Entity " +
+ "to resolved is other than identityref";
+
+ /**
+ * Static attribute for invalid state error information.
+ */
+ public static final String INVALID_LINKER_STATE = "Data Model Exception: " +
+ "Unsupported, linker state";
+
+ /**
+ * Static attribute for leaf ref resolve entity error information.
+ */
+ public static final String FAILED_TO_FIND_LEAD_INFO_HOLDER = "YANG file " +
+ "error: Unable to find base leaf/leaf-list for given leafref path ";
+
+ /**
+ * Static attribute for compiler annotation resolve entity error
+ * information.
+ */
+ public static final String FAILED_TO_FIND_ANNOTATION = "Failed to link " +
+ "compiler annotation ";
+
+ /**
+ * Static attribute for failed to link entity error information.
+ */
+ public static final String FAILED_TO_LINK = "Failed to link ";
+
+ /**
+ * Static attribute for un-resolve entity error information.
+ */
+ public static final String UNRESOLVABLE = "Data Model Exception: Entity " +
+ "to resolved is not Resolvable";
+
+ /**
+ * Static attribute for invalid resolve entity error information.
+ */
+ public static final String LINKER_ERROR = "Data Model Exception: Entity" +
+ " to resolved is other than type/uses/if-feature/leafref/base/identityref";
+
+ /**
+ * Static attribute for invalid resolve entity error information.
+ */
+ public static final String INVALID_TARGET = "Invalid target node type ";
+ /**
+ * Static attribute for typedef linker error information.
+ */
+ public static final String TYPEDEF_LINKER_ERROR =
+ "YANG file error: Unable to find base typedef for given type";
+
+ /**
+ * Static attribute for grouping linker error information.
+ */
+ public static final String GROUPING_LINKER_ERROR =
+ "YANG file error: Unable to find base grouping for given uses";
+
+ /**
+ * Static attribute for if-feature linker error information.
+ */
+ public static final String FEATURE_LINKER_ERROR =
+ "YANG file error: Unable to find feature for given if-feature";
+
+ /**
+ * Static attribute for leafref linker error information.
+ */
+ public static final String LEAFREF_LINKER_ERROR =
+ "YANG file error: Unable to find base leaf/leaf-list for given " +
+ "leafref";
+
+ /**
+ * Static attribute for base linker error information.
+ */
+ public static final String BASE_LINKER_ERROR =
+ "YANG file error: Unable to find base identity for given base";
+
+ /**
+ * Static attribute for identityref linker error information.
+ */
+ public static final String IDENTITYREF_LINKER_ERROR =
+ "YANG file error: Unable to find base identity for given base";
+
+ /**
+ * Static attribute for jar.
+ */
+ public static final String JAR = "jar";
+
+ /**
+ * Static attribute for for.
+ */
+ public static final String FOR = "for";
+
+ /**
+ * Static attribute for InvocationTargetException.
+ */
+ public static final String INVOCATION_TARGET_EXCEPTION =
+ "InvocationTargetException";
+ /**
+ * Static attribute for arrayList.
+ */
+ public static final String ARRAY_LIST_INIT = "ArrayList<>()";
+
+ /**
+ * Static attribute for arrayList import.
+ */
+ public static final String ARRAY_LIST_IMPORT =
+ IMPORT + COLLECTION_IMPORTS + ".ArrayList;\n";
+
+ /**
+ * Static attribute for unused keyword.
+ */
+ public static final String UNUSED = "UNUSED";
+
+ /**
+ * Static attribute for 1 keyword.
+ */
+ public static final String ONE = "1";
+
+ /**
+ * Static attribute for YANG node operation type class.
+ */
+ public static final String OPERATION_TYPE_CLASS =
+ "OnosYangOpType";
+
+ /**
+ * Static attribute for YANG node operation type attribute.
+ */
+ public static final String OPERATION_TYPE_ATTRIBUTE =
+ "OpType";
+
+ /**
+ * Static attribute for input keyword to be suffixed with rpc name.
+ */
+ public static final String INPUT_KEYWORD = "_input";
+
+ /**
+ * Static attribute for output keyword to be suffixed with rpc name.
+ */
+ public static final String OUTPUT_KEYWORD = "_output";
+
+ /**
+ * Static attribute for event class.
+ */
+ public static final String EVENT_CLASS = "event class";
+
+ /**
+ * Static attribute for typedef class.
+ */
+ public static final String TYPEDEF_CLASS = "typedef class";
+
+ /**
+ * Static attribute for impl class.
+ */
+ public static final String IMPL_CLASS = "impl class";
+
+ /**
+ * Static attribute for union class.
+ */
+ public static final String UNION_CLASS = "union class";
+
+ /**
+ * Static attribute for enum class.
+ */
+ public static final String ENUM_CLASS = "enum class";
+
+ /**
+ * Static attribute for rpc class.
+ */
+ public static final String RPC_CLASS = "rpc class";
+
+ /**
+ * Static attribute for builder class.
+ */
+ public static final String BUILDER_CLASS = "builder class";
+
+ /**
+ * Static attribute for builder interface.
+ */
+ public static final String BUILDER_INTERFACE = "builder interface";
+
+ /**
+ * Static attribute for bits.
+ */
+ public static final String BITS = "bits";
+
+ /**
+ * Static attribute for YANG.
+ */
+ public static final String YANG = "yang";
+
+ /**
+ * Static attribute for error msg.
+ */
+ public static final String ERROR_MSG_FOR_GEN_CODE = "please check whether " +
+ "multiple yang" + " files has same module/submodule" +
+ " \"name\" and \"namespace\"" + "or You may have generated code of" +
+ " previous build present in your directory.";
+
+ /**
+ * Static attribute for error msg.
+ */
+ public static final String ERROR_MSG_JAVA_IDENTITY = "Expected java " +
+ "identity instance node ";
+
+ /**
+ * Static attribute for error msg.
+ */
+ public static final String ERROR_MSG_FOR_AUGMENT_LINKING = "Augment " +
+ "linking does not support linking when path contains " +
+ "notification/grouping for path: ";
+
+ /**
+ * Static attribute for error msg.
+ */
+ public static final String VERSION_ERROR = "Onos-yang-tools " +
+ "does not support maven version below \"3.3.9\" , your current " +
+ "version is ";
+
+ /**
+ * Static attribute for in.
+ */
+ public static final String IN = " in ";
+
+ /**
+ * Static attribute for at.
+ */
+ public static final String AT = " at ";
+
+ /**
+ * Static param for processChildNodesSubTreeFiltering.
+ */
+ public static final String PROCESS_CHILD_NODE_STF_PARAM =
+ "processChildNodesSubTreeFiltering";
+
+ /**
+ * Static param for processLeafListSubTreeFiltering.
+ */
+ public static final String PROCESS_LEAF_LIST_STF_PARAM =
+ "processLeafListSubTreeFiltering";
+ /**
+ * Static param for processLeafListSubTreeFiltering.
+ */
+ public static final String PROCESS_LEAF_STF_PARAM =
+ "processLeafSubtreeFiltering";
+ /**
+ * Static param for subTreeFilteringResultBuilder.
+ */
+ public static final String STF_BUILDER_PARAM =
+ "subTreeFilteringResultBuilder";
+
+ /**
+ * Static param for isAnySelectOrContainmentNode.
+ */
+ public static final String SELECT_OR_CONTAINMENT_NODE_PARAM =
+ "isAnySelectOrContainmentNode";
+ /**
+ * Static param for isSelectAllSchemaChild.
+ */
+ public static final String SELECT_ALL_CHILD_SCHEMA_PARAM =
+ "isSelectAllSchemaChild";
+
+ //File type extension for java classes.
+ public static final String JAVA_FILE_EXTENSION = ".java";
+
+ /**
+ * Static param for typedef.
+ */
+ public static final String HOLDER_TYPE_DEF = "typedef";
+
+ /**
+ * Static param for last.
+ */
+ public static final String LAST = "last";
+
+ // No instantiation.
+ private UtilConstants() {
+ }
+
+ /**
+ * Represents operation type.
+ */
+ public enum Operation {
+ /**
+ * Represents add operation.
+ */
+ ADD,
+
+ /**
+ * Represents remove operation.
+ */
+ REMOVE
+ }
+}
diff --git a/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/YangPluginConfig.java b/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/YangPluginConfig.java
new file mode 100644
index 0000000..eec9301
--- /dev/null
+++ b/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/YangPluginConfig.java
@@ -0,0 +1,154 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.utils.io;
+
+import org.onosproject.yang.compiler.utils.io.impl.YangFileScanner;
+
+import javax.tools.JavaCompiler;
+import javax.tools.StandardJavaFileManager;
+import javax.tools.ToolProvider;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Representation of plugin configurations required for YANG utils.
+ */
+public final class YangPluginConfig {
+
+ /**
+ * Contains the code generation directory.
+ */
+ private String codeGenDir;
+
+ /**
+ * Contains information of naming conflicts that can be resolved.
+ */
+ private YangToJavaNamingConflictUtil conflictResolver;
+
+ /**
+ * Java code generation is for sbi.
+ */
+ private String codeGenerateForSbi;
+
+ /**
+ * Path to generate the resource files, which will be used by the plugin
+ * to add it as part of the resource, implicitly by the path location, or
+ * some explicit way to add to bundle.
+ */
+ private String resourceGenDir;
+
+ /**
+ * Creates an object for YANG plugin config.
+ */
+ public YangPluginConfig() {
+ }
+
+ /**
+ * Returns the string for code generation.
+ *
+ * @return returns the string for code generation.
+ */
+ public String getCodeGenerateForSbi() {
+ return codeGenerateForSbi;
+ }
+
+ /**
+ * Sets the string sbi or nbi for code generation.
+ *
+ * @param codeGenerateForSbi generation is for sbi
+ */
+ public void setCodeGenerateForSbi(String codeGenerateForSbi) {
+ this.codeGenerateForSbi = codeGenerateForSbi;
+ }
+
+ /**
+ * Sets the path of the java code where it has to be generated.
+ *
+ * @param codeGenDir path of the directory
+ */
+ public void setCodeGenDir(String codeGenDir) {
+ this.codeGenDir = codeGenDir;
+ }
+
+ /**
+ * Returns the code generation directory path.
+ *
+ * @return code generation directory
+ */
+ public String getCodeGenDir() {
+ return codeGenDir;
+ }
+
+ /**
+ * Sets the object.
+ *
+ * @param conflictResolver object of the class
+ */
+ public void setConflictResolver(YangToJavaNamingConflictUtil conflictResolver) {
+ this.conflictResolver = conflictResolver;
+ }
+
+ /**
+ * Returns the object.
+ *
+ * @return object of the class
+ */
+ public YangToJavaNamingConflictUtil getConflictResolver() {
+ return conflictResolver;
+ }
+
+
+ public String resourceGenDir() {
+ return resourceGenDir;
+ }
+
+ public void resourceGenDir(String resourceGenDir) {
+ this.resourceGenDir = resourceGenDir;
+ }
+
+ /**
+ * TODO: delete me, it is not part of config, it needs to be updated for
+ * test scripts
+ * Compiles the generated code for unit tests.
+ *
+ * @param dir1 directory path
+ * @throws IOException when generated code has compilation errors.
+ */
+ @SuppressWarnings("unchecked")
+ public static void compileCode(String dir1) throws IOException {
+ String classpath = System.getProperty("java.class.path");
+ List<String> optionList = new ArrayList<>();
+ optionList.addAll(Arrays.asList("-classpath", classpath));
+
+ List<String> files = YangFileScanner.getJavaFiles(dir1);
+ JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
+ StandardJavaFileManager manager = compiler.getStandardFileManager(null, null, null);
+ Iterable fileObjects = manager.getJavaFileObjectsFromStrings(files);
+ JavaCompiler.CompilationTask task = compiler.getTask(null, null,
+ null, optionList, null,
+ fileObjects);
+
+ boolean failOnError = !task.call();
+ manager.close();
+ if (failOnError) {
+ throw new IOException("Yang Error : compilation errors in " +
+ "generated code.");
+ }
+ }
+}
diff --git a/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/YangToJavaNamingConflictUtil.java b/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/YangToJavaNamingConflictUtil.java
new file mode 100644
index 0000000..af966a1
--- /dev/null
+++ b/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/YangToJavaNamingConflictUtil.java
@@ -0,0 +1,121 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.utils.io;
+
+/**
+ * Representation of YANG to java naming conflict resolver util.
+ */
+public final class YangToJavaNamingConflictUtil {
+
+ /**
+ * Contains the replacement value for a period.
+ */
+ private String replacementForPeriodInIdentifier;
+
+ /**
+ * Contains the replacement value for an underscore.
+ */
+ private String replacementForUnderscoreInIdentifier;
+
+ /**
+ * Contains the replacement value for a hyphen.
+ */
+ private String replacementForHyphenInIdentifier;
+
+ /**
+ * Contains the prefix value for adding with the identifier.
+ */
+ private String prefixForIdentifier;
+
+ /**
+ * Creates an object for YANG to java naming conflict util.
+ */
+ public YangToJavaNamingConflictUtil() {
+ }
+
+ /**
+ * Sets the replacement value for a period.
+ *
+ * @param periodReplacement replacement value for period
+ */
+ public void setReplacementForPeriod(String periodReplacement) {
+ replacementForPeriodInIdentifier = periodReplacement;
+ }
+
+ /**
+ * Returns the replaced period value.
+ *
+ * @return replaced period
+ */
+ public String getReplacementForPeriod() {
+ return replacementForPeriodInIdentifier;
+ }
+
+ /**
+ * Sets the replacement value for a hyphen.
+ *
+ * @param hyphenReplacement replacement value for hyphen
+ */
+ public void setReplacementForHyphen(String hyphenReplacement) {
+ replacementForHyphenInIdentifier = hyphenReplacement;
+ }
+
+ /**
+ * Returns the replaced hyphen value.
+ *
+ * @return replaced hyphen
+ */
+ public String getReplacementForHyphen() {
+ return replacementForHyphenInIdentifier;
+ }
+
+ /**
+ * Sets the replacement value for an underscore.
+ *
+ * @param underscoreReplacement replacement value for underscore
+ */
+ public void setReplacementForUnderscore(String underscoreReplacement) {
+ replacementForUnderscoreInIdentifier = underscoreReplacement;
+ }
+
+ /**
+ * Returns the replaced underscore value.
+ *
+ * @return replaced underscore
+ */
+ public String getReplacementForUnderscore() {
+ return replacementForUnderscoreInIdentifier;
+ }
+
+ /**
+ * Sets the prefix value for adding with the identifier.
+ *
+ * @param prefix prefix for identifier
+ */
+ public void setPrefixForIdentifier(String prefix) {
+ prefixForIdentifier = prefix;
+ }
+
+ /**
+ * Returns the prefix for identifier.
+ *
+ * @return prefix for identifier
+ */
+ public String getPrefixForIdentifier() {
+ return prefixForIdentifier;
+ }
+}
diff --git a/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/impl/CopyrightHeader.java b/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/impl/CopyrightHeader.java
new file mode 100644
index 0000000..2ec2fd7
--- /dev/null
+++ b/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/impl/CopyrightHeader.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.utils.io.impl;
+
+import org.onosproject.yang.compiler.utils.UtilConstants;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import static java.util.Calendar.YEAR;
+import static java.util.Calendar.getInstance;
+
+/**
+ * Represents the license header for the generated files.
+ */
+public final class CopyrightHeader {
+
+ private static final int EOF = -1;
+ private static final String COPYRIGHT_HEADER_FILE = "CopyrightHeader.txt";
+ private static final String COPYRIGHTS_FIRST_LINE = "/*\n * Copyright " + getInstance().get(YEAR)
+ + "-present Open Networking Laboratory\n";
+ private static final String TEMP_FILE = "temp.txt";
+
+ /**
+ * Creates an instance of copyright header.
+ */
+ private CopyrightHeader() {
+ }
+
+ /**
+ * parses Copyright to the temporary file.
+ *
+ * @return string of file.
+ * @throws IOException when fails to get the copyright header
+ */
+ public static String parseCopyrightHeader() throws IOException {
+
+ File temp = new File(TEMP_FILE);
+
+ try {
+ InputStream stream = CopyrightHeader.class.getClassLoader()
+ .getResourceAsStream(COPYRIGHT_HEADER_FILE);
+ OutputStream out = new FileOutputStream(temp);
+
+ int index;
+ out.write(COPYRIGHTS_FIRST_LINE.getBytes());
+ while ((index = stream.read()) != EOF) {
+ out.write(index);
+ }
+ out.close();
+ stream.close();
+ return getStringFileContent(temp);
+ } catch (IOException e) {
+ throw new IOException("failed to parse the Copyright header");
+ } finally {
+ temp.delete();
+ }
+ }
+
+ /**
+ * Converts it to string.
+ *
+ * @param toAppend file to be converted.
+ * @return string of file.
+ * @throws IOException when fails to convert to string
+ */
+ private static String getStringFileContent(File toAppend) throws IOException {
+
+ FileReader fileReader = new FileReader(toAppend);
+ BufferedReader bufferReader = new BufferedReader(fileReader);
+ try {
+ StringBuilder stringBuilder = new StringBuilder();
+ String line = bufferReader.readLine();
+
+ while (line != null) {
+ stringBuilder.append(line);
+ stringBuilder.append(UtilConstants.NEW_LINE);
+ line = bufferReader.readLine();
+ }
+ return stringBuilder.toString();
+ } finally {
+ fileReader.close();
+ bufferReader.close();
+ }
+ }
+}
diff --git a/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/impl/FileSystemUtil.java b/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/impl/FileSystemUtil.java
new file mode 100644
index 0000000..e664728
--- /dev/null
+++ b/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/impl/FileSystemUtil.java
@@ -0,0 +1,171 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.utils.io.impl;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.onosproject.yang.compiler.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EMPTY_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.FOUR_SPACE_INDENTATION;
+import static org.onosproject.yang.compiler.utils.UtilConstants.MULTIPLE_NEW_LINE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.NEW_LINE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SPACE;
+
+/**
+ * Represents utility to handle file system operations.
+ */
+public final class FileSystemUtil {
+
+ /**
+ * Creates an instance of file system util.
+ */
+ private FileSystemUtil() {
+ }
+
+ /**
+ * Reads the contents from source file and append its contents to append file.
+ *
+ * @param toAppend destination file in which the contents of source file is appended
+ * @param srcFile source file from which data is read and added to to append file
+ * @throws IOException any IO errors
+ */
+ public static void appendFileContents(File toAppend, File srcFile)
+ throws IOException {
+ updateFileHandle(srcFile, readAppendFile(toAppend.toString(),
+ FOUR_SPACE_INDENTATION), false);
+ }
+
+ /**
+ * Reads file and convert it to string.
+ *
+ * @param toAppend file to be converted
+ * @param spaces spaces to be appended
+ * @return string of file
+ * @throws IOException when fails to convert to string
+ */
+ public static String readAppendFile(String toAppend, String spaces)
+ throws IOException {
+
+ FileReader fileReader = new FileReader(toAppend);
+ BufferedReader bufferReader = new BufferedReader(fileReader);
+ try {
+ StringBuilder stringBuilder = new StringBuilder();
+ String line = bufferReader.readLine();
+
+ while (line != null) {
+ switch (line) {
+ case SPACE:
+ case EMPTY_STRING:
+ case EIGHT_SPACE_INDENTATION:
+ case MULTIPLE_NEW_LINE:
+ stringBuilder.append(NEW_LINE);
+ break;
+ case FOUR_SPACE_INDENTATION:
+ stringBuilder.append(EMPTY_STRING);
+ break;
+ default:
+ String append = spaces + line;
+ stringBuilder.append(append);
+ stringBuilder.append(NEW_LINE);
+ break;
+ }
+ line = bufferReader.readLine();
+ }
+ return stringBuilder.toString();
+ } finally {
+ fileReader.close();
+ bufferReader.close();
+ }
+ }
+
+ /**
+ * Updates the generated file handle.
+ *
+ * @param inputFile input file
+ * @param contentTobeAdded content to be appended to the file
+ * @param isClose when close of file is called.
+ * @throws IOException if the named file exists but is a directory rather than a regular file, does not exist but
+ * cannot be created, or cannot be opened for any other reason
+ */
+ public static void updateFileHandle(File inputFile, String contentTobeAdded,
+ boolean isClose)
+ throws IOException {
+
+ List<FileWriter> fileWriterStore = new ArrayList<>();
+
+ FileWriter fileWriter = new FileWriter(inputFile, true);
+ fileWriterStore.add(fileWriter);
+ PrintWriter outputPrintWriter = new PrintWriter(fileWriter, true);
+ if (!isClose) {
+ outputPrintWriter.write(contentTobeAdded);
+ outputPrintWriter.flush();
+ outputPrintWriter.close();
+ } else {
+ for (FileWriter curWriter : fileWriterStore) {
+ curWriter.flush();
+ curWriter.close();
+ }
+ }
+ }
+
+ /**
+ * Closes the file handle for temporary file.
+ *
+ * @param file file to be closed
+ * @param toBeDeleted flag to indicate if file needs to be deleted
+ * @throws IOException when failed to close the file handle
+ */
+ public static void closeFile(File file, boolean toBeDeleted)
+ throws IOException {
+
+ if (file != null) {
+ updateFileHandle(file, null, true);
+ if (toBeDeleted) {
+ boolean deleted = file.delete();
+ if (!deleted) {
+ throw new IOException("Failed to delete temporary file " + file.getName());
+ }
+ }
+ }
+ }
+
+ /**
+ * Closes the file handle for temporary file with file deletion.
+ *
+ * @param file file to be closed
+ * @throws IOException when failed to close the file handle
+ */
+ public static void closeFile(File file) throws IOException {
+
+ if (file != null) {
+ updateFileHandle(file, null, true);
+ boolean deleted = file.delete();
+ if (!deleted) {
+ throw new IOException("Failed to delete temporary file " +
+ file.getName());
+ }
+ }
+ }
+ // TODO follow coding guidelines in remaining of this file.
+}
diff --git a/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/impl/JavaDocGen.java b/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/impl/JavaDocGen.java
new file mode 100644
index 0000000..89ab368
--- /dev/null
+++ b/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/impl/JavaDocGen.java
@@ -0,0 +1,851 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.utils.io.impl;
+
+import org.onosproject.yang.compiler.utils.UtilConstants;
+
+import static org.onosproject.yang.compiler.utils.UtilConstants.*;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.*;
+
+/**
+ * Represents javadoc for the generated classes.
+ */
+public final class JavaDocGen {
+
+ /**
+ * Creates an instance of java doc gen.
+ */
+ private JavaDocGen() {
+ }
+
+ /**
+ * Returns java docs.
+ *
+ * @param type java doc type
+ * @param name name of the YangNode
+ * @param isList is list attribute
+ * @param compilerAnnotation compiler annotations for user defined data type
+ * @return javaDocs.
+ */
+ public static String getJavaDoc(JavaDocType type, String name, boolean isList,
+ String compilerAnnotation) {
+
+ name = getSmallCase(name);
+ switch (type) {
+ case DEFAULT_CLASS: {
+ return generateForClass(name, isList);
+ }
+ case BUILDER_CLASS: {
+ return generateForBuilderClass(name);
+ }
+ case OPERATION_CLASS: {
+ return generateForOpParamClass(name);
+ }
+ case OPERATION_BUILDER_CLASS: {
+ return generateForOpParamClass(name);
+ }
+ case INTERFACE: {
+ return generateForInterface(name);
+ }
+ case BUILDER_INTERFACE: {
+ return generateForBuilderInterface(name);
+ }
+ case PACKAGE_INFO: {
+ return generateForPackage(name, isList);
+ }
+ case GETTER_METHOD: {
+ return generateForGetters(name, isList, compilerAnnotation);
+ }
+ case TYPE_DEF_SETTER_METHOD: {
+ return generateForTypeDefSetter(name);
+ }
+ case SETTER_METHOD: {
+ return generateForSetters(name, isList, compilerAnnotation);
+ }
+ case MANAGER_SETTER_METHOD: {
+ return generateForManagerSetters(name, isList, compilerAnnotation);
+ }
+ case OF_METHOD: {
+ return generateForOf(name);
+ }
+ case DEFAULT_CONSTRUCTOR: {
+ return generateForDefaultConstructors(name);
+ }
+ case BUILD_METHOD: {
+ return generateForBuild(name);
+ }
+ case TYPE_CONSTRUCTOR: {
+ return generateForTypeConstructor(name);
+ }
+ case FROM_METHOD: {
+ return generateForFromString(name);
+ }
+ case ENUM_CLASS: {
+ return generateForEnum(name);
+ }
+ case ENUM_ATTRIBUTE: {
+ return generateForEnumAttr(name);
+ }
+ case RPC_INTERFACE: {
+ return generateForRpcService(name);
+ }
+ case RPC_MANAGER: {
+ return generateForClass(name, false);
+ }
+ case EVENT: {
+ return generateForEvent(name);
+ }
+ case EVENT_LISTENER: {
+ return generateForEventListener(name);
+ }
+ case EVENT_SUBJECT_CLASS: {
+ return generateForClass(name, false);
+ }
+ case ADD_TO_LIST: {
+ return generateForAddToList(name, compilerAnnotation);
+ }
+ default: {
+ return generateForConstructors(name);
+ }
+ }
+ }
+
+ /**
+ * Generates javaDocs for enum's attributes.
+ *
+ * @param name attribute name
+ * @return javaDocs
+ */
+ private static String generateForEnumAttr(String name) {
+ return getJavaDocForClass(name, ENUM_ATTRIBUTE_JAVADOC,
+ FOUR_SPACE_INDENTATION);
+ }
+
+ /**
+ * Generates javaDocs for inner class enum's attributes.
+ *
+ * @param name attribute name
+ * @return javaDocs
+ */
+ public static String enumJavaDocForInnerClass(String name) {
+ return getJavaDocForClass(name, ENUM_ATTRIBUTE_JAVADOC,
+ EIGHT_SPACE_INDENTATION);
+ }
+
+ /**
+ * Generates javaDocs for rpc method.
+ *
+ * @param rpcName name of the rpc
+ * @param inputName name of input
+ * @param outputName name of output
+ * @return javaDocs of rpc method
+ */
+ public static String generateJavaDocForRpc(String rpcName, String inputName,
+ String outputName) {
+
+ String javadoc = getJavaDocStartLine(rpcName, JAVA_DOC_RPC) +
+ getJavaDocEmptyAsteriskLine();
+ if (!inputName.equals(EMPTY_STRING)) {
+ javadoc = javadoc + getInputString(inputName, rpcName);
+ }
+ if (!outputName.equals(VOID)) {
+ javadoc = javadoc + getOutputString(getSmallCase(outputName),
+ rpcName);
+ }
+ return javadoc + getJavaDocEndLine();
+ }
+
+ /**
+ * Returns output string of rpc.
+ *
+ * @param outputName name of output
+ * @param rpcName name of rpc
+ * @return javaDocs for output string of rpc
+ */
+ private static String getOutputString(String outputName, String rpcName) {
+ return FOUR_SPACE_INDENTATION + JAVA_DOC_RETURN + outputName + SPACE +
+ RPC_OUTPUT_STRING + rpcName + NEW_LINE;
+ }
+
+ /**
+ * Returns input string of rpc.
+ *
+ * @param inputName name of input
+ * @param rpcName name of rpc
+ * @return javaDocs for input string of rpc
+ */
+ private static String getInputString(String inputName, String rpcName) {
+ if (inputName.isEmpty()) {
+ return null;
+ } else {
+ return FOUR_SPACE_INDENTATION + JAVA_DOC_PARAM + inputName +
+ SPACE + RPC_INPUT_STRING + rpcName + NEW_LINE;
+ }
+ }
+
+ /**
+ * Generates javaDoc for the interface.
+ *
+ * @param interfaceName interface name
+ * @return javaDocs
+ */
+ private static String generateForRpcService(String interfaceName) {
+ return getJavaDocForClass(interfaceName, INTERFACE_JAVA_DOC, EMPTY_STRING);
+ }
+
+ /**
+ * Generates javaDoc for the event.
+ *
+ * @param name event class name
+ * @return javaDocs
+ */
+ private static String generateForEvent(String name) {
+ return getJavaDocForClass(name, EVENT_JAVA_DOC, EMPTY_STRING);
+ }
+
+ /**
+ * Generates javaDoc for the event listener.
+ *
+ * @param name event class name
+ * @return javaDocs
+ */
+ private static String generateForEventListener(String name) {
+ return getJavaDocForClass(name, EVENT_LISTENER_JAVA_DOC, EMPTY_STRING);
+ }
+
+ /**
+ * Generates javaDocs for getter method.
+ *
+ * @param attribute attribute
+ * @param isList is list attribute
+ * @param compilerAnnotation compiler annotation
+ * @return javaDocs
+ */
+ private static String generateForGetters(String attribute, boolean isList,
+ String compilerAnnotation) {
+
+ String getter = getJavaDocStartLine(attribute, JAVA_DOC_GETTERS) +
+ getJavaDocEmptyAsteriskLine() +
+ FOUR_SPACE_INDENTATION + JAVA_DOC_RETURN + attribute + SPACE;
+
+ getter = getParamForAnnotation(getter, compilerAnnotation, isList) +
+ attribute + NEW_LINE + getJavaDocEndLine();
+ return getter;
+ }
+
+ /**
+ * Generates javaDocs for setter method.
+ *
+ * @param attribute attribute
+ * @param isList is list attribute
+ * @param compilerAnnotation compiler annotation
+ * @return javaDocs
+ */
+ private static String generateForSetters(String attribute, boolean isList,
+ String compilerAnnotation) {
+
+ String setter = getJavaDocStartLine(attribute, JAVA_DOC_SETTERS) +
+ getJavaDocEmptyAsteriskLine() +
+ FOUR_SPACE_INDENTATION + JAVA_DOC_PARAM + attribute + SPACE;
+ setter = getParamForAnnotation(setter, compilerAnnotation, isList) +
+ attribute + NEW_LINE + getJavaDocReturnLine(attribute)
+ + getJavaDocEndLine();
+ return setter;
+ }
+
+ /**
+ * Generates javaDocs for setter method.
+ *
+ * @param attribute attribute
+ * @param isList is list attribute
+ * @param compilerAnnotation compiler annotation
+ * @return javaDocs
+ */
+ private static String generateForManagerSetters(String attribute, boolean isList,
+ String compilerAnnotation) {
+ String setter = getJavaDocStartLine(attribute, JAVA_DOC_MANAGER_SETTERS) +
+ getJavaDocEmptyAsteriskLine() +
+ FOUR_SPACE_INDENTATION + JAVA_DOC_PARAM + attribute + SPACE;
+ setter = getParamForAnnotation(setter, compilerAnnotation, isList) +
+ attribute + NEW_LINE + getJavaDocEndLine();
+ return setter;
+ }
+
+ private static String getParamForAnnotation(
+ String setter, String compilerAnnotation, boolean isList) {
+ String attributeParam;
+ if (compilerAnnotation != null) {
+ compilerAnnotation = compilerAnnotation.toLowerCase();
+ compilerAnnotation = getCapitalCase(compilerAnnotation);
+ switch (compilerAnnotation) {
+ case QUEUE: {
+ attributeParam = QUEUE.toLowerCase() + SPACE + OF + SPACE;
+ setter = setter + attributeParam;
+ break;
+ }
+ case SET: {
+ attributeParam = SET.toLowerCase() + SPACE + OF + SPACE;
+ setter = setter + attributeParam;
+ break;
+ }
+ case LIST: {
+ attributeParam = LIST.toLowerCase() + SPACE + OF + SPACE;
+ setter = setter + attributeParam;
+ break;
+ }
+ case MAP:
+ attributeParam = MAP.toLowerCase() + SPACE + OF + SPACE;
+ setter = setter + attributeParam;
+ break;
+ default: {
+
+ }
+ }
+ } else if (isList) {
+ attributeParam = LIST.toLowerCase() + SPACE + OF + SPACE;
+ setter = setter + attributeParam;
+ } else {
+ setter = setter + VALUE + SPACE + OF + SPACE;
+ }
+ return setter;
+ }
+
+ /**
+ * Generates javaDocs for of method.
+ *
+ * @param attribute attribute
+ * @return javaDocs
+ */
+ private static String generateForOf(String attribute) {
+ return getJavaDocStartLine(attribute, JAVA_DOC_OF) +
+ getJavaDocEmptyAsteriskLine() +
+ getJavaDocParamLine(attribute, VALUE) +
+ getJavaDocReturnLine(attribute) +
+ getJavaDocEndLine();
+ }
+
+ /**
+ * Generates javaDocs for from method.
+ *
+ * @param attribute attribute
+ * @return javaDocs
+ */
+ private static String generateForFromString(String attribute) {
+ return getJavaDocStartLine(attribute, JAVA_DOC_OF
+ + attribute + SPACE + FROM_STRING_METHOD_NAME + SPACE + INPUT +
+ SPACE + STRING_DATA_TYPE + SPACE) +
+ getJavaDocEmptyAsteriskLine() +
+ getJavaDocParamLine(INPUT + SPACE + STRING_DATA_TYPE,
+ FROM_STRING_PARAM_NAME) +
+ getJavaDocReturnLine(attribute) +
+ getJavaDocEndLine();
+ }
+
+ /**
+ * Generates javaDocs for typedef setter method.
+ *
+ * @param attribute attribute
+ * @return javaDocs
+ */
+ private static String generateForTypeDefSetter(String attribute) {
+ return getJavaDocStartLine(attribute, JAVA_DOC_SETTERS_COMMON) +
+ getJavaDocEmptyAsteriskLine() +
+ getJavaDocParamLine(attribute, VALUE) +
+ getJavaDocEndLine();
+ }
+
+ /**
+ * Generates javaDocs for the impl class.
+ *
+ * @param className class name
+ * @param isForDefaultClass if javadoc is for default class
+ * @return javaDocs
+ */
+ private static String generateForClass(String className, boolean isForDefaultClass) {
+ return getJavaDocForDefaultClass(className, IMPL_CLASS_JAVA_DOC,
+ EMPTY_STRING, isForDefaultClass);
+ }
+
+ private static String addFlagJavaDoc() {
+ return " *\n" +
+ " * <p>\n" +
+ " * valueLeafFlags identify the leafs whose value are " +
+ "explicitly set\n" +
+ " * Applicable in protocol edit and query operation.\n" +
+ " * </p>\n" +
+ " *\n" +
+ " * <p>\n" +
+ " * selectLeafFlags identify the leafs to be selected, in" +
+ " a query operation.\n" +
+ " * </p>\n" +
+ " *\n" +
+ " * <p>\n" +
+ " * Operation type specify the node specific operation in" +
+ " protocols like NETCONF.\n" +
+ " * Applicable in protocol edit operation, not applicable" +
+ " in query operation.\n" +
+ " * </p>\n";
+ }
+
+ /**
+ * Generates javaDocs for enum.
+ *
+ * @param className enum class name
+ * @return javaDocs
+ */
+ private static String generateForEnum(String className) {
+ return getJavaDocForClass(className, ENUM_CLASS_JAVADOC, EMPTY_STRING);
+ }
+
+ /**
+ * Generates javaDocs for the builder class.
+ *
+ * @param className class name
+ * @return javaDocs
+ */
+ private static String generateForBuilderClass(String className) {
+ return getJavaDocForClass(className, BUILDER_CLASS_JAVA_DOC,
+ EMPTY_STRING);
+ }
+
+ /**
+ * Generates javaDocs for the op param class.
+ *
+ * @param className class name
+ * @return javaDocs
+ */
+ private static String generateForOpParamClass(String className) {
+ return getJavaDocForClass(className, OP_PARAM_JAVA_DOC,
+ EMPTY_STRING);
+ }
+
+ /**
+ * Generates javaDoc for the interface.
+ *
+ * @param interfaceName interface name
+ * @return javaDocs
+ */
+ private static String generateForInterface(String interfaceName) {
+ return getJavaDocForClass(interfaceName, INTERFACE_JAVA_DOC,
+ EMPTY_STRING);
+ }
+
+ /**
+ * Generates javaDoc for the builder interface.
+ *
+ * @param builderForName builder for name
+ * @return javaDocs
+ */
+ private static String generateForBuilderInterface(String builderForName) {
+ return getJavaDocForClass(builderForName, BUILDER_INTERFACE_JAVA_DOC,
+ EMPTY_STRING);
+ }
+
+ /**
+ * Generates javaDocs for package-info.
+ *
+ * @param packageName package name
+ * @param isChildNode is it child node
+ * @return javaDocs
+ */
+ private static String generateForPackage(String packageName, boolean isChildNode) {
+ if (isChildNode) {
+ return getJavaDocForClass(
+ packageName + PACKAGE_INFO_JAVADOC_OF_CHILD,
+ PACKAGE_INFO_JAVADOC, EMPTY_STRING);
+ }
+ return getJavaDocForClass(packageName, PACKAGE_INFO_JAVADOC, EMPTY_STRING);
+ }
+
+ /**
+ * Generates javaDocs for default constructor.
+ *
+ * @param className class name
+ * @return javaDocs
+ */
+ private static String generateForDefaultConstructors(String className) {
+ return getJavaDocStartLine(className, JAVA_DOC_CONSTRUCTOR) +
+ getJavaDocEndLine();
+ }
+
+ /**
+ * Generates javaDocs for constructor with parameters.
+ *
+ * @param className class name
+ * @return javaDocs
+ */
+ private static String generateForConstructors(String className) {
+ return getJavaDocStartLine(className, JAVA_DOC_CONSTRUCTOR) +
+ getJavaDocEmptyAsteriskLine() +
+ getJavaDocParamLine(BUILDER_OBJECT + className,
+ BUILDER_LOWER_CASE + OBJECT) +
+ getJavaDocEndLine();
+ }
+
+ /**
+ * Generates javaDocs for build.
+ *
+ * @param buildName builder name
+ * @return javaDocs
+ */
+ private static String generateForBuild(String buildName) {
+ return getJavaDocStartLine(buildName, JAVA_DOC_BUILD) +
+ getJavaDocEmptyAsteriskLine() +
+ getJavaDocReturnLine(buildName) +
+ getJavaDocEndLine();
+ }
+
+ /**
+ * Generates javaDocs for type constructor.
+ *
+ * @param attribute attribute string
+ * @return javaDocs for type constructor
+ */
+ private static String generateForTypeConstructor(String attribute) {
+ return getJavaDocStartLine(attribute,
+ JAVA_DOC_CONSTRUCTOR) +
+ getJavaDocEmptyAsteriskLine() +
+ getJavaDocParamLine(attribute, attribute) +
+ getJavaDocEndLine();
+ }
+
+ /**
+ * Generates javaDocs for add augmentation method.
+ *
+ * @param name builder class name
+ * @return javaDocs
+ */
+ public static String generateForAddAugmentation(String name) {
+ return getJavaDocStartLine(YANG_AUGMENTED_INFO_LOWER_CASE,
+ JAVA_DOC_SETTERS_COMMON) +
+ getJavaDocEmptyAsteriskLine() +
+ getJavaDocParamLine(YANG_AUGMENTED_INFO_LOWER_CASE, VALUE) +
+ getJavaDocParamLine(YANG_AUGMENTED_INFO_LOWER_CASE, CLASS +
+ OBJECT_STRING) +
+ getJavaDocReturnLine(name) + getJavaDocEndLine();
+ }
+
+ /**
+ * Returns javadoc for get augmentation method.
+ *
+ * @return javadoc for get augmentation method
+ */
+ public static String generateForGetAugmentation() {
+ return NEW_LINE + getJavaDocStartLine(YANG_AUGMENTED_INFO_LOWER_CASE,
+ JAVA_DOC_GETTERS) +
+ getJavaDocEmptyAsteriskLine() +
+ getJavaDocParamLine(YANG_AUGMENTED_INFO_LOWER_CASE, CLASS +
+ OBJECT_STRING) +
+ getJavaDocReturnLine(YANG_AUGMENTED_INFO) +
+ getJavaDocEndLine();
+ }
+
+ /**
+ * Returns javadoc for validator method.
+ *
+ * @return javadoc for validator method
+ */
+ public static String generateForValidatorMethod() {
+ return getJavaDocStartLine(VALIDATE_RANGE, JAVA_DOC_FOR_VALIDATOR) +
+ getJavaDocEmptyAsteriskLine() +
+ getJavaDocParamLine(MIN_RANGE, MIN_RANGE) +
+ getJavaDocParamLine(MAX_RANGE, MIN_RANGE) +
+ getJavaDocReturnLine(JAVA_DOC_FOR_VALIDATOR_RETURN) +
+ getJavaDocEndLine();
+ }
+
+ /**
+ * Generates javaDocs for type constructor.
+ *
+ * @param attribute attribute string
+ * @return javaDocs for type constructor
+ */
+ public static String generateForGetMethodWithAttribute(String attribute) {
+ attribute = getSmallCase(attribute);
+ return getJavaDocStartLine(attribute, JAVA_DOC_GETTERS) +
+ getJavaDocEmptyAsteriskLine() +
+ getJavaDocParamLine(attribute, attribute) +
+ getJavaDocReturnLine(attribute) +
+ getJavaDocEndLine();
+ }
+
+ /**
+ * Returns javaDocs for add to list method.
+ *
+ * @param attribute attribute
+ * @param annotation compile annotation
+ * @return javaDocs
+ */
+ private static String generateForAddToList(String attribute, String annotation) {
+ StringBuilder javadoc = new StringBuilder();
+ javadoc.append(getJavaDocStartLine(attribute, JAVA_DOC_ADD_TO_LIST))
+ .append(getJavaDocEmptyAsteriskLine());
+ if (annotation != null) {
+ annotation = annotation.toLowerCase();
+ annotation = getCapitalCase(annotation);
+ switch (annotation) {
+ case MAP:
+ javadoc.append(getJavaDocParamLine(
+ attribute, attribute + KEYS)).append(getJavaDocParamLine(
+ attribute, attribute + VALUE_CAPS));
+ break;
+ default:
+ javadoc.append(getJavaDocParamLine(
+ attribute, ADD_STRING + TO_CAPS));
+ break;
+ }
+ }
+ javadoc.append(getJavaDocParamLine(
+ attribute, ADD_STRING + TO_CAPS))
+ .append(getJavaDocReturnLine(BUILDER_OBJECT + attribute))
+ .append(getJavaDocEndLine());
+ return javadoc.toString();
+ }
+
+ /**
+ * Generates for builder method.
+ *
+ * @param attribute attribute
+ * @return javaDocs
+ */
+ public static String generateForBuilderMethod(String attribute) {
+ return getJavaDocStartLine(attribute + BUILDER, JAVA_DOC_GETTERS) +
+ getJavaDocEmptyAsteriskLine() +
+ getJavaDocReturnLine(attribute + BUILDER) +
+ getJavaDocEndLine();
+ }
+
+ /**
+ * Returns class javadoc.
+ *
+ * @param name name of class
+ * @param type type of javadoc
+ * @param indent indentation
+ * @return class javadoc
+ */
+ private static String getJavaDocForClass(String name, String type,
+ String indent) {
+ return NEW_LINE + indent + JAVA_DOC_FIRST_LINE + indent + type +
+ getSmallCase(name) + PERIOD + NEW_LINE + indent + JAVA_DOC_END_LINE;
+ }
+
+ /**
+ * Returns class javadoc.
+ *
+ * @param name name of class
+ * @param type type of javadoc
+ * @param indent indentation
+ * @param isForDefaultClass if javadoc is generated for default class
+ * @return class javadoc
+ */
+ private static String getJavaDocForDefaultClass(String name, String type,
+ String indent, boolean isForDefaultClass) {
+ String append = addFlagJavaDoc();
+ if (!isForDefaultClass) {
+ append = EMPTY_STRING;
+ }
+ return NEW_LINE + indent + JAVA_DOC_FIRST_LINE + indent + type +
+ getSmallCase(name) + PERIOD + NEW_LINE + indent + append +
+ JAVA_DOC_END_LINE;
+ }
+
+ /**
+ * Returns javadoc start line.
+ *
+ * @param name name of attribute
+ * @param javaDoc type of javadoc
+ * @return javadoc start line
+ */
+ private static String getJavaDocStartLine(String name, String javaDoc) {
+ return FOUR_SPACE_INDENTATION + JAVA_DOC_FIRST_LINE +
+ FOUR_SPACE_INDENTATION + javaDoc + getSmallCase(name) +
+ PERIOD + NEW_LINE;
+ }
+
+ /**
+ * Returns asterisk line.
+ *
+ * @return asterisk line
+ */
+ private static String getJavaDocEmptyAsteriskLine() {
+ return FOUR_SPACE_INDENTATION + NEW_LINE_ASTERISK;
+ }
+
+ /**
+ * Returns javadoc param line.
+ *
+ * @param name name of attribute
+ * @return javadoc param line
+ */
+ private static String getJavaDocParamLine(String name, String paraName) {
+ return FOUR_SPACE_INDENTATION + JAVA_DOC_PARAM +
+ getSmallCase(paraName) + SPACE + VALUE + SPACE + OF + SPACE +
+ getSmallCase(name) + NEW_LINE;
+ }
+
+ /**
+ * Returns javadoc return line.
+ *
+ * @param name name of attribute
+ * @return javadoc return line
+ */
+ private static String getJavaDocReturnLine(String name) {
+ return FOUR_SPACE_INDENTATION + JAVA_DOC_RETURN + getSmallCase(name)
+ + NEW_LINE;
+ }
+
+ /**
+ * Returns javadoc end line.
+ *
+ * @return javadoc end line
+ */
+ private static String getJavaDocEndLine() {
+ return FOUR_SPACE_INDENTATION + JAVA_DOC_END_LINE;
+ }
+
+
+ /**
+ * JavaDocs types.
+ */
+ public enum JavaDocType {
+
+ /**
+ * For class.
+ */
+ DEFAULT_CLASS,
+
+ /**
+ * For builder class.
+ */
+ BUILDER_CLASS,
+
+ /**
+ * For interface.
+ */
+ INTERFACE,
+
+ /**
+ * For builder interface.
+ */
+ BUILDER_INTERFACE,
+
+ /**
+ * For package-info.
+ */
+ PACKAGE_INFO,
+
+ /**
+ * For getters.
+ */
+ GETTER_METHOD,
+
+ /**
+ * For rpc service.
+ */
+ RPC_INTERFACE,
+
+ /**
+ * For rpc manager.
+ */
+ RPC_MANAGER,
+
+ /**
+ * For event.
+ */
+ EVENT,
+
+ /**
+ * For event listener.
+ */
+ EVENT_LISTENER,
+
+ /**
+ * For setters.
+ */
+ SETTER_METHOD,
+
+ /**
+ * For type def's setters.
+ */
+ TYPE_DEF_SETTER_METHOD,
+
+ /**
+ * For of method.
+ */
+ OF_METHOD,
+
+ /**
+ * For default constructor.
+ */
+ DEFAULT_CONSTRUCTOR,
+
+ /**
+ * For constructor.
+ */
+ CONSTRUCTOR,
+
+ /**
+ * For from method.
+ */
+ FROM_METHOD,
+
+ /**
+ * For type constructor.
+ */
+ TYPE_CONSTRUCTOR,
+
+ /**
+ * For build.
+ */
+ BUILD_METHOD,
+
+ /**
+ * For enum.
+ */
+ ENUM_CLASS,
+
+ /**
+ * For enum's attributes.
+ */
+ ENUM_ATTRIBUTE,
+
+ /**
+ * For manager setters.
+ */
+ MANAGER_SETTER_METHOD,
+
+ /**
+ * For event subject.
+ */
+ EVENT_SUBJECT_CLASS,
+
+ /**
+ * For operation.
+ */
+ OPERATION_CLASS,
+
+ /**
+ * For operation builder.
+ */
+ OPERATION_BUILDER_CLASS,
+
+ /**
+ * For add to list.
+ */
+ ADD_TO_LIST,
+ }
+}
diff --git a/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/impl/YangFileScanner.java b/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/impl/YangFileScanner.java
new file mode 100644
index 0000000..0358e4f
--- /dev/null
+++ b/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/impl/YangFileScanner.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.utils.io.impl;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Stack;
+
+/**
+ * Represents utility for searching the files in a directory.
+ */
+public final class YangFileScanner {
+
+ private static final String JAVA_FILE_EXTENSION = ".java";
+ private static final String YANG_FILE_EXTENSION = ".yang";
+
+ /**
+ * Creates an instance of YANG file scanner.
+ */
+ private YangFileScanner() {
+ }
+
+ /**
+ * Returns the list of java files.
+ *
+ * @param root specified directory
+ * @return list of java files
+ * @throws NullPointerException when no files are there.
+ * @throws IOException when files get deleted while performing the
+ * operations
+ */
+ public static List<String> getJavaFiles(String root) throws IOException {
+ return getFiles(root, JAVA_FILE_EXTENSION);
+ }
+
+ /**
+ * Returns the list of YANG file.
+ *
+ * @param root specified directory
+ * @return list of YANG file information
+ * @throws NullPointerException when no files are there
+ * @throws IOException when files get deleted while performing the
+ * operations
+ */
+ public static List<String> getYangFiles(String root) throws IOException {
+ return getFiles(root, YANG_FILE_EXTENSION);
+ }
+
+ /**
+ * Returns the list of required files.
+ *
+ * @param root specified directory
+ * @param extension file extension
+ * @return list of required files
+ * @throws NullPointerException when no file is there
+ * @throws IOException when files get deleted while performing the operations
+ */
+ private static List<String> getFiles(String root, String extension) throws IOException {
+
+ List<String> store = new LinkedList<>();
+ Stack<String> stack = new Stack<>();
+ stack.push(root);
+ File file;
+ File[] fileList;
+ try {
+ while (!stack.empty()) {
+ root = stack.pop();
+ file = new File(root);
+ fileList = file.listFiles();
+ if ((fileList == null) || (fileList.length == 0)) {
+ continue;
+ }
+ for (File current : fileList) {
+ if (current.isDirectory()) {
+ stack.push(current.toString());
+ } else {
+ String yangFile = current.getCanonicalPath();
+ if (yangFile.endsWith(extension)) {
+ store.add(yangFile);
+ }
+ }
+ }
+ }
+ return store;
+ } catch (IOException e) {
+ throw new IOException("No File found of " + extension + " extension in " + root + " directory.");
+ }
+ }
+}
diff --git a/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/impl/YangIoUtils.java b/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/impl/YangIoUtils.java
new file mode 100644
index 0000000..f284c7d
--- /dev/null
+++ b/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/impl/YangIoUtils.java
@@ -0,0 +1,898 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.utils.io.impl;
+
+import org.apache.commons.io.FileUtils;
+import org.onosproject.yang.compiler.utils.io.YangToJavaNamingConflictUtil;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Stack;
+import java.util.regex.Pattern;
+
+import static java.lang.Integer.parseInt;
+import static org.onosproject.yang.compiler.utils.UtilConstants.CLOSE_PARENTHESIS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.COLON;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EMPTY_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.HYPHEN;
+import static org.onosproject.yang.compiler.utils.UtilConstants.JAVA_KEY_WORDS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.NEW_LINE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ONE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OPEN_CURLY_BRACKET;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OPEN_PARENTHESIS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.ORG;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PACKAGE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PERIOD;
+import static org.onosproject.yang.compiler.utils.UtilConstants.REGEX_FOR_DIGITS_WITH_SINGLE_LETTER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.REGEX_FOR_FIRST_DIGIT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.REGEX_FOR_HYPHEN;
+import static org.onosproject.yang.compiler.utils.UtilConstants.REGEX_FOR_IDENTIFIER_SPECIAL_CHAR;
+import static org.onosproject.yang.compiler.utils.UtilConstants.REGEX_FOR_PERIOD;
+import static org.onosproject.yang.compiler.utils.UtilConstants.REGEX_FOR_SINGLE_LETTER;
+import static org.onosproject.yang.compiler.utils.UtilConstants.REGEX_FOR_UNDERSCORE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.REGEX_WITH_ALL_SPECIAL_CHAR;
+import static org.onosproject.yang.compiler.utils.UtilConstants.REGEX_WITH_DIGITS;
+import static org.onosproject.yang.compiler.utils.UtilConstants.REGEX_WITH_SINGLE_CAPITAL_CASE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.REGEX_WITH_SINGLE_CAPITAL_CASE_AND_DIGITS_SMALL_CASES;
+import static org.onosproject.yang.compiler.utils.UtilConstants.REGEX_WITH_UPPERCASE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SEMI_COLON;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SLASH;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SPACE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.TEMP;
+import static org.onosproject.yang.compiler.utils.UtilConstants.TWELVE_SPACE_INDENTATION;
+import static org.onosproject.yang.compiler.utils.UtilConstants.UNDER_SCORE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.UNUSED;
+import static org.onosproject.yang.compiler.utils.UtilConstants.YANG_AUTO_PREFIX;
+import static org.onosproject.yang.compiler.utils.io.impl.CopyrightHeader.parseCopyrightHeader;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.PACKAGE_INFO;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.getJavaDoc;
+
+/**
+ * Represents common utility functionalities for code generation.
+ */
+public final class YangIoUtils {
+
+ private static final int LINE_SIZE = 118;
+ private static final int SUB_LINE_SIZE = 116;
+ private static final int SUB_SIZE = 60;
+
+ /**
+ * Creates an instance of YANG io utils.
+ */
+ private YangIoUtils() {
+ }
+
+ /**
+ * Creates the directory structure.
+ *
+ * @param path directory path
+ * @return directory structure
+ * @throws IOException when fails to do IO operations
+ */
+ public static File createDirectories(String path)
+ throws IOException {
+ File generatedDir = new File(path);
+ if (!generatedDir.exists()) {
+ boolean isGenerated = generatedDir.mkdirs();
+ if (!isGenerated) {
+ throw new IOException("failed to generated directory " + path);
+ }
+ }
+ return generatedDir;
+ }
+
+ /**
+ * Adds package info file for the created directory.
+ *
+ * @param path directory path
+ * @param classInfo class info for the package
+ * @param pack package of the directory
+ * @param isChildNode is it a child node
+ * @throws IOException when fails to create package info file
+ */
+ public static void addPackageInfo(File path, String classInfo, String pack,
+ boolean isChildNode) throws IOException {
+
+ pack = parsePkg(pack);
+ try {
+
+ File packageInfo = new File(path + SLASH + "package-info.java");
+ if (!packageInfo.exists()) {
+ boolean isGenerated = packageInfo.createNewFile();
+ if (!isGenerated) {
+ throw new IOException("failed to generated package-info " +
+ path);
+ }
+ }
+ FileWriter fileWriter = new FileWriter(packageInfo);
+ BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
+
+ bufferedWriter.write(parseCopyrightHeader());
+ //TODO: get the compiler annotations and pass the info
+ bufferedWriter.write(getJavaDoc(PACKAGE_INFO, classInfo, isChildNode,
+ null));
+ String pkg = PACKAGE + SPACE + pack + SEMI_COLON;
+ if (pkg.length() >= LINE_SIZE) {
+ pkg = processModifications(pkg, LINE_SIZE);
+ }
+ bufferedWriter.write(pkg);
+ bufferedWriter.close();
+ fileWriter.close();
+ } catch (IOException e) {
+ throw new IOException("Exception occurred while creating package info" +
+ " file.");
+ }
+ }
+
+ /**
+ * Parses package and returns updated package.
+ *
+ * @param pack package needs to be updated
+ * @return updated package
+ */
+ public static String parsePkg(String pack) {
+
+ if (pack.contains(ORG)) {
+ String[] strArray = pack.split(ORG);
+ if (strArray.length >= 3) {
+ for (int i = 1; i < strArray.length; i++) {
+ if (i == 1) {
+ pack = ORG + strArray[1];
+ } else {
+ pack = pack + ORG + strArray[i];
+ }
+ }
+ } else {
+ pack = ORG + strArray[1];
+ }
+ }
+
+ return pack;
+ }
+
+ /**
+ * Cleans the generated directory if already exist in source folder.
+ *
+ * @param dir generated directory in previous build
+ * @throws IOException when failed to delete directory
+ */
+ public static void deleteDirectory(String dir)
+ throws IOException {
+ File generatedDirectory = new File(dir);
+ if (generatedDirectory.exists()) {
+ try {
+ FileUtils.deleteDirectory(generatedDirectory);
+ } catch (IOException e) {
+ throw new IOException(
+ "Failed to delete the generated files in " +
+ generatedDirectory + " directory");
+ }
+ }
+ }
+
+ /**
+ * Searches and deletes generated temporary directories.
+ *
+ * @param root root directory
+ * @throws IOException when fails to do IO operations.
+ */
+ public static void searchAndDeleteTempDir(String root)
+ throws IOException {
+ List<File> store = new LinkedList<>();
+ Stack<String> stack = new Stack<>();
+ stack.push(root);
+
+ while (!stack.empty()) {
+ root = stack.pop();
+ File file = new File(root);
+ File[] fileList = file.listFiles();
+ if (fileList == null || fileList.length == 0) {
+ continue;
+ }
+ for (File current : fileList) {
+ if (current.isDirectory()) {
+ stack.push(current.toString());
+ if (current.getName().endsWith(HYPHEN + TEMP)) {
+ store.add(current);
+ }
+ }
+ }
+ }
+
+ for (File dir : store) {
+ FileUtils.deleteDirectory(dir);
+ }
+ }
+
+ /**
+ * Removes extra char from the string.
+ *
+ * @param valueString string to be trimmed
+ * @param removalString extra chars
+ * @return new string
+ */
+ public static String trimAtLast(String valueString, String...
+ removalString) {
+ StringBuilder stringBuilder = new StringBuilder(valueString);
+ String midString;
+ int index;
+ for (String remove : removalString) {
+ midString = stringBuilder.toString();
+ index = midString.lastIndexOf(remove);
+ if (index != -1) {
+ stringBuilder.deleteCharAt(index);
+ }
+ }
+ return stringBuilder.toString();
+ }
+
+ /**
+ * Replaces the last occurrence of a string with a given string.
+ *
+ * @param valueString string under operation
+ * @param removalString string to be replaced
+ * @param replacingString string with which replacement is to be done
+ * @return new string
+ */
+ public static String replaceLast(String valueString, String removalString,
+ String replacingString) {
+ StringBuilder stringBuilder = new StringBuilder(valueString);
+ int index = valueString.lastIndexOf(removalString);
+ if (index != -1) {
+ stringBuilder.replace(index, index + 1, replacingString);
+ } else {
+ stringBuilder.append(NEW_LINE + EIGHT_SPACE_INDENTATION + UNUSED +
+ OPEN_PARENTHESIS + ONE +
+ CLOSE_PARENTHESIS + SEMI_COLON);
+ }
+ return stringBuilder.toString();
+
+ // TODO remove generation of ENUM if there is no leaf node.
+ }
+
+
+ /**
+ * Returns the directory path of the package in canonical form.
+ *
+ * @param baseCodeGenPath base path where the generated files needs to be
+ * put
+ * @param pathOfJavaPkg java package of the file being generated
+ * @return absolute path of the package in canonical form
+ */
+ public static String getDirectory(String baseCodeGenPath, String pathOfJavaPkg) {
+
+ if (pathOfJavaPkg.charAt(pathOfJavaPkg.length() - 1) == File.separatorChar) {
+ pathOfJavaPkg = trimAtLast(pathOfJavaPkg, SLASH);
+ }
+ String[] strArray = pathOfJavaPkg.split(SLASH);
+ if (strArray[0].equals(EMPTY_STRING)) {
+ return pathOfJavaPkg;
+ } else {
+ return baseCodeGenPath + SLASH + pathOfJavaPkg;
+ }
+ }
+
+ /**
+ * Returns the absolute path of the package in canonical form.
+ *
+ * @param baseCodeGenPath base path where the generated files needs to be
+ * put
+ * @param pathOfJavaPkg java package of the file being generated
+ * @return absolute path of the package in canonical form
+ */
+ public static String getAbsolutePackagePath(String baseCodeGenPath,
+ String pathOfJavaPkg) {
+ return baseCodeGenPath + pathOfJavaPkg;
+ }
+
+ /**
+ * Merges the temp java files to main java files.
+ *
+ * @param appendFile temp file
+ * @param srcFile main file
+ * @throws IOException when fails to append contents
+ */
+ public static void mergeJavaFiles(File appendFile, File srcFile)
+ throws IOException {
+ try {
+ FileSystemUtil.appendFileContents(appendFile, srcFile);
+ } catch (IOException e) {
+ throw new IOException("Failed to merge " + appendFile + " in " +
+ srcFile);
+ }
+ }
+
+ /**
+ * Inserts data in the generated file.
+ *
+ * @param file file in which need to be inserted
+ * @param data data which need to be inserted
+ * @throws IOException when fails to insert into file
+ */
+ public static void insertDataIntoJavaFile(File file, String data)
+ throws IOException {
+ try {
+ FileSystemUtil.updateFileHandle(file, data, false);
+ } catch (IOException e) {
+ throw new IOException("Failed to insert in " + file + "file");
+ }
+ }
+
+ /**
+ * Validates a line size in given file whether it is having more then 120 characters.
+ * If yes it will update and give a new file.
+ *
+ * @param dataFile file in which need to verify all lines.
+ * @return updated file
+ * @throws IOException when fails to do IO operations.
+ */
+ public static File validateLineLength(File dataFile)
+ throws IOException {
+ FileReader fileReader = new FileReader(dataFile);
+ BufferedReader bufferReader = new BufferedReader(fileReader);
+ try {
+ StringBuilder stringBuilder = new StringBuilder();
+ String line = bufferReader.readLine();
+
+ while (line != null) {
+ if (line.length() >= LINE_SIZE) {
+ line = processModifications(line, LINE_SIZE);
+ }
+ stringBuilder.append(line);
+ stringBuilder.append(NEW_LINE);
+ line = bufferReader.readLine();
+ }
+ FileWriter writer = new FileWriter(dataFile);
+ writer.write(stringBuilder.toString());
+ writer.close();
+ return dataFile;
+ } finally {
+ fileReader.close();
+ bufferReader.close();
+ }
+ }
+
+ /**
+ * Resolves validation of line length by modifying the string.
+ *
+ * @param line current line string
+ * @param lineSize line size for change
+ * @return modified line string
+ */
+ private static String processModifications(String line, int lineSize) {
+ int period = getArrayLength(line, PERIOD);
+ int space = getArrayLength(line, SPACE);
+ if (period > space) {
+ return merge(getForPeriod(line), PERIOD, lineSize);
+ }
+ return merge(getForSpace(line), SPACE, lineSize);
+ }
+
+ /**
+ * Returns count of pattern in line.
+ *
+ * @param line line string
+ * @param pattern pattern followed in line
+ * @return count of pattern in line
+ */
+ private static int getArrayLength(String line, String pattern) {
+ String[] array = line.split(Pattern.quote(pattern));
+ int len = array.length;
+ if (pattern.equals(SPACE)) {
+ for (String str : array) {
+ if (str.equals(EMPTY_STRING)) {
+ len--;
+ }
+ }
+ }
+ return len - 1;
+ }
+
+ /**
+ * Returns array list of string in case of period.
+ *
+ * @param line line string
+ * @return array list of string in case of period
+ */
+ private static ArrayList<String> getForPeriod(String line) {
+ String[] array = line.split(Pattern.quote(PERIOD));
+ return getSplitArray(array, PERIOD);
+ }
+
+ /**
+ * Returns array list of string in case of space.
+ *
+ * @param line line string
+ * @return array list of string in case of space
+ */
+ private static ArrayList<String> getForSpace(String line) {
+ String[] array = line.split(SPACE);
+ return getSplitArray(array, SPACE);
+ }
+
+ /**
+ * Merges strings to form a new string.
+ *
+ * @param list list of strings
+ * @param pattern pattern
+ * @param lineSize line size
+ * @return merged string
+ */
+ private static String merge(ArrayList<String> list, String pattern, int lineSize) {
+ StringBuilder builder = new StringBuilder();
+ StringBuilder fine = new StringBuilder();
+ String append;
+ String pre;
+ String present = EMPTY_STRING;
+ //Add one blank string in list to handle border limit cases.
+ list.add(EMPTY_STRING);
+ Iterator<String> listIt = list.iterator();
+ ArrayList<String> arrayList = new ArrayList<>();
+ int length;
+ StringBuilder spaces = new StringBuilder();
+ while (listIt.hasNext()) {
+ pre = present;
+ present = listIt.next();
+ //check is present string is more than 80 char.
+ if (present.length() > SUB_SIZE) {
+ int period = getArrayLength(present, PERIOD);
+ int space = getArrayLength(present, SPACE);
+ if (period > space) {
+ // in such case present string should be resolved.
+ present = processModifications(present, SUB_SIZE);
+ builder.append(present);
+ }
+ }
+ length = builder.length();
+ //If length of builder is less than the given length then append
+ // it to builder.
+ if (length <= lineSize) {
+ //fill the space builder to provide proper indentation.
+ if (present.equals(EMPTY_STRING)) {
+ spaces.append(SPACE);
+ }
+ //append to builder
+ builder.append(present);
+ builder.append(pattern);
+ fine.append(pre);
+ //do not append pattern in case of empty strings.
+ if (!pre.equals(EMPTY_STRING)) {
+ fine.append(pattern);
+ }
+ } else {
+ // now the length is more than given size so trim the pattern
+ // for the string and add it to list,
+ fine = getReplacedString(fine, pattern);
+ arrayList.add(fine.toString());
+ // clear all.
+ builder.delete(0, length);
+ fine.delete(0, fine.length());
+ // append indentation
+ if (pattern.contains(PERIOD)) {
+ append = NEW_LINE + spaces +
+ TWELVE_SPACE_INDENTATION +
+ PERIOD;
+ } else {
+ append = NEW_LINE + spaces + TWELVE_SPACE_INDENTATION;
+ }
+ // builder needs to move one step forward to fine builder so
+ // append present and pre strings to builder with pattern.
+ builder.append(append);
+ builder.append(pre);
+ builder.append(pattern);
+ builder.append(present);
+ builder.append(pattern);
+ fine.append(append);
+ fine.append(pre);
+ if (!pre.equals(EMPTY_STRING)) {
+ fine.append(pattern);
+ }
+ }
+ }
+
+ builder = getReplacedString(builder, pattern);
+
+ //need to remove extra string added from the builder.
+ if (builder.toString().lastIndexOf(pattern) == builder.length() - 1) {
+ builder = getReplacedString(builder, pattern);
+ }
+ arrayList.add(builder.toString());
+ fine.delete(0, fine.length());
+ for (String str : arrayList) {
+ fine.append(str);
+ }
+ //No need to append extra spaces.
+ if (pattern.equals(PERIOD)) {
+ return fine.toString();
+ }
+ return spaces + fine.toString();
+ }
+
+ /**
+ * Trims extra pattern strings for builder string.
+ *
+ * @param builder builder
+ * @param pattern pattern
+ * @return modified string
+ */
+ private static StringBuilder getReplacedString(StringBuilder builder, String
+ pattern) {
+ String temp = builder.toString();
+ temp = trimAtLast(temp, pattern);
+ int length = builder.length();
+ builder.delete(0, length);
+ builder.append(temp);
+ return builder;
+ }
+
+ /**
+ * Creates array list to process line string modification.
+ *
+ * @param array array of strings
+ * @param pattern pattern
+ * @return list to process line string modification
+ */
+ private static ArrayList<String> getSplitArray(String[] array, String pattern) {
+ ArrayList<String> newArray = new ArrayList<>();
+ int count = 0;
+ String temp;
+ for (String str : array) {
+ if (!str.contains(OPEN_CURLY_BRACKET)) {
+ if (str.length() >= SUB_LINE_SIZE) {
+ count = getSplitString(str, newArray, count);
+ } else {
+ newArray.add(str);
+ count++;
+ }
+ } else {
+ if (newArray.isEmpty()) {
+ newArray.add(str);
+ } else {
+ temp = newArray.get(count - 1);
+ newArray.remove(count - 1);
+ newArray.add(count - 1, temp + pattern + str);
+ }
+ }
+ }
+
+ return newArray;
+ }
+
+ private static int getSplitString(String str,
+ ArrayList<String> newArray, int count) {
+ String[] array = str.split(SPACE);
+ for (String st : array) {
+ newArray.add(st + SPACE);
+ count++;
+ }
+ return count;
+ }
+
+ /**
+ * Returns the java Package from package path.
+ *
+ * @param packagePath package path
+ * @return java package
+ */
+ public static String getJavaPackageFromPackagePath(String packagePath) {
+ return packagePath.replace(SLASH, PERIOD);
+ }
+
+ /**
+ * Returns the directory path corresponding to java package.
+ *
+ * @param packagePath package path
+ * @return java package
+ */
+ public static String getPackageDirPathFromJavaJPackage(String packagePath) {
+ return packagePath.replace(PERIOD, SLASH);
+ }
+
+ /**
+ * Returns the YANG identifier name as java identifier with first letter
+ * in small.
+ *
+ * @param yangIdentifier identifier in YANG file.
+ * @return corresponding java identifier
+ */
+ public static String getSmallCase(String yangIdentifier) {
+ return yangIdentifier.substring(0, 1).toLowerCase() + yangIdentifier.substring(1);
+ }
+
+ /**
+ * Returns the YANG identifier name as java identifier with first letter
+ * in capital.
+ *
+ * @param yangIdentifier identifier in YANG file
+ * @return corresponding java identifier
+ */
+ public static String getCapitalCase(String yangIdentifier) {
+ yangIdentifier = yangIdentifier.substring(0, 1).toUpperCase() + yangIdentifier.substring(1);
+ return restrictConsecutiveCapitalCase(yangIdentifier);
+ }
+
+ /**
+ * Restricts consecutive capital cased string as a rule in camel case.
+ *
+ * @param consecCapitalCaseRemover which requires the restriction of consecutive capital case
+ * @return string without consecutive capital case
+ */
+ private static String restrictConsecutiveCapitalCase(String consecCapitalCaseRemover) {
+
+ for (int k = 0; k < consecCapitalCaseRemover.length(); k++) {
+ if (k + 1 < consecCapitalCaseRemover.length()) {
+ if (Character.isUpperCase(consecCapitalCaseRemover.charAt(k))) {
+ if (Character.isUpperCase(consecCapitalCaseRemover.charAt(k + 1))) {
+ consecCapitalCaseRemover = consecCapitalCaseRemover.substring(0, k + 1)
+ + consecCapitalCaseRemover.substring(k + 1, k + 2).toLowerCase()
+ + consecCapitalCaseRemover.substring(k + 2);
+ }
+ }
+ }
+ }
+ return consecCapitalCaseRemover;
+ }
+
+ /**
+ * Adds prefix, if the string begins with digit or is a java key word.
+ *
+ * @param camelCasePrefix string for adding prefix
+ * @param conflictResolver object of YANG to java naming conflict util
+ * @return prefixed camel case string
+ */
+ private static String addPrefix(String camelCasePrefix, YangToJavaNamingConflictUtil conflictResolver) {
+
+ String prefix = getPrefixForIdentifier(conflictResolver);
+ if (camelCasePrefix.matches(REGEX_FOR_FIRST_DIGIT)) {
+ camelCasePrefix = prefix + camelCasePrefix;
+ }
+ if (JAVA_KEY_WORDS.contains(camelCasePrefix)) {
+ camelCasePrefix = prefix + camelCasePrefix.substring(0, 1).toUpperCase()
+ + camelCasePrefix.substring(1);
+ }
+ return camelCasePrefix;
+ }
+
+ /**
+ * Applies the rule that a string does not end with a capitalized letter and capitalizes
+ * the letter next to a number in an array.
+ *
+ * @param stringArray containing strings for camel case separation
+ * @param conflictResolver object of YANG to java naming conflict util
+ * @return camel case rule checked string
+ */
+ private static String applyCamelCaseRule(String[] stringArray,
+ YangToJavaNamingConflictUtil conflictResolver) {
+
+ String ruleChecker = stringArray[0].toLowerCase();
+ int i;
+ if (ruleChecker.matches(REGEX_FOR_FIRST_DIGIT)) {
+ i = 0;
+ ruleChecker = EMPTY_STRING;
+ } else {
+ i = 1;
+ }
+ for (; i < stringArray.length; i++) {
+ if (i + 1 == stringArray.length) {
+ if (stringArray[i].matches(REGEX_FOR_SINGLE_LETTER)
+ || stringArray[i].matches(REGEX_FOR_DIGITS_WITH_SINGLE_LETTER)) {
+ ruleChecker = ruleChecker + stringArray[i].toLowerCase();
+ break;
+ }
+ }
+ if (stringArray[i].matches(REGEX_FOR_FIRST_DIGIT)) {
+ for (int j = 0; j < stringArray[i].length(); j++) {
+ char letterCheck = stringArray[i].charAt(j);
+ if (Character.isLetter(letterCheck)) {
+ stringArray[i] = stringArray[i].substring(0, j)
+ + stringArray[i].substring(j, j + 1).toUpperCase() + stringArray[i].substring(j + 1);
+ break;
+ }
+ }
+ ruleChecker = ruleChecker + stringArray[i];
+ } else {
+ ruleChecker = ruleChecker + stringArray[i].substring(0, 1).toUpperCase() + stringArray[i].substring(1);
+ }
+ }
+ String ruleCheckerWithPrefix = addPrefix(ruleChecker, conflictResolver);
+ return restrictConsecutiveCapitalCase(ruleCheckerWithPrefix);
+ }
+
+ /**
+ * Resolves the conflict when input has upper case.
+ *
+ * @param stringArray containing strings for upper case conflict resolver
+ * @param conflictResolver object of YANG to java naming conflict util
+ * @return camel cased string
+ */
+ private static String upperCaseConflictResolver(String[] stringArray,
+ YangToJavaNamingConflictUtil conflictResolver) {
+
+ for (int l = 0; l < stringArray.length; l++) {
+ String[] upperCaseSplitArray = stringArray[l].split(REGEX_WITH_UPPERCASE);
+ for (int m = 0; m < upperCaseSplitArray.length; m++) {
+ if (upperCaseSplitArray[m].matches(REGEX_WITH_SINGLE_CAPITAL_CASE)) {
+ int check = m;
+ while (check + 1 < upperCaseSplitArray.length) {
+ if (upperCaseSplitArray[check + 1].matches(REGEX_WITH_SINGLE_CAPITAL_CASE)) {
+ upperCaseSplitArray[check + 1] = upperCaseSplitArray[check + 1].toLowerCase();
+ check = check + 1;
+ } else if (upperCaseSplitArray[check + 1]
+ .matches(REGEX_WITH_SINGLE_CAPITAL_CASE_AND_DIGITS_SMALL_CASES)) {
+ upperCaseSplitArray[check + 1] = upperCaseSplitArray[check + 1].toLowerCase();
+ break;
+ } else {
+ break;
+ }
+ }
+ }
+ }
+ StringBuilder strBuilder = new StringBuilder();
+ for (String element : upperCaseSplitArray) {
+ strBuilder.append(element);
+ }
+ stringArray[l] = strBuilder.toString();
+ }
+ List<String> result = new ArrayList<>();
+ for (String element : stringArray) {
+ String[] capitalCaseSplitArray = element.split(REGEX_WITH_UPPERCASE);
+ for (String letter : capitalCaseSplitArray) {
+ String[] arrayForAddition = letter.split(REGEX_WITH_DIGITS);
+ List<String> list = Arrays.asList(arrayForAddition);
+ for (String str : list) {
+ if (str != null && !str.isEmpty()) {
+ result.add(str);
+ }
+ }
+ }
+ }
+ stringArray = result.toArray(new String[result.size()]);
+ return applyCamelCaseRule(stringArray, conflictResolver);
+ }
+
+ /**
+ * Returns the YANG identifier name as java identifier.
+ *
+ * @param yangIdentifier identifier in YANG file
+ * @param conflictResolver object of YANG to java naming conflict util
+ * @return corresponding java identifier
+ */
+ public static String getCamelCase(String yangIdentifier, YangToJavaNamingConflictUtil conflictResolver) {
+
+ if (conflictResolver != null) {
+ String replacementForHyphen = conflictResolver.getReplacementForHyphen();
+ String replacementForPeriod = conflictResolver.getReplacementForPeriod();
+ String replacementForUnderscore = conflictResolver.getReplacementForUnderscore();
+ if (replacementForPeriod != null) {
+ yangIdentifier = yangIdentifier.replaceAll(REGEX_FOR_PERIOD,
+ PERIOD + replacementForPeriod.toLowerCase() + PERIOD);
+ }
+ if (replacementForUnderscore != null) {
+ yangIdentifier = yangIdentifier.replaceAll(REGEX_FOR_UNDERSCORE,
+ UNDER_SCORE + replacementForUnderscore.toLowerCase() +
+ UNDER_SCORE);
+ }
+ if (replacementForHyphen != null) {
+ yangIdentifier = yangIdentifier.replaceAll(REGEX_FOR_HYPHEN,
+ HYPHEN + replacementForHyphen.toLowerCase() + HYPHEN);
+ }
+ }
+ yangIdentifier = yangIdentifier.replaceAll(REGEX_FOR_IDENTIFIER_SPECIAL_CHAR, COLON);
+ String[] strArray = yangIdentifier.split(COLON);
+ if (strArray[0].isEmpty()) {
+ List<String> stringArrangement = new ArrayList<>();
+ stringArrangement.addAll(Arrays.asList(strArray).subList(1, strArray.length));
+ strArray = stringArrangement.toArray(new String[stringArrangement.size()]);
+ }
+ return upperCaseConflictResolver(strArray, conflictResolver);
+ }
+
+ /**
+ * Prefix for adding with identifier and namespace, when it is a java keyword or starting with digits.
+ *
+ * @param conflictResolver object of YANG to java naming conflict util
+ * @return prefix which needs to be added
+ */
+ public static String getPrefixForIdentifier(YangToJavaNamingConflictUtil conflictResolver) {
+
+ String prefixForIdentifier = null;
+ if (conflictResolver != null) {
+ prefixForIdentifier = conflictResolver.getPrefixForIdentifier();
+ }
+ if (prefixForIdentifier != null) {
+ prefixForIdentifier = prefixForIdentifier.replaceAll
+ (REGEX_WITH_ALL_SPECIAL_CHAR, COLON);
+ String[] strArray = prefixForIdentifier.split(COLON);
+ try {
+ if (strArray[0].isEmpty()) {
+ List<String> stringArrangement = new ArrayList<>();
+ stringArrangement.addAll(Arrays.asList(strArray).subList(1, strArray.length));
+ strArray = stringArrangement.toArray(new String[stringArrangement.size()]);
+ }
+ prefixForIdentifier = strArray[0];
+ for (int j = 1; j < strArray.length; j++) {
+ prefixForIdentifier = prefixForIdentifier + strArray[j].substring(0, 1).toUpperCase() +
+ strArray[j].substring(1);
+ }
+ } catch (ArrayIndexOutOfBoundsException outOfBoundsException) {
+ throw new ArrayIndexOutOfBoundsException("The given prefix in pom.xml is invalid.");
+ }
+ } else {
+ prefixForIdentifier = YANG_AUTO_PREFIX;
+ }
+ return prefixForIdentifier;
+ }
+
+ /**
+ * Removes empty directory.
+ *
+ * @param path path to be checked
+ */
+ public static void removeEmptyDirectory(String path) {
+ int index;
+ while (path != null && !path.isEmpty()) {
+ if (!removeDirectory(path)) {
+ break;
+ } else {
+ index = path.lastIndexOf(SLASH);
+ path = path.substring(0, index);
+ }
+ }
+ }
+
+ private static boolean removeDirectory(String path) {
+ File dir = new File(path);
+ boolean isDeleted = false;
+ if (dir.isDirectory()) {
+ File[] files = dir.listFiles();
+ if (files != null && files.length == 0) {
+ isDeleted = dir.delete();
+ } else if (files != null && files.length == 1) {
+ if ("package-info.java".equals(files[0].getName())
+ || files[0].getName().endsWith("-temp")) {
+ isDeleted = dir.delete();
+ }
+ }
+ }
+ return isDeleted;
+ }
+
+ /**
+ * Converts string to integer number for maven version.
+ *
+ * @param ver version
+ * @return int value of version
+ */
+ public static int getVersionValue(String ver) {
+ String[] array = ver.split(Pattern.quote(PERIOD));
+ StringBuilder builder = new StringBuilder();
+ for (String str : array) {
+ builder.append(str);
+ }
+ return parseInt(builder.toString());
+ }
+}
diff --git a/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/impl/package-info.java b/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/impl/package-info.java
new file mode 100644
index 0000000..8f7a46f
--- /dev/null
+++ b/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/impl/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+/**
+ * File system utilities implementation.
+ */
+package org.onosproject.yang.compiler.utils.io.impl;
diff --git a/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/package-info.java b/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/package-info.java
new file mode 100644
index 0000000..464214b
--- /dev/null
+++ b/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+/**
+ * File system utilities.
+ */
+package org.onosproject.yang.compiler.utils.io;
diff --git a/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/package-info.java b/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/package-info.java
new file mode 100644
index 0000000..ba648af
--- /dev/null
+++ b/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+/**
+ * Utilities for YANG maven plugin.
+ */
+package org.onosproject.yang.compiler.utils;
diff --git a/parser/src/main/resources/CopyrightHeader.txt b/compiler/base/utils/src/main/resources/CopyrightHeader.txt
similarity index 100%
rename from parser/src/main/resources/CopyrightHeader.txt
rename to compiler/base/utils/src/main/resources/CopyrightHeader.txt
diff --git a/compiler/base/utils/src/test/java/org/onosproject/yang/compiler/utils/UtilConstantsTest.java b/compiler/base/utils/src/test/java/org/onosproject/yang/compiler/utils/UtilConstantsTest.java
new file mode 100644
index 0000000..7e9c8ce
--- /dev/null
+++ b/compiler/base/utils/src/test/java/org/onosproject/yang/compiler/utils/UtilConstantsTest.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.utils;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.utils.UtilConstants;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+
+import static org.hamcrest.core.IsNot.not;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Test case for testing the util constants.
+ */
+public final class UtilConstantsTest {
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ /**
+ * A private constructor is tested.
+ *
+ * @throws SecurityException if any security violation is observed
+ * @throws NoSuchMethodException if when the method is not found
+ * @throws IllegalArgumentException if there is illegal argument found
+ * @throws InstantiationException if instantiation is provoked for the private constructor
+ * @throws IllegalAccessException if instance is provoked or a method is provoked
+ * @throws InvocationTargetException when an exception occurs by the method or constructor
+ */
+ @Test
+ public void callPrivateConstructors() throws SecurityException, NoSuchMethodException, IllegalArgumentException,
+ InstantiationException, IllegalAccessException, InvocationTargetException {
+
+ Class<?>[] classesToConstruct = {UtilConstants.class };
+ for (Class<?> clazz : classesToConstruct) {
+ Constructor<?> constructor = clazz.getDeclaredConstructor();
+ constructor.setAccessible(true);
+ assertThat(null, not(constructor.newInstance()));
+ }
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/utils/src/test/java/org/onosproject/yang/compiler/utils/io/impl/CopyrightHeaderTest.java b/compiler/base/utils/src/test/java/org/onosproject/yang/compiler/utils/io/impl/CopyrightHeaderTest.java
new file mode 100644
index 0000000..e29240f
--- /dev/null
+++ b/compiler/base/utils/src/test/java/org/onosproject/yang/compiler/utils/io/impl/CopyrightHeaderTest.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.utils.io.impl;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.utils.io.impl.CopyrightHeader;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Calendar;
+
+import static org.apache.commons.io.FileUtils.contentEquals;
+import static org.hamcrest.core.Is.is;
+import static org.hamcrest.core.IsNot.not;
+import static org.junit.Assert.assertThat;
+
+public final class CopyrightHeaderTest {
+
+ private static final String COPYRIGHTS_FIRST_LINE = "/*\n * Copyright " + Calendar.getInstance().get(Calendar.YEAR)
+ + "-present Open Networking Laboratory\n";
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ /**
+ * Unit test for testing private constructor.
+ *
+ * @throws SecurityException if any security violation is observed
+ * @throws NoSuchMethodException if when the method is not found
+ * @throws IllegalArgumentException if there is illegal argument found
+ * @throws InstantiationException if instantiation is provoked for the private constructor
+ * @throws IllegalAccessException if instance is provoked or a method is provoked
+ * @throws InvocationTargetException when an exception occurs by the method or constructor
+ */
+ @Test
+ public void callPrivateConstructors() throws SecurityException, NoSuchMethodException, IllegalArgumentException,
+ InstantiationException, IllegalAccessException, InvocationTargetException {
+
+ Class<?>[] classesToConstruct = {CopyrightHeader.class };
+ for (Class<?> clazz : classesToConstruct) {
+ Constructor<?> constructor = clazz.getDeclaredConstructor();
+ constructor.setAccessible(true);
+ assertThat(null, not(constructor.newInstance()));
+ }
+ }
+
+ /**
+ * This test case checks the received copyright header contents.
+ *
+ * @throws IOException when fails to do IO operations
+ */
+ @Test
+ public void testGetCopyrightHeader() throws IOException {
+
+ String path = "src/test/resources/CopyrightHeader.txt";
+
+ File testRsc = new File(path);
+ FileInputStream in = new FileInputStream(testRsc);
+
+ File testFile = new File("target/TestHeader.txt");
+ FileOutputStream out = new FileOutputStream(testFile);
+
+ out.write(COPYRIGHTS_FIRST_LINE.getBytes());
+ int c = 0;
+ while ((c = in.read()) != -1) {
+ out.write(c);
+ }
+
+ String licenseHeader = CopyrightHeader.parseCopyrightHeader();
+ File test = new File("target/TestCopyrightHeader.txt");
+
+ FileWriter writer = new FileWriter(test);
+ writer.write(licenseHeader);
+ writer.close();
+ out.close();
+ out.flush();
+ in.close();
+
+ assertThat(true, is(contentEquals(test, testFile)));
+ test.delete();
+ testFile.delete();
+ }
+}
\ No newline at end of file
diff --git a/compiler/base/utils/src/test/java/org/onosproject/yang/compiler/utils/io/impl/FileSystemUtilTest.java b/compiler/base/utils/src/test/java/org/onosproject/yang/compiler/utils/io/impl/FileSystemUtilTest.java
new file mode 100644
index 0000000..f16ca88
--- /dev/null
+++ b/compiler/base/utils/src/test/java/org/onosproject/yang/compiler/utils/io/impl/FileSystemUtilTest.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.utils.io.impl;
+
+import org.apache.commons.io.FileUtils;
+import org.junit.Test;
+import org.onosproject.yang.compiler.utils.UtilConstants;
+
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+
+import static org.apache.commons.io.FileUtils.deleteDirectory;
+import static org.hamcrest.core.IsNot.not;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Tests the file handle utilities.
+ */
+public final class FileSystemUtilTest {
+
+ private static final String BASE_PKG = "target/UnitTestCase";
+ private static final String TEST_DATA_1 = "This is to append a text to the file first1\n";
+ private static final String TEST_DATA_2 = "This is next second line\n";
+ private static final String TEST_DATA_3 = "This is next third line in the file";
+ private static final String TEST_FILE = "testFile";
+ private static final String SOURCE_TEST_FILE = "sourceTestFile";
+
+ /**
+ * A private constructor is tested.
+ *
+ * @throws SecurityException if any security violation is observed
+ * @throws NoSuchMethodException if when the method is not found
+ * @throws IllegalArgumentException if there is illegal argument found
+ * @throws InstantiationException if instantiation is provoked for the private constructor
+ * @throws IllegalAccessException if instance is provoked or a method is provoked
+ * @throws InvocationTargetException when an exception occurs by the method or constructor
+ */
+ @Test
+ public void callPrivateConstructors()
+ throws SecurityException, NoSuchMethodException, IllegalArgumentException,
+ InstantiationException, IllegalAccessException, InvocationTargetException {
+
+ Class<?>[] classesToConstruct = {FileSystemUtil.class};
+ for (Class<?> clazz : classesToConstruct) {
+ Constructor<?> constructor = clazz.getDeclaredConstructor();
+ constructor.setAccessible(true);
+ assertThat(null, not(constructor.newInstance()));
+ }
+ }
+
+ /**
+ * This test case checks the contents to be written in the file.
+ *
+ * @throws IOException when fails to create a test file
+ */
+ @Test
+ public void updateFileHandleTest() throws IOException {
+
+ File dir = new File(BASE_PKG + UtilConstants.SLASH + TEST_FILE);
+ dir.mkdirs();
+ File createFile = new File(dir + TEST_FILE);
+ createFile.createNewFile();
+ File createSourceFile = new File(dir + SOURCE_TEST_FILE);
+ createSourceFile.createNewFile();
+ FileSystemUtil.updateFileHandle(createFile, TEST_DATA_1, false);
+ FileSystemUtil.updateFileHandle(createFile, TEST_DATA_2, false);
+ FileSystemUtil.updateFileHandle(createFile, TEST_DATA_3, false);
+ FileSystemUtil.appendFileContents(createFile, createSourceFile);
+ FileSystemUtil.updateFileHandle(createFile, null, true);
+ deleteDirectory(dir);
+ FileUtils.deleteDirectory(new File(BASE_PKG));
+ }
+}
diff --git a/compiler/base/utils/src/test/java/org/onosproject/yang/compiler/utils/io/impl/JavaDocGenTest.java b/compiler/base/utils/src/test/java/org/onosproject/yang/compiler/utils/io/impl/JavaDocGenTest.java
new file mode 100644
index 0000000..9da07d0
--- /dev/null
+++ b/compiler/base/utils/src/test/java/org/onosproject/yang/compiler/utils/io/impl/JavaDocGenTest.java
@@ -0,0 +1,210 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.utils.io.impl;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+
+import static org.hamcrest.core.Is.is;
+import static org.hamcrest.core.IsNot.not;
+import static org.junit.Assert.assertThat;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_CLASS;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_INTERFACE;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.BUILD_METHOD;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.CONSTRUCTOR;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.DEFAULT_CLASS;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.DEFAULT_CONSTRUCTOR;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.INTERFACE;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.PACKAGE_INFO;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.SETTER_METHOD;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.JavaDocType.TYPE_DEF_SETTER_METHOD;
+import static org.onosproject.yang.compiler.utils.io.impl.JavaDocGen.getJavaDoc;
+
+/**
+ * Tests the java doc that is generated.
+ */
+public final class JavaDocGenTest {
+
+ private static final String TEST_NAME = "testName";
+ private static final String END_STRING = " */\n";
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ /**
+ * This test case checks the content received for the builder class java doc.
+ */
+ @Test
+ public void builderClassGenerationTest() {
+ String builderClassJavaDoc = getJavaDoc(BUILDER_CLASS, TEST_NAME, false, null);
+ assertThat(true, is(builderClassJavaDoc.contains("Represents the builder implementation of")
+ && builderClassJavaDoc.contains(END_STRING)));
+ }
+
+ /**
+ * This test case checks the content received for the builder interface ge java doc.
+ */
+ @Test
+ public void builderInterfaceGenerationTest() {
+ String builderInterfaceJavaDoc = getJavaDoc(BUILDER_INTERFACE, TEST_NAME, false, null);
+ assertThat(true,
+ is(builderInterfaceJavaDoc.contains("Builder for")
+ && builderInterfaceJavaDoc.contains(END_STRING)));
+ }
+
+ /**
+ * This test case checks the content received for the build java doc.
+ */
+ @Test
+ public void buildGenerationTest() {
+ String buildDoc = getJavaDoc(BUILD_METHOD, TEST_NAME, false, null);
+ assertThat(true, is(buildDoc.contains("Builds object of") && buildDoc.contains(END_STRING)));
+ }
+
+ /**
+ * A private constructor is tested.
+ *
+ * @throws SecurityException if any security violation is observed
+ * @throws NoSuchMethodException if when the method is not found
+ * @throws IllegalArgumentException if there is illegal argument found
+ * @throws InstantiationException if instantiation is provoked for the private constructor
+ * @throws IllegalAccessException if instance is provoked or a method is provoked
+ * @throws InvocationTargetException when an exception occurs by the method or constructor
+ */
+ @Test
+ public void callPrivateConstructors()
+ throws SecurityException, NoSuchMethodException, IllegalArgumentException,
+ InstantiationException, IllegalAccessException, InvocationTargetException {
+
+ Class<?>[] classesToConstruct = {JavaDocGen.class};
+ for (Class<?> clazz : classesToConstruct) {
+ Constructor<?> constructor = clazz.getDeclaredConstructor();
+ constructor.setAccessible(true);
+ assertThat(null, not(constructor.newInstance()));
+ }
+ }
+
+ /**
+ * This test case checks the content received for the constructor java doc.
+ */
+ @Test
+ public void constructorGenerationTest() {
+ String constructorDoc = getJavaDoc(CONSTRUCTOR, TEST_NAME, false, null);
+ assertThat(true,
+ is(constructorDoc.contains("Creates an instance of ")
+ && constructorDoc.contains("builder object of")
+ && constructorDoc.contains("@param") && constructorDoc.contains("*/\n")));
+ }
+
+ /**
+ * This test case checks the content received for the default constructor java doc.
+ */
+ @Test
+ public void defaultConstructorGenerationTest() {
+ String defaultConstructorDoc = getJavaDoc(DEFAULT_CONSTRUCTOR, TEST_NAME, false, null);
+ assertThat(true, is(defaultConstructorDoc.contains("Creates an instance of ")
+ && defaultConstructorDoc.contains(END_STRING)));
+ }
+
+ /**
+ * This test case checks the content received for the getter java doc.
+ */
+ @Test
+ public void getterGenerationTest() {
+ String getterJavaDoc = getJavaDoc(GETTER_METHOD, TEST_NAME, false, null);
+ assertThat(true,
+ is(getterJavaDoc.contains("Returns the attribute") && getterJavaDoc.contains(END_STRING)));
+ }
+
+ /**
+ * This test case checks the content received for the impl class java doc.
+ */
+ @Test
+ public void implClassGenerationTest() {
+ String implClassJavaDoc = getJavaDoc(DEFAULT_CLASS, TEST_NAME, false, null);
+ assertThat(true,
+ is(implClassJavaDoc.contains("Represents the implementation of")
+ && implClassJavaDoc.contains(END_STRING)));
+ }
+
+ /**
+ * This test case checks the content received for the interface java doc.
+ */
+ @Test
+ public void interfaceGenerationTest() {
+ String interfaceJavaDoc = getJavaDoc(INTERFACE, TEST_NAME, false, null);
+ assertThat(true,
+ is(interfaceJavaDoc.contains("Abstraction of an entity which represents the functionality of")
+ && interfaceJavaDoc.contains(END_STRING)));
+ }
+
+ /**
+ * This test case checks the content received for the package info java doc.
+ */
+ @Test
+ public void packageInfoGenerationTest() {
+ String packageInfo = getJavaDoc(PACKAGE_INFO, TEST_NAME, false, null);
+ assertThat(true,
+ is(packageInfo.contains("Implementation of YANG node") && packageInfo.contains(END_STRING)));
+ }
+
+ /**
+ * This test case checks the content received for the package info java doc.
+ */
+ @Test
+ public void packageInfoGenerationForChildNodeTest() {
+ String packageInfo = getJavaDoc(PACKAGE_INFO, TEST_NAME, true, null);
+ assertThat(true, is(packageInfo.contains("Implementation of YANG node testName's children nodes")
+ && packageInfo.contains(END_STRING)));
+ }
+
+ /**
+ * This test case checks the content received for the setter java doc.
+ */
+ @Test
+ public void setterGenerationTest() {
+ String setterJavaDoc = getJavaDoc(SETTER_METHOD, TEST_NAME, false, null);
+ assertThat(true,
+ is(setterJavaDoc.contains("Returns the builder object of") && setterJavaDoc.contains(END_STRING)));
+ }
+
+ /**
+ * This test case checks the content received for the typedef setter java doc.
+ */
+ @Test
+ public void typeDefSetterGenerationTest() {
+ String typeDefSetter = getJavaDoc(TYPE_DEF_SETTER_METHOD, TEST_NAME, false, null);
+ assertThat(true, is(typeDefSetter.contains("Sets the value of") && typeDefSetter.contains(END_STRING)));
+ }
+
+ /**
+ * Returns stub pluginConfig.
+ *
+ * @return stub pluginConfig
+ */
+ private YangPluginConfig getStubPluginConfig() {
+ YangPluginConfig pluginConfig = new YangPluginConfig();
+ pluginConfig.setConflictResolver(null);
+ return pluginConfig;
+ }
+}
diff --git a/compiler/base/utils/src/test/java/org/onosproject/yang/compiler/utils/io/impl/YangFileScannerTest.java b/compiler/base/utils/src/test/java/org/onosproject/yang/compiler/utils/io/impl/YangFileScannerTest.java
new file mode 100644
index 0000000..7fa5d10
--- /dev/null
+++ b/compiler/base/utils/src/test/java/org/onosproject/yang/compiler/utils/io/impl/YangFileScannerTest.java
@@ -0,0 +1,164 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.utils.io.impl;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.LinkedList;
+import java.util.List;
+
+import static java.io.File.separator;
+import static org.apache.commons.io.FileUtils.deleteDirectory;
+import static org.hamcrest.core.Is.is;
+import static org.hamcrest.core.IsNot.not;
+import static org.junit.Assert.assertThat;
+import static org.onosproject.yang.compiler.utils.io.impl.YangFileScanner.getJavaFiles;
+import static org.onosproject.yang.compiler.utils.io.impl.YangFileScanner.getYangFiles;
+
+/**
+ * Test the file scanner service.
+ */
+public final class YangFileScannerTest {
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ String baseDir = "target/UnitTestCase";
+
+ /**
+ * A private constructor is tested.
+ *
+ * @throws SecurityException if any security violation is observed
+ * @throws NoSuchMethodException if when the method is not found
+ * @throws IllegalArgumentException if there is illegal argument found
+ * @throws InstantiationException if instantiation is provoked for the private constructor
+ * @throws IllegalAccessException if instance is provoked or a method is provoked
+ * @throws InvocationTargetException when an exception occurs by the method or constructor
+ */
+ @Test
+ public void callPrivateConstructors() throws SecurityException, NoSuchMethodException, IllegalArgumentException,
+ InstantiationException, IllegalAccessException, InvocationTargetException {
+
+ Class<?>[] classesToConstruct = {YangFileScanner.class};
+ for (Class<?> clazz : classesToConstruct) {
+ Constructor<?> constructor = clazz.getDeclaredConstructor();
+ constructor.setAccessible(true);
+ assertThat(null, not(constructor.newInstance()));
+ }
+ }
+
+ /**
+ * This test case checks for a .java file inside the specified dir.
+ *
+ * @throws IOException when fails to do IO operations
+ */
+ @Test
+ public void checkJavaFileInsideDirTest() throws IOException {
+
+ String dir = baseDir + separator + "scanner2";
+ File path = createDirectory(dir);
+ createFile(path, "testScanner.java");
+ List<String> dirContents = getJavaFiles(path.toString());
+ List<String> expectedContents = new LinkedList<>();
+ expectedContents.add(path.getCanonicalPath() + separator + "testScanner.java");
+ assertThat(true, is(dirContents.equals(expectedContents)));
+ deleteDirectory(path);
+ }
+
+ /**
+ * Method used for creating multiple directories inside the target file.
+ *
+ * @param path where directories should be created
+ * @return the directory path that is created
+ */
+ private File createDirectory(String path) {
+
+ File myDir = new File(path);
+ myDir.mkdirs();
+ return myDir;
+ }
+
+ /**
+ * Method used for creating file inside the specified directory.
+ *
+ * @param myDir the path where file has to be created inside
+ * @param fileName the name of the file to be created
+ */
+ private void createFile(File myDir, String fileName) throws IOException {
+
+ File file = null;
+ file = new File(myDir + separator + fileName);
+ file.createNewFile();
+ }
+
+ /**
+ * This testcase checks for a java file inside an empty directory.
+ *
+ * @throws IOException when fails to do IO operations
+ */
+ @Test
+ public void emptyDirJavaScannerTest() throws IOException {
+
+ String emptyDir = baseDir + separator + "scanner1";
+ File path = createDirectory(emptyDir);
+ List<String> emptyDirContents = getJavaFiles(path.toString());
+ List<String> expectedContents = new LinkedList<>();
+ assertThat(true, is(emptyDirContents.equals(expectedContents)));
+ deleteDirectory(path);
+ }
+
+ /**
+ * This testcase checks for a yang file inside an empty directory.
+ *
+ * @throws IOException when fails to do IO operations
+ */
+ @Test
+ public void emptyDirYangScannerTest() throws IOException {
+
+ String emptyYangDir = baseDir + separator + "scanner1";
+ File path = createDirectory(emptyYangDir);
+ List<String> emptyDirContents = getYangFiles(path.toString());
+ List<String> expectedContents = new LinkedList<>();
+ assertThat(true, is(emptyDirContents.equals(expectedContents)));
+ deleteDirectory(path);
+ }
+
+ /**
+ * This test case checks with the sub directories in the given path for java files.
+ *
+ * @throws IOException when fails to do IO operations
+ */
+ @Test
+ public void emptySubDirScannerTest() throws IOException {
+
+ String dir = baseDir + separator + "scanner3";
+ File path = createDirectory(dir);
+ String subDir = path.toString() + separator + "subDir1";
+ createDirectory(subDir);
+ createFile(path, "invalidFile.txt");
+ List<String> emptySubDirContents = getJavaFiles(path.toString());
+ List<String> expectedContents = new LinkedList<>();
+ assertThat(true, is(emptySubDirContents.equals(expectedContents)));
+ deleteDirectory(path);
+ }
+}
diff --git a/compiler/base/utils/src/test/java/org/onosproject/yang/compiler/utils/io/impl/YangIoUtilsTest.java b/compiler/base/utils/src/test/java/org/onosproject/yang/compiler/utils/io/impl/YangIoUtilsTest.java
new file mode 100644
index 0000000..cebd190
--- /dev/null
+++ b/compiler/base/utils/src/test/java/org/onosproject/yang/compiler/utils/io/impl/YangIoUtilsTest.java
@@ -0,0 +1,193 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.utils.io.impl;
+
+import org.apache.commons.io.FileUtils;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.utils.UtilConstants;
+
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+
+import static org.hamcrest.core.Is.is;
+import static org.hamcrest.core.IsNot.not;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Unit tests for YANG IO utils.
+ */
+public final class YangIoUtilsTest {
+
+ private static final String BASE_DIR = "target/UnitTestCase";
+ private static final String CREATE_PATH = BASE_DIR + File.separator + "dir1/dir2/dir3/dir4/";
+ private static final String CHECK_STRING = "one, two, three, four, five, six";
+ private static final String TRIM_STRING = "one, two, three, four, five, ";
+ private static final String CHECK1 = "check1";
+ private static final String PKG_INFO = "package-info.java";
+ private static final String PATH = "src/main/yangmodel/";
+ private static final String MSG = "Exception occurred while creating package info file.";
+
+ /**
+ * Expected exceptions.
+ */
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ /**
+ * This test case checks whether the package-info file is created.
+ *
+ * @throws IOException when fails to do IO operations for test case
+ */
+ @Test
+ public void addPackageInfoTest() throws IOException {
+
+ File dirPath = new File(CREATE_PATH);
+ dirPath.mkdirs();
+ YangIoUtils.addPackageInfo(dirPath, CHECK1, CREATE_PATH, false);
+ File filePath = new File(dirPath + File.separator + PKG_INFO);
+ assertThat(filePath.isFile(), is(true));
+ FileUtils.deleteDirectory(new File(BASE_DIR));
+ }
+
+ /**
+ * This test case checks with an additional info in the path.
+ *
+ * @throws IOException when fails to do IO operations for test case
+ */
+ @Test
+ public void addPackageInfoWithPathTest() throws IOException {
+
+ File dirPath = new File(CREATE_PATH);
+ dirPath.mkdirs();
+ YangIoUtils.addPackageInfo(dirPath, CHECK1, PATH + CREATE_PATH, false);
+ File filePath = new File(dirPath + File.separator + PKG_INFO);
+ assertThat(filePath.isFile(), is(true));
+ FileUtils.deleteDirectory(new File(BASE_DIR));
+ }
+
+ /**
+ * This test case checks with a child node.
+ *
+ * @throws IOException when fails to do IO operations for test case
+ */
+ @Test
+ public void addPackageInfoWithChildNode() throws IOException {
+
+ File dirPath = new File(CREATE_PATH);
+ dirPath.mkdirs();
+ YangIoUtils.addPackageInfo(dirPath, CHECK1, PATH + CREATE_PATH, true);
+ File filePath = new File(dirPath + File.separator + PKG_INFO);
+ assertThat(filePath.isFile(), is(true));
+ FileUtils.deleteDirectory(new File(BASE_DIR));
+ }
+
+ /**
+ * This test case checks whether the package-info file is created when invalid path is given.
+ *
+ * @throws IOException when fails to do IO operations for test case
+ */
+ @Test
+ public void addPackageInfoWithEmptyPathTest() throws IOException {
+
+ File dirPath = new File("invalid/check");
+ thrown.expect(IOException.class);
+ thrown.expectMessage(MSG);
+ YangIoUtils.addPackageInfo(dirPath, CHECK1, CREATE_PATH, false);
+ File filePath1 = new File(dirPath + File.separator + PKG_INFO);
+ assertThat(filePath1.isFile(), is(false));
+ FileUtils.deleteDirectory(dirPath);
+ FileUtils.deleteDirectory(new File(BASE_DIR));
+ }
+
+ /**
+ * A private constructor is tested.
+ *
+ * @throws SecurityException if any security violation is observed
+ * @throws NoSuchMethodException if when the method is not found
+ * @throws IllegalArgumentException if there is illegal argument found
+ * @throws InstantiationException if instantiation is provoked for the private constructor
+ * @throws IllegalAccessException if instance is provoked or a method is provoked
+ * @throws InvocationTargetException when an exception occurs by the method or constructor
+ */
+ @Test
+ public void callPrivateConstructors()
+ throws SecurityException, NoSuchMethodException, IllegalArgumentException,
+ InstantiationException, IllegalAccessException, InvocationTargetException {
+
+ Class<?>[] classesToConstruct = {YangIoUtils.class};
+ for (Class<?> clazz : classesToConstruct) {
+ Constructor<?> constructor = clazz.getDeclaredConstructor();
+ constructor.setAccessible(true);
+ assertThat(null, not(constructor.newInstance()));
+ }
+ }
+
+ /**
+ * This test case checks if the directory is cleaned.
+ *
+ * @throws IOException when fails to do IO operations for test case
+ */
+ @Test
+ public void cleanGeneratedDirTest() throws IOException {
+
+ File baseDirPath = new File(BASE_DIR);
+ File createNewDir = new File(BASE_DIR + File.separator + UtilConstants.YANG_GEN_DIR);
+ createNewDir.mkdirs();
+ File createFile = new File(createNewDir + File.separator + "check1.java");
+ createFile.createNewFile();
+ YangIoUtils.deleteDirectory(baseDirPath.getAbsolutePath());
+ FileUtils.deleteDirectory(createNewDir);
+ FileUtils.deleteDirectory(baseDirPath);
+ }
+
+ /**
+ * This test case checks the cleaning method when an invalid path is provided.
+ *
+ * @throws IOException when fails to do IO operations for test case
+ */
+ @Test
+ public void cleanWithInvalidDirTest() throws IOException {
+
+ File baseDirPath = new File(BASE_DIR + "invalid");
+ YangIoUtils.deleteDirectory(baseDirPath.getAbsolutePath());
+ }
+
+ /**
+ * This test case tests whether the directories are getting created.
+ */
+ @Test
+ public void createDirectoryTest() throws IOException {
+
+ File dirPath = YangIoUtils.createDirectories(CREATE_PATH);
+ assertThat(dirPath.isDirectory(), is(true));
+ FileUtils.deleteDirectory(new File(BASE_DIR));
+ }
+
+ /**
+ * Unit test case for trim at last method.
+ */
+ @Test
+ public void testForTrimAtLast() {
+
+ String test = YangIoUtils.trimAtLast(CHECK_STRING, "six");
+ assertThat(test.contains(TRIM_STRING), is(true));
+ }
+}
diff --git a/plugin/maven/src/test/resources/CopyrightHeader.txt b/compiler/base/utils/src/test/resources/CopyrightHeader.txt
similarity index 100%
rename from plugin/maven/src/test/resources/CopyrightHeader.txt
rename to compiler/base/utils/src/test/resources/CopyrightHeader.txt
diff --git a/compiler/plugin/buck/pom.xml b/compiler/plugin/buck/pom.xml
new file mode 100644
index 0000000..958a92d
--- /dev/null
+++ b/compiler/plugin/buck/pom.xml
@@ -0,0 +1,68 @@
+<!--
+ ~ Copyright 2016-present Open Networking Laboratory
+ ~
+ ~ Licensed 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
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License 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.
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-compiler-plugin</artifactId>
+ <version>1.12-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>onos-yang-compiler-buck-plugin</artifactId>
+ <packaging>jar</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>buck-api</artifactId>
+ <version>0.1-SNAPSHOT</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-compiler-tool</artifactId>
+ <version>1.12-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-shade-plugin</artifactId>
+ <version>2.4.3</version>
+ <executions>
+ <execution>
+ <phase>package</phase>
+ <goals>
+ <goal>shade</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <artifactSet>
+ <excludes>
+ <exclude>com.google.guava:guava</exclude>
+ </excludes>
+ </artifactSet>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/compiler/plugin/buck/src/main/java/org/onosproject/yang/compiler/plugin/buck/YangGenerator.java b/compiler/plugin/buck/src/main/java/org/onosproject/yang/compiler/plugin/buck/YangGenerator.java
new file mode 100644
index 0000000..ea69169
--- /dev/null
+++ b/compiler/plugin/buck/src/main/java/org/onosproject/yang/compiler/plugin/buck/YangGenerator.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.plugin.buck;
+
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.utils.DataModelUtils;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+import org.onosproject.yang.compiler.base.tool.CallablePlugin;
+import org.onosproject.yang.compiler.base.tool.YangToolManager;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import static java.util.stream.Collectors.toList;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SLASH;
+import static org.onosproject.yang.compiler.utils.UtilConstants.YANG_RESOURCES;
+
+/**
+ * Generates Java sources from a Yang model.
+ */
+public class YangGenerator implements CallablePlugin {
+
+ private final List<File> models;
+ private final List<String> depJar;
+ private final String DEFAULT_JAR_RES_PATH = SLASH + YANG_RESOURCES + SLASH;
+ private String outputDirectory;
+
+ YangGenerator(List<File> models, String outputDirectory, List<String> depJar) {
+ this.models = models;
+ this.depJar = depJar;
+ this.outputDirectory = outputDirectory + SLASH;
+ }
+
+ public void execute() throws YangParsingException {
+ List<String> files = getListOfFile();
+ synchronized (files) {
+ try {
+ YangPluginConfig config = new YangPluginConfig();
+ config.setCodeGenDir(outputDirectory);
+ config.resourceGenDir(outputDirectory + DEFAULT_JAR_RES_PATH);
+ //for inter-jar linking.
+ List<YangNode> dependentSchema = new ArrayList<>();
+ for (String jar : depJar) {
+ dependentSchema.addAll(DataModelUtils.parseJarFile(jar, outputDirectory));
+ }
+ //intra jar file linking.
+ YangToolManager manager = new YangToolManager();
+ manager.compileYangFiles(manager.createYangFileInfoSet(files),
+ dependentSchema, config, this);
+ } catch (Exception e) {
+ throw new YangParsingException(e);
+ }
+ }
+ }
+
+ private List<String> getListOfFile() {
+ List<String> files = new ArrayList<>();
+ if (models != null) {
+ synchronized (models) {
+ files.addAll(models.stream().map(File::toString)
+ .collect(toList()));
+ }
+ }
+ return files;
+ }
+
+ @Override
+ public void addGeneratedCodeToBundle() {
+ //TODO: add functionality.
+ }
+
+ @Override
+ public void addCompiledSchemaToBundle() throws IOException {
+ //TODO: add functionality.
+ }
+
+ @Override
+ public void addYangFilesToBundle() throws IOException {
+ //TODO: add functionality.
+ }
+}
diff --git a/compiler/plugin/buck/src/main/java/org/onosproject/yang/compiler/plugin/buck/YangLibrary.java b/compiler/plugin/buck/src/main/java/org/onosproject/yang/compiler/plugin/buck/YangLibrary.java
new file mode 100644
index 0000000..0eed357
--- /dev/null
+++ b/compiler/plugin/buck/src/main/java/org/onosproject/yang/compiler/plugin/buck/YangLibrary.java
@@ -0,0 +1,129 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.plugin.buck;
+
+import com.facebook.buck.jvm.java.JarDirectoryStep;
+import com.facebook.buck.model.BuildTargets;
+import com.facebook.buck.rules.AbstractBuildRule;
+import com.facebook.buck.rules.AddToRuleKey;
+import com.facebook.buck.rules.BuildContext;
+import com.facebook.buck.rules.BuildRuleParams;
+import com.facebook.buck.rules.BuildableContext;
+import com.facebook.buck.rules.SourcePath;
+import com.facebook.buck.rules.SourcePathResolver;
+import com.facebook.buck.step.Step;
+import com.facebook.buck.step.fs.MakeCleanDirectoryStep;
+import com.facebook.buck.step.fs.MkdirStep;
+import com.facebook.buck.step.fs.RmStep;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSortedSet;
+
+import javax.annotation.Nullable;
+import java.io.File;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import static org.onosproject.yang.compiler.utils.UtilConstants.SLASH;
+import static org.onosproject.yang.compiler.utils.UtilConstants.YANG;
+
+/**
+ * Buck rule to define a library built form a Yang model.
+ */
+public class YangLibrary extends AbstractBuildRule {
+
+ @AddToRuleKey
+ private final ImmutableSortedSet<SourcePath> srcs;
+ private final BuildRuleParams params;
+
+ private final Path genSrcsDirectory;
+ private final Path outputDirectory;
+ private final Path output;
+
+ public YangLibrary(
+ BuildRuleParams params,
+ SourcePathResolver resolver,
+ ImmutableSortedSet<SourcePath> srcs) {
+ super(params, resolver);
+ this.srcs = srcs;
+ this.params = params;
+ genSrcsDirectory = BuildTargets.getGenPath(getProjectFilesystem(),
+ params.getBuildTarget(),
+ "%s__yang-gen");
+ outputDirectory = BuildTargets.getGenPath(getProjectFilesystem(),
+ params.getBuildTarget(),
+ "%s__yang-output");
+ output = Paths.get(String.format("%s/%s-sources.jar",
+ outputDirectory,
+ params.getBuildTarget().getShortNameAndFlavorPostfix()));
+ }
+
+ @Override
+ public ImmutableList<Step> getBuildSteps(BuildContext buildContext, BuildableContext buildableContext) {
+ ImmutableList.Builder<Step> steps = ImmutableList.builder();
+
+ // Delete the old output for this rule, if it exists.
+ steps.add(
+ new RmStep(
+ getProjectFilesystem(),
+ getPathToOutput(),
+ /* shouldForceDeletion */ true,
+ /* shouldRecurse */ true));
+
+ // Make sure that the directory to contain the output file exists. Rules get output to a
+ // directory named after the base path, so we don't want to nuke the entire directory.
+ steps.add(new MkdirStep(getProjectFilesystem(), outputDirectory));
+
+ steps.add(new MakeCleanDirectoryStep(getProjectFilesystem(), genSrcsDirectory));
+
+ List<Path> sourcePaths = srcs.stream()
+ .map(s -> getResolver().getRelativePath(s))
+ .collect(Collectors.toList());
+
+ steps.add(new YangStep(getProjectFilesystem(), sourcePaths, genSrcsDirectory,
+ params.getDeps()));
+
+ steps.add(new JarDirectoryStep(
+ getProjectFilesystem(),
+ output,
+ ImmutableSortedSet.of(genSrcsDirectory),
+ null,
+ null));
+
+ return steps.build();
+ }
+
+ @Nullable
+ @Override
+ public Path getPathToOutput() {
+ return output;
+ }
+
+
+ /**
+ * Returns generated sources directory.
+ *
+ * @return generated sources directory
+ */
+ public Path getGenSrcsDirectory() {
+ File dir = new File(genSrcsDirectory.toString() + SLASH + YANG);
+ dir.mkdirs();
+ return genSrcsDirectory;
+ }
+
+}
diff --git a/compiler/plugin/buck/src/main/java/org/onosproject/yang/compiler/plugin/buck/YangLibraryDescription.java b/compiler/plugin/buck/src/main/java/org/onosproject/yang/compiler/plugin/buck/YangLibraryDescription.java
new file mode 100644
index 0000000..dc088dd
--- /dev/null
+++ b/compiler/plugin/buck/src/main/java/org/onosproject/yang/compiler/plugin/buck/YangLibraryDescription.java
@@ -0,0 +1,183 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.plugin.buck;
+
+import com.facebook.buck.cli.BuckConfig;
+import com.facebook.buck.jvm.java.CalculateAbi;
+import com.facebook.buck.jvm.java.DefaultJavaLibrary;
+import com.facebook.buck.jvm.java.JavaBuckConfig;
+import com.facebook.buck.jvm.java.JavaOptions;
+import com.facebook.buck.jvm.java.JavacOptions;
+import com.facebook.buck.jvm.java.JavacOptionsAmender;
+import com.facebook.buck.jvm.java.JavacOptionsFactory;
+import com.facebook.buck.jvm.java.JavacToJarStepFactory;
+import com.facebook.buck.jvm.java.JvmLibraryArg;
+import com.facebook.buck.model.BuildTarget;
+import com.facebook.buck.model.BuildTargets;
+import com.facebook.buck.model.Flavor;
+import com.facebook.buck.model.Flavored;
+import com.facebook.buck.model.ImmutableFlavor;
+import com.facebook.buck.model.UnflavoredBuildTarget;
+import com.facebook.buck.parser.NoSuchBuildTargetException;
+import com.facebook.buck.rules.BuildRule;
+import com.facebook.buck.rules.BuildRuleParams;
+import com.facebook.buck.rules.BuildRuleResolver;
+import com.facebook.buck.rules.BuildRuleType;
+import com.facebook.buck.rules.BuildTargetSourcePath;
+import com.facebook.buck.rules.Description;
+import com.facebook.buck.rules.PathSourcePath;
+import com.facebook.buck.rules.SourcePath;
+import com.facebook.buck.rules.SourcePathResolver;
+import com.facebook.buck.rules.SourcePaths;
+import com.facebook.buck.rules.TargetGraph;
+import com.google.common.base.Optional;
+import com.google.common.base.Suppliers;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.ImmutableSortedSet;
+import org.onosproject.yang.compiler.utils.UtilConstants;
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+/**
+ * Description of a Buck Yang Library.
+ */
+public class YangLibraryDescription
+ implements Description<YangLibraryDescription.Arg>, Flavored {
+ public static final BuildRuleType TYPE = BuildRuleType.of("yang_library");
+ public static final Flavor SOURCES = ImmutableFlavor.of("srcs");
+
+ private final JavacOptions defaultJavacOptions;
+ private final JavaOptions defaultJavaOptions;
+
+ public YangLibraryDescription(BuckConfig config) {
+ JavaBuckConfig javaConfig = new JavaBuckConfig(config);
+ defaultJavacOptions = javaConfig.getDefaultJavacOptions();
+ defaultJavaOptions = javaConfig.getDefaultJavaOptions();
+ }
+
+ @Override
+ public BuildRuleType getBuildRuleType() {
+ return TYPE;
+ }
+
+ @Override
+ public Arg createUnpopulatedConstructorArg() {
+ return new Arg();
+ }
+
+ @Override
+ public <A extends Arg> BuildRule createBuildRule(TargetGraph targetGraph,
+ BuildRuleParams params,
+ BuildRuleResolver resolver,
+ A args)
+ throws NoSuchBuildTargetException {
+
+ SourcePathResolver pathResolver = new SourcePathResolver(resolver);
+
+ UnflavoredBuildTarget unflavoredBuildTarget =
+ params.getBuildTarget().getUnflavoredBuildTarget();
+ BuildRuleParams yangParams = params.copyWithBuildTarget(
+ BuildTargets.createFlavoredBuildTarget(
+ unflavoredBuildTarget, SOURCES));
+ BuildRule yangLib = resolver.addToIndex(new YangLibrary(yangParams, pathResolver, args.srcs));
+
+ if (params.getBuildTarget().getFlavors().contains(SOURCES)) {
+ return yangLib;
+ }
+
+ JavacOptions javacOptions = JavacOptionsFactory.create(
+ defaultJavacOptions,
+ params,
+ resolver,
+ pathResolver,
+ args
+ );
+
+
+ // Create to main compile rule.
+ BuildRuleParams javaParams = params.copyWithChanges(
+ params.getBuildTarget(),
+ Suppliers.ofInstance(
+ ImmutableSortedSet.<BuildRule>naturalOrder()
+ .add(yangLib)
+// .addAll(deps)
+ //FIXME remove when we figure out compile time deps
+ .addAll((args.deps.or(ImmutableSortedSet.<BuildTarget>of())).stream().map(resolver::getRule).collect(Collectors.toList()))
+// .addAll(BuildRules.getExportedRules(deps))
+ .addAll(pathResolver.filterBuildRuleInputs(javacOptions.getInputs(pathResolver)))
+ .build()),
+ Suppliers.ofInstance(ImmutableSortedSet.<BuildRule>of()));
+
+ BuildTarget abiJarTarget = params.getBuildTarget().withAppendedFlavors(CalculateAbi.FLAVOR);
+
+ //Add yang meta data resources to generated jar file resources.
+
+ Path rscRoot = ((YangLibrary) yangLib).getGenSrcsDirectory();
+ Path resPath = Paths.get(rscRoot + UtilConstants.SLASH + UtilConstants.YANG);
+
+ SourcePath path = new PathSourcePath(params.getProjectFilesystem(),
+ resPath);
+
+ DefaultJavaLibrary library =
+ resolver.addToIndex(
+ new DefaultJavaLibrary(
+ javaParams,
+ pathResolver,
+ ImmutableSet.of(SourcePaths.getToBuildTargetSourcePath().apply(yangLib)),
+ /* resources */ImmutableSet.of(path),
+ javacOptions.getGeneratedSourceFolderName(),
+ /* proguardConfig */ Optional.<SourcePath>absent(),
+ /* postprocessClassesCommands */ ImmutableList.<String>of(),
+ /* exportedDeps */ ImmutableSortedSet.<BuildRule>of(),
+ /* providedDeps */ ImmutableSortedSet.<BuildRule>of(),
+ /* abiJar */ new BuildTargetSourcePath(abiJarTarget),
+ javacOptions.trackClassUsage(),
+ /* additionalClasspathEntries */ ImmutableSet.<Path>of(),
+ new JavacToJarStepFactory(javacOptions, JavacOptionsAmender.IDENTITY),
+ /* resourcesRoot */ Optional.<Path>of(rscRoot),
+ /* manifestFile */ Optional.absent(),
+ /* mavenCoords */ Optional.<String>absent(),
+ /* tests */ ImmutableSortedSet.<BuildTarget>of(),
+ /* classesToRemoveFromJar */ ImmutableSet.<Pattern>of()));
+
+ resolver.addToIndex(
+ CalculateAbi.of(
+ abiJarTarget,
+ pathResolver,
+ params,
+ new BuildTargetSourcePath(library.getBuildTarget())));
+
+ return library;
+ }
+
+ @Override
+ public boolean hasFlavors(ImmutableSet<Flavor> flavors) {
+ return flavors.isEmpty() || flavors.contains(SOURCES);
+ }
+
+ public static class Arg extends JvmLibraryArg {
+ public ImmutableSortedSet<SourcePath> srcs;
+ public Optional<ImmutableSortedSet<BuildTarget>> deps;
+
+ //TODO other params here
+ }
+
+}
diff --git a/compiler/plugin/buck/src/main/java/org/onosproject/yang/compiler/plugin/buck/YangParsingException.java b/compiler/plugin/buck/src/main/java/org/onosproject/yang/compiler/plugin/buck/YangParsingException.java
new file mode 100644
index 0000000..c4b9461
--- /dev/null
+++ b/compiler/plugin/buck/src/main/java/org/onosproject/yang/compiler/plugin/buck/YangParsingException.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.plugin.buck;
+
+/**
+ * Used to signal a problem parsing a Yang model.
+ */
+public class YangParsingException extends Exception {
+
+ /**
+ * Creates a YangParsingException based on another exception.
+ * @param t exception from the parser
+ */
+ public YangParsingException (Throwable t) {
+ super(t);
+ }
+
+}
diff --git a/compiler/plugin/buck/src/main/java/org/onosproject/yang/compiler/plugin/buck/YangStep.java b/compiler/plugin/buck/src/main/java/org/onosproject/yang/compiler/plugin/buck/YangStep.java
new file mode 100644
index 0000000..076fd0a
--- /dev/null
+++ b/compiler/plugin/buck/src/main/java/org/onosproject/yang/compiler/plugin/buck/YangStep.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.plugin.buck;
+
+import com.facebook.buck.io.ProjectFilesystem;
+import com.facebook.buck.model.UnflavoredBuildTarget;
+import com.facebook.buck.rules.BuildRule;
+import com.facebook.buck.step.AbstractExecutionStep;
+import com.facebook.buck.step.ExecutionContext;
+import com.facebook.buck.step.StepExecutionResult;
+import com.google.common.collect.ImmutableSortedSet;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import static org.onosproject.yang.compiler.utils.UtilConstants.JAR;
+import static org.onosproject.yang.compiler.utils.UtilConstants.LIB;
+import static org.onosproject.yang.compiler.utils.UtilConstants.LIB_PATH;
+import static org.onosproject.yang.compiler.utils.UtilConstants.OUT;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PERIOD;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SLASH;
+
+/**
+ * Buck build step to trigger Yang Java source file generation.
+ */
+public class YangStep extends AbstractExecutionStep {
+
+ private static final String DESCRIPTION = "yang-compile";
+ private final ImmutableSortedSet<BuildRule> deps;
+ private final ProjectFilesystem filesystem;
+ private final List<Path> srcs;
+ private final Path output;
+
+ YangStep(ProjectFilesystem filesystem,
+ List<Path> srcs,
+ Path genSourcesDirectory, ImmutableSortedSet<BuildRule> deps) {
+ super(DESCRIPTION);
+ this.filesystem = filesystem;
+ this.srcs = srcs;
+ this.deps = deps;
+ this.output = genSourcesDirectory;
+ }
+
+ @Override
+ public StepExecutionResult execute(ExecutionContext executionContext)
+ throws IOException, InterruptedException {
+
+ List<File> sourceFiles = srcs.stream().map(Path::toFile)
+ .collect(Collectors.toList());
+ try {
+ new YangGenerator(sourceFiles, output.toString(), getJarPaths())
+ .execute();
+ return StepExecutionResult.SUCCESS;
+ } catch (YangParsingException e) {
+ executionContext.getConsole().printErrorText(e.getMessage());
+ return StepExecutionResult.ERROR;
+ }
+ }
+
+ private List<String> getJarPaths() {
+ StringBuilder builder;
+ List<String> depJarPaths = new ArrayList<>();
+ String[] array;
+ UnflavoredBuildTarget uBt;
+ if (deps != null) {
+ for (BuildRule rule : deps) {
+ if (!rule.getBuildTarget().getFullyQualifiedName()
+ .contains(LIB_PATH)) {
+ builder = new StringBuilder();
+ //build absolute path for jar file
+ builder.append(filesystem.getRootPath().toString()).append(SLASH)
+ .append(filesystem.getBuckPaths().getGenDir())
+ .append(SLASH);
+ uBt = rule.getBuildTarget().getUnflavoredBuildTarget();
+ array = uBt.getBaseName().split(SLASH);
+ for (int i = 2; i < array.length; i++) {
+ builder.append(array[i]).append(SLASH);
+ }
+ builder.append(LIB).append(uBt.getShortName())
+ .append(OUT).append(SLASH)
+ .append(uBt.getShortName()).append(PERIOD + JAR);
+ depJarPaths.add(builder.toString());
+ }
+ }
+ }
+ return depJarPaths;
+ }
+}
diff --git a/compiler/plugin/maven/pom.xml b/compiler/plugin/maven/pom.xml
new file mode 100644
index 0000000..afc4947
--- /dev/null
+++ b/compiler/plugin/maven/pom.xml
@@ -0,0 +1,150 @@
+<!--
+ ~ Copyright 2016-present Open Networking Laboratory
+ ~
+ ~ Licensed 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
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License 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.
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-compiler-plugin</artifactId>
+ <version>1.12-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>onos-yang-compiler-maven-plugin</artifactId>
+ <version>1.12-SNAPSHOT</version>
+ <packaging>maven-plugin</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-core</artifactId>
+ <version>3.3.9</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>3.3.9</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.plugin-tools</groupId>
+ <artifactId>maven-plugin-annotations</artifactId>
+ <version>3.4</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-scr-plugin</artifactId>
+ <version>1.21.0</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact</artifactId>
+ <version>3.3.9</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-project</artifactId>
+ <version>3.0-alpha-2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-model</artifactId>
+ <version>3.3.9</version>
+ </dependency>
+ <dependency>
+ <groupId>org.sonatype.plexus</groupId>
+ <artifactId>plexus-build-api</artifactId>
+ <version>0.0.7</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <version>1.10</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>1.7.21</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.12</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-compiler-tool</artifactId>
+ <version>1.12-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <version>1.10</version>
+ <executions>
+ <execution>
+ <id>add-source</id>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>add-source</goal>
+ </goals>
+ <configuration>
+ <sources>
+ <source>
+ target/generated-sources/org/onosproject/yangutils/parser/antlrgencode
+ </source>
+ <sourceDirectory>
+ target/generated-sources/org/onosproject/yangutils/parser/antlrgencode
+ </sourceDirectory>
+ </sources>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <version>3.4</version>
+ <configuration>
+ <skipErrorNoDescriptorsFound>true
+ </skipErrorNoDescriptorsFound>
+ </configuration>
+ <executions>
+ <execution>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>descriptor</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <version>2.5.4</version>
+ <extensions>true</extensions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/compiler/plugin/maven/src/main/java/org/onosproject/yang/compiler/plugin/maven/YangPluginUtils.java b/compiler/plugin/maven/src/main/java/org/onosproject/yang/compiler/plugin/maven/YangPluginUtils.java
new file mode 100644
index 0000000..c5f0e69
--- /dev/null
+++ b/compiler/plugin/maven/src/main/java/org/onosproject/yang/compiler/plugin/maven/YangPluginUtils.java
@@ -0,0 +1,208 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.plugin.maven;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.Resource;
+import org.apache.maven.project.MavenProject;
+import org.onosproject.yang.compiler.base.tool.YangToolManager;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.utils.DataModelUtils;
+import org.onosproject.yang.compiler.utils.io.impl.YangIoUtils;
+import org.slf4j.Logger;
+import org.sonatype.plexus.build.incremental.BuildContext;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import static org.onosproject.yang.compiler.utils.UtilConstants.COLON;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EMPTY_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.HYPHEN;
+import static org.onosproject.yang.compiler.utils.UtilConstants.JAR;
+import static org.onosproject.yang.compiler.utils.UtilConstants.PERIOD;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SLASH;
+import static org.onosproject.yang.compiler.utils.UtilConstants.TEMP;
+import static org.slf4j.LoggerFactory.getLogger;
+
+/**
+ * Represents YANG plugin utilities.
+ */
+public final class YangPluginUtils {
+
+ private static final Logger log = getLogger(YangPluginUtils.class);
+
+ private static final String TEXT_FILE_EXTENSION = ".txt";
+ private static final String VERSION_META_DATA = "VersionMetaData";
+ private static final String PLUGIN_ARTIFACT = "onos-yang-maven-plugin";
+
+ private YangPluginUtils() {
+ }
+
+ /**
+ * Adds generated source directory to the compilation root.
+ *
+ * @param source directory
+ * @param project current maven project
+ * @param context current build context
+ */
+ static void addToCompilationRoot(String source, MavenProject project, BuildContext context) {
+ project.addCompileSourceRoot(source);
+ context.refresh(project.getBasedir());
+ log.info("Source directory added to compilation root: " + source);
+ }
+
+ /**
+ * Copies YANG files to the current project's output directory.
+ *
+ * @param outputDir project's output directory
+ * @param project maven project
+ * @throws IOException when fails to copy files to destination resource directory
+ */
+ static void copyYangFilesToTarget(String outputDir, MavenProject project)
+ throws IOException {
+
+ addToProjectResource(outputDir + SLASH + TEMP + SLASH, project);
+ }
+
+ /**
+ * Serializes data-model.
+ *
+ * @param directory base directory for serialized files
+ * @param project maven project
+ * @param operation true if need to add to resource
+ * @throws IOException when fails to do IO operations
+ */
+ public static void serializeDataModel(String directory,
+ MavenProject project,
+ boolean operation)
+ throws IOException {
+
+ String serFileDirPath = directory + YangToolManager.DEFAULT_JAR_RES_PATH;
+ File dir = new File(serFileDirPath);
+ dir.mkdirs();
+
+ if (operation) {
+ addToProjectResource(directory + SLASH + TEMP + SLASH, project);
+ }
+
+ if (operation) {
+ addVersionMetaDataFile(project, serFileDirPath);
+ }
+ }
+
+ /**
+ * Adds version meta data files for YSR to know version of YANG tools.
+ *
+ * @param project maven project
+ * @param dir directory
+ * @throws IOException when fails to do IO operations
+ */
+ private static void addVersionMetaDataFile(MavenProject project, String dir)
+ throws IOException {
+ List<Plugin> plugins = project.getBuildPlugins();
+ Iterator<Plugin> it = plugins.iterator();
+ Plugin plugin = it.next();
+ String data = EMPTY_STRING;
+ while (it.hasNext()) {
+ if (plugin.getArtifactId().equals(PLUGIN_ARTIFACT)) {
+ data = plugin.getGroupId() + COLON + plugin.getArtifactId()
+ + COLON + plugin.getVersion();
+ }
+ plugin = it.next();
+ }
+ if (data.equals(EMPTY_STRING)) {
+ throw new IOException("Invalid artifact for " + PLUGIN_ARTIFACT);
+ }
+ String verFileName = dir + VERSION_META_DATA + TEXT_FILE_EXTENSION;
+ PrintWriter out = new PrintWriter(verFileName);
+ out.print(data);
+ out.close();
+ }
+
+ /**
+ * Returns list of jar path.
+ *
+ * @param project maven project
+ * @param localRepository local repository
+ * @param remoteRepos remote repository
+ * @return list of jar paths
+ */
+ private static List<String> resolveDependencyJarPath(MavenProject project, ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepos) {
+
+ StringBuilder path = new StringBuilder();
+ List<String> jarPaths = new ArrayList<>();
+ for (Object obj : project.getDependencies()) {
+
+ Dependency dependency = (Dependency) obj;
+ path.append(localRepository.getBasedir());
+ path.append(SLASH);
+ path.append(YangIoUtils.getPackageDirPathFromJavaJPackage(dependency.getGroupId()));
+ path.append(SLASH);
+ path.append(dependency.getArtifactId());
+ path.append(SLASH);
+ path.append(dependency.getVersion());
+ path.append(SLASH);
+ path.append(dependency.getArtifactId() + HYPHEN + dependency.getVersion() + PERIOD + JAR);
+ File jarFile = new File(path.toString());
+ if (jarFile.exists()) {
+ jarPaths.add(path.toString());
+ }
+ path.delete(0, path.length());
+ }
+
+ for (ArtifactRepository repo : remoteRepos) {
+ // TODO: add resolver for remote repo.
+ }
+ return jarPaths;
+ }
+
+ /**
+ * Resolves inter jar dependencies.
+ *
+ * @param project current maven project
+ * @param localRepository local maven repository
+ * @param remoteRepos list of remote repository
+ * @param directory directory for serialized files
+ * @return list of resolved datamodel nodes
+ * @throws IOException when fails to do IO operations
+ */
+ static List<YangNode> resolveInterJarDependencies(MavenProject project, ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepos, String directory)
+ throws IOException {
+
+ List<String> dependenciesJarPaths = resolveDependencyJarPath(project, localRepository, remoteRepos);
+ List<YangNode> resolvedDataModelNodes = new ArrayList<>();
+ for (String dependency : dependenciesJarPaths) {
+ resolvedDataModelNodes.addAll(DataModelUtils.parseJarFile(dependency, directory));
+ }
+ return resolvedDataModelNodes;
+ }
+
+ /* Adds directory to resources of project */
+ private static void addToProjectResource(String dir, MavenProject project) {
+ Resource rsc = new Resource();
+ rsc.setDirectory(dir);
+ project.addResource(rsc);
+ }
+}
diff --git a/compiler/plugin/maven/src/main/java/org/onosproject/yang/compiler/plugin/maven/YangUtilManager.java b/compiler/plugin/maven/src/main/java/org/onosproject/yang/compiler/plugin/maven/YangUtilManager.java
new file mode 100644
index 0000000..a9d0ce0
--- /dev/null
+++ b/compiler/plugin/maven/src/main/java/org/onosproject/yang/compiler/plugin/maven/YangUtilManager.java
@@ -0,0 +1,430 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.plugin.maven;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugins.annotations.Component;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.rtinfo.RuntimeInformation;
+import org.onosproject.yang.compiler.parser.YangUtilsParser;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+import org.onosproject.yang.compiler.base.tool.CallablePlugin;
+import org.onosproject.yang.compiler.base.tool.YangFileInfo;
+import org.onosproject.yang.compiler.base.tool.YangToolManager;
+import org.onosproject.yang.compiler.base.tool.exception.YangToolException;
+import org.onosproject.yang.compiler.datamodel.ResolvableType;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangReferenceResolver;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.linker.YangLinker;
+import org.onosproject.yang.compiler.linker.exceptions.LinkerException;
+import org.onosproject.yang.compiler.linker.impl.YangLinkerManager;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGeneratorUtil;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+import org.onosproject.yang.compiler.utils.io.YangToJavaNamingConflictUtil;
+import org.sonatype.plexus.build.incremental.BuildContext;
+
+import java.io.IOException;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
+import static java.util.Collections.sort;
+import static org.apache.maven.plugins.annotations.LifecyclePhase.PROCESS_SOURCES;
+import static org.apache.maven.plugins.annotations.ResolutionScope.COMPILE;
+import static org.onosproject.yang.compiler.linker.impl.YangLinkerUtils.resolveGroupingInDefinationScope;
+import static org.onosproject.yang.compiler.plugin.maven.YangPluginUtils.addToCompilationRoot;
+import static org.onosproject.yang.compiler.plugin.maven.YangPluginUtils.copyYangFilesToTarget;
+import static org.onosproject.yang.compiler.plugin.maven.YangPluginUtils.resolveInterJarDependencies;
+import static org.onosproject.yang.compiler.plugin.maven.YangPluginUtils.serializeDataModel;
+import static org.onosproject.yang.compiler.utils.UtilConstants.DEFAULT_BASE_PKG;
+import static org.onosproject.yang.compiler.utils.UtilConstants.EMPTY_STRING;
+import static org.onosproject.yang.compiler.utils.UtilConstants.IN;
+import static org.onosproject.yang.compiler.utils.UtilConstants.NEW_LINE;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SLASH;
+import static org.onosproject.yang.compiler.utils.UtilConstants.TEMP;
+import static org.onosproject.yang.compiler.utils.UtilConstants.VERSION_ERROR;
+import static org.onosproject.yang.compiler.utils.UtilConstants.YANG_RESOURCES;
+import static org.onosproject.yang.compiler.utils.io.impl.YangFileScanner.getYangFiles;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.deleteDirectory;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getDirectory;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getPackageDirPathFromJavaJPackage;
+import static org.onosproject.yang.compiler.utils.io.impl.YangIoUtils.getVersionValue;
+
+/**
+ * Represents ONOS YANG utility maven plugin.
+ * Goal of plugin is yang2java.
+ * Execution phase is generate-sources.
+ * requiresDependencyResolution at compile time.
+ */
+@Mojo(name = "yang2java", defaultPhase = PROCESS_SOURCES,
+ requiresDependencyResolution = COMPILE)
+public class YangUtilManager extends AbstractMojo implements CallablePlugin {
+
+ private static final String DEFAULT_PKG =
+ getPackageDirPathFromJavaJPackage(DEFAULT_BASE_PKG);
+ private static final int SUPPORTED_VERSION = 339;
+ private final YangPluginConfig yangPlugin = new YangPluginConfig();
+ private final YangUtilsParser yangUtilsParser = new YangUtilsParserManager();
+ private final YangLinker yangLinker = new YangLinkerManager();
+ private final Set<YangNode> yangNodeSet = new HashSet<>();
+ private YangNode rootNode;
+ // YANG file information set.
+ private Set<YangFileInfo> yangFileInfoSet = new HashSet<>();
+ private YangFileInfo curYangFileInfo = new YangFileInfo();
+ /**
+ * Source directory for YANG files.
+ */
+ @Parameter(property = "yangFilesDir", defaultValue = "src/main/yang")
+ private String yangFilesDir;
+
+ /**
+ * Source directory for generated files.
+ */
+ @Parameter(property = "classFileDir", defaultValue = "target/generated-sources")
+ private String classFileDir;
+
+ /**
+ * Base directory for project.
+ */
+ @Parameter(property = "basedir", defaultValue = "${basedir}")
+ private String baseDir;
+
+ /**
+ * Output directory.
+ */
+ @Parameter(property = "project.build.outputDirectory", required = true,
+ defaultValue = "target/classes")
+ private String outputDirectory;
+
+ /**
+ * Current maven project.
+ */
+ @Parameter(property = "project", required = true, readonly = true,
+ defaultValue = "${project}")
+ private MavenProject project;
+
+ /**
+ * Replacement required for period special character in the identifier.
+ */
+ @Parameter(property = "replacementForPeriod")
+ private String replacementForPeriod;
+
+ /**
+ * Replacement required for underscore special character in the identifier.
+ */
+ @Parameter(property = "replacementForUnderscore")
+ private String replacementForUnderscore;
+
+ /**
+ * Replacement required for hyphen special character in the identifier.
+ */
+ @Parameter(property = "replacementForHyphen")
+ private String replacementForHyphen;
+
+ /**
+ * Prefix which is required for adding with the identifier.
+ */
+ @Parameter(property = "prefixForIdentifier")
+ private String prefixForIdentifier;
+
+ /**
+ * Build context.
+ */
+ @Component
+ private BuildContext context;
+
+ /**
+ * Local maven repository.
+ */
+ @Parameter(readonly = true, defaultValue = "${localRepository}")
+ private ArtifactRepository localRepository;
+
+ /**
+ * Remote maven repositories.
+ */
+ @Parameter(readonly = true, defaultValue = "${project.remoteArtifactRepositories}")
+ private List<ArtifactRepository> remoteRepository;
+
+ /**
+ * Code generation is for nbi or sbi.
+ */
+ @Parameter(property = "generateJavaFileForSbi", defaultValue = "nbi")
+ private String generateJavaFileForSbi;
+
+ /**
+ * The Runtime information for the current instance of Maven.
+ */
+ @Component
+ private RuntimeInformation runtime;
+
+ /**
+ * The name of the property in which to store the version of Maven.
+ */
+ @Parameter(defaultValue = "maven.version")
+ private String versionProperty;
+
+ private String outputDir;
+ private String codeGenDir;
+
+ @Override
+ public void execute()
+ throws MojoExecutionException, MojoFailureException {
+
+ try {
+ validateMavenVersion();
+ /*
+ * For deleting the generated code in previous build.
+ */
+ outputDir = getDirectory(baseDir, outputDirectory);
+ deleteDirectory(outputDir + SLASH + TEMP);
+ deleteDirectory(outputDir + SLASH + YANG_RESOURCES);
+ String searchDir = getDirectory(baseDir, yangFilesDir);
+ codeGenDir = getDirectory(baseDir, classFileDir) + SLASH;
+
+ // Creates conflict resolver and set values to it.
+ YangToJavaNamingConflictUtil conflictResolver = new YangToJavaNamingConflictUtil();
+ conflictResolver.setReplacementForPeriod(replacementForPeriod);
+ conflictResolver.setReplacementForHyphen(replacementForHyphen);
+ conflictResolver.setReplacementForUnderscore(replacementForUnderscore);
+ conflictResolver.setPrefixForIdentifier(prefixForIdentifier);
+ yangPlugin.setCodeGenDir(codeGenDir);
+ yangPlugin.setConflictResolver(conflictResolver);
+
+ yangPlugin.resourceGenDir(outputDir + YangToolManager.DEFAULT_JAR_RES_PATH);
+ yangPlugin.setCodeGenerateForSbi(generateJavaFileForSbi.toLowerCase());
+
+ /*
+ * Obtain the YANG files at a path mentioned in plugin and creates
+ * YANG file information set.
+ */
+
+ YangToolManager toolManager = new YangToolManager();
+
+ yangFileInfoSet = toolManager.createYangFileInfoSet(
+ getYangFiles(searchDir));
+ List<YangNode> interJarResolvedNodes =
+ resolveInterJarDependencies(project, localRepository,
+ remoteRepository, outputDir);
+ toolManager.compileYangFiles(yangFileInfoSet,
+ interJarResolvedNodes, yangPlugin,
+ this);
+ } catch (YangToolException e) {
+ String fileName = EMPTY_STRING;
+ if (e.getCurYangFile() != null) {
+ fileName = e.getCurYangFile().getYangFileName();
+ }
+ try {
+ deleteDirectory(codeGenDir + DEFAULT_PKG);
+ } catch (IOException ex) {
+ e.printStackTrace();
+ throw new MojoExecutionException(
+ "Error handler failed to delete files for data model node.");
+ }
+ getLog().info(e.getCause());
+ throw new MojoExecutionException(
+ "Exception occurred due to " + e.getLocalizedMessage() +
+ IN + fileName + " YANG file.");
+ } catch (IOException e) {
+ throw new MojoExecutionException(
+ "Failed to process files");
+ }
+ }
+
+ /**
+ * Validates current maven version of system.
+ *
+ * @throws MojoExecutionException when maven version is below 3.3.9
+ */
+ private void validateMavenVersion() throws MojoExecutionException {
+ String version = runtime.getMavenVersion();
+ if (getVersionValue(version) < SUPPORTED_VERSION) {
+ throw new MojoExecutionException(VERSION_ERROR + version);
+ }
+ }
+
+ /**
+ * Returns the YANG node set.
+ *
+ * @return YANG node set
+ */
+ public Set<YangNode> getYangNodeSet() {
+ return yangNodeSet;
+ }
+
+ /**
+ * TODO: Delete me and use the tool code for UT test cases
+ * Links all the provided with the YANG file info set.
+ *
+ * @throws MojoExecutionException a violation in mojo execution
+ */
+ public void resolveDependenciesUsingLinker()
+ throws MojoExecutionException {
+ createYangNodeSet();
+ try {
+ yangLinker.resolveDependencies(yangNodeSet);
+ } catch (LinkerException e) {
+ printLog(e.getFileName(), e.getLineNumber(), e.getCharPositionInLine(),
+ e.getMessage(), e.getLocalizedMessage());
+ throw new MojoExecutionException(e.getMessage());
+ }
+ }
+
+ /**
+ * TODO: Delete me and use the tool code for UT test cases
+ * Creates YANG nodes set.
+ */
+ protected void createYangNodeSet() {
+ for (YangFileInfo yangFileInfo : yangFileInfoSet) {
+ yangNodeSet.add(yangFileInfo.getRootNode());
+ }
+ }
+
+ /**
+ * TODO: Delete me and use the tool code for UT test cases
+ * Parses all the provided YANG files and generates YANG data model tree.
+ *
+ * @throws IOException a violation in IO
+ */
+ public void parseYangFileInfoSet()
+ throws IOException {
+ for (YangFileInfo yangFileInfo : yangFileInfoSet) {
+ curYangFileInfo = yangFileInfo;
+ if (yangFileInfo.isForTranslator()) {
+ try {
+ YangNode yangNode = yangUtilsParser.getDataModel(
+ yangFileInfo.getYangFileName());
+ yangFileInfo.setRootNode(yangNode);
+ rootNode = yangNode;
+ resolveGroupingInDefinationScope((YangReferenceResolver) yangNode);
+ try {
+ ((YangReferenceResolver) yangNode)
+ .resolveSelfFileLinking(ResolvableType.YANG_DERIVED_DATA_TYPE);
+ ((YangReferenceResolver) yangNode)
+ .resolveSelfFileLinking(ResolvableType.YANG_IDENTITYREF);
+ } catch (DataModelException e) {
+ printLog(e.getFileName(), e.getLineNumber(), e
+ .getCharPositionInLine(), e.getMessage(), e
+ .getLocalizedMessage());
+ }
+ } catch (ParserException e) {
+ printLog(e.getFileName(), e.getLineNumber(), e
+ .getCharPositionInLine(), e.getMessage(), e
+ .getLocalizedMessage());
+ throw e;
+ }
+ }
+ }
+ }
+
+ /**
+ * TODO: Delete me and use the tool code for UT test cases
+ * Translates to java code corresponding to the YANG schema.
+ *
+ * @param yangPlugin YANG plugin config
+ * @throws IOException when fails to generate java code file the current node
+ */
+ public void translateToJava(YangPluginConfig yangPlugin)
+ throws IOException {
+ List<YangNode> yangNodeSortedList = new LinkedList<>();
+ yangNodeSortedList.addAll(yangNodeSet);
+ sort(yangNodeSortedList);
+ for (YangNode node : yangNodeSortedList) {
+ if (node.isToTranslate()) {
+ JavaCodeGeneratorUtil.generateJavaCode(node, yangPlugin);
+ }
+ }
+ }
+
+ /**
+ * Creates a YANG file info set.
+ *
+ * @param yangFileList YANG files list
+ */
+ public void createYangFileInfoSet(List<String> yangFileList) {
+ for (String yangFile : yangFileList) {
+ YangFileInfo yangFileInfo = new YangFileInfo();
+ yangFileInfo.setYangFileName(yangFile);
+ yangFileInfoSet.add(yangFileInfo);
+ }
+ }
+
+ /**
+ * TODO: Delete me and use the tool code for UT test cases
+ * Returns the YANG file info set.
+ *
+ * @return the YANG file info set
+ */
+ public Set<YangFileInfo> getYangFileInfoSet() {
+ return yangFileInfoSet;
+ }
+
+ /**
+ * TODO: Delete me and use the tool code for UT test cases
+ * Sets the YANG file info set.
+ *
+ * @param yangFileInfoSet the YANG file info set
+ */
+ void setYangFileInfoSet(Set<YangFileInfo> yangFileInfoSet) {
+ this.yangFileInfoSet = yangFileInfoSet;
+ }
+
+ /**
+ * Adds log info for exception.
+ *
+ * @param fileName file name
+ * @param line line number
+ * @param position character position
+ * @param msg error message
+ * @param localMsg local message
+ */
+ private void printLog(String fileName, int line, int position, String
+ msg, String localMsg) {
+ String logInfo = "Error in file: " + fileName;
+ if (line != 0) {
+ logInfo = logInfo + " at line: " + line + " at position: "
+ + position;
+ }
+ if (msg != null) {
+ logInfo = logInfo + NEW_LINE + localMsg;
+ }
+ getLog().info(logInfo);
+ }
+
+ @Override
+ public void addGeneratedCodeToBundle() {
+ addToCompilationRoot(codeGenDir, project, context);
+ }
+
+
+ @Override
+ public void addCompiledSchemaToBundle() throws IOException {
+ serializeDataModel(outputDir, project, true);
+ }
+
+ @Override
+ public void addYangFilesToBundle() throws IOException {
+ copyYangFilesToTarget(outputDir, project);
+ }
+}
diff --git a/compiler/plugin/maven/src/main/java/org/onosproject/yang/compiler/plugin/maven/package-info.java b/compiler/plugin/maven/src/main/java/org/onosproject/yang/compiler/plugin/maven/package-info.java
new file mode 100644
index 0000000..4b67022
--- /dev/null
+++ b/compiler/plugin/maven/src/main/java/org/onosproject/yang/compiler/plugin/maven/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+/**
+ * YANG utility maven plugin.
+ */
+package org.onosproject.yang.compiler.plugin.maven;
diff --git a/plugin/maven/src/main/resources/CopyrightHeader.txt b/compiler/plugin/maven/src/main/resources/CopyrightHeader.txt
similarity index 100%
rename from plugin/maven/src/main/resources/CopyrightHeader.txt
rename to compiler/plugin/maven/src/main/resources/CopyrightHeader.txt
diff --git a/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/AugmentTranslatorTest.java b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/AugmentTranslatorTest.java
new file mode 100644
index 0000000..3d7a6e6
--- /dev/null
+++ b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/AugmentTranslatorTest.java
@@ -0,0 +1,128 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.plugin.maven;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.junit.Test;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+import org.onosproject.yang.compiler.utils.io.impl.YangFileScanner;
+import org.onosproject.yang.compiler.utils.io.impl.YangIoUtils;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * Unit test case for augment translator.
+ */
+public class AugmentTranslatorTest {
+
+ private final YangUtilManager utilManager = new YangUtilManager();
+ private static final String DIR = "target/augmentTranslator/";
+ private static final String COMP = System.getProperty("user.dir") + File
+ .separator + DIR;
+
+ /**
+ * Checks augment translation should not result in any exception.
+ *
+ * @throws MojoExecutionException
+ */
+ @Test
+ public void processAugmentTranslator() throws IOException, ParserException, MojoExecutionException {
+
+ YangIoUtils.deleteDirectory(DIR);
+ String searchDir = "src/test/resources/augmentTranslator";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir(DIR);
+ utilManager.translateToJava(yangPluginConfig);
+ YangPluginConfig.compileCode(COMP);
+ YangIoUtils.deleteDirectory(DIR);
+ }
+
+ /**
+ * Checks augment translation should not result in any exception.
+ * compiler not added because it contains a notification which depends on
+ * onos api.
+ *
+ * @throws MojoExecutionException
+ */
+ @Test
+ public void processRpcAugmentIntraTranslator() throws IOException,
+ ParserException, MojoExecutionException {
+ YangIoUtils.deleteDirectory(DIR);
+ String searchDir = "src/test/resources/rpcAugment/intra";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir(DIR);
+ utilManager.translateToJava(yangPluginConfig);
+ YangIoUtils.deleteDirectory(DIR);
+ }
+
+ /**
+ * Checks augment translation should not result in any exception.
+ *
+ * @throws MojoExecutionException
+ */
+ @Test
+ public void processRpcAugmentInterTranslator() throws IOException,
+ ParserException, MojoExecutionException {
+ YangIoUtils.deleteDirectory(DIR);
+ String searchDir = "src/test/resources/rpcAugment/inter";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir(DIR);
+ utilManager.translateToJava(yangPluginConfig);
+ YangPluginConfig.compileCode(COMP);
+ YangIoUtils.deleteDirectory(DIR);
+ }
+
+ /**
+ * Checks augment translation should not result in any exception.
+ *
+ * @throws MojoExecutionException
+ */
+ @Test
+ public void processChoiceAugmentInterTranslator() throws IOException,
+ ParserException, MojoExecutionException {
+ YangIoUtils.deleteDirectory(DIR);
+ String searchDir = "src/test/resources/choiceAugment";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir(DIR);
+ utilManager.translateToJava(yangPluginConfig);
+ YangPluginConfig.compileCode(COMP);
+ YangIoUtils.deleteDirectory(DIR);
+ }
+
+}
diff --git a/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/ChoiceCaseTranslatorTest.java b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/ChoiceCaseTranslatorTest.java
new file mode 100644
index 0000000..395792a
--- /dev/null
+++ b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/ChoiceCaseTranslatorTest.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.plugin.maven;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.junit.Test;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+import org.onosproject.yang.compiler.utils.io.impl.YangFileScanner;
+import org.onosproject.yang.compiler.utils.io.impl.YangIoUtils;
+
+import java.io.File;
+import java.io.IOException;
+
+import static org.onosproject.yang.compiler.translator.tojava.JavaCodeGeneratorUtil.generateJavaCode;
+
+/**
+ * Unit tests for choice-case translator.
+ */
+public final class ChoiceCaseTranslatorTest {
+ private static final String DIR = "target/ChoiceCaseTestGenFile/";
+ private static final String COMP = System.getProperty("user.dir") + File
+ .separator + DIR;
+ private final YangUtilManager utilManager = new YangUtilManager();
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks choice-case translation should not result in any exception.
+ */
+ @Test
+ public void processChoiceCaseTranslator() throws IOException, ParserException {
+
+ String dir = "target/ChoiceCaseTestGenFile/";
+ YangIoUtils.deleteDirectory(dir);
+ YangNode node = manager.getDataModel("src/test/resources/ChoiceCaseTranslator.yang");
+
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir(dir);
+
+ generateJavaCode(node, yangPluginConfig);
+ String dir1 = System.getProperty("user.dir") + File.separator + dir;
+ YangPluginConfig.compileCode(dir1);
+ YangIoUtils.deleteDirectory(dir);
+ }
+
+ /**
+ * Checks augment translation should not result in any exception.
+ *
+ * @throws MojoExecutionException
+ */
+ @Test
+ public void processChoiceAllTranslator() throws IOException,
+ ParserException, MojoExecutionException {
+ YangIoUtils.deleteDirectory(DIR);
+ String searchDir = "src/test/resources/choiceTranslator";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir(DIR);
+ utilManager.translateToJava(yangPluginConfig);
+ YangPluginConfig.compileCode(COMP);
+ YangIoUtils.deleteDirectory(DIR);
+ }
+}
diff --git a/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/CompilerAnnotationTest.java b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/CompilerAnnotationTest.java
new file mode 100644
index 0000000..d020cee
--- /dev/null
+++ b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/CompilerAnnotationTest.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+
+package org.onosproject.yang.compiler.plugin.maven;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.junit.Test;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+import org.onosproject.yang.compiler.utils.io.impl.YangFileScanner;
+import org.onosproject.yang.compiler.utils.io.impl.YangIoUtils;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * Unit test case for compiler annotation.
+ */
+public class CompilerAnnotationTest {
+ private final YangUtilManager utilManager = new YangUtilManager();
+ private static final String DIR = "target/compiler/";
+ private static final String COMP = System.getProperty("user.dir") + File
+ .separator + DIR;
+
+
+ /**
+ * Checks compiler annotation translation should not result in any exception.
+ *
+ * @throws MojoExecutionException
+ */
+ @Test
+ public void processTranslator() throws IOException,
+ ParserException, MojoExecutionException {
+ YangIoUtils.deleteDirectory(DIR);
+ String searchDir = "src/test/resources/compilerAnnotation";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir(DIR);
+ utilManager.translateToJava(yangPluginConfig);
+ YangPluginConfig.compileCode(COMP);
+ YangIoUtils.deleteDirectory(DIR);
+ }
+}
diff --git a/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/EnumTranslatorTest.java b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/EnumTranslatorTest.java
new file mode 100644
index 0000000..6998d9b
--- /dev/null
+++ b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/EnumTranslatorTest.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.plugin.maven;
+
+import org.junit.Test;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGeneratorUtil;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+import org.onosproject.yang.compiler.utils.io.impl.YangIoUtils;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * Unit test case for enum translator.
+ */
+public final class EnumTranslatorTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks enum translation should not result in any exception.
+ */
+ @Test
+ public void processEnumTranslator()
+ throws IOException, ParserException {
+ YangNode node = manager.getDataModel("src/test/resources/EnumTranslator.yang");
+
+ String dir = "target/enumTranslator/";
+ YangIoUtils.deleteDirectory(dir);
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir(dir);
+
+ JavaCodeGeneratorUtil.generateJavaCode(node, yangPluginConfig);
+ String dir1 = System.getProperty("user.dir") + File.separator + dir;
+ YangPluginConfig.compileCode(dir1);
+ YangIoUtils.deleteDirectory(dir);
+ }
+ // TODO enhance the test cases, after having a framework of translator test.
+}
diff --git a/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/GroupingTranslatorTest.java b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/GroupingTranslatorTest.java
new file mode 100644
index 0000000..d7e6580
--- /dev/null
+++ b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/GroupingTranslatorTest.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.plugin.maven;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.junit.Test;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+import org.onosproject.yang.compiler.utils.io.impl.YangFileScanner;
+import org.onosproject.yang.compiler.utils.io.impl.YangIoUtils;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * Unit test case for grouping translator.
+ */
+public class GroupingTranslatorTest {
+
+ private final YangUtilManager utilManager = new YangUtilManager();
+ private static final String DIR = "target/groupingTranslator/";
+ private static final String COMP = System.getProperty("user.dir") + File
+ .separator + DIR;
+
+ /**
+ * Checks grouping translation should not result in any exception.
+ *
+ * @throws MojoExecutionException
+ */
+ @Test
+ public void processTranslator() throws IOException, ParserException, MojoExecutionException {
+
+ YangIoUtils.deleteDirectory(DIR);
+ String searchDir = "src/test/resources/grouping";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir(DIR);
+ utilManager.translateToJava(yangPluginConfig);
+ YangPluginConfig.compileCode(COMP);
+ YangIoUtils.deleteDirectory(DIR);
+ }
+
+}
diff --git a/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/IdentityTranslatorTest.java b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/IdentityTranslatorTest.java
new file mode 100644
index 0000000..bb02522
--- /dev/null
+++ b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/IdentityTranslatorTest.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.plugin.maven;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.junit.Test;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+import org.onosproject.yang.compiler.utils.io.impl.YangFileScanner;
+import org.onosproject.yang.compiler.utils.io.impl.YangIoUtils;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * Translator test case for identity.
+ */
+public class IdentityTranslatorTest {
+
+ private final YangUtilManager utilManager = new YangUtilManager();
+ private static final String DIR = "target/identity/";
+ private static final String COMP = System.getProperty("user.dir") + File
+ .separator + DIR;
+
+ /**
+ * Checks translation should not result in any exception.
+ *
+ * @throws MojoExecutionException
+ */
+ @Test
+ public void processTranslator() throws IOException,
+ ParserException, MojoExecutionException {
+ YangIoUtils.deleteDirectory(DIR);
+ String searchDir = "src/test/resources/identityTranslator";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir(DIR);
+ utilManager.translateToJava(yangPluginConfig);
+ YangPluginConfig.compileCode(COMP);
+ YangIoUtils.deleteDirectory(DIR);
+ }
+}
diff --git a/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/IncludeReferenceWithPrefix.java b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/IncludeReferenceWithPrefix.java
new file mode 100644
index 0000000..fc35b92
--- /dev/null
+++ b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/IncludeReferenceWithPrefix.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.plugin.maven;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.junit.Test;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+import org.onosproject.yang.compiler.utils.io.impl.YangFileScanner;
+import org.onosproject.yang.compiler.utils.io.impl.YangIoUtils;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * Test cases for testing YANG schema node.
+ */
+public class IncludeReferenceWithPrefix {
+
+ private final YangUtilManager utilManager = new YangUtilManager();
+
+ /**
+ * Checks method to get schema node from map.
+ *
+ * @throws MojoExecutionException
+ */
+ @Test
+ public void processRefToIncludeWithPrefix() throws IOException, ParserException, MojoExecutionException {
+
+ String dir = "target/refincludecontentwithprefix/";
+ YangIoUtils.deleteDirectory(dir);
+ String searchDir = "src/test/resources/refincludecontentwithprefix";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir(dir);
+ utilManager.translateToJava(yangPluginConfig);
+ String dir1 = System.getProperty("user.dir") + File.separator + dir;
+ YangPluginConfig.compileCode(dir1);
+ YangIoUtils.deleteDirectory(dir);
+ }
+}
diff --git a/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/InterFileIdentityLinkingTest.java b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/InterFileIdentityLinkingTest.java
new file mode 100644
index 0000000..544047c
--- /dev/null
+++ b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/InterFileIdentityLinkingTest.java
@@ -0,0 +1,684 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+package org.onosproject.yang.compiler.plugin.maven;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangDerivedInfo;
+import org.onosproject.yang.compiler.datamodel.YangIdentity;
+import org.onosproject.yang.compiler.datamodel.YangIdentityRef;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.YangTypeDef;
+import org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.linker.exceptions.LinkerException;
+import org.onosproject.yang.compiler.linker.impl.YangLinkerManager;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+import org.onosproject.yang.compiler.utils.io.impl.YangFileScanner;
+import org.onosproject.yang.compiler.utils.io.impl.YangIoUtils;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ListIterator;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+import static org.onosproject.yang.compiler.datamodel.YangNodeType.MODULE_NODE;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.IDENTITYREF;
+import static org.onosproject.yang.compiler.linker.impl.YangLinkerUtils.updateFilePriority;
+
+/**
+ * Test cases for testing inter file linking for identity.
+ */
+public class InterFileIdentityLinkingTest {
+
+ private final YangUtilManager utilManager = new YangUtilManager();
+ private final YangLinkerManager yangLinkerManager = new YangLinkerManager();
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ /**
+ * Checks inter file feature linking with imported file.
+ */
+ @Test
+ public void processIdentityInImportedFile()
+ throws IOException, ParserException, MojoExecutionException {
+
+ String searchDir = "src/test/resources/interfileidentityimport";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+
+ YangNode selfNode = null;
+ YangNode refNode1 = null;
+ YangNode refNode2 = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ for (YangNode rootNode : utilManager.getYangNodeSet()) {
+ if (rootNode.getName().equals("IdentityIntraFile")) {
+ selfNode = rootNode;
+ } else if (rootNode.getName().equals("IdentityInModule")) {
+ refNode1 = rootNode;
+ } else {
+ refNode2 = rootNode;
+ }
+ }
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(selfNode instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("IdentityIntraFile"));
+
+ YangIdentity yangIdentity = (YangIdentity) yangNode.getChild();
+ assertThat(yangIdentity.getName(), is("ipv4-address-family"));
+ assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
+ assertThat(yangIdentity.getBaseNode().getReferredIdentity().getName(), is("ref-address-family"));
+ assertThat(yangIdentity.getBaseNode().getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+
+ yangIdentity = (YangIdentity) yangNode.getChild().getNextSibling();
+ assertThat(yangIdentity.getName(), is("ipv6-address-family"));
+ assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
+ assertThat(yangIdentity.getBaseNode().getReferredIdentity().getName(), is("ref-address-family"));
+ assertThat(yangIdentity.getBaseNode().getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("tunnel"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("identityref"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.IDENTITYREF));
+ YangIdentityRef yangIdentityRef = (YangIdentityRef) leafInfo.getDataType().getDataTypeExtendedInfo();
+ assertThat(yangIdentityRef.getName(), is("ref-address-family"));
+ assertThat(yangIdentityRef.getBaseIdentity().getName(), is("ref-address-family"));
+ assertThat(yangIdentityRef.getReferredIdentity().getName(), is("ref-address-family"));
+ assertThat(yangIdentityRef.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ // Check whether the information in the leaf is correct.
+ assertThat(leafListInfo.getName(), is("network-ref"));
+ assertThat(leafListInfo.getDataType().getDataTypeName(), is("identityref"));
+ assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.IDENTITYREF));
+ yangIdentityRef = (YangIdentityRef) (leafListInfo.getDataType().getDataTypeExtendedInfo());
+ assertThat(yangIdentityRef.getBaseIdentity().getName(), is("ref-address-family"));
+ assertThat(yangIdentityRef.getReferredIdentity().getName(), is("ref-address-family"));
+ assertThat(yangIdentityRef.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+
+ }
+
+ @Test
+ public void processTranslator() throws IOException, ParserException, MojoExecutionException {
+
+ YangIoUtils.deleteDirectory("target/identityTranslator/");
+ String searchDir = "src/test/resources/interfileidentityimport";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir("target/identityTranslator/");
+ utilManager.translateToJava(yangPluginConfig);
+ YangPluginConfig.compileCode(System.getProperty("user.dir") + File
+ .separator + "target/identityTranslator/");
+ YangIoUtils.deleteDirectory("target/identityTranslator/");
+ }
+
+ /**
+ * Checks inter file feature linking with included file.
+ */
+ @Test
+ public void processIdentityInIncludedFile()
+ throws IOException, ParserException, MojoExecutionException {
+
+ String searchDir = "src/test/resources/interfileidentityinlude";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+
+ YangNode selfNode = null;
+ YangNode refNode1 = null;
+ YangNode refNode2 = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Carry out linking of sub module with module.
+ yangLinkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ // Add references to include list.
+ yangLinkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
+
+ updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ for (YangNode rootNode : utilManager.getYangNodeSet()) {
+ if (rootNode.getName().equals("syslog3")) {
+ selfNode = rootNode;
+ } else if (rootNode.getName().equals("syslog4")) {
+ refNode1 = rootNode;
+ } else {
+ refNode2 = rootNode;
+ }
+ }
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(selfNode instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("syslog3"));
+
+ YangIdentity yangIdentity = (YangIdentity) yangNode.getChild();
+ assertThat(yangIdentity.getName(), is("ipv4-address-family"));
+ assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
+ assertThat(yangIdentity.getBaseNode().getReferredIdentity().getName(), is("ref-address-family"));
+ assertThat(yangIdentity.getBaseNode().getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+
+ yangIdentity = (YangIdentity) yangNode.getChild().getNextSibling();
+ assertThat(yangIdentity.getName(), is("ipv6-address-family"));
+ assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
+ assertThat(yangIdentity.getBaseNode().getReferredIdentity().getName(), is("ref-address-family"));
+ assertThat(yangIdentity.getBaseNode().getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("tunnel"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("identityref"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.IDENTITYREF));
+ YangIdentityRef yangIdentityRef = (YangIdentityRef) leafInfo.getDataType().getDataTypeExtendedInfo();
+ assertThat(yangIdentityRef.getName(), is("ref-address-family"));
+ assertThat(yangIdentityRef.getBaseIdentity().getName(), is("ref-address-family"));
+ assertThat(yangIdentityRef.getReferredIdentity().getName(), is("ref-address-family"));
+ assertThat(yangIdentityRef.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ // Check whether the information in the leaf is correct.
+ assertThat(leafListInfo.getName(), is("network-ref"));
+ assertThat(leafListInfo.getDataType().getDataTypeName(), is("identityref"));
+ assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.IDENTITYREF));
+ yangIdentityRef = (YangIdentityRef) (leafListInfo.getDataType().getDataTypeExtendedInfo());
+ assertThat(yangIdentityRef.getBaseIdentity().getName(), is("ref-address-family"));
+ assertThat(yangIdentityRef.getReferredIdentity().getName(), is("ref-address-family"));
+ assertThat(yangIdentityRef.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+ }
+
+ /**
+ * Checks inter file feature linking with imported file with dependency.
+ */
+ @Test
+ public void processIdentityInImportedFileWithDependency()
+ throws IOException, ParserException, MojoExecutionException {
+
+ String searchDir = "src/test/resources/interfileidentityimportdependency";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+
+ YangNode selfNode = null;
+ YangNode refNode1 = null;
+ YangNode refNode2 = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ for (YangNode rootNode : utilManager.getYangNodeSet()) {
+ if (rootNode.getName().equals("syslog1")) {
+ selfNode = rootNode;
+ } else if (rootNode.getName().equals("syslog2")) {
+ refNode1 = rootNode;
+ } else {
+ refNode2 = rootNode;
+ }
+ }
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(selfNode instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("syslog1"));
+
+ YangIdentity yangIdentity = (YangIdentity) yangNode.getChild();
+ assertThat(yangIdentity.getName(), is("ipv4-address-family"));
+ assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
+ assertThat(yangIdentity.getBaseNode().getReferredIdentity().getName(), is("ref-address-family"));
+ assertThat(yangIdentity.getBaseNode().getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+
+ yangIdentity = (YangIdentity) yangNode.getChild().getNextSibling();
+ assertThat(yangIdentity.getName(), is("ipv6-address-family"));
+ assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
+ assertThat(yangIdentity.getBaseNode().getReferredIdentity().getName(), is("ref-address-family"));
+ assertThat(yangIdentity.getBaseNode().getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("tunnel"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("identityref"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.IDENTITYREF));
+ YangIdentityRef yangIdentityRef = (YangIdentityRef) leafInfo.getDataType().getDataTypeExtendedInfo();
+ assertThat(yangIdentityRef.getName(), is("ref-address-family"));
+ assertThat(yangIdentityRef.getBaseIdentity().getName(), is("ref-address-family"));
+ assertThat(yangIdentityRef.getReferredIdentity().getName(), is("ref-address-family"));
+ assertThat(yangIdentityRef.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ // Check whether the information in the leaf is correct.
+ assertThat(leafListInfo.getName(), is("network-ref"));
+ assertThat(leafListInfo.getDataType().getDataTypeName(), is("identityref"));
+ assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.IDENTITYREF));
+ yangIdentityRef = (YangIdentityRef) (leafListInfo.getDataType().getDataTypeExtendedInfo());
+ assertThat(yangIdentityRef.getBaseIdentity().getName(), is("ref-address-family"));
+ assertThat(yangIdentityRef.getReferredIdentity().getName(), is("ref-address-family"));
+ assertThat(yangIdentityRef.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+ }
+
+ /**
+ * Checks inter file feature linking with included file with dependency.
+ */
+ @Test
+ public void processIdentityInIncludedFileWithDependency()
+ throws IOException, ParserException, MojoExecutionException {
+
+ String searchDir = "src/test/resources/interfileidentityincludedependency";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+
+ YangNode selfNode = null;
+ YangNode refNode1 = null;
+ YangNode refNode2 = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Carry out linking of sub module with module.
+ yangLinkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
+
+ // Add references to include list.
+ yangLinkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ for (YangNode rootNode : utilManager.getYangNodeSet()) {
+ if (rootNode.getName().equals("syslog1")) {
+ selfNode = rootNode;
+ } else if (rootNode.getName().equals("syslog2")) {
+ refNode1 = rootNode;
+ } else {
+ refNode2 = rootNode;
+ }
+ }
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(selfNode instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("syslog1"));
+
+ YangIdentity yangIdentity = (YangIdentity) yangNode.getChild();
+ assertThat(yangIdentity.getName(), is("ipv4-address-family"));
+ assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
+ assertThat(yangIdentity.getBaseNode().getReferredIdentity().getName(), is("ref-address-family"));
+ assertThat(yangIdentity.getBaseNode().getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+
+ yangIdentity = (YangIdentity) yangNode.getChild().getNextSibling();
+ assertThat(yangIdentity.getName(), is("ipv6-address-family"));
+ assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
+ assertThat(yangIdentity.getBaseNode().getReferredIdentity().getName(), is("ref-address-family"));
+ assertThat(yangIdentity.getBaseNode().getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("tunnel"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("identityref"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.IDENTITYREF));
+ YangIdentityRef yangIdentityRef = (YangIdentityRef) leafInfo.getDataType().getDataTypeExtendedInfo();
+ assertThat(yangIdentityRef.getName(), is("ref-address-family"));
+ assertThat(yangIdentityRef.getBaseIdentity().getName(), is("ref-address-family"));
+ assertThat(yangIdentityRef.getReferredIdentity().getName(), is("ref-address-family"));
+ assertThat(yangIdentityRef.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ // Check whether the information in the leaf is correct.
+ assertThat(leafListInfo.getName(), is("network-ref"));
+ assertThat(leafListInfo.getDataType().getDataTypeName(), is("identityref"));
+ assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.IDENTITYREF));
+ yangIdentityRef = (YangIdentityRef) (leafListInfo.getDataType().getDataTypeExtendedInfo());
+ assertThat(yangIdentityRef.getBaseIdentity().getName(), is("ref-address-family"));
+ assertThat(yangIdentityRef.getReferredIdentity().getName(), is("ref-address-family"));
+ assertThat(yangIdentityRef.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+ }
+
+ /**
+ * Checks inter file feature linking with imported file with dependency
+ * feature undefined.
+ */
+ @Test
+ public void processIdentityInImportedFileWithDependencyUndefined()
+ throws IOException, LinkerException, MojoExecutionException {
+ thrown.expect(LinkerException.class);
+ thrown.expectMessage("YANG file error: Unable to find base identity for given base");
+
+ String searchDir = "src/test/resources/interfileidentityimportdependencyUndefined";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+
+ YangNode selfNode = null;
+ YangNode refNode1 = null;
+ YangNode refNode2 = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+ }
+
+ /**
+ * Checks inter file feature linking with included file with dependency
+ * feature undefined.
+ */
+ @Test
+ public void processIdentityInIncludedFileWithDependencyUndefined()
+ throws IOException, LinkerException, MojoExecutionException {
+ thrown.expect(LinkerException.class);
+ thrown.expectMessage("YANG file error: Unable to find base identity for given base");
+
+ String searchDir = "src/test/resources/interfileidentityincludedependencyUndefined";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Carry out linking of sub module with module.
+ yangLinkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ // Add references to include list.
+ yangLinkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
+
+ // Update the priority for all the files.
+ updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+ }
+
+ /**
+ * Checks inter file feature linking with imported file.
+ */
+ @Test
+ public void processIdentityTypedefUnresolvedInImportedFile()
+ throws IOException, ParserException, MojoExecutionException {
+
+ String searchDir = "src/test/resources/interfileidentitytypedef";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+
+ YangNode selfNode = null;
+ YangNode refNode1 = null;
+ YangNode refNode2 = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ for (YangNode rootNode : utilManager.getYangNodeSet()) {
+ if (rootNode.getName().equals("IdentityIntraFile")) {
+ selfNode = rootNode;
+ } else if (rootNode.getName().equals("IdentityInModule")) {
+ refNode1 = rootNode;
+ } else {
+ refNode2 = rootNode;
+ }
+ }
+ // Check whether the data model tree returned is of type module.
+ assertThat(selfNode instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("IdentityIntraFile"));
+
+ YangIdentity yangIdentity = (YangIdentity) yangNode.getChild();
+ assertThat(yangIdentity.getName(), is("ipv4-address-family"));
+ assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
+ assertThat(yangIdentity.getBaseNode().getReferredIdentity().getName(), is("ref-address-family"));
+ assertThat(yangIdentity.getBaseNode().getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+
+ yangIdentity = (YangIdentity) yangNode.getChild().getNextSibling();
+ assertThat(yangIdentity.getName(), is("ipv6-address-family"));
+ assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
+ assertThat(yangIdentity.getBaseNode().getReferredIdentity().getName(), is("ref-address-family"));
+ assertThat(yangIdentity.getBaseNode().getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("tunnel"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("identityref"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.IDENTITYREF));
+ YangIdentityRef yangIdentityRef = (YangIdentityRef) leafInfo.getDataType().getDataTypeExtendedInfo();
+ assertThat(yangIdentityRef.getName(), is("ref-address-family"));
+ assertThat(yangIdentityRef.getBaseIdentity().getName(), is("ref-address-family"));
+ assertThat(yangIdentityRef.getReferredIdentity().getName(), is("ref-address-family"));
+ assertThat(yangIdentityRef.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+
+ ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = leafListIterator.next();
+
+ // Check whether the information in the leaf is correct.
+ assertThat(leafListInfo.getName(), is("network-ref"));
+ assertThat(leafListInfo.getDataType().getDataTypeName(), is("identityref"));
+ assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.IDENTITYREF));
+ yangIdentityRef = (YangIdentityRef) (leafListInfo.getDataType().getDataTypeExtendedInfo());
+ // Check whether leafref type got resolved.
+ assertThat(yangIdentityRef.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+
+ YangTypeDef typedef = (YangTypeDef) yangNode.getChild().getNextSibling().getNextSibling();
+ assertThat(typedef.getName(), is("type15"));
+
+ YangType type = typedef.getTypeList().iterator().next();
+ assertThat(type.getDataType(), is(YangDataTypes.IDENTITYREF));
+ assertThat(type.getDataTypeName(), is("identityref"));
+
+ YangIdentityRef identityRef = (YangIdentityRef) type.getDataTypeExtendedInfo();
+ assertThat(identityRef.getName(), is("ref-address-family"));
+ assertThat(identityRef.getBaseIdentity().getName(), is("ref-address-family"));
+ assertThat(identityRef.getResolvableStatus(),
+ is(ResolvableStatus.RESOLVED));
+ }
+
+ /**
+ * Checks inter file feature linking with imported file.
+ */
+ @Test
+ public void processIdentityTypedefInImportedFile()
+ throws IOException, ParserException, MojoExecutionException {
+
+ String searchDir = "src/test/resources/interfileidentitytypedef";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+
+ YangNode selfNode = null;
+ YangNode refNode1 = null;
+ YangNode refNode2 = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ for (YangNode rootNode : utilManager.getYangNodeSet()) {
+ if (rootNode.getName().equals("IdentityTypedef")) {
+ selfNode = rootNode;
+ } else if (rootNode.getName().equals("IdentityInModule")) {
+ refNode1 = rootNode;
+ } else {
+ refNode2 = rootNode;
+ }
+ }
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(selfNode instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("IdentityTypedef"));
+
+ YangIdentity yangIdentity = (YangIdentity) yangNode.getChild();
+ assertThat(yangIdentity.getName(), is("ipv4-address-family"));
+ assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
+ assertThat(yangIdentity.getBaseNode().getReferredIdentity().getName(), is("ref-address-family"));
+ assertThat(yangIdentity.getBaseNode().getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+
+ yangIdentity = (YangIdentity) yangNode.getChild().getNextSibling();
+ assertThat(yangIdentity.getName(), is("ipv6-address-family"));
+ assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
+ assertThat(yangIdentity.getBaseNode().getReferredIdentity().getName(), is("ref-address-family"));
+ assertThat(yangIdentity.getBaseNode().getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+
+ YangTypeDef typedef = (YangTypeDef) yangNode.getChild().getNextSibling().getNextSibling();
+ assertThat(typedef.getName(), is("type15"));
+
+ YangType type = typedef.getTypeList().iterator().next();
+ assertThat(type.getDataType(), is(YangDataTypes.IDENTITYREF));
+ assertThat(type.getDataTypeName(), is("identityref"));
+
+ YangIdentityRef identityRef = (YangIdentityRef) type.getDataTypeExtendedInfo();
+ assertThat(identityRef.getName(), is("ref-address-family"));
+ assertThat(identityRef.getBaseIdentity().getName(), is("ref-address-family"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("tunnel"));
+ YangDerivedInfo info = (YangDerivedInfo) leafInfo.getDataType()
+ .getDataTypeExtendedInfo();
+ assertThat(info.getEffectiveBuiltInType(), is(IDENTITYREF));
+ YangType type1 = info.getReferredTypeDef().getTypeList().get(0);
+ YangIdentityRef idRef1 =
+ (YangIdentityRef) type1.getDataTypeExtendedInfo();
+ assertThat(idRef1.getResolvableStatus(),
+ is(ResolvableStatus.RESOLVED));
+
+ ListIterator<YangLeafList> itr =
+ yangNode.getListOfLeafList().listIterator();
+ YangLeafList leafListInfo = itr.next();
+
+ // Check whether the information in the leaf is correct.
+ assertThat(leafListInfo.getName(), is("network-ref"));
+ info = (YangDerivedInfo) leafListInfo.getDataType()
+ .getDataTypeExtendedInfo();
+ assertThat(info.getEffectiveBuiltInType(), is(IDENTITYREF));
+ type1 = info.getReferredTypeDef().getTypeList().get(0);
+ idRef1 = (YangIdentityRef) type1.getDataTypeExtendedInfo();
+ assertThat(idRef1.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+ }
+}
diff --git a/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/InterFileIfFeatureLinkingTest.java b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/InterFileIfFeatureLinkingTest.java
new file mode 100644
index 0000000..afcee89
--- /dev/null
+++ b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/InterFileIfFeatureLinkingTest.java
@@ -0,0 +1,469 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.plugin.maven;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.hamcrest.core.Is;
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangFeature;
+import org.onosproject.yang.compiler.datamodel.YangIfFeature;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus;
+import org.onosproject.yang.compiler.linker.impl.YangLinkerManager;
+import org.onosproject.yang.compiler.linker.impl.YangLinkerUtils;
+import org.onosproject.yang.compiler.utils.io.impl.YangFileScanner;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.ListIterator;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+import static org.onosproject.yang.compiler.datamodel.YangNodeType.MODULE_NODE;
+
+/**
+ * Test cases for testing inter file linking.
+ */
+public class InterFileIfFeatureLinkingTest {
+
+ private final YangUtilManager utilManager = new YangUtilManager();
+ private final YangLinkerManager yangLinkerManager = new YangLinkerManager();
+
+ /**
+ * Checks inter file feature linking with imported file.
+ */
+ @Test
+ public void processFeatureInImportedFile()
+ throws IOException, ParserException, MojoExecutionException {
+
+ String searchDir = "src/test/resources/interfilefeatureimport";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+
+ YangNode selfNode = null;
+ YangNode refNode1 = null;
+ YangNode refNode2 = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ for (YangNode rootNode : utilManager.getYangNodeSet()) {
+ if (rootNode.getName().equals("syslog1")) {
+ selfNode = rootNode;
+ } else if (rootNode.getName().equals("syslog2")) {
+ refNode1 = rootNode;
+ } else {
+ refNode2 = rootNode;
+ }
+ }
+ // Check whether the data model tree returned is of type module.
+ assertThat(selfNode instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("syslog1"));
+
+ ListIterator<YangFeature> featureIterator = yangNode.getFeatureList().listIterator();
+ YangFeature feature = featureIterator.next();
+ assertThat(feature.getName(), is("frr-te"));
+
+ YangIfFeature ifFeature = feature.getIfFeatureList().iterator().next();
+ assertThat(ifFeature.getName().getName(), is("p2mp-te"));
+ assertThat(ifFeature.getName().getPrefix(), is("sys2"));
+ assertThat(ifFeature.getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ YangContainer container = (YangContainer) selfNode.getChild();
+ assertThat(container.getName(), is("speed"));
+ YangLeaf leaf = container.getListOfLeaf().iterator().next();
+ assertThat(leaf.getName(), is("local-storage-limit"));
+
+ List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
+ ifFeature = ifFeatureList.iterator().next();
+ assertThat(ifFeature.getName().getName(), is("frr-te"));
+ assertThat(ifFeature.getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+ }
+
+ /**
+ * Checks inter file feature linking with included file.
+ */
+ @Test
+ public void processFeatureInIncludedFile()
+ throws IOException, ParserException, MojoExecutionException {
+
+ String searchDir = "src/test/resources/interfilefeatureinclude";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+
+ YangNode selfNode = null;
+ YangNode refNode1 = null;
+ YangNode refNode2 = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Carry out linking of sub module with module.
+ yangLinkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ // Add references to include list.
+ yangLinkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ for (YangNode rootNode : utilManager.getYangNodeSet()) {
+ if (rootNode.getName().equals("syslog3")) {
+ selfNode = rootNode;
+ } else if (rootNode.getName().equals("syslog4")) {
+ refNode1 = rootNode;
+ } else {
+ refNode2 = rootNode;
+ }
+ }
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(selfNode instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("syslog3"));
+
+ ListIterator<YangFeature> featureIterator = yangNode.getFeatureList().listIterator();
+ YangFeature feature = featureIterator.next();
+ assertThat(feature.getName(), is("frr-te"));
+
+ YangIfFeature ifFeature = feature.getIfFeatureList().iterator().next();
+ assertThat(ifFeature.getName().getName(), is("p2mp-te"));
+ assertThat(ifFeature.getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ YangContainer container = (YangContainer) selfNode.getChild();
+ assertThat(container.getName(), is("speed"));
+ YangLeaf leaf = container.getListOfLeaf().iterator().next();
+ assertThat(leaf.getName(), is("local-storage-limit"));
+
+ List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
+ ifFeature = ifFeatureList.iterator().next();
+ assertThat(ifFeature.getName().getName(), is("frr-te"));
+ assertThat(ifFeature.getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+ }
+
+ /**
+ * Checks inter file feature linking with imported file with dependency.
+ */
+ @Test
+ public void processFeatureInImportedFileWithDependency()
+ throws IOException, ParserException, MojoExecutionException {
+
+ String searchDir = "src/test/resources/interfilefeatureimportdependency";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+
+ YangNode selfNode = null;
+ YangNode refNode1 = null;
+ YangNode refNode2 = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ // Update the priority for all the files.
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ for (YangNode rootNode : utilManager.getYangNodeSet()) {
+ if (rootNode.getName().equals("syslog1")) {
+ selfNode = rootNode;
+ } else if (rootNode.getName().equals("syslog2")) {
+ refNode1 = rootNode;
+ } else {
+ refNode2 = rootNode;
+ }
+ }
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(selfNode instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("syslog1"));
+
+ ListIterator<YangFeature> featureIterator = yangNode.getFeatureList().listIterator();
+ YangFeature feature = featureIterator.next();
+ assertThat(feature.getName(), is("frr-te"));
+
+ YangIfFeature ifFeature = feature.getIfFeatureList().iterator().next();
+ assertThat(ifFeature.getName().getName(), is("p2mp-te"));
+ assertThat(ifFeature.getName().getPrefix(), is("sys2"));
+ assertThat(ifFeature.getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ YangContainer container = (YangContainer) selfNode.getChild();
+ assertThat(container.getName(), is("speed"));
+ YangLeaf leaf = container.getListOfLeaf().iterator().next();
+ assertThat(leaf.getName(), is("local-storage-limit"));
+
+ List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
+ ifFeature = ifFeatureList.iterator().next();
+ assertThat(ifFeature.getName().getName(), is("frr-te"));
+ assertThat(ifFeature.getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+ }
+
+ /**
+ * Checks inter file feature linking with included file with dependency.
+ */
+ @Test
+ public void processFeatureInIncludedFileWithDependency()
+ throws IOException, ParserException, MojoExecutionException {
+
+ String searchDir = "src/test/resources/interfilefeatureincludedependency";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+
+ YangNode selfNode = null;
+ YangNode refNode1 = null;
+ YangNode refNode2 = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Carry out linking of sub module with module.
+ yangLinkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
+
+ // Add references to include list.
+ yangLinkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ for (YangNode rootNode : utilManager.getYangNodeSet()) {
+ if (rootNode.getName().equals("syslog1")) {
+ selfNode = rootNode;
+ } else if (rootNode.getName().equals("syslog2")) {
+ refNode1 = rootNode;
+ } else {
+ refNode2 = rootNode;
+ }
+ }
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(selfNode instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("syslog1"));
+
+ ListIterator<YangFeature> featureIterator = yangNode.getFeatureList().listIterator();
+ YangFeature feature = featureIterator.next();
+ assertThat(feature.getName(), is("frr-te"));
+
+ YangIfFeature ifFeature = feature.getIfFeatureList().iterator().next();
+ assertThat(ifFeature.getName().getName(), is("p2mp-te"));
+ assertThat(ifFeature.getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ YangContainer container = (YangContainer) selfNode.getChild();
+ assertThat(container.getName(), is("speed"));
+ YangLeaf leaf = container.getListOfLeaf().iterator().next();
+ assertThat(leaf.getName(), is("local-storage-limit"));
+
+ List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
+ ifFeature = ifFeatureList.iterator().next();
+ assertThat(ifFeature.getName().getName(), is("frr-te"));
+ assertThat(ifFeature.getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+ }
+
+ /**
+ * Checks inter file feature linking with imported file with dependency
+ * feature undefined.
+ */
+ @Test
+ public void processFeatureInImportedFileWithDependencyUndefined()
+ throws IOException, ParserException, MojoExecutionException {
+
+ String searchDir = "src/test/resources/interfilefeatureimportdependencyUndefined";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+
+ YangNode selfNode = null;
+ YangNode refNode1 = null;
+ YangNode refNode2 = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ for (YangNode rootNode : utilManager.getYangNodeSet()) {
+ if (rootNode.getName().equals("syslog1")) {
+ selfNode = rootNode;
+ } else if (rootNode.getName().equals("syslog2")) {
+ refNode1 = rootNode;
+ } else {
+ refNode2 = rootNode;
+ }
+ }
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(selfNode instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("syslog1"));
+
+ ListIterator<YangFeature> featureIterator = yangNode.getFeatureList().listIterator();
+ YangFeature feature = featureIterator.next();
+ assertThat(feature.getName(), is("frr-te"));
+
+ YangIfFeature ifFeature = feature.getIfFeatureList().iterator().next();
+ assertThat(ifFeature.getName().getName(), is("p2mp-te"));
+ assertThat(ifFeature.getName().getPrefix(), is("sys2"));
+ assertThat(ifFeature.getResolvableStatus(), Is.is(ResolvableStatus.INTRA_FILE_RESOLVED));
+
+ YangContainer container = (YangContainer) selfNode.getChild();
+ assertThat(container.getName(), is("speed"));
+ YangLeaf leaf = container.getListOfLeaf().iterator().next();
+ assertThat(leaf.getName(), is("local-storage-limit"));
+
+ List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
+ ifFeature = ifFeatureList.iterator().next();
+ assertThat(ifFeature.getName().getName(), is("frr-te"));
+ assertThat(ifFeature.getResolvableStatus(), Is.is(ResolvableStatus.INTRA_FILE_RESOLVED));
+ }
+
+ /**
+ * Checks inter file feature linking with included file with dependency
+ * feature undefined.
+ */
+ @Test
+ public void processFeatureInIncludedFileWithDependencyUndefined()
+ throws IOException, ParserException, MojoExecutionException {
+
+ String searchDir = "src/test/resources/interfilefeatureincludedependencyUndefined";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+
+ YangNode selfNode = null;
+ YangNode refNode1 = null;
+ YangNode refNode2 = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Carry out linking of sub module with module.
+ yangLinkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ // Add references to include list.
+ yangLinkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ for (YangNode rootNode : utilManager.getYangNodeSet()) {
+ if (rootNode.getName().equals("syslog1")) {
+ selfNode = rootNode;
+ } else if (rootNode.getName().equals("syslog2")) {
+ refNode1 = rootNode;
+ } else {
+ refNode2 = rootNode;
+ }
+ }
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(selfNode instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("syslog1"));
+
+ ListIterator<YangFeature> featureIterator = yangNode.getFeatureList().listIterator();
+ YangFeature feature = featureIterator.next();
+ assertThat(feature.getName(), is("frr-te"));
+
+ YangIfFeature ifFeature = feature.getIfFeatureList().iterator().next();
+ assertThat(ifFeature.getName().getName(), is("p2mp-te"));
+ assertThat(ifFeature.getResolvableStatus(), Is.is(ResolvableStatus.INTRA_FILE_RESOLVED));
+
+ YangContainer container = (YangContainer) selfNode.getChild();
+ assertThat(container.getName(), is("speed"));
+ YangLeaf leaf = container.getListOfLeaf().iterator().next();
+ assertThat(leaf.getName(), is("local-storage-limit"));
+
+ List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
+ ifFeature = ifFeatureList.iterator().next();
+ assertThat(ifFeature.getName().getName(), is("frr-te"));
+ assertThat(ifFeature.getResolvableStatus(), Is.is(ResolvableStatus.INTRA_FILE_RESOLVED));
+ }
+}
+
diff --git a/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/InterFileLeafrefLinkingTest.java b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/InterFileLeafrefLinkingTest.java
new file mode 100644
index 0000000..ebda757
--- /dev/null
+++ b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/InterFileLeafrefLinkingTest.java
@@ -0,0 +1,438 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.plugin.maven;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.hamcrest.core.Is;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangLeafRef;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.linker.impl.YangLinkerManager;
+import org.onosproject.yang.compiler.utils.io.impl.YangFileScanner;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.ListIterator;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+import static org.onosproject.yang.compiler.datamodel.YangNodeType.MODULE_NODE;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.LEAFREF;
+import static org.onosproject.yang.compiler.linker.impl.YangLinkerUtils.updateFilePriority;
+
+/**
+ * Test cases for testing leafref inter file linking.
+ */
+public class InterFileLeafrefLinkingTest {
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ private final YangUtilManager utilManager = new YangUtilManager();
+ private final YangLinkerManager yangLinkerManager = new YangLinkerManager();
+
+ /**
+ * Checks inter file leafref linking.
+ */
+ @Test
+ public void processInterFileLeafrefLinking()
+ throws IOException, ParserException, MojoExecutionException {
+
+ String searchDir = "src/test/resources/leafreflinker/interfile/interfileleafrefwithimport";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ YangNode refNode = null;
+ YangNode selfNode = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("module1")) {
+ selfNode = rootNode;
+ refNode = yangNodeIterator.next();
+ } else {
+ refNode = rootNode;
+ selfNode = yangNodeIterator.next();
+ }
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(selfNode instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("module1"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
+ assertThat(leafInfo.getDataType().getDataType(), is(LEAFREF));
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(refNode instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(refNode.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode1 = (YangModule) refNode;
+ assertThat(yangNode1.getName(), is("module2"));
+ YangLeaf leafInfo1 = yangNode1.getListOfLeaf().listIterator().next();
+
+ YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ assertThat(leafref.getReferredLeafOrLeafList(), is(leafInfo1));
+ assertThat(leafref.getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ assertThat(leafref.getEffectiveDataType().getDataType(),
+ is(YangDataTypes.STRING));
+ }
+
+ /**
+ * Checks inter file resolution when leafref from grouping refers to other file.
+ */
+ @Test
+ public void processInterFileLeafrefFromGroupingRefersToOtherFile()
+ throws IOException, ParserException {
+
+ String searchDir = "src/test/resources/leafreflinker/interfile/interfileleafreffromgroupingreferstootherfile";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ YangNode selfNode = null;
+ YangNode refNode = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("module1")) {
+ selfNode = rootNode;
+ refNode = yangNodeIterator.next();
+ } else {
+ refNode = rootNode;
+ selfNode = yangNodeIterator.next();
+ }
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(selfNode instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("module1"));
+
+ YangList list = (YangList) yangNode.getChild().getChild();
+ ListIterator<YangLeaf> leafIterator = list.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("link-tp"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
+ assertThat(leafInfo.getDataType().getDataType(), is(LEAFREF));
+
+ YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ YangLeaf leafInfo2 = (YangLeaf) leafref.getReferredLeafOrLeafList();
+ assertThat(leafref.getReferredLeafOrLeafList(), is(leafInfo2));
+ assertThat(leafref.getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ assertThat(leafref.getEffectiveDataType().getDataType(),
+ is(YangDataTypes.STRING));
+ }
+
+ /**
+ * Checks inter file resolution when leafref from grouping with prefix is changed properly during cloning.
+ */
+ @Test
+ public void processInterFileLeafrefFromGroupingWithPrefixIsCloned()
+ throws IOException, ParserException {
+
+ String searchDir = "src/test/resources/leafreflinker/interfile/leafrefInGroupingWithPrefix";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ YangNode selfNode = null;
+ YangNode refNode = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("LeafrefInGroupingOfModule1")) {
+ selfNode = rootNode;
+ refNode = yangNodeIterator.next();
+ } else {
+ refNode = rootNode;
+ selfNode = yangNodeIterator.next();
+ }
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(selfNode instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("LeafrefInGroupingOfModule1"));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode1 = (YangModule) refNode;
+ assertThat(yangNode1.getName(), is("GroupingCopiedInModule2"));
+
+ YangContainer yangContainer = (YangContainer) yangNode1.getChild();
+
+ ListIterator<YangLeaf> leafIterator = yangContainer.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("network-ref"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
+ assertThat(leafInfo.getDataType().getDataType(), is(LEAFREF));
+
+ YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ YangLeaf leafInfo2 = (YangLeaf) leafref.getReferredLeafOrLeafList();
+ assertThat(leafref.getReferredLeafOrLeafList(), is(leafInfo2));
+ assertThat(leafref.getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ assertThat(leafref.getEffectiveDataType().getDataType(),
+ is(YangDataTypes.STRING));
+ }
+
+ /**
+ * Checks inter file resolution when leafref from grouping with prefix is changed properly during cloning with
+ * multi reference.
+ */
+ @Test
+ public void processInterFileLeafrefFromGroupingWithPrefixIsClonedMultiReference()
+ throws IOException, ParserException {
+
+ String searchDir = "src/test/resources/leafreflinker/interfile/leafrefInGroupingWithPrefixAndManyReference";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ YangNode selfNode = null;
+ YangNode refNode = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("ietf-network")) {
+ selfNode = rootNode;
+ refNode = yangNodeIterator.next();
+ } else {
+ refNode = rootNode;
+ selfNode = yangNodeIterator.next();
+ }
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(selfNode instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("ietf-network"));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode1 = (YangModule) refNode;
+ assertThat(yangNode1.getName(), is("ietf-te-topology"));
+
+ YangContainer yangContainer = (YangContainer) yangNode1.getChild().getNextSibling();
+ ListIterator<YangLeaf> leafIterator;
+ YangLeaf leafInfo;
+
+ leafIterator = yangContainer.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+ leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("node-ref"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
+ assertThat(leafInfo.getDataType().getDataType(), is(LEAFREF));
+
+ YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ YangLeaf leafInfo2 = (YangLeaf) leafref.getReferredLeafOrLeafList();
+ assertThat(leafref.getReferredLeafOrLeafList(), is(leafInfo2));
+ assertThat(leafref.getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ assertThat(leafref.getEffectiveDataType().getDataType(),
+ is(YangDataTypes.DERIVED));
+
+ leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("network-ref"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
+ assertThat(leafInfo.getDataType().getDataType(), is(LEAFREF));
+
+ YangLeafRef leafref1 = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ YangLeaf leafInfo4 = (YangLeaf) leafref1.getReferredLeafOrLeafList();
+ assertThat(leafref1.getReferredLeafOrLeafList(), is(leafInfo4));
+ assertThat(leafref1.getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ assertThat(leafref1.getEffectiveDataType().getDataType(),
+ is(YangDataTypes.DERIVED));
+ }
+
+ /**
+ * Checks self resolution when leafref under typedef been referred multiple times.
+ */
+ @Test
+ public void processLeafrefWhenUsedMultipleTimes()
+ throws IOException, ParserException {
+ String searchDir = "src/test/resources/leafreflinker/interfile/typedefreferredmultipletimes";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ YangNode selfNode = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("ietf-interfaces")) {
+ selfNode = rootNode;
+ }
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((selfNode instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("ietf-interfaces"));
+
+ YangContainer container = (YangContainer) yangNode.getChild().getNextSibling();
+
+ YangList list = (YangList) container.getChild();
+
+ ListIterator<YangLeafList> leafIterator;
+ YangLeafList leafInfo;
+
+ leafIterator = list.getListOfLeafList().listIterator();
+ leafInfo = leafIterator.next();
+
+ // Check whether the information in the leaf is correct.
+ assertThat(leafInfo.getName(), is("higher-layer-if"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
+ YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
+
+ // Check whether leafref type got resolved.
+ assertThat(leafref.getResolvableStatus(),
+ is(ResolvableStatus.RESOLVED));
+
+ // Check the effective type for the leaf.
+ assertThat(leafref.getEffectiveDataType().getDataType(),
+ is(YangDataTypes.STRING));
+
+ leafInfo = leafIterator.next();
+
+ // Check whether the information in the leaf is correct.
+ assertThat(leafInfo.getName(), is("lower-layer-if"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
+ YangLeafRef leafref1 = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
+
+ // Check whether leafref type got resolved.
+ assertThat(leafref1.getResolvableStatus(),
+ is(ResolvableStatus.RESOLVED));
+
+ // Check the effective type for the leaf.
+ assertThat(leafref1.getEffectiveDataType().getDataType(),
+ is(YangDataTypes.STRING));
+ }
+}
diff --git a/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/InterFileLinkingTest.java b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/InterFileLinkingTest.java
new file mode 100644
index 0000000..ed431be
--- /dev/null
+++ b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/InterFileLinkingTest.java
@@ -0,0 +1,935 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.plugin.maven;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.hamcrest.core.Is;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangAugment;
+import org.onosproject.yang.compiler.datamodel.YangChoice;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangDerivedInfo;
+import org.onosproject.yang.compiler.datamodel.YangGrouping;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.YangTypeDef;
+import org.onosproject.yang.compiler.datamodel.YangUses;
+import org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.linker.impl.YangLinkerManager;
+import org.onosproject.yang.compiler.linker.impl.YangLinkerUtils;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+import org.onosproject.yang.compiler.utils.io.impl.YangFileScanner;
+import org.onosproject.yang.compiler.utils.io.impl.YangIoUtils;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.ListIterator;
+
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+import static org.onosproject.yang.compiler.datamodel.YangNodeType.MODULE_NODE;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.STRING;
+
+/**
+ * Test cases for testing inter file linking.
+ */
+public class InterFileLinkingTest {
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+ private final YangUtilManager utilManager = new YangUtilManager();
+ private final YangLinkerManager yangLinkerManager = new YangLinkerManager();
+
+ /**
+ * Checks inter file type linking.
+ */
+ @Test
+ public void processInterFileTypeLinking()
+ throws IOException, ParserException, MojoExecutionException {
+
+ String searchDir = "src/test/resources/interfiletype";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+
+ YangNode refNode = null;
+ YangNode selfNode = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("module1")) {
+ selfNode = rootNode;
+ refNode = yangNodeIterator.next();
+ } else {
+ refNode = rootNode;
+ selfNode = yangNodeIterator.next();
+ }
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(selfNode instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("module1"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
+ assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
+
+ assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
+ Is.is((YangTypeDef) refNode.getChild()));
+
+ assertThat(leafInfo.getDataType().getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ // Check for the effective built-in type.
+ assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
+
+ // Check for the restriction.
+ assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
+ assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
+ }
+
+ /**
+ * Checks inter file uses linking.
+ */
+ @Test
+ public void processInterFileUsesLinking()
+ throws IOException, ParserException, MojoExecutionException {
+
+ String searchDir = "src/test/resources/interfileuses";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+
+ YangNode refNode = null;
+ YangNode selfNode = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("module1")) {
+ selfNode = rootNode;
+ refNode = yangNodeIterator.next();
+ } else {
+ refNode = rootNode;
+ selfNode = yangNodeIterator.next();
+ }
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(selfNode instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("module1"));
+
+ ListIterator<YangLeaf> leafIterator;
+ YangLeaf leafInfo;
+
+ // Check whether grouping is the sibling of module's child.
+ assertThat(refNode.getChild() instanceof YangGrouping, is(true));
+
+ YangGrouping grouping = (YangGrouping) refNode.getChild();
+ leafIterator = grouping.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+
+ // Check whether the information in the leaf is correct under grouping.
+ assertThat(leafInfo.getName(), is("hello"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
+
+ // Check whether uses is module's child.
+ assertThat(yangNode.getChild() instanceof YangUses, is(true));
+ YangUses uses = (YangUses) yangNode.getChild();
+
+ // Check whether uses get resolved.
+ assertThat(uses.getResolvableStatus(),
+ is(ResolvableStatus.RESOLVED));
+ }
+
+ /**
+ * Checks inter file type linking with include list.
+ */
+ @Test
+ public void processInterFileTypeLinkingWithIncludeList()
+ throws IOException, ParserException, MojoExecutionException {
+
+ String searchDir = "src/test/resources/interfiletypewithinclude";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+
+ YangNode refNode = null;
+ YangNode selfNode = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Carry out linking of sub module with module.
+ yangLinkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
+
+ // Add reference to include list.
+ yangLinkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("module1")) {
+ selfNode = rootNode;
+ refNode = yangNodeIterator.next();
+ } else {
+ refNode = rootNode;
+ selfNode = yangNodeIterator.next();
+ }
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(selfNode instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("module1"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
+ assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
+
+ assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
+ is((YangTypeDef) refNode.getChild()));
+
+ assertThat(leafInfo.getDataType().getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ // Check for the effective built-in type.
+ assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
+
+ // Check for the restriction.
+ assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
+ assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
+ }
+
+ /**
+ * Checks inter file uses linking with include list.
+ */
+ @Test
+ public void processInterFileUsesLinkingWithInclude()
+ throws IOException, ParserException, MojoExecutionException {
+
+ String searchDir = "src/test/resources/interfileuseswithinclude";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+
+ YangNode refNode = null;
+ YangNode selfNode = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Carry out linking of sub module with module.
+ yangLinkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
+
+ // Add reference to include list.
+ yangLinkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("module1")) {
+ selfNode = rootNode;
+ refNode = yangNodeIterator.next();
+ } else {
+ refNode = rootNode;
+ selfNode = yangNodeIterator.next();
+ }
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(selfNode instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("module1"));
+
+ ListIterator<YangLeaf> leafIterator;
+ YangLeaf leafInfo;
+
+ // Check whether grouping is the sibling of module's child.
+ assertThat(refNode.getChild() instanceof YangGrouping, is(true));
+
+ YangGrouping grouping = (YangGrouping) refNode.getChild();
+ leafIterator = grouping.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+
+ // Check whether the information in the leaf is correct under grouping.
+ assertThat(leafInfo.getName(), is("hello"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
+
+ // Check whether uses is module's child.
+ assertThat(yangNode.getChild() instanceof YangUses, is(true));
+ YangUses uses = (YangUses) yangNode.getChild();
+
+ // Check whether uses get resolved.
+ assertThat(uses.getResolvableStatus(),
+ is(ResolvableStatus.RESOLVED));
+ }
+
+ /**
+ * Checks inter file type linking with revision.
+ */
+ @Test
+ public void processInterFileTypeLinkingWithRevision()
+ throws IOException, ParserException, MojoExecutionException {
+
+ String searchDir = "src/test/resources/interfiletypewithrevision";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+
+ YangNode refNode = null;
+ YangNode selfNode = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("module1")) {
+ selfNode = rootNode;
+ refNode = yangNodeIterator.next();
+ } else {
+ refNode = rootNode;
+ selfNode = yangNodeIterator.next();
+ }
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(selfNode instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("module1"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
+ assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
+
+ assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
+ is((YangTypeDef) refNode.getChild()));
+
+ assertThat(leafInfo.getDataType().getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ // Check for the effective built-in type.
+ assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
+
+ // Check for the restriction.
+ assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
+ assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
+ }
+
+ /**
+ * Checks inter file type linking with revision in name.
+ */
+ @Test
+ public void processInterFileTypeLinkingWithRevisionInName()
+ throws IOException, ParserException, MojoExecutionException {
+
+ String searchDir = "src/test/resources/interfiletypewithrevisioninname";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+
+ YangNode refNode = null;
+ YangNode selfNode = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("module1")) {
+ selfNode = rootNode;
+ refNode = yangNodeIterator.next();
+ } else {
+ refNode = rootNode;
+ selfNode = yangNodeIterator.next();
+ }
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(selfNode instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("module1"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
+ assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
+
+ assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
+ is((YangTypeDef) refNode.getChild()));
+
+ assertThat(leafInfo.getDataType().getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ // Check for the effective built-in type.
+ assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
+
+ // Check for the restriction.
+ assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
+ assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
+ }
+
+ /**
+ * Checks hierarchical inter file type linking.
+ */
+ @Test
+ public void processHierarchicalInterFileTypeLinking()
+ throws IOException, ParserException, MojoExecutionException {
+
+ String searchDir = "src/test/resources/hierarchicalinterfiletype";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+
+ YangNode refNode1 = null;
+ YangNode refNode2 = null;
+ YangNode selfNode = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ for (YangNode rootNode : utilManager.getYangNodeSet()) {
+ if (rootNode.getName().equals("ietf-network-topology")) {
+ selfNode = rootNode;
+ } else if (rootNode.getName().equals("ietf-network")) {
+ refNode1 = rootNode;
+ } else {
+ refNode2 = rootNode;
+ }
+ }
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(selfNode instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("ietf-network-topology"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("source-node"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("node-id"));
+ assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
+
+ assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
+ is((YangTypeDef) refNode1.getChild()));
+
+ assertThat(leafInfo.getDataType().getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ // Check for the effective built-in type.
+ assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
+
+ // Check for the restriction.
+ assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
+ assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
+ }
+
+ /**
+ * Checks hierarchical intra with inter file type linking.
+ */
+ @Test
+ public void processHierarchicalIntraWithInterFileTypeLinking()
+ throws IOException, ParserException, MojoExecutionException {
+
+ String searchDir = "src/test/resources/hierarchicalintrawithinterfiletype";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+
+ YangNode refNode1 = null;
+ YangNode selfNode = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ for (YangNode rootNode : utilManager.getYangNodeSet()) {
+ if (rootNode.getName().equals("ietf-network")) {
+ selfNode = rootNode;
+ } else if (rootNode.getName().equals("ietf-inet-types")) {
+ refNode1 = rootNode;
+ }
+ }
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(selfNode instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("ietf-network"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("node-ref"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("node-id"));
+ assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
+
+ assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
+ is((YangTypeDef) selfNode.getChild()));
+
+ assertThat(leafInfo.getDataType().getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ // Check for the effective built-in type.
+ assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
+
+ // Check for the restriction.
+ assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
+ assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
+ }
+
+ /**
+ * Checks hierarchical intra with inter file type linking.
+ */
+ @Test
+ public void interFileWithUsesReferringType()
+ throws IOException, ParserException, MojoExecutionException {
+
+ String searchDir = "src/test/resources/interfilewithusesreferringtype";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir("target/interfilewithusesreferringtype/");
+
+ utilManager.translateToJava(yangPluginConfig);
+
+ YangIoUtils.deleteDirectory("target/interfilewithusesreferringtype/");
+
+ }
+
+ /**
+ * Checks hierarchical intra with inter file type linking.
+ */
+ @Test
+ public void file1UsesFile2TypeDefFile3Type()
+ throws IOException, ParserException, MojoExecutionException {
+
+ String searchDir = "src/test/resources/file1UsesFile2TypeDefFile3Type";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir("target/file1UsesFile2TypeDefFile3Type/");
+
+ utilManager.translateToJava(yangPluginConfig);
+ String dir1 = System.getProperty("user.dir") + "/"
+ + "target/file1UsesFile2TypeDefFile3Type/";
+ YangPluginConfig.compileCode(dir1);
+ YangIoUtils.deleteDirectory("target/file1UsesFile2TypeDefFile3Type/");
+
+ }
+
+ /**
+ * Checks hierarchical intra with inter file type linking.
+ */
+ @Test
+ public void interFileIetf()
+ throws IOException, ParserException, MojoExecutionException {
+
+ YangIoUtils.deleteDirectory("target/interfileietf/");
+ String searchDir = "src/test/resources/interfileietf";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir("target/interfileietf/");
+
+ utilManager.translateToJava(yangPluginConfig);
+
+ YangIoUtils.deleteDirectory("target/interfileietf/");
+
+ }
+
+ /**
+ * Checks hierarchical intra with inter file type linking.
+ */
+ @Test
+ public void usesInContainer()
+ throws IOException, ParserException, MojoExecutionException {
+
+ String searchDir = "src/test/resources/usesInContainer";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir("target/usesInContainer/");
+
+ utilManager.translateToJava(yangPluginConfig);
+
+ YangIoUtils.deleteDirectory("target/usesInContainer/");
+
+ }
+
+ /**
+ * Checks hierarchical intra with inter file type linking.
+ */
+ @Test
+ public void groupingNodeSameAsModule()
+ throws IOException, ParserException, MojoExecutionException {
+
+ String searchDir = "src/test/resources/groupingNodeSameAsModule";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir("target/groupingNodeSameAsModule/");
+
+ utilManager.translateToJava(yangPluginConfig);
+ String dir1 = System.getProperty("user.dir") + "/"
+ + "target/groupingNodeSameAsModule/";
+ YangPluginConfig.compileCode(dir1);
+ YangIoUtils.deleteDirectory("target/groupingNodeSameAsModule/");
+
+ }
+
+ /**
+ * Checks priority of the file.
+ */
+ @Test
+ public void interFilePriority()
+ throws IOException, ParserException, MojoExecutionException {
+
+ String searchDir = "src/test/resources/interfilepriority";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ YangNode selfNode = null;
+ YangNode refNode1 = null;
+ YangNode refNode2 = null;
+
+ for (YangNode rootNode : utilManager.getYangNodeSet()) {
+ if (rootNode.getName().equals("module1")) {
+ selfNode = rootNode;
+ } else if (rootNode.getName().equals("module2")) {
+ refNode1 = rootNode;
+ } else {
+ refNode2 = rootNode;
+ }
+ }
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(selfNode instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("module1"));
+ assertThat(yangNode.getPriority(), is(2));
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(refNode1 instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(refNode1.getNodeType(), is(MODULE_NODE));
+
+ YangModule referredNode1 = (YangModule) refNode1;
+ assertThat(referredNode1.getName(), is("module2"));
+ assertThat(referredNode1.getPriority(), is(3));
+ }
+
+ /**
+ * Checks contents of uses are copied as child of grouping.
+ */
+ @Test
+ public void usesInsideChildOfGrouping()
+ throws IOException, ParserException, MojoExecutionException {
+
+ String searchDir = "src/test/resources/usesInsideChildOfGrouping";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ YangNode selfNode = null;
+ YangNode refNode1 = null;
+
+ for (YangNode rootNode : utilManager.getYangNodeSet()) {
+ if (rootNode.getName().equals("ietf-network")) {
+ selfNode = rootNode;
+ } else if (rootNode.getName().equals("ietf-te-topology")) {
+ refNode1 = rootNode;
+ }
+ }
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(selfNode instanceof YangModule, is(true));
+ assertThat(selfNode.getNodeType(), is(MODULE_NODE));
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("ietf-network"));
+
+ YangModule refNode = (YangModule) refNode1;
+ assertThat(refNode.getName(), is("ietf-te-topology"));
+
+ YangAugment augment = ((YangAugment) refNode.getChild().getNextSibling().
+ getNextSibling().getNextSibling().getNextSibling());
+ assertThat(augment.getName(), is("/nw:networks/nw:network/nw:node"));
+
+ YangUses uses = ((YangUses) augment.getChild());
+ YangContainer container = ((YangContainer) uses.getNextSibling());
+ assertThat(container.getName(), is("te"));
+
+ container = ((YangContainer) container.getChild());
+ assertThat(container.getName(), is("config"));
+
+ uses = ((YangUses) container.getChild().getNextSibling());
+ assertThat(uses.getName(), is("te-node-config-attributes"));
+
+ YangContainer container1 = ((YangContainer) uses.getNextSibling());
+ assertThat(container1.getName(), is("te-node-attributes"));
+
+ uses = ((YangUses) container1.getChild());
+ assertThat(uses.getName(), is("te-node-connectivity-matrix"));
+
+ YangList list = ((YangList) uses.getNextSibling());
+ assertThat(list.getName(), is("connectivity-matrix"));
+ }
+
+ /**
+ * Checks contents of uses are copied as child of grouping.
+ */
+ @Test
+ public void interFileUsesInsideChildOfGrouping()
+ throws IOException, ParserException, MojoExecutionException {
+
+ String searchDir = "src/test/resources/interFileUsesInsideChildOfGrouping";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ YangNode selfNode = null;
+ YangNode refNode1 = null;
+
+ for (YangNode rootNode : utilManager.getYangNodeSet()) {
+ if (rootNode.getName().equals("ietf-network")) {
+ selfNode = rootNode;
+ } else if (rootNode.getName().equals("ietf-te-topology")) {
+ refNode1 = rootNode;
+ }
+ }
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(selfNode instanceof YangModule, is(true));
+ assertThat(selfNode.getNodeType(), is(MODULE_NODE));
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("ietf-network"));
+
+ YangModule refNode = (YangModule) refNode1;
+ assertThat(refNode.getName(), is("ietf-te-topology"));
+
+ YangAugment augment = ((YangAugment) refNode.getChild().getNextSibling().
+ getNextSibling().getNextSibling().getNextSibling().getNextSibling());
+ assertThat(augment.getName(), is("/nw:networks/nw:network/nt:link"));
+
+ YangUses uses = ((YangUses) augment.getChild());
+ assertThat(uses.getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+ YangContainer container = ((YangContainer) uses.getNextSibling());
+ assertThat(container.getName(), is("te"));
+
+ container = ((YangContainer) container.getChild());
+ assertThat(container.getName(), is("config"));
+
+ uses = ((YangUses) container.getChild().getNextSibling());
+ assertThat(uses.getName(), is("te-link-config-attributes"));
+ assertThat(uses.getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ YangContainer container1 = ((YangContainer) uses.getNextSibling());
+ assertThat(container1.getName(), is("te-link-attributes"));
+
+ container = ((YangContainer) container1.getChild());
+ assertThat(container.getName(), is("underlay"));
+
+ uses = ((YangUses) container.getChild());
+ assertThat(uses.getName(), is("te-link-underlay-attributes"));
+ assertThat(uses.getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ container = ((YangContainer) uses.getNextSibling());
+ assertThat(container.getName(), is("underlay-primary-path"));
+
+ YangList yangList = ((YangList) container.getChild());
+ assertThat(yangList.getName(), is("path-element"));
+
+ uses = ((YangUses) yangList.getChild());
+ assertThat(uses.getName(), is("te-path-element"));
+ assertThat(uses.getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ uses = ((YangUses) uses.getNextSibling());
+ assertThat(uses.getName(), is("explicit-route-subobject"));
+ assertThat(uses.getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ YangChoice choice = ((YangChoice) uses.getNextSibling());
+ assertThat(choice.getName(), is("type"));
+ }
+}
diff --git a/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/InterJarLinkerTest.java b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/InterJarLinkerTest.java
new file mode 100644
index 0000000..1ceefff
--- /dev/null
+++ b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/InterJarLinkerTest.java
@@ -0,0 +1,363 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.plugin.maven;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.project.MavenProject;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.base.tool.YangFileInfo;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.jar.JarEntry;
+import java.util.jar.JarOutputStream;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+import static org.onosproject.yang.compiler.datamodel.utils.DataModelUtils.parseJarFile;
+import static org.onosproject.yang.compiler.utils.UtilConstants.SLASH;
+import static org.onosproject.yang.compiler.utils.UtilConstants.TEMP;
+import static org.onosproject.yang.compiler.utils.UtilConstants.YANG_RESOURCES;
+
+/**
+ * Unit test case for inter jar linker.
+ */
+public class InterJarLinkerTest {
+
+ private final YangUtilManager utilManager = new YangUtilManager();
+
+ private static final String TARGET = "target/interJarFileLinking/";
+ private static final String YANG_FILES_DIR = "src/test/resources/interJarFileLinking/yangFiles/";
+
+ private static final String FLOW_CLASSIFIER_FOLDER = "target/interJarFileLinking/org/onosproject"
+ + "/yang/gen/v1/sfc/flowclassifier/rev20160524";
+ private static final String PORT_PAIR_FOLDER = "target/interJarFileLinking/org/onosproject"
+ + "/yang/gen/v1/sfc/portpair/rev20160524";
+ private static final String FLOW_CLASSIFIER_MANAGER = FLOW_CLASSIFIER_FOLDER + SLASH + "FlowClassifierManager.java";
+
+ private MockJarFileProvider mockJarFileProvider = new MockJarFileProvider();
+
+ /**
+ * Unit test case for a single jar dependency.
+ *
+ * @throws IOException when fails to do IO operations
+ * @throws MojoExecutionException when fails to do mojo operations
+ */
+//TODO: FIX the interJAR test case for using toolmanger instead of plugin mgr
+ // @Test
+// public void processSingleJarLinking()
+// throws IOException, MojoExecutionException {
+// utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(YANG_FILES_DIR));
+// Set<YangFileInfo> info = utilManager.getYangFileInfoSet();
+// int size1 = info.size();
+// utilManager.parseYangFileInfoSet();
+//
+// mockJarFileProvider.provideTestJarFile(utilManager);
+// utilManager.setYangFileInfoSet(removeFileInfoFromSet(info));
+// utilManager.resolveDependenciesUsingLinker();
+//
+// int size2 = info.size();
+// assertThat(true, is(size1 != size2));
+// assertThat(true, is(parseFileInfoSet(info.iterator())));
+//
+// deleteDirectory(TARGET);
+// mockJarFileProvider.deleteTestSerFile(YANG_FILES_DIR);
+// }
+//
+// /**
+// * Unit test case for a multiple jar dependency.
+// *
+// * @throws IOException when fails to do IO operations
+// * @throws MojoExecutionException when fails to do mojo operations
+// */
+// @Test
+// public void processMultipleJarLinking()
+// throws IOException, MojoExecutionException {
+// utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(YANG_FILES_DIR));
+//
+// Set<YangFileInfo> info = utilManager.getYangFileInfoSet();
+// int size1 = info.size();
+// utilManager.parseYangFileInfoSet();
+//
+// mockJarFileProvider.provideTestJarFile(utilManager);
+// utilManager.setYangFileInfoSet(removeFileInfoFromSet(info));
+//
+// utilManager.resolveDependenciesUsingLinker();
+// int size2 = info.size();
+// assertThat(true, is(size1 != size2));
+// assertThat(true, is(parseFileInfoSet(info.iterator())));
+// assertThat(true, is(parseFileInfoSet(info.iterator())));
+//
+// /*
+// * grouping flow-classifier {
+// * container flow-classifier {
+// * leaf id {
+// * type flow-classifier-id;
+// * }
+// *
+// * leaf tenant-id {
+// * type port-pair:tenant-id;
+// * }
+// * .
+// * .
+// * .
+// *
+// */
+//
+// Iterator<YangFileInfo> yangFileInfoIterator = info.iterator();
+//
+// YangFileInfo yangFileInfo = yangFileInfoIterator.next();
+//
+// while (yangFileInfoIterator.hasNext()) {
+// if (yangFileInfo.getRootNode().getName().equals("flow-classifier")) {
+// break;
+// }
+// yangFileInfo = yangFileInfoIterator.next();
+// }
+//
+// YangNode node = yangFileInfo.getRootNode();
+// node = node.getChild();
+// while (node != null) {
+// if (node instanceof YangGrouping) {
+// break;
+// }
+// node = node.getNextSibling();
+// }
+//
+// node = node.getChild();
+// ListIterator<YangLeaf> leafIterator = ((YangContainer) node).getListOfLeaf().listIterator();
+// YangLeaf leafInfo = leafIterator.next();
+//
+// assertThat(leafInfo.getName(), is("id"));
+// assertThat(leafInfo.getDataType().getDataTypeName(), is("flow-classifier-id"));
+// assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
+//
+// leafInfo = leafIterator.next();
+//
+// assertThat(leafInfo.getName(), is("tenant-id"));
+// assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
+//
+// assertThat(true, is(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef()
+// .getName().equals("tenant-id")));
+//
+// assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
+//
+// YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
+//
+// // Check for the effective built-in type.
+// assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
+//
+// YangPluginConfig yangPluginConfig = new YangPluginConfig();
+// yangPluginConfig.setCodeGenDir(TARGET);
+//
+// utilManager.translateToJava(yangPluginConfig);
+// testIfFlowClassifierFilesExists();
+// testIfPortPairFileDoesNotExist();
+// deleteDirectory(TARGET);
+// mockJarFileProvider.deleteTestSerFile(YANG_FILES_DIR);
+// }
+
+ /**
+ * Test if flow classifier code is generated.
+ */
+ private void testIfFlowClassifierFilesExists() {
+ File folder = new File(System.getProperty("user.dir") + SLASH + FLOW_CLASSIFIER_FOLDER);
+ File file = new File(System.getProperty("user.dir") + SLASH + FLOW_CLASSIFIER_MANAGER);
+ assertThat(true, is(folder.exists()));
+ assertThat(false, is(file.exists()));
+ }
+
+ /**
+ * Tests if port pair code is not generated.
+ */
+ private void testIfPortPairFileDoesNotExist() {
+ File folder = new File(System.getProperty("user.dir") + SLASH + PORT_PAIR_FOLDER);
+ assertThat(false, is(folder.exists()));
+ }
+
+ /**
+ * Need to remove port-pair YANG file info from the set so , serialized file info can be
+ * tested.
+ *
+ * @param fileInfoSet YANG file info set
+ * @return updated file info set
+ */
+ private Set<YangFileInfo> removeFileInfoFromSet(Set<YangFileInfo> fileInfoSet) {
+ String portPairFile = System.getProperty("user.dir") + SLASH + YANG_FILES_DIR + "portpair.yang";
+ for (YangFileInfo fileInfo : fileInfoSet) {
+ if (fileInfo.getYangFileName().equals(portPairFile)) {
+ fileInfoSet.remove(fileInfo);
+ return fileInfoSet;
+ }
+ }
+ return fileInfoSet;
+ }
+
+ /**
+ * Parses file info list and returns true if file info list contains the serialized file info.
+ *
+ * @param yangFileInfoIterator file info list iterator
+ * @return true if present
+ */
+ private boolean parseFileInfoSet(Iterator<YangFileInfo> yangFileInfoIterator) {
+ YangFileInfo yangFileInfo = yangFileInfoIterator.next();
+ while (yangFileInfoIterator.hasNext()) {
+ if (yangFileInfo.getRootNode().getName().equals("port-pair")) {
+ return true;
+ } else if (yangFileInfo.getRootNode().getName().equals("flow-classifier")) {
+ return true;
+ }
+ yangFileInfo = yangFileInfoIterator.next();
+ }
+ return false;
+
+ }
+
+ /**
+ * Represents jar file provider for testing.
+ */
+ private static class MockJarFileProvider {
+
+ private static final String TARGET = "target/interJarFileLinking/";
+ private static final String TARGET_RESOURCE_PATH = SLASH + TEMP + SLASH + YANG_RESOURCES + SLASH;
+ private static final String JAR_FILE_NAME = "onlab-test-1.7.0-SNAPSHOT.jar";
+ private static final String SER_FILE_NAME = "portPair.ser";
+
+ /**
+ * Creates an instance of jar file provider.
+ */
+ MockJarFileProvider() {
+
+ }
+
+ /**
+ * Provides test jar files for linker.
+ *
+ * @throws IOException when fails to do IO operations
+ */
+ void provideTestJarFile(YangUtilManager utilManager) throws IOException {
+
+ Set<YangFileInfo> info = utilManager.getYangFileInfoSet();
+
+ Set<YangNode> compiledSchemas = new HashSet<>();
+ for (YangFileInfo fileInfo : info) {
+ compiledSchemas.add(fileInfo.getRootNode());
+ }
+
+ MavenProject project = new MavenProject();
+ YangPluginUtils.serializeDataModel(TARGET, project, false);
+ createTestJar();
+
+ for (String file : getListOfTestJar(TARGET)) {
+ addInterJarRootNodes(file, info);
+ }
+ }
+
+ /**
+ * Deletes serialized file.
+ */
+ void deleteTestSerFile(String yangFileDir) {
+ File ser = new File(System.getProperty("user.dir") + SLASH + yangFileDir +
+ SLASH + SER_FILE_NAME);
+ ser.delete();
+ }
+
+ /**
+ * Returns list of test jar files.
+ *
+ * @param searchDir search directory
+ * @return list of test jar files
+ */
+ private List<String> getListOfTestJar(String searchDir) {
+ List<String> jarFiles = new ArrayList<>();
+
+ File directory = new File(searchDir + "/");
+ File[] files = directory.listFiles();
+
+ for (File file : files) {
+ if (!file.isDirectory()) {
+ jarFiles.add(file.toString());
+ }
+ }
+
+ return jarFiles;
+ }
+
+ /**
+ * Adds data model nodes of jar to file info set.
+ *
+ * @param jarFile jar file name
+ * @param info file info
+ * @throws IOException when fails to do IO operations
+ */
+ private void addInterJarRootNodes(String jarFile, Set<YangFileInfo> info) throws IOException {
+ try {
+ List<YangNode> interJarResolvedNodes = parseJarFile(jarFile, TARGET);
+
+ for (YangNode node : interJarResolvedNodes) {
+ YangFileInfo dependentFileInfo = new YangFileInfo();
+ node.setToTranslate(false);
+ dependentFileInfo.setRootNode(node);
+ dependentFileInfo.setForTranslator(false);
+ dependentFileInfo.setYangFileName(node.getName());
+ info.add(dependentFileInfo);
+ }
+ } catch (IOException e) {
+ throw new IOException("failed to resolve in interjar scenario.");
+ }
+ }
+
+ /**
+ * Creates a temporary test jar files.
+ */
+ private void createTestJar() {
+
+ File file = new File(TARGET + TARGET_RESOURCE_PATH);
+ File[] files = file.listFiles();
+ String[] source = new String[files.length];
+
+ for (int i = 0; i < files.length; i++) {
+ source[i] = files[i].toString();
+ }
+ byte[] buf = new byte[1024];
+
+ try {
+ String target = TARGET + JAR_FILE_NAME;
+ JarOutputStream out = new JarOutputStream(new FileOutputStream(target));
+ for (String element : source) {
+ FileInputStream in = new FileInputStream(element);
+ out.putNextEntry(new JarEntry(element));
+ int len;
+ while ((len = in.read(buf)) > 0) {
+ out.write(buf, 0, len);
+ }
+ out.closeEntry();
+ in.close();
+ }
+ out.close();
+ } catch (IOException e) {
+ }
+ }
+ }
+}
diff --git a/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/IntraFileIfFeatureLinkingTest.java b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/IntraFileIfFeatureLinkingTest.java
new file mode 100644
index 0000000..8adfa16
--- /dev/null
+++ b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/IntraFileIfFeatureLinkingTest.java
@@ -0,0 +1,222 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.plugin.maven;
+
+import org.hamcrest.core.Is;
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangFeature;
+import org.onosproject.yang.compiler.datamodel.YangIfFeature;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.YangSubModule;
+import org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.List;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for testing if-feature intra file linking.
+ */
+public class IntraFileIfFeatureLinkingTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks self resolution when feature defined in same file.
+ */
+ @Test
+ public void processSelfFileLinkingWithFeature()
+ throws IOException, ParserException {
+
+ YangNode node = manager
+ .getDataModel("src/test/resources/SelfFileLinkingWithFeature.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("syslog"));
+
+ List<YangFeature> featureList = yangNode.getFeatureList();
+ YangFeature feature = featureList.iterator().next();
+ assertThat(feature.getName(), is("local-storage"));
+
+ YangContainer container = (YangContainer) yangNode.getChild();
+ assertThat(container.getName(), is("speed"));
+
+ List<YangLeaf> listOfLeaf = container.getListOfLeaf();
+ YangLeaf leaf = listOfLeaf.iterator().next();
+ assertThat(leaf.getName(), is("local-storage-limit"));
+
+ List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
+ YangIfFeature ifFeature = ifFeatureList.iterator().next();
+ assertThat(ifFeature.getName().getName(), is("local-storage"));
+ assertThat(ifFeature.getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+ }
+
+ /**
+ * Checks self resolution when feature is undefined.
+ */
+ @Test
+ public void processSelfFileLinkingWithFeatureUndefined()
+ throws IOException, ParserException {
+
+ YangNode node = manager
+ .getDataModel("src/test/resources/SelfFileLinkingWithFeatureUndefined.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("syslog"));
+
+ YangContainer container = (YangContainer) yangNode.getChild();
+ assertThat(container.getName(), is("speed"));
+
+ List<YangLeaf> listOfLeaf = container.getListOfLeaf();
+ YangLeaf leaf = listOfLeaf.iterator().next();
+ assertThat(leaf.getName(), is("local-storage-limit"));
+
+ List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
+ YangIfFeature ifFeature = ifFeatureList.iterator().next();
+ assertThat(ifFeature.getName().getName(), is("local-storage"));
+ assertThat(ifFeature.getResolvableStatus(), is(ResolvableStatus.INTRA_FILE_RESOLVED));
+ }
+
+ /**
+ * Checks self resolution of feature with multiple dependency.
+ */
+ @Test
+ public void processSelfFileLinkingWithMultipleDependency() throws IOException, ParserException {
+ YangNode node = manager
+ .getDataModel("src/test/resources/SelfFileLinkingWithMultipleDependency.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("syslog"));
+
+ List<YangFeature> featureList = yangNode.getFeatureList();
+ YangFeature feature = featureList.iterator().next();
+ assertThat(feature.getName(), is("p2mp-te"));
+
+ YangContainer container = (YangContainer) yangNode.getChild();
+ assertThat(container.getName(), is("speed"));
+
+ List<YangLeaf> listOfLeaf = container.getListOfLeaf();
+ YangLeaf leaf = listOfLeaf.iterator().next();
+ assertThat(leaf.getName(), is("local-storage-limit"));
+
+ List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
+ YangIfFeature ifFeature = ifFeatureList.iterator().next();
+ assertThat(ifFeature.getName().getName(), is("frr-te"));
+ assertThat(ifFeature.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+ }
+
+ /**
+ * Checks self resolution of feature with multiple dependency undefined.
+ */
+ @Test
+ public void processSelfFileLinkingWithMultipleDependencyUnresolved() throws IOException, ParserException {
+ YangNode node = manager
+ .getDataModel("src/test/resources/SelfFileLinkingWithMultipleDependencyUnresolved.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("syslog"));
+
+ List<YangFeature> featureList = yangNode.getFeatureList();
+ YangFeature feature = featureList.iterator().next();
+ assertThat(feature.getName(), is("frr-te"));
+
+ YangContainer container = (YangContainer) yangNode.getChild();
+ assertThat(container.getName(), is("speed"));
+
+ List<YangLeaf> listOfLeaf = container.getListOfLeaf();
+ YangLeaf leaf = listOfLeaf.iterator().next();
+ assertThat(leaf.getName(), is("local-storage-limit"));
+
+ List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
+ YangIfFeature ifFeature = ifFeatureList.iterator().next();
+ assertThat(ifFeature.getName().getName(), is("frr-te"));
+ assertThat(ifFeature.getResolvableStatus(), is(ResolvableStatus.INTRA_FILE_RESOLVED));
+ }
+
+ /**
+ * Checks self resolution when feature is defined in same file in submodule.
+ */
+ @Test
+ public void processSelfFileLinkingWithFeatureInSubModule()
+ throws IOException, ParserException {
+
+ YangNode node = manager
+ .getDataModel("src/test/resources/SelfFileLinkingWithFeatureInSubModule.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangSubModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.SUB_MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangSubModule yangNode = (YangSubModule) node;
+ assertThat(yangNode.getName(), is("syslog"));
+
+ List<YangFeature> featureList = yangNode.getFeatureList();
+ YangFeature feature = featureList.iterator().next();
+ assertThat(feature.getName(), is("local-storage"));
+
+ YangContainer container = (YangContainer) yangNode.getChild();
+ assertThat(container.getName(), is("speed"));
+
+ List<YangLeaf> listOfLeaf = container.getListOfLeaf();
+ YangLeaf leaf = listOfLeaf.iterator().next();
+ assertThat(leaf.getName(), is("local-storage-limit"));
+
+ List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
+ YangIfFeature ifFeature = ifFeatureList.iterator().next();
+ assertThat(ifFeature.getName().getName(), is("local-storage"));
+ assertThat(ifFeature.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+ }
+}
diff --git a/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/IntraFileLeafrefLinkingTest.java b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/IntraFileLeafrefLinkingTest.java
new file mode 100644
index 0000000..ce9f13d
--- /dev/null
+++ b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/IntraFileLeafrefLinkingTest.java
@@ -0,0 +1,1987 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.plugin.maven;
+
+import org.hamcrest.core.Is;
+import org.junit.Ignore;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangAtomicPath;
+import org.onosproject.yang.compiler.datamodel.YangAugment;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangFeature;
+import org.onosproject.yang.compiler.datamodel.YangIfFeature;
+import org.onosproject.yang.compiler.datamodel.YangInput;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangLeafRef;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.YangPathArgType;
+import org.onosproject.yang.compiler.datamodel.YangPathOperator;
+import org.onosproject.yang.compiler.datamodel.YangPathPredicate;
+import org.onosproject.yang.compiler.datamodel.YangRelativePath;
+import org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.linker.exceptions.LinkerException;
+import org.onosproject.yang.compiler.linker.impl.YangLinkerManager;
+import org.onosproject.yang.compiler.linker.impl.YangLinkerUtils;
+import org.onosproject.yang.compiler.utils.io.impl.YangFileScanner;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+import static org.hamcrest.core.IsNull.nullValue;
+import static org.onosproject.yang.compiler.datamodel.YangNodeType.MODULE_NODE;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.LEAFREF;
+
+/**
+ * Test cases for testing leafref intra file linking.
+ */
+public class IntraFileLeafrefLinkingTest {
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ private final YangUtilManager utilManager = new YangUtilManager();
+ private final YangLinkerManager yangLinkerManager = new YangLinkerManager();
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks self resolution when leafref under module refers to leaf in container.
+ */
+ @Test
+ public void processSelfResolutionWhenLeafrefReferToContainerLeaf()
+ throws IOException, ParserException {
+
+ String searchDir = "src/test/resources/leafreflinker/intrafile/simpleleafref";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ YangNode selfNode = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("SelfResolutionWhenLeafrefReferToContainerLeaf")) {
+ selfNode = rootNode;
+ }
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((selfNode instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("SelfResolutionWhenLeafrefReferToContainerLeaf"));
+
+ ListIterator<YangLeaf> leafIterator;
+ YangLeaf leafInfo;
+
+ leafIterator = yangNode.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+
+ // Check whether the information in the leaf is correct.
+ assertThat(leafInfo.getName(), is("network-ref"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
+ YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
+
+ // Check whether leafref type got resolved.
+ assertThat(leafref.getResolvableStatus(),
+ Is.is(ResolvableStatus.RESOLVED));
+
+ // Check the effective type for the leaf.
+ assertThat(leafref.getEffectiveDataType().getDataType(),
+ is(YangDataTypes.UINT8));
+ }
+
+ /**
+ * Checks self resolution when leafref under module refers to leaf in input of rpc.
+ */
+ @Test
+ public void processSelfResolutionWhenLeafrefInModuleReferToLeafInInputOfRpc()
+ throws IOException, ParserException {
+
+ String searchDir = "src/test/resources/leafreflinker/intrafile/leafrefwithrpc";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ YangNode selfNode = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("SelfResolutionWhenLeafrefInModuleReferToLeafInInputOfRpc")) {
+ selfNode = rootNode;
+ }
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((selfNode instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("SelfResolutionWhenLeafrefInModuleReferToLeafInInputOfRpc"));
+
+ ListIterator<YangLeaf> leafIterator;
+ YangLeaf leafInfo;
+
+ leafIterator = yangNode.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+
+ // Check whether the information in the leaf is correct.
+ assertThat(leafInfo.getName(), is("network-ref"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
+ YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
+
+ // Check whether leafref type got resolved.
+ assertThat(leafref.getResolvableStatus(),
+ is(ResolvableStatus.RESOLVED));
+
+ // Check the effective type for the leaf.
+ assertThat(leafref.getEffectiveDataType().getDataType(),
+ is(YangDataTypes.UINT8));
+ }
+
+ /**
+ * Checks self resolution when leafref under module refers to grouping rpc with input as name.
+ * Rpc has input child also. So here the node search must be done by taking input node.
+ * TODO: When path has RPC's input but grouping & typedef with the same name occurs.
+ */
+ @Ignore
+ public void processSelfResolutionWhenLeafrefInModuleReferToGroupingWithInputInRpc()
+ throws IOException, ParserException {
+
+ String searchDir = "src/test/resources/leafreflinker/intrafile/leafrefwithrpcandgrouping";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ YangNode selfNode = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("SelfResolutionWhenLeafrefInModuleReferToGroupingWithInputInRpc")) {
+ selfNode = rootNode;
+ }
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((selfNode instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("SelfResolutionWhenLeafrefInModuleReferToGroupingWithInputInRpc"));
+
+ ListIterator<YangLeaf> leafIterator;
+ YangLeaf leafInfo;
+
+ leafIterator = yangNode.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+
+ // Check whether the information in the leaf is correct.
+ assertThat(leafInfo.getName(), is("network-ref"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
+ YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
+
+ // Check whether leafref type got resolved.
+ assertThat(leafref.getResolvableStatus(),
+ is(ResolvableStatus.RESOLVED));
+
+ // Check the effective type for the leaf.
+ assertThat(leafref.getEffectiveDataType().getDataType(),
+ is(YangDataTypes.UINT8));
+ }
+
+ /**
+ * Checks self resolution when leafref under module refers to grouping under module.
+ * Grouping/typedef cannot be referred.
+ */
+ @Test
+ public void processSelfResolutionWhenLeafrefInModuleReferToGrouping()
+ throws IOException, ParserException {
+/*
+ thrown.expect(LinkerException.class);
+ thrown.expectMessage(
+ "YANG file error: The target node, in the leafref path /networks/network-id, is invalid.");
+*/
+ String searchDir = "src/test/resources/leafreflinker/intrafile/invalidscenerioforgrouping";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+ }
+
+ /**
+ * Checks self resolution error scenerio where leafref is without path.
+ */
+ @Test
+ public void processSelfResolutionWhenLeafrefDoesntHavePath()
+ throws IOException, ParserException {
+
+ thrown.expect(ParserException.class);
+ thrown.expectMessage(
+ "YANG file error : a type leafref must have one path statement.");
+ YangNode node = manager
+ .getDataModel("src/test/resources/SelfResolutionWhenLeafrefDoesntHavePath.yang");
+ }
+
+ /**
+ * Checks self resolution when leafref under module refers to invalid node.
+ */
+ @Test
+ public void processSelfResolutionWhenLeafrefInModuleReferToInvalidNode()
+ throws IOException, ParserException {
+
+ thrown.expect(LinkerException.class);
+ thrown.expectMessage(
+ "YANG file error: Unable to find base leaf/leaf-list for given leafref path /define/network-id");
+ String searchDir = "src/test/resources/leafreflinker/intrafile/invalidsceneriowithinvalidnode";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+ }
+
+ /**
+ * Checks self resolution when leafref under module refers to invalid node.
+ * Inter file linking also has to be done to know the error message.
+ */
+ @Test
+ public void processSelfResolutionWhenLeafrefIsInDeepTreeAndLeafIsInModuleWithReferredTypeUnion()
+ throws IOException, ParserException {
+
+ String searchDir = "src/test/resources/leafreflinker/intrafile/leafreflinking";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ YangNode selfNode = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("Test")) {
+ selfNode = rootNode;
+ }
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((selfNode instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangContainer containerParent = (YangContainer) yangNode.getChild().getChild().getChild();
+ ListIterator<YangLeaf> leafIterator;
+ YangLeaf leafInfo;
+
+ leafIterator = containerParent.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+
+ // Check whether the information in the leaf is correct.
+ assertThat(leafInfo.getName(), is("name"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
+ YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
+
+ // Check whether leafref type got resolved.
+ assertThat(leafref.getResolvableStatus(),
+ is(ResolvableStatus.RESOLVED));
+
+ // Check the effective type for the leaf.
+ assertThat(leafref.getEffectiveDataType().getDataType(),
+ is(YangDataTypes.UNION));
+ }
+
+ /**
+ * Checks self resolution when leafref of leaf-list under module refers to leaf in container.
+ */
+ @Test
+ public void processSelfResolutionWhenLeafrefReferToContainerLeafList()
+ throws IOException, ParserException {
+
+ String searchDir = "src/test/resources/leafreflinker/intrafile/leafrefreferingtoleaflist";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ YangNode selfNode = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("ietf-network")) {
+ selfNode = rootNode;
+ }
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((selfNode instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("ietf-network"));
+
+ ListIterator<YangLeafList> leafListIterator;
+ YangLeafList leafListInfo;
+
+ leafListIterator = yangNode.getListOfLeafList().listIterator();
+ leafListInfo = leafListIterator.next();
+
+ // Check whether the information in the leaf is correct.
+ assertThat(leafListInfo.getName(), is("network-ref"));
+ assertThat(leafListInfo.getDataType().getDataTypeName(), is("leafref"));
+ assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
+ YangLeafRef leafref = (YangLeafRef) (leafListInfo.getDataType().getDataTypeExtendedInfo());
+
+ // Check whether leafref type got resolved.
+ assertThat(leafref.getResolvableStatus(),
+ is(ResolvableStatus.RESOLVED));
+
+ // Check the effective type for the leaf.
+ assertThat(leafref.getEffectiveDataType().getDataType(),
+ is(YangDataTypes.UINT8));
+ }
+
+ /**
+ * Checks self resolution when leafref of leaf-list under module refers to leaf-list in input of rpc.
+ */
+ @Test
+ public void processSelfResolutionWhenLeafrefInModuleReferToLeafListInInputOfRpc()
+ throws IOException, ParserException {
+
+ String searchDir = "src/test/resources/leafreflinker/intrafile/leafreftoinputinrpc";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ YangNode selfNode = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("ietf-network")) {
+ selfNode = rootNode;
+ }
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("ietf-network"));
+
+ ListIterator<YangLeafList> leafListIterator;
+ YangLeafList leafListInfo;
+
+ leafListIterator = yangNode.getListOfLeafList().listIterator();
+ leafListInfo = leafListIterator.next();
+
+ // Check whether the information in the leaf is correct.
+ assertThat(leafListInfo.getName(), is("network-ref"));
+ assertThat(leafListInfo.getDataType().getDataTypeName(), is("leafref"));
+ assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
+ YangLeafRef leafref = (YangLeafRef) (leafListInfo.getDataType().getDataTypeExtendedInfo());
+
+ // Check whether leafref type got resolved.
+ assertThat(leafref.getResolvableStatus(),
+ is(ResolvableStatus.RESOLVED));
+
+ // Check the effective type for the leaf.
+ assertThat(leafref.getEffectiveDataType().getDataType(),
+ is(YangDataTypes.UINT8));
+ }
+
+ /**
+ * Checks self resolution when leafref of leaf-list under module refers to invalid node.
+ * Inter file linking also has to be done to know the error message.
+ */
+ @Test
+ public void processSelfResolutionWhenLeafrefIsInDeepTreeAndLeafListIsInModuleWithReferredTypeEnumeration()
+ throws IOException, ParserException {
+
+ String searchDir = "src/test/resources/leafreflinker/intrafile/leafrefwithrefleafderived";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ YangNode selfNode = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("Test")) {
+ selfNode = rootNode;
+ }
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangContainer containerParent = (YangContainer) yangNode.getChild().getChild().getChild();
+ ListIterator<YangLeafList> leafListListIterator;
+ YangLeafList leafListInfo;
+
+ leafListListIterator = containerParent.getListOfLeafList().listIterator();
+ leafListInfo = leafListListIterator.next();
+
+ // Check whether the information in the leaf is correct.
+ assertThat(leafListInfo.getName(), is("name"));
+ assertThat(leafListInfo.getDataType().getDataTypeName(), is("leafref"));
+ assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
+ YangLeafRef leafref = (YangLeafRef) (leafListInfo.getDataType().getDataTypeExtendedInfo());
+
+ // Check whether leafref type got resolved.
+ assertThat(leafref.getResolvableStatus(),
+ is(ResolvableStatus.RESOLVED));
+
+ // Check the effective type for the leaf.
+ assertThat(leafref.getEffectiveDataType().getDataType(),
+ is(YangDataTypes.ENUMERATION));
+ }
+
+ /**
+ * Checks the error scenerio when the referred node is not a leaf or leaf-list.
+ */
+ @Test
+ public void processSelfResolutionWhenLeafrefDoesNotReferToLeafOrLeafList()
+ throws IOException, ParserException {
+
+ thrown.expect(LinkerException.class);
+ thrown.expectMessage(
+ "YANG file error: Unable to find base leaf/leaf-list for given leafref path /networks");
+ String searchDir = "src/test/resources/leafreflinker/intrafile/invalidsceneriowithnorefleaf";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+ }
+
+ /**
+ * Checks self resolution when leafref of leaf-list under module refers to leaf in container.
+ */
+ @Test
+ public void processSelfResolutionWhenLeafrefInTypedefReferToContainer()
+ throws IOException, ParserException {
+ String searchDir = "src/test/resources/leafreflinker/intrafile/leafrefintypedef";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ YangNode selfNode = null;
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("ietf-network")) {
+ selfNode = rootNode;
+ }
+ // Check whether the data model tree returned is of type module.
+ assertThat((selfNode instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("ietf-network"));
+
+ YangContainer yangContainer = (YangContainer) yangNode.getChild();
+ ListIterator<YangLeaf> leafIterator;
+ YangLeaf leafInfo;
+ leafIterator = yangContainer.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+
+ // Check whether the information in the leaf is correct under grouping.
+ assertThat(leafInfo.getName(), is("network-id"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
+
+ YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
+
+ // Check whether leafref type got resolved.
+ assertThat(leafref.getResolvableStatus(),
+ is(ResolvableStatus.RESOLVED));
+
+ // Check the effective type for the leaf.
+ assertThat(leafref.getEffectiveDataType().getDataType(),
+ is(YangDataTypes.UINT8));
+ }
+
+ /**
+ * Checks self resolution when leafref of leaf-list under module refers to leaf-list in input of rpc.
+ */
+ @Test
+ public void processSelfResolutionWhenLeafrefInTypedefModuleReferToLeafListInInputOfRpc()
+ throws IOException, ParserException {
+
+ String searchDir = "src/test/resources/leafreflinker/intrafile/leafreftorpcinputleaflist";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ YangNode selfNode = null;
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("ietf-network")) {
+ selfNode = rootNode;
+ }
+ // Check whether the data model tree returned is of type module.
+ assertThat((selfNode instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("ietf-network"));
+
+ YangInput yangInput = (YangInput) yangNode.getChild().getChild();
+
+ ListIterator<YangLeafList> leafListIterator;
+ YangLeafList yangLeafListInfo;
+ leafListIterator = yangInput.getListOfLeafList().listIterator();
+ yangLeafListInfo = leafListIterator.next();
+
+ // Check whether the information in the leaf is correct under grouping.
+ assertThat(yangLeafListInfo.getName(), is("network-id"));
+ assertThat(yangLeafListInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
+
+ YangLeafRef leafref = (YangLeafRef) (yangLeafListInfo.getDataType().getDataTypeExtendedInfo());
+
+ // Check whether leafref type got resolved.
+ assertThat(leafref.getResolvableStatus(),
+ is(ResolvableStatus.RESOLVED));
+
+ // Check the effective type for the leaf.
+ assertThat(leafref.getEffectiveDataType().getDataType(),
+ is(YangDataTypes.UINT8));
+ }
+
+ /**
+ * Checks self resolution when leafref of leaf-list under module refers to invalid node.
+ * Inter file linking also has to be done to know the error message.
+ */
+ @Test
+ public void processSelfResolutionWhenLeafrefInTypedefIsInDeepTreeAndLeafListIsInModuleWithReferredTypeEnumeration()
+ throws IOException, ParserException {
+
+ String searchDir = "src/test/resources/leafreflinker/intrafile/leafreftoleafrefwithtypedef";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ YangNode selfNode = null;
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("Test")) {
+ selfNode = rootNode;
+ }
+ // Check whether the data model tree returned is of type module.
+ assertThat((selfNode instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangContainer yangContainer = (YangContainer) yangNode.getChild().getChild().getChild().getNextSibling();
+
+ ListIterator<YangLeaf> leafIterator;
+ YangLeaf yangLeafInfo;
+ leafIterator = yangContainer.getListOfLeaf().listIterator();
+ yangLeafInfo = leafIterator.next();
+
+ // Check whether the information in the leaf is correct under grouping.
+ assertThat(yangLeafInfo.getName(), is("interval"));
+ assertThat(yangLeafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
+
+ YangLeafRef leafref = (YangLeafRef) (yangLeafInfo.getDataType().getDataTypeExtendedInfo());
+
+ // Check whether leafref type got resolved.
+ assertThat(leafref.getResolvableStatus(),
+ is(ResolvableStatus.RESOLVED));
+
+ // Check the effective type for the leaf.
+ assertThat(leafref.getEffectiveDataType().getDataType(),
+ is(YangDataTypes.ENUMERATION));
+ }
+
+ /**
+ * Checks self resolution when grouping and uses are siblings.
+ * Grouping followed by uses.
+ */
+ @Test
+ public void processSelfResolutionWhenLeafrefRefersAnotherLeafref()
+ throws IOException, ParserException {
+
+ String searchDir = "src/test/resources/leafreflinker/intrafile/leafreftoleafref";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ YangNode selfNode = null;
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("ietf-network")) {
+ selfNode = rootNode;
+ }
+ // Check whether the data model tree returned is of type module.
+ assertThat((selfNode instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("ietf-network"));
+
+ ListIterator<YangLeaf> leafIterator;
+ YangLeaf leafInfo;
+
+ //YangGrouping grouping = (YangGrouping) yangNode.getChild().getNextSibling();
+ leafIterator = yangNode.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+
+ // Check whether the information in the leaf is correct under grouping.
+ assertThat(leafInfo.getName(), is("network-ref"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
+ YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
+
+ assertThat(leafref.getResolvableStatus(),
+ is(ResolvableStatus.RESOLVED));
+
+ assertThat(leafref.getEffectiveDataType().getDataType(),
+ is(YangDataTypes.UINT8));
+ }
+
+ /**
+ * Checks self resolution when leafref refers to many other leafref.
+ */
+ @Test
+ public void processSelfResolutionWhenLeafrefReferToMultipleLeafref()
+ throws IOException, ParserException {
+
+ String searchDir = "src/test/resources/leafreflinker/intrafile/leafreftomultileafref";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ YangNode selfNode = null;
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("Test")) {
+ selfNode = rootNode;
+ }
+ // Check whether the data model tree returned is of type module.
+ assertThat((selfNode instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangContainer containerInModule = (YangContainer) yangNode.getChild().getNextSibling();
+ YangContainer containerInList = (YangContainer) containerInModule.getChild().getChild();
+
+ ListIterator<YangLeaf> leafIterator;
+ YangLeaf leafInfo;
+
+ leafIterator = containerInList.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+
+ // Check whether the information in the leaf is correct under grouping.
+ assertThat(leafInfo.getName(), is("remove"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
+ YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
+
+ assertThat(leafref.getResolvableStatus(),
+ is(ResolvableStatus.RESOLVED));
+
+ assertThat(leafref.getEffectiveDataType().getDataType(),
+ is(YangDataTypes.ENUMERATION));
+ }
+
+ /**
+ * Checks self resolution when grouping and uses are siblings.
+ * Grouping followed by uses.
+ */
+ @Test
+ public void processSelfResolutionWhenLeafrefRefersAnotherDerivedType()
+ throws IOException, ParserException {
+
+ String searchDir = "src/test/resources/leafreflinker/intrafile/leafreftoderivedtype";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ YangNode selfNode = null;
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("ietf-network")) {
+ selfNode = rootNode;
+ }
+ // Check whether the data model tree returned is of type module.
+ assertThat((selfNode instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("ietf-network"));
+
+ ListIterator<YangLeaf> leafIterator;
+ YangLeaf leafInfo;
+
+ //YangGrouping grouping = (YangGrouping) yangNode.getChild().getNextSibling();
+ leafIterator = yangNode.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+
+ // Check whether the information in the leaf is correct under grouping.
+ assertThat(leafInfo.getName(), is("network-ref"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
+ YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
+
+ assertThat(leafref.getResolvableStatus(),
+ is(ResolvableStatus.RESOLVED));
+
+ assertThat(leafref.getEffectiveDataType().getDataType(),
+ is(YangDataTypes.DERIVED));
+ }
+
+ /**
+ * Checks self resolution when leafref refers to many other leafref.
+ */
+ @Test
+ public void processSelfResolutionWhenLeafrefReferToMultipleTypedef()
+ throws IOException, ParserException {
+
+ String searchDir = "src/test/resources/leafreflinker/intrafile/leafreftomultitypedef";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ YangNode selfNode = null;
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("Test")) {
+ selfNode = rootNode;
+ }
+ // Check whether the data model tree returned is of type module.
+ assertThat((selfNode instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangContainer containerInModule = (YangContainer) yangNode.getChild().getNextSibling();
+ YangContainer containerInList = (YangContainer) containerInModule.getChild().getChild();
+
+ ListIterator<YangLeaf> leafIterator;
+ YangLeaf leafInfo;
+
+ leafIterator = containerInList.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+
+ // Check whether the information in the leaf is correct under grouping.
+ assertThat(leafInfo.getName(), is("remove"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
+ YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
+
+ assertThat(leafref.getResolvableStatus(),
+ is(ResolvableStatus.RESOLVED));
+
+ assertThat(leafref.getEffectiveDataType().getDataType(),
+ is(YangDataTypes.DERIVED));
+ }
+
+ /**
+ * Checks self resolution when leafref refers to many other leaf with derived type
+ * which in turn referring to another leaf.
+ */
+ @Test
+ public void processSelfResolutionWhenLeafrefReferToDerivedTypeReferringToLeafWithLeafref()
+ throws IOException, ParserException {
+
+ String searchDir = "src/test/resources/leafreflinker/intrafile/leafreftotypedefwithleafref";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ YangNode selfNode = null;
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("Test")) {
+ selfNode = rootNode;
+ }
+ // Check whether the data model tree returned is of type module.
+ assertThat((selfNode instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangContainer containerInModule = (YangContainer) yangNode.getChild().getNextSibling();
+ YangContainer containerInList = (YangContainer) containerInModule.getChild().getChild();
+
+ ListIterator<YangLeaf> leafIterator;
+ YangLeaf leafInfo;
+
+ leafIterator = containerInList.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+
+ // Check whether the information in the leaf is correct under grouping.
+ assertThat(leafInfo.getName(), is("remove"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
+ YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ assertThat(leafref.getResolvableStatus(),
+ is(ResolvableStatus.RESOLVED));
+
+ assertThat(leafref.getEffectiveDataType().getDataType(),
+ is(YangDataTypes.ENUMERATION));
+ }
+
+ /**
+ * Checks self resolution when leafref under module refers to leaf in container with relative path.
+ */
+ @Test
+ public void processSelfResolutionWhenLeafrefReferToContainerLeafRelPath()
+ throws IOException, ParserException {
+
+ String searchDir = "src/test/resources/leafreflinker/intrafile/relativepath/simpleleafref";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ YangNode selfNode = null;
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("ietf-network")) {
+ selfNode = rootNode;
+ }
+ // Check whether the data model tree returned is of type module.
+ assertThat((selfNode instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("ietf-network"));
+
+ ListIterator<YangLeaf> leafIterator;
+ YangLeaf leafInfo;
+
+ leafIterator = yangNode.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+
+ // Check whether the information in the leaf is correct.
+ assertThat(leafInfo.getName(), is("network-ref"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
+ YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
+
+ // Check whether leafref type got resolved.
+ assertThat(leafref.getResolvableStatus(),
+ is(ResolvableStatus.RESOLVED));
+
+ // Check the effective type for the leaf.
+ assertThat(leafref.getEffectiveDataType().getDataType(),
+ is(YangDataTypes.UINT8));
+ }
+
+ /**
+ * Checks self resolution when leafref under module refers to grouping rpc with input as name.
+ * Rpc has input child also. So here the node search must be done by taking input node using relative path.
+ */
+ @Ignore
+ public void processSelfResolutionWhenLeafrefInModuleReferToGroupingWithInputInRpcRelPath()
+ throws IOException, ParserException {
+
+ String searchDir = "src/test/resources/leafreflinker/intrafile/relativepath/leafreftoinputwithgroupinginrpc";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ YangNode selfNode = null;
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("ietf-network")) {
+ selfNode = rootNode;
+ }
+ // Check whether the data model tree returned is of type module.
+ assertThat((selfNode instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("ietf-network"));
+
+ ListIterator<YangLeaf> leafIterator;
+ YangLeaf leafInfo;
+
+ leafIterator = yangNode.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+
+ // Check whether the information in the leaf is correct.
+ assertThat(leafInfo.getName(), is("network-ref"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
+ YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
+
+ // Check whether leafref type got resolved.
+ assertThat(leafref.getResolvableStatus(),
+ is(ResolvableStatus.RESOLVED));
+
+ // Check the effective type for the leaf.
+ assertThat(leafref.getEffectiveDataType().getDataType(),
+ is(YangDataTypes.UINT8));
+ }
+
+ /**
+ * Checks self resolution when leafref under module refers to invalid root node with relative path.
+ */
+ @Test
+ public void processSelfResolutionWhenLeafrefInModuleReferToInvalidRootNodeRelPath()
+ throws IOException, ParserException {
+
+ thrown.expect(LinkerException.class);
+ thrown.expectMessage(
+ "YANG file error: The target node, in the leafref path ../../../define/network-id, is invalid.");
+ String searchDir = "src/test/resources/leafreflinker/intrafile/relativepath/invalidrelativeancestoraccess";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+ }
+
+ /**
+ * Checks self resolution when leafref under module refers to invalid node.
+ * Inter file linking also has to be done to know the error message with relative path.
+ */
+ @Test
+ public void processSelfResolutionWhenLeafrefInModuleReferToInvalidNodeRelPath()
+ throws IOException, ParserException {
+
+
+ thrown.expect(LinkerException.class);
+ thrown.expectMessage(
+ "YANG file error: Unable to find base leaf/leaf-list for given leafref path ../define/network-id");
+ String searchDir = "src/test/resources/leafreflinker/intrafile/relativepath/invalidnode";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ //Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+ }
+
+ /**
+ * Checks self resolution when leafref of leaf-list under module refers to leaf in container with relative path.
+ */
+ @Test
+ public void processSelfResolutionWhenLeafrefInTypedefReferToContainerRelPath()
+ throws IOException, ParserException {
+
+ String searchDir = "src/test/resources/leafreflinker/intrafile/relativepath/leafrefintypedef";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ YangNode selfNode = null;
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("ietf-network")) {
+ selfNode = rootNode;
+ }
+ // Check whether the data model tree returned is of type module.
+ assertThat((selfNode instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("ietf-network"));
+ ListIterator<YangLeaf> leafIterator;
+ YangLeaf leafInfo;
+ YangContainer yangContainer = (YangContainer) yangNode.getChild();
+ leafIterator = yangContainer.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+
+ // Check whether the information in the leaf is correct under grouping.
+ assertThat(leafInfo.getName(), is("network-id"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
+
+ YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
+
+ // Check whether leafref type got resolved.
+ assertThat(leafref.getResolvableStatus(),
+ is(ResolvableStatus.RESOLVED));
+
+ // Check the effective type for the leaf.
+ assertThat(leafref.getEffectiveDataType().getDataType(),
+ is(YangDataTypes.UINT8));
+ }
+
+ /**
+ * Checks self resolution when leafref refers to many other leafref with relative path.
+ */
+ @Test
+ public void processSelfResolutionWhenLeafrefReferToMultipleLeafrefRelPath()
+ throws IOException, ParserException {
+
+ String searchDir = "src/test/resources/leafreflinker/intrafile/relativepath/leafreftomultileafref";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ YangNode selfNode = null;
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("Test")) {
+ selfNode = rootNode;
+ }
+ // Check whether the data model tree returned is of type module.
+ assertThat((selfNode instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangContainer containerInModule = (YangContainer) yangNode.getChild().getNextSibling();
+ YangContainer containerInList = (YangContainer) containerInModule.getChild().getChild();
+
+ ListIterator<YangLeaf> leafIterator;
+ YangLeaf leafInfo;
+
+ leafIterator = containerInList.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+
+ // Check whether the information in the leaf is correct under grouping.
+ assertThat(leafInfo.getName(), is("remove"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
+ YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
+
+ assertThat(leafref.getResolvableStatus(),
+ is(ResolvableStatus.RESOLVED));
+
+ assertThat(leafref.getEffectiveDataType().getDataType(),
+ is(YangDataTypes.ENUMERATION));
+ }
+
+ /**
+ * Checks self resolution when leafref refers to many other leaf with derived type
+ * which in turn referring to another leaf with relative type.
+ */
+ @Test
+ public void processSelfResolutionWhenLeafrefReferToDerivedTypeReferringToLeafWithLeafrefRelType()
+ throws IOException, ParserException {
+
+ String searchDir = "src/test/resources/leafreflinker/intrafile/relativepath/leafreftotypedef";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ YangNode selfNode = null;
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("Test")) {
+ selfNode = rootNode;
+ }
+ // Check whether the data model tree returned is of type module.
+ assertThat((selfNode instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangContainer containerInModule = (YangContainer) yangNode.getChild().getNextSibling();
+ YangContainer containerInList = (YangContainer) containerInModule.getChild().getChild();
+
+ ListIterator<YangLeaf> leafIterator;
+ YangLeaf leafInfo;
+
+ leafIterator = containerInList.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+
+ // Check whether the information in the leaf is correct under grouping.
+ assertThat(leafInfo.getName(), is("remove"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
+ YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ assertThat(leafref.getResolvableStatus(),
+ is(ResolvableStatus.RESOLVED));
+
+ assertThat(leafref.getEffectiveDataType().getDataType(),
+ is(YangDataTypes.ENUMERATION));
+ }
+
+ /**
+ * Checks the valid scenerios of path argument having proper setters.
+ */
+ @Test
+ public void processPathArgumentStatement()
+ throws IOException, ParserException {
+
+ String searchDir = "src/test/resources/leafreflinker/intrafile/relativepath/pathlistener";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ YangNode selfNode = null;
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("PathListener")) {
+ selfNode = rootNode;
+ }
+ // Check whether the data model tree returned is of type module.
+ assertThat((selfNode instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("PathListener"));
+ YangList listInModule = (YangList) yangNode.getChild();
+
+ YangContainer containerInModule = (YangContainer) yangNode.getChild().getNextSibling();
+ ListIterator<YangLeaf> leafIterator;
+ YangLeaf leafInfo;
+
+ YangLeaf leafNameInList = listInModule.getListOfLeaf().listIterator().next();
+
+ leafIterator = containerInModule.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+
+ // Check whether the information in the leaf is correct under grouping.
+ assertThat(leafInfo.getName(), is("ifname"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
+ YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
+ assertThat(leafref.getPathType(), Is.is(YangPathArgType.ABSOLUTE_PATH));
+
+ YangRelativePath relativePathForName = leafref.getRelativePath();
+ assertThat(relativePathForName.getAncestorNodeCount(), is(2));
+ List<YangAtomicPath> absPathForName = relativePathForName.getAtomicPathList();
+ Iterator<YangAtomicPath> absPathIteratorForName = absPathForName.listIterator();
+ YangAtomicPath abspathForName = absPathIteratorForName.next();
+ assertThat(abspathForName.getNodeIdentifier().getName(), is("interface"));
+ assertThat(abspathForName.getNodeIdentifier().getPrefix(), is("test"));
+ YangAtomicPath abspath1 = absPathIteratorForName.next();
+ assertThat(abspath1.getNodeIdentifier().getName(), is("name"));
+ assertThat(abspath1.getNodeIdentifier().getPrefix(), is("test"));
+
+ YangLeaf leafInfo1 = leafIterator.next();
+ // Check whether the information in the leaf is correct under grouping.
+ assertThat(leafInfo1.getName(), is("status"));
+ assertThat(leafInfo1.getDataType().getDataTypeName(), is("leafref"));
+ assertThat(leafInfo1.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
+
+ YangLeafRef leafref1 = (YangLeafRef) leafInfo1.getDataType().getDataTypeExtendedInfo();
+ assertThat(leafref1.getPathType(), is(YangPathArgType.ABSOLUTE_PATH));
+
+ List<YangAtomicPath> absolutePathList = leafref1.getAtomicPath();
+ Iterator<YangAtomicPath> absPathIterator = absolutePathList.listIterator();
+ YangAtomicPath abspath = absPathIterator.next();
+ assertThat(abspath.getNodeIdentifier().getName(), is("interface"));
+ assertThat(abspath.getNodeIdentifier().getPrefix(), is("test"));
+
+ List<YangPathPredicate> pathPredicateList = abspath.getPathPredicatesList();
+ Iterator<YangPathPredicate> pathPredicate = pathPredicateList.listIterator();
+ YangPathPredicate pathPredicate1 = pathPredicate.next();
+ assertThat(pathPredicate1.getNodeId().getName(), is("name"));
+ assertThat(pathPredicate1.getNodeId().getPrefix(), nullValue());
+ assertThat(pathPredicate1.getRelPath().getAncestorNodeCount(), is(1));
+ assertThat(pathPredicate1.getPathOp(), is(YangPathOperator.EQUALTO));
+ assertThat(pathPredicate1.getRelPath().getAtomicPathList().listIterator().next().getNodeIdentifier()
+ .getName(), is("ifname"));
+ //TODO : Fill the path predicates
+// assertThat(pathPredicate1.getLeftAxisNode(), is(leafNameInList));
+// assertThat(pathPredicate1.getRightAxisNode(), is(leafInfo));
+ }
+
+ /**
+ * Checks inter file resolution when leafref refers to multiple leafrefs through many files.
+ */
+ @Test
+ public void processInterFileLeafrefRefersToMultipleLeafrefInMultipleFiles()
+ throws IOException, ParserException {
+
+ String searchDir = "src/test/resources/leafreflinker/interfile" +
+ "/interfileleafrefreferstomultipleleafrefinmultiplefiles";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ YangNode refNode1 = null;
+ YangNode refNode2 = null;
+ YangNode selfNode = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ for (YangNode rootNode : utilManager.getYangNodeSet()) {
+ if (rootNode.getName().equals("ietf-network-topology")) {
+ selfNode = rootNode;
+ } else if (rootNode.getName().equals("ietf-network")) {
+ refNode1 = rootNode;
+ } else {
+ refNode2 = rootNode;
+ }
+ }
+ // Check whether the data model tree returned is of type module.
+ assertThat(selfNode instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("ietf-network-topology"));
+
+ YangList list = (YangList) yangNode.getChild().getChild();
+ ListIterator<YangLeaf> leafIterator = list.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("link-tp"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
+ assertThat(leafInfo.getDataType().getDataType(), is(LEAFREF));
+
+ YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ YangLeaf leafInfo2 = (YangLeaf) leafref.getReferredLeafOrLeafList();
+ assertThat(leafref.getReferredLeafOrLeafList(), is(leafInfo2));
+ assertThat(leafref.getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ assertThat(leafref.getEffectiveDataType().getDataType(),
+ is(YangDataTypes.STRING));
+ }
+
+
+ /**
+ * Checks addition of if-feature list to leafref.
+ */
+ @Test
+ public void processSelfFileLinkingWithFeatureReferredByLeafref()
+ throws IOException, ParserException {
+
+ String searchDir = "src/test/resources/leafreflinker/iffeatuinleafref/simpleleafrefwithiffeature";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ YangNode selfNode = null;
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("syslog")) {
+ selfNode = rootNode;
+ }
+ // Check whether the data model tree returned is of type module.
+ assertThat((selfNode instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("syslog"));
+
+ List<YangFeature> featureList = yangNode.getFeatureList();
+ YangFeature feature = featureList.iterator().next();
+ assertThat(feature.getName(), is("local-storage"));
+
+ YangContainer container = (YangContainer) yangNode.getChild();
+ assertThat(container.getName(), is("speed"));
+
+ List<YangLeaf> listOfLeaf = container.getListOfLeaf();
+ YangLeaf leaf = listOfLeaf.iterator().next();
+ assertThat(leaf.getName(), is("local-storage-limit"));
+
+ List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
+ YangIfFeature ifFeature = ifFeatureList.iterator().next();
+ assertThat(ifFeature.getName().getName(), is("local-storage"));
+ assertThat(ifFeature.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+
+ ListIterator<YangLeaf> listOfLeafInModule = yangNode.getListOfLeaf().listIterator();
+ YangLeaf yangLeaf = listOfLeafInModule.next();
+ assertThat(yangLeaf.getName(), is("storage-value"));
+
+ YangLeafRef leafRef = (YangLeafRef) yangLeaf.getDataType().getDataTypeExtendedInfo();
+
+ assertThat(leafRef.getEffectiveDataType().getDataType(), is(YangDataTypes.UINT64));
+
+ List<YangIfFeature> ifFeatureListInLeafref = leafRef.getIfFeatureList();
+ YangIfFeature ifFeatureInLeafref = ifFeatureListInLeafref.iterator().next();
+ assertThat(ifFeatureInLeafref.getName().getName(), is("local-storage"));
+ assertThat(ifFeatureInLeafref.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+ }
+
+ /**
+ * Checks addition of if-feature list to leafref when referred leaf is again having leafref in it.
+ */
+ @Test
+ public void processSelfFileLinkingWithFeatureReferredByMultiLeafref()
+ throws IOException, ParserException {
+
+ String searchDir = "src/test/resources/leafreflinker/iffeatuinleafref/featurebymultileafref";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ YangNode selfNode = null;
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("syslog")) {
+ selfNode = rootNode;
+ }
+ // Check whether the data model tree returned is of type module.
+ assertThat((selfNode instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("syslog"));
+
+ List<YangFeature> featureList = yangNode.getFeatureList();
+ YangFeature feature = featureList.iterator().next();
+ assertThat(feature.getName(), is("local-storage"));
+
+ YangContainer container = (YangContainer) yangNode.getChild();
+ assertThat(container.getName(), is("speed"));
+
+ List<YangLeaf> listOfLeaf = container.getListOfLeaf();
+ YangLeaf leaf = listOfLeaf.iterator().next();
+ assertThat(leaf.getName(), is("local-storage-limit"));
+
+ List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
+ YangIfFeature ifFeature = ifFeatureList.iterator().next();
+ assertThat(ifFeature.getName().getName(), is("local-storage"));
+ assertThat(ifFeature.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+
+ ListIterator<YangLeaf> listOfLeafInModule = yangNode.getListOfLeaf().listIterator();
+ YangLeaf yangLeaf = listOfLeafInModule.next();
+ assertThat(yangLeaf.getName(), is("storage-value"));
+
+ YangLeafRef leafRef = (YangLeafRef) yangLeaf.getDataType().getDataTypeExtendedInfo();
+
+ assertThat(leafRef.getEffectiveDataType().getDataType(), is(YangDataTypes.UINT64));
+
+ List<YangIfFeature> ifFeatureListInLeafref = leafRef.getIfFeatureList();
+ YangIfFeature ifFeatureInLeafref = ifFeatureListInLeafref.iterator().next();
+
+ assertThat(ifFeatureInLeafref.getName().getName(), is("main-storage"));
+ assertThat(ifFeatureInLeafref.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+
+ YangIfFeature ifFeatureInLeafref1 = ifFeatureListInLeafref.iterator().next();
+
+ assertThat(ifFeatureInLeafref1.getName().getName(), is("main-storage"));
+ assertThat(ifFeatureInLeafref1.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+ }
+
+ /**
+ * Checks self resolution when leafref in grouping is copied to augment.
+ */
+ @Test
+ public void processSelfResolutionWhenLeafrefInGroupingIsUnderAugment()
+ throws IOException, ParserException {
+
+ String searchDir = "src/test/resources/leafreflinker/intrafile/leafrefInAugment";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ YangNode selfNode = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("topology")) {
+ selfNode = rootNode;
+ }
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((selfNode instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("topology"));
+
+ ListIterator<YangLeaf> leafIterator;
+ YangLeaf leafInfo;
+
+ YangAugment augment = (YangAugment) yangNode.getChild().getNextSibling();
+
+ YangList list = (YangList) augment.getChild().getChild().getChild().getChild().getChild();
+
+ leafIterator = list.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+
+ // Check whether the information in the leaf is correct.
+ assertThat(leafInfo.getName(), is("src-tp-ref"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
+ YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
+
+ // Check whether leafref type got resolved.
+ assertThat(leafref.getResolvableStatus(),
+ is(ResolvableStatus.RESOLVED));
+
+ // Check the effective type for the leaf.
+ assertThat(leafref.getEffectiveDataType().getDataType(),
+ is(YangDataTypes.UINT8));
+ }
+
+ /**
+ * Checks self resolution when leafref under grouping's uses.
+ */
+ @Test
+ public void processSelfResolutionWhenLeafrefUnderGroupingUses()
+ throws IOException, ParserException {
+
+ String searchDir = "src/test/resources/leafreflinker/intrafile/leafrefinusesundergrouping";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ YangNode selfNode = null;
+ YangNode refNode = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("ietf-network")) {
+ selfNode = rootNode;
+ refNode = yangNodeIterator.next();
+ } else {
+ refNode = rootNode;
+ selfNode = yangNodeIterator.next();
+ }
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(selfNode instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("ietf-network"));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode1 = (YangModule) refNode;
+ assertThat(yangNode1.getName(), is("network"));
+
+ YangContainer yangContainer = (YangContainer) yangNode.getChild().getNextSibling().getNextSibling();
+ assertThat(yangContainer.getName(), is("fine"));
+
+ YangContainer yangContainer1 = (YangContainer) yangContainer.getChild().getNextSibling();
+ assertThat(yangContainer1.getName(), is("hi"));
+
+ ListIterator<YangLeaf> leafIterator;
+ YangLeaf leafInfo;
+
+ leafIterator = yangContainer1.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+
+ // Check whether the information in the leaf is correct.
+ assertThat(leafInfo.getName(), is("network-id-ref"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
+ YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
+
+ // Check whether leafref type got resolved.
+ assertThat(leafref.getResolvableStatus(),
+ is(ResolvableStatus.RESOLVED));
+
+ // Check the effective type for the leaf.
+ assertThat(leafref.getEffectiveDataType().getDataType(),
+ is(YangDataTypes.DERIVED));
+ }
+
+ /**
+ * Checks self resolution when leafref under typedef refers to the node where it is used.
+ */
+ @Test
+ public void processSelfResolutionWhenLeafrefInTypedefIsUsedInSameReferredNode()
+ throws IOException, ParserException {
+
+ String searchDir = "src/test/resources/leafreflinker/intrafile/leafrefintypedefwithsamereferpath";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ YangNode selfNode = null;
+
+ // Create YANG node set
+ yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+
+ // Add references to import list.
+ yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
+
+ YangNode rootNode = yangNodeIterator.next();
+
+ if (rootNode.getName().equals("typedef")) {
+ selfNode = rootNode;
+ }
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((selfNode instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) selfNode;
+ assertThat(yangNode.getName(), is("typedef"));
+
+ ListIterator<YangLeaf> leafIterator;
+ YangLeaf leafInfo;
+
+ YangContainer yangContainer = (YangContainer) yangNode.getChild().getNextSibling();
+
+ leafIterator = yangContainer.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+
+ // Check whether the information in the leaf is correct.
+ assertThat(leafInfo.getName(), is("reference"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
+ YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
+
+ // Check whether leafref type got resolved.
+ assertThat(leafref.getResolvableStatus(),
+ is(ResolvableStatus.RESOLVED));
+
+ // Check the effective type for the leaf.
+ assertThat(leafref.getEffectiveDataType().getDataType(),
+ is(YangDataTypes.UINT8));
+ }
+}
diff --git a/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/IntraFileTypeLinkingTest.java b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/IntraFileTypeLinkingTest.java
new file mode 100644
index 0000000..85129fa
--- /dev/null
+++ b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/IntraFileTypeLinkingTest.java
@@ -0,0 +1,565 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.plugin.maven;
+
+import org.hamcrest.core.Is;
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangDerivedInfo;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.YangTypeDef;
+import org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.linker.exceptions.LinkerException;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.ListIterator;
+
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for testing "type" intra file linking.
+ */
+public class IntraFileTypeLinkingTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks self resolution when typedef and leaf using type are siblings.
+ */
+ @Test
+ public void processSelfResolutionWhenTypeAndTypedefAtRootLevel()
+ throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/SelfResolutionWhenTypeAndTypedefAtRootLevel.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(node instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), Is.is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ 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("hello"));
+ assertThat(leafInfo.getDataType().getDataType(), Is.is(YangDataTypes.DERIVED));
+
+ assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
+ Is.is((YangTypeDef) node.getChild()));
+
+ assertThat(leafInfo.getDataType().getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ // Check for the effective built-in type.
+ assertThat(derivedInfo.getEffectiveBuiltInType(), Is.is(YangDataTypes.STRING));
+
+ // Check for the restriction.
+ assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
+ assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
+ }
+
+ /**
+ * Checks self resolution when typedef and leaf using type are at different
+ * level where typedef is at the root.
+ */
+ @Test
+ public void processSelfFileLinkingTypedefAtRootTypeTwoLevelInHierarchy()
+ throws IOException, ParserException {
+
+ YangNode node =
+ manager.getDataModel("src/test/resources/SelfFileLinkingTypedefAtRootTypeTwoLevelInHierarchy.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), Is.is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangContainer yangContainer = (YangContainer) node.getChild().getNextSibling();
+
+ YangList yangList = (YangList) yangContainer.getChild();
+
+ ListIterator<YangLeaf> leafIterator = yangList.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
+ assertThat(leafInfo.getDataType().getDataType(), Is.is(YangDataTypes.DERIVED));
+
+ assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
+ is((YangTypeDef) node.getChild()));
+
+ assertThat(leafInfo.getDataType().getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ // Check for the effective built-in type.
+ assertThat(derivedInfo.getEffectiveBuiltInType(), Is.is(YangDataTypes.STRING));
+
+ // Check for the restriction.
+ assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
+ assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
+ }
+
+ /**
+ * Checks self resolution when typedef and leaf using type are at different
+ * level where typedef is at the root and defined after parent holder
+ * of type.
+ */
+ @Test
+ public void processSelfFileLinkingTypedefAtRootIsAfterContainerHavingType()
+ throws IOException, ParserException {
+
+ YangNode node =
+ manager.getDataModel("src/test/resources/SelfFileLinkingTypedefAtRootIsAfterContainerHavingType.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), Is.is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangContainer yangContainer = (YangContainer) node.getChild();
+
+ YangList yangList = (YangList) yangContainer.getChild();
+
+ ListIterator<YangLeaf> leafIterator = yangList.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
+ assertThat(leafInfo.getDataType().getDataType(), Is.is(YangDataTypes.DERIVED));
+
+ assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
+ is((YangTypeDef) node.getChild().getNextSibling()));
+
+ assertThat(leafInfo.getDataType().getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ // Check for the effective built-in type.
+ assertThat(derivedInfo.getEffectiveBuiltInType(), Is.is(YangDataTypes.STRING));
+
+ // Check for the restriction.
+ assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
+ assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
+ }
+
+ /**
+ * Checks self resolution when typedef and leaf using type are at different
+ * level where typedef is at the level of root+1 and defined after parent
+ * holder of type.
+ */
+ @Test
+ public void processSelfFileLinkingTypedefAtMiddleLevelAfterParentHolder()
+ throws IOException, ParserException {
+
+ YangNode node =
+ manager.getDataModel("src/test/resources/SelfFileLinkingTypedefAtMiddleLevelAfterParentHolder.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), Is.is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangContainer yangContainer = (YangContainer) node.getChild();
+
+ YangList yangList = (YangList) yangContainer.getChild();
+
+ ListIterator<YangLeaf> leafIterator = yangList.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
+ assertThat(leafInfo.getDataType().getDataType(), Is.is(YangDataTypes.DERIVED));
+
+ assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
+ is((YangTypeDef) yangContainer.getChild().getNextSibling()));
+
+ assertThat(leafInfo.getDataType().getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ // Check for the effective built-in type.
+ assertThat(derivedInfo.getEffectiveBuiltInType(), Is.is(YangDataTypes.STRING));
+
+ // Check for the restriction.
+ assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
+ assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
+ }
+
+ /**
+ * Checks self resolution when typedef hierarchical references are present.
+ */
+ @Test
+ public void processSelfFileLinkingWithTypdefHierarchicalReference()
+ throws IOException, ParserException {
+
+ YangNode node =
+ manager.getDataModel("src/test/resources/SelfFileLinkingWithTypdefHierarchicalReference.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), Is.is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangContainer yangContainer = (YangContainer) node.getChild().getNextSibling();
+
+ YangList yangList = (YangList) yangContainer.getChild();
+
+ ListIterator<YangLeaf> leafIterator = yangList.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("FirstClass"));
+ assertThat(leafInfo.getDataType().getDataType(), Is.is(YangDataTypes.DERIVED));
+
+ assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
+ is((YangTypeDef) yangList.getChild()));
+ assertThat(leafInfo.getDataType().getResolvableStatus(),
+ Is.is(ResolvableStatus.RESOLVED));
+
+ YangTypeDef typeDef1 = (YangTypeDef) yangList.getChild();
+
+ assertThat(((YangDerivedInfo<?>) typeDef1.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(),
+ is((YangTypeDef) yangContainer.getChild().getNextSibling()));
+ assertThat(typeDef1.getTypeDefBaseType().getResolvableStatus(),
+ Is.is(ResolvableStatus.RESOLVED));
+
+ YangTypeDef typeDef2 = (YangTypeDef) yangContainer.getChild().getNextSibling();
+
+ assertThat(((YangDerivedInfo<?>) typeDef2.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(),
+ is((YangTypeDef) node.getChild()));
+ assertThat(typeDef2.getTypeDefBaseType().getResolvableStatus(),
+ Is.is(ResolvableStatus.RESOLVED));
+
+ YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ // Check for the effective built-in type.
+ assertThat(derivedInfo.getEffectiveBuiltInType(), Is.is(YangDataTypes.INT32));
+
+ // Check for the restriction.
+ assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
+ assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
+ }
+
+ /**
+ * Checks self resolution when typedef hierarchical references are present
+ * with last type is unresolved.
+ */
+ @Test
+ public void processSelfFileLinkingWithTypdefHierarchicalRefUnresolved()
+ throws IOException, ParserException {
+
+ YangNode node =
+ manager.getDataModel("src/test/resources/SelfFileLinkingWithTypdefHierarchicalRefUnresolved.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), Is.is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangContainer yangContainer = (YangContainer) node.getChild().getNextSibling();
+
+ YangList yangList = (YangList) yangContainer.getChild();
+
+ ListIterator<YangLeaf> leafIterator = yangList.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("FirstClass"));
+ assertThat(leafInfo.getDataType().getDataType(), Is.is(YangDataTypes.DERIVED));
+
+ assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
+ is((YangTypeDef) yangList.getChild()));
+ assertThat(leafInfo.getDataType().getResolvableStatus(),
+ Is.is(ResolvableStatus.INTRA_FILE_RESOLVED));
+
+ YangTypeDef typeDef1 = (YangTypeDef) yangList.getChild();
+
+ assertThat(((YangDerivedInfo<?>) typeDef1.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(),
+ is((YangTypeDef) yangContainer.getChild().getNextSibling()));
+ assertThat(typeDef1.getTypeDefBaseType().getResolvableStatus(),
+ Is.is(ResolvableStatus.INTRA_FILE_RESOLVED));
+
+ YangTypeDef typeDef2 = (YangTypeDef) yangContainer.getChild().getNextSibling();
+
+ assertThat(((YangDerivedInfo<?>) typeDef2.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(),
+ is((YangTypeDef) node.getChild()));
+ assertThat(typeDef2.getTypeDefBaseType().getResolvableStatus(),
+ Is.is(ResolvableStatus.INTRA_FILE_RESOLVED));
+
+ YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ // Check for the effective built-in type.
+ assertThat(derivedInfo.getEffectiveBuiltInType(), is(nullValue()));
+
+ // Check for the restriction.
+ assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
+ assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
+ }
+
+ /**
+ * Checks self resolution when type uses prefix of self module.
+ */
+ @Test
+ public void processSelfFileLinkingWithTypeWithSelfModulePrefix()
+ throws IOException, ParserException {
+
+ YangNode node =
+ manager.getDataModel("src/test/resources/SelfFileLinkingWithTypeWithSelfModulePrefix.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), Is.is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangContainer yangContainer = (YangContainer) node.getChild().getNextSibling();
+
+ YangList yangList = (YangList) yangContainer.getChild();
+
+ ListIterator<YangLeaf> leafIterator = yangList.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("FirstClass"));
+ assertThat(leafInfo.getDataType().getDataType(), Is.is(YangDataTypes.DERIVED));
+
+ assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
+ is((YangTypeDef) yangList.getChild()));
+ assertThat(leafInfo.getDataType().getResolvableStatus(),
+ Is.is(ResolvableStatus.RESOLVED));
+
+ YangTypeDef typeDef1 = (YangTypeDef) yangList.getChild();
+
+ assertThat(((YangDerivedInfo<?>) typeDef1.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(),
+ is((YangTypeDef) yangContainer.getChild().getNextSibling()));
+ assertThat(typeDef1.getTypeDefBaseType().getResolvableStatus(),
+ Is.is(ResolvableStatus.RESOLVED));
+
+ YangTypeDef typeDef2 = (YangTypeDef) yangContainer.getChild().getNextSibling();
+
+ assertThat(((YangDerivedInfo<?>) typeDef2.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(),
+ is((YangTypeDef) node.getChild()));
+ assertThat(typeDef2.getTypeDefBaseType().getResolvableStatus(),
+ Is.is(ResolvableStatus.RESOLVED));
+
+ YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ // Check for the effective built-in type.
+ assertThat(derivedInfo.getEffectiveBuiltInType(), Is.is(YangDataTypes.INT32));
+
+ // Check for the restriction.
+ assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
+ assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
+ }
+
+ /**
+ * Checks self resolution when some type uses prefix of self module
+ * some uses external prefix.
+ */
+ @Test
+ public void processSelfFileLinkingWithTypeWithSelfAndExternalPrefixMix()
+ throws IOException, ParserException {
+
+ YangNode node =
+ manager.getDataModel("src/test/resources/SelfFileLinkingWithTypeWithSelfAndExternalPrefixMix.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), Is.is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ YangContainer yangContainer = (YangContainer) node.getChild().getNextSibling();
+
+ YangList yangList = (YangList) yangContainer.getChild();
+
+ ListIterator<YangLeaf> leafIterator = yangList.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("FirstClass"));
+ assertThat(leafInfo.getDataType().getDataType(), Is.is(YangDataTypes.DERIVED));
+
+ assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
+ is((YangTypeDef) yangList.getChild()));
+ assertThat(leafInfo.getDataType().getResolvableStatus(),
+ Is.is(ResolvableStatus.INTRA_FILE_RESOLVED));
+
+ YangTypeDef typeDef1 = (YangTypeDef) yangList.getChild();
+
+ YangTypeDef typeDef2 = (YangTypeDef) yangContainer.getChild().getNextSibling();
+
+ assertThat(((YangDerivedInfo<?>) typeDef2.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(),
+ is((YangTypeDef) node.getChild()));
+ assertThat(typeDef2.getTypeDefBaseType().getResolvableStatus(),
+ Is.is(ResolvableStatus.RESOLVED));
+
+ YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ // Check for the effective built-in type.
+ assertThat(derivedInfo.getEffectiveBuiltInType(), is(nullValue()));
+
+ // Check for the restriction.
+ assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
+ assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
+ }
+
+ /**
+ * Check self resolution when type referred typedef is not available in
+ * file, it should not result in exception.
+ */
+ @Test
+ public void processSelfResolutionWhenTypeReferredTypedefNotDefined()
+ throws IOException, LinkerException {
+
+ YangNode node =
+ manager.getDataModel("src/test/resources/SelfResolutionWhenTypeReferredTypedefNotDefined.yang");
+ }
+
+ /**
+ * Checks self resolution when typedef and leaf using type are at different
+ * level where typedef is is not an ancestor of type, it should not result
+ * in exception.
+ */
+ @Test
+ public void processSelfFileLinkingTypedefNotFound()
+ throws IOException, LinkerException {
+
+ YangNode node = manager.getDataModel("src/test/resources/SelfFileLinkingTypedefNotFound.yang");
+ }
+
+ /**
+ * Checks hierarchical self resolution with self resolution failure scenario.
+ * It should not result in exception.
+ */
+ @Test
+ public void processSelfFileLinkingWithHierarchicalTypeFailureScenario()
+ throws IOException, LinkerException {
+
+ YangNode node =
+ manager.getDataModel("src/test/resources/SelfFileLinkingWithHierarchicalTypeFailureScenario.yang");
+ }
+
+ /**
+ * Checks self resolution when typedef and leaf using type are siblings for binary type.
+ */
+ @Test
+ public void processSelfResolutionWhenTypeAndTypedefAtRootLevelForBinary()
+ throws IOException, ParserException {
+
+ YangNode node
+ = manager.getDataModel("src/test/resources/SelfResolutionWhenTypeAndTypedefAtRootLevelForBinary.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(node instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), Is.is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("ospf"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ assertThat(leafInfo.getName(), is("typedef14"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("type14"));
+ assertThat(leafInfo.getDataType().getDataType(), Is.is(YangDataTypes.DERIVED));
+
+ assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
+ is((YangTypeDef) node.getChild()));
+
+ assertThat(leafInfo.getDataType().getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ // Check for the effective built-in type.
+ assertThat(derivedInfo.getEffectiveBuiltInType(), Is.is(YangDataTypes.BINARY));
+
+ // Check for the restriction.
+ assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
+ assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
+ }
+}
diff --git a/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/IntraFileUsesLinkingTest.java b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/IntraFileUsesLinkingTest.java
new file mode 100644
index 0000000..f5dee73
--- /dev/null
+++ b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/IntraFileUsesLinkingTest.java
@@ -0,0 +1,653 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.plugin.maven;
+
+import org.hamcrest.core.Is;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangGrouping;
+import org.onosproject.yang.compiler.datamodel.YangInput;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangNodeType;
+import org.onosproject.yang.compiler.datamodel.YangTypeDef;
+import org.onosproject.yang.compiler.datamodel.YangUses;
+import org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.linker.exceptions.LinkerException;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.util.ListIterator;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for testing uses intra file linking.
+ */
+public class IntraFileUsesLinkingTest {
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks self resolution when grouping and uses are siblings.
+ * Grouping followed by uses.
+ */
+ @Test
+ public void processSelfResolutionWhenUsesAndGroupingAtRootLevel()
+ throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/SelfResolutionWhenUsesAndGroupingAtRootLevel.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafIterator.next();
+
+ // Check whether the information in the leaf is correct under module.
+ assertThat(leafInfo.getName(), is("hello"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
+
+ // Check whether grouping is the sibling of module's child.
+ assertThat((yangNode.getChild().getNextSibling() instanceof YangGrouping), is(true));
+
+ YangGrouping grouping = (YangGrouping) yangNode.getChild().getNextSibling();
+ leafIterator = grouping.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+
+ // Check whether the information in the leaf is correct under grouping.
+ assertThat(leafInfo.getName(), is("hello"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
+
+ // Check whether uses is module's child.
+ assertThat((yangNode.getChild() instanceof YangUses), is(true));
+ YangUses uses = (YangUses) yangNode.getChild();
+
+ // Check whether uses get resolved
+ assertThat(uses.getResolvableStatus(),
+ Is.is(ResolvableStatus.RESOLVED));
+ }
+
+ /**
+ * Checks self resolution when grouping and uses are siblings.
+ * Grouping has a child node.
+ */
+ @Test
+ public void processSelfResolutionWhenUsesAndGroupingAtRootLevelGroupingWithChild()
+ throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel(
+ "src/test/resources/SelfResolutionWhenUsesAndGroupingAtRootLevelGroupingWithChild.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator;
+ YangLeaf leafInfo;
+
+ ListIterator<YangLeaf> leafIterator1 = yangNode.getListOfLeaf().listIterator();
+ YangLeaf leafInfo1 = leafIterator1.next();
+
+ // Check whether the information in the leaf is correct under module.
+ assertThat(leafInfo1.getName(), is("treat"));
+ assertThat(leafInfo1.getDataType().getDataTypeName(), is("string"));
+ assertThat(leafInfo1.getDataType().getDataType(), is(YangDataTypes.STRING));
+
+ YangContainer container = (YangContainer) yangNode.getChild().getNextSibling().getNextSibling();
+
+ // Check whether the container name is set correctly which is under module.
+ assertThat(container.getName(), is("test"));
+
+ leafIterator = container.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+
+ // Check whether the information in the leaf is correct under container which is under module.
+ assertThat(leafInfo.getName(), is("leaf2"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
+
+ // Check whether grouping is the sibling of module's child.
+ assertThat((yangNode.getChild().getNextSibling() instanceof YangGrouping), is(true));
+
+ YangGrouping grouping = (YangGrouping) yangNode.getChild().getNextSibling();
+ leafIterator = grouping.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+
+ // Check whether the information in the leaf is correct under grouping.
+ assertThat(leafInfo.getName(), is("treat"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
+
+ // Check whether container is the child of grouping.
+ assertThat((grouping.getChild() instanceof YangContainer), is(true));
+ container = (YangContainer) grouping.getChild();
+
+ // Check whether the container name is set correctly which is under grouping.
+ assertThat(container.getName(), is("test"));
+
+ leafIterator = container.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+
+ // Check whether the information in the leaf is correct under container which is under grouping.
+ assertThat(leafInfo.getName(), is("leaf2"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
+
+ // Check whether uses is module's child.
+ assertThat((yangNode.getChild() instanceof YangUses), is(true));
+ YangUses uses = (YangUses) yangNode.getChild();
+
+ // Check whether uses get resolved.
+ assertThat(uses.getResolvableStatus(),
+ is(ResolvableStatus.RESOLVED));
+
+ }
+
+ /**
+ * Checks self resolution when grouping in rpc and uses in output of the same rpc.
+ * Uses is followed by grouping.
+ */
+ @Test
+ public void processSelfResolutionGroupingInRpcAndUsesInOutput()
+ throws IOException, ParserException {
+
+ YangNode node = manager
+ .getDataModel("src/test/resources/SelfResolutionGroupingInRpcAndUsesInOutput.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("rock"));
+
+ ListIterator<YangLeaf> leafIterator;
+ YangLeaf leafInfo;
+
+ // Check whether grouping is the child of rpc.
+ assertThat((yangNode.getChild().getChild() instanceof YangGrouping), is(true));
+ YangGrouping grouping = (YangGrouping) yangNode.getChild().getChild();
+
+ // Check whether the grouping name is set correctly.
+ assertThat(grouping.getName(), is("hello"));
+
+ // Check whether list is the child of grouping.
+ assertThat((grouping.getChild() instanceof YangList), is(true));
+ YangList yangListNode = (YangList) grouping.getChild();
+
+ // Check whether the list name is set correctly.
+ assertThat(yangListNode.getName(), is("valid"));
+
+ leafIterator = yangListNode.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+
+ // Check whether the information in the leaf is correct under list which is under grouping.
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
+ assertThat(leafInfo.getUnits(), is("\"seconds\""));
+ assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
+
+ // Check whether uses is input's child.
+ assertThat((yangNode.getChild().getChild().getNextSibling().getChild() instanceof YangUses), is(true));
+ YangUses uses = (YangUses) yangNode.getChild().getChild().getNextSibling().getChild();
+
+ // Check whether uses get resolved.
+ assertThat(uses.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+
+ YangInput inputNode = ((YangInput) yangNode.getChild().getChild().getNextSibling());
+ assertThat((inputNode.getChild() instanceof YangUses), is(true));
+
+ YangList yangList = ((YangList) inputNode.getChild().getNextSibling());
+ assertThat(yangList.getName(), is("valid"));
+
+ leafIterator = yangList.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+
+ // Check whether the information in the leaf is correct under list which is deep copied.
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
+ assertThat(leafInfo.getUnits(), is("\"seconds\""));
+ assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
+ }
+
+ /**
+ * Checks the failure scenario when uses is referring to its own grouping directly.
+ */
+ @Test
+ public void processSelfResolutionGroupingReferencingItselfFailureScenerio()
+ throws IOException {
+
+ thrown.expect(LinkerException.class);
+ thrown.expectMessage(
+ "YANG file error: Duplicate input identifier detected, same as leaf \"zip-code in 7 at 13 in " +
+ "src/test/resources/SelfResolutionGroupingReferencingItselfFailureScenerio.yang\"");
+ YangNode node = manager
+ .getDataModel("src/test/resources/SelfResolutionGroupingReferencingItselfFailureScenerio.yang");
+
+ }
+
+ /**
+ * Checks the when multiple uses are present and are referred to the grouping at different levels.
+ */
+ @Test
+ public void processSelfResolutionGroupingWithMultipleUses()
+ throws IOException, ParserException {
+
+ YangNode node = manager
+ .getDataModel("src/test/resources/SelfResolutionGroupingWithMultipleUses.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ ListIterator<YangLeaf> leafIterator;
+ YangLeaf leafInfo;
+
+ // Check whether grouping is the child of container.
+ assertThat((yangNode.getChild().getChild() instanceof YangGrouping), is(true));
+ YangGrouping grouping = (YangGrouping) yangNode.getChild().getChild();
+
+ // Check whether the grouping name is set correctly.
+ assertThat(grouping.getName(), is("endpoint"));
+
+ // Check whether uses is endpoint-grouping's child.
+ assertThat((grouping.getChild() instanceof YangUses), is(true));
+ YangUses firstUses = (YangUses) grouping.getChild();
+
+ // Check whether uses get resolved.
+ assertThat(firstUses.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
+
+ // Validate first uses child is cloned properly
+ assertThat((firstUses.getNextSibling().getNextSibling()
+ .getNextSibling().getNextSibling() instanceof YangList), is(true));
+ YangList firstUsesChild = ((YangList) firstUses.getNextSibling().getNextSibling().getNextSibling()
+ .getNextSibling());
+ assertThat(firstUsesChild.getName(), is("valid"));
+
+ leafIterator = firstUsesChild.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+
+ // Check whether the information in the leaf is correct under list which has been deep copied from grouping.
+ assertThat(leafInfo.getName(), is("invalid-interval"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
+ assertThat(leafInfo.getUnits(), is("\"seconds\""));
+ assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
+
+ //validate uses second
+ assertThat((firstUses.getNextSibling() instanceof YangContainer), is(true));
+ YangContainer container = (YangContainer) firstUses.getNextSibling();
+ assertThat(container.getName(), is("design"));
+
+ assertThat((container.getChild() instanceof YangUses), is(true));
+ assertThat((container.getListOfLeaf().iterator().next().getName()), is("ink"));
+
+ //validate uses third
+ assertThat((container.getChild().getNextSibling() instanceof YangContainer), is(true));
+ YangContainer container2 = ((YangContainer) container.getChild().getNextSibling());
+ assertThat(container2.getName(), is("correct"));
+ assertThat((container2.getChild() instanceof YangUses), is(true));
+ assertThat((container2.getChild().getNextSibling() instanceof YangContainer), is(true));
+ YangContainer thirdUsesChild = ((YangContainer) container2.getChild().getNextSibling());
+ assertThat(thirdUsesChild.getListOfLeaf().iterator().next().getName(), is("zip-code"));
+
+ //validate fourth uses
+ assertThat((firstUses.getNextSibling().getNextSibling() instanceof YangUses), is(true));
+ YangUses fourthUses = ((YangUses) firstUses.getNextSibling().getNextSibling());
+ assertThat((fourthUses.getNextSibling().getNextSibling().getNextSibling() instanceof YangTypeDef),
+ is(true));
+ assertThat(fourthUses.getNextSibling().getNextSibling().getNextSibling().getName(), is("my-type"));
+
+ //validate fifth uses
+ assertThat((firstUses.getNextSibling().getNextSibling().getNextSibling() instanceof YangUses),
+ is(true));
+
+ //validate end point uses
+ assertThat(grouping.getNextSibling() instanceof YangUses, is(true));
+ assertThat(grouping.getNextSibling().getNextSibling().getNextSibling().getNextSibling()
+ .getNextSibling().getNextSibling().getNextSibling().getNextSibling() instanceof YangContainer,
+ is(true));
+ container = (YangContainer) grouping.getNextSibling().getNextSibling().getNextSibling().getNextSibling()
+ .getNextSibling().getNextSibling().getNextSibling().getNextSibling();
+ assertThat(container.getName(), is("design"));
+ container2 = (YangContainer) container.getChild().getNextSibling();
+ assertThat(container2.getName(), is("correct"));
+ assertThat(container2.getChild().getNextSibling().getName(), is("value"));
+ }
+
+ /**
+ * Checks the failure scenario when uses is present under the same node many times.
+ */
+ @Test
+ public void processSelfResolutionGroupingHavingSameUsesManyTimes()
+ throws IOException, ParserException {
+
+ thrown.expect(ParserException.class);
+ thrown.expectMessage(
+ "YANG File Error: Identifier collision detected in uses as " +
+ "\"failure in 10 at 13 in src/test/resources/SelfResolutionGroupingHavingSameUsesManyTimes.yang");
+ YangNode node = manager
+ .getDataModel("src/test/resources/SelfResolutionGroupingHavingSameUsesManyTimes.yang");
+ }
+
+ /**
+ * Checks the rpc having both typedef and grouping.
+ * It also checks that the grouping under different nodes will not give any problem in resolving uses.
+ */
+ @Test
+ public void processSelfResolutionRpcWithOneTypedefAndTwoGroupingUnderDifferentNode()
+ throws IOException, ParserException {
+
+ YangNode node = manager
+ .getDataModel(
+ "src/test/resources/SelfResolutionRpcWithOneTypedefAndTwoGroupingUnderDifferentNode.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("rock"));
+
+ ListIterator<YangLeaf> leafIterator;
+ YangLeaf leafInfo;
+
+ // Check whether grouping is the child of input.
+ assertThat((yangNode.getChild().getChild().getChild() instanceof YangGrouping), is(true));
+ YangGrouping groupingUnderInput = (YangGrouping) yangNode.getChild().getChild().getChild();
+
+ // Check whether the grouping name is set correctly.
+ assertThat(groupingUnderInput.getName(), is("creative"));
+
+ leafIterator = groupingUnderInput.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+
+ // Check whether the information in the leaf is correct under grouping.
+ assertThat(leafInfo.getName(), is("carry"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
+
+ // Check whether grouping is the child of output.
+ assertThat((yangNode.getChild().getChild().getNextSibling().getChild() instanceof YangGrouping), is(true));
+ YangGrouping grouping = (YangGrouping) yangNode.getChild().getChild().getNextSibling().getChild();
+ assertThat(grouping.getName(), is("creative"));
+
+ // Check whether typedef is the sibling of grouping.
+ assertThat((grouping.getNextSibling() instanceof YangTypeDef), is(true));
+
+ YangTypeDef typedef = (YangTypeDef) grouping.getNextSibling();
+ assertThat(typedef.getName(), is("my-type"));
+
+ // Check whether uses is the sibling of typedef.
+ assertThat((typedef.getNextSibling() instanceof YangUses), is(true));
+
+ // Check whether uses get resolved.
+ YangUses uses = (YangUses) typedef.getNextSibling();
+ assertThat(uses.getName(), is("creative"));
+ assertThat(uses.getResolvableStatus(),
+ is(ResolvableStatus.RESOLVED));
+ }
+
+ /**
+ * Checks the failure scenario when uses is cannot resolve its grouping.
+ * It shouldnt result in exception
+ */
+ @Test
+ public void processSelfResolutionNestedGroupingWithUnresolvedUses()
+ throws IOException, LinkerException {
+
+ YangNode node = manager
+ .getDataModel("src/test/resources/SelfResolutionNestedGroupingWithUnresolvedUses.yang");
+ }
+
+ /**
+ * Checks self resolution when typedef hierarchical references are present
+ * with last type is unresolved.
+ */
+ @Test
+ public void processSelfFileLinkingWithGroupingHierarchicalRefUnresolved()
+ throws IOException, ParserException {
+
+ YangNode node = manager
+ .getDataModel("src/test/resources/SelfFileLinkingWithGroupingHierarchicalRefUnresolved.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether container is the sibling of grouping.
+ assertThat((yangNode.getChild().getNextSibling() instanceof YangContainer), is(true));
+ YangContainer containerWithUses = (YangContainer) yangNode.getChild().getNextSibling();
+ assertThat(containerWithUses.getName(), is("test"));
+
+ // Check whether uses is the child of container.
+ assertThat((containerWithUses.getChild() instanceof YangUses), is(true));
+ YangUses uses = (YangUses) containerWithUses.getChild();
+ assertThat(uses.getName(), is("create"));
+
+ // Check whether uses is getting resolved.
+ assertThat(uses.getResolvableStatus(),
+ is(ResolvableStatus.INTRA_FILE_RESOLVED));
+
+ // Check whether grouping is the child of module.
+ assertThat((yangNode.getChild() instanceof YangGrouping), is(true));
+ YangGrouping groupingWithUses = (YangGrouping) yangNode.getChild();
+ assertThat(groupingWithUses.getName(), is("create"));
+
+ // Check whether uses with prefix from from other file, is the child of grouping.
+ assertThat((groupingWithUses.getChild() instanceof YangUses), is(true));
+ YangUses uses1 = (YangUses) groupingWithUses.getChild();
+ assertThat(uses1.getName(), is("valid"));
+
+ // Check whether this uses is getting intra-file-resolved.
+ assertThat(uses1.getResolvableStatus(),
+ is(ResolvableStatus.INTRA_FILE_RESOLVED));
+ }
+
+ /**
+ * Checks self resolution when uses has prefix of self module.
+ */
+ @Test
+ public void processSelfFileLinkingWithGroupingWithSelfModulePrefix()
+ throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/SelfFileLinkingWithGroupingWithSelfModulePrefix.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether container is the sibling of grouping.
+ YangContainer yangContainer = (YangContainer) node.getChild().getNextSibling();
+
+ // Check whether list is the child of container.
+ YangList yangList = (YangList) yangContainer.getChild();
+
+ // Check whether uses is the child of list.
+ assertThat((yangList.getChild() instanceof YangUses), is(true));
+ YangUses yangUses1 = (YangUses) yangList.getChild();
+ assertThat(yangUses1.getName(), is("FirstClass"));
+
+ // Check whether uses is getting resolved.
+ assertThat(yangUses1.getResolvableStatus(),
+ is(ResolvableStatus.RESOLVED));
+
+ // Check whether grouping is the sibling of uses.
+ YangGrouping yangGrouping1 = (YangGrouping) yangUses1.getNextSibling();
+ assertThat(yangGrouping1.getName(), is("FirstClass"));
+
+ // Check whether uses is the child of grouping.
+ YangUses yangUses2 = (YangUses) yangGrouping1.getChild();
+ assertThat(yangUses2.getName(), is("PassingClass"));
+
+ // Check the uses gets resolved.
+ assertThat(yangUses2.getResolvableStatus(),
+ is(ResolvableStatus.RESOLVED));
+
+ // Check whether grouping is the sibling of list.
+ YangGrouping yangGrouping2 = (YangGrouping) yangList.getNextSibling();
+ assertThat(yangGrouping2.getName(), is("PassingClass"));
+
+ // Check uses is the child of that grouping which has prefix of the same module.
+ YangUses yangUses3 = (YangUses) yangGrouping2.getChild();
+ assertThat(yangUses3.getName(), is("Percentage"));
+
+ // Check uses is getting resolved.
+ assertThat(yangUses3.getResolvableStatus(),
+ is(ResolvableStatus.RESOLVED));
+
+ // Check grouping is the child of module.
+ YangGrouping yangGrouping3 = (YangGrouping) node.getChild();
+
+ ListIterator<YangLeaf> leafIterator;
+ YangLeaf leafInfo;
+ leafIterator = yangGrouping3.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+
+ // Check whether the information in the leaf is correct under grouping.
+ assertThat(leafInfo.getName(), is("hello"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
+
+ }
+
+ /**
+ * Checks self resolution when some type uses prefix of self module
+ * some uses external prefix.
+ */
+ @Test
+ public void processSelfFileLinkingWithGroupingWithSelfAndExternalPrefixMix()
+ throws IOException, ParserException {
+
+ YangNode node = manager
+ .getDataModel("src/test/resources/SelfFileLinkingWithGroupingWithSelfAndExternalPrefixMix.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat((node instanceof YangModule), is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // Check whether container is the sibling of grouping.
+ YangContainer yangContainer = (YangContainer) node.getChild().getNextSibling();
+
+ // Check whether list is the child of container.
+ YangList yangList = (YangList) yangContainer.getChild();
+
+ // Check whether uses is the child of list.
+ assertThat((yangList.getChild() instanceof YangUses), is(true));
+ YangUses yangUses1 = (YangUses) yangList.getChild();
+ assertThat(yangUses1.getName(), is("FirstClass"));
+
+ // Check whether uses is getting resolved.
+ assertThat(yangUses1.getResolvableStatus(),
+ is(ResolvableStatus.INTRA_FILE_RESOLVED));
+
+ // Check whether grouping is the sibling of uses.
+ YangGrouping yangGrouping1 = (YangGrouping) yangUses1.getNextSibling();
+ assertThat(yangGrouping1.getName(), is("FirstClass"));
+
+ // Check whether uses is the child of grouping which has prefix from other module.
+ YangUses yangUses2 = (YangUses) yangGrouping1.getChild();
+ assertThat(yangUses2.getName(), is("PassingClass"));
+
+ // Check whether uses gets intra-file-resolved.
+ assertThat(yangUses2.getResolvableStatus(),
+ is(ResolvableStatus.INTRA_FILE_RESOLVED));
+
+ // Check whether grouping is the sibling of list.
+ YangGrouping yangGrouping2 = (YangGrouping) yangList.getNextSibling();
+ assertThat(yangGrouping2.getName(), is("PassingClass"));
+
+ // Check uses is the child of that grouping which has prefix of the same module.
+ YangUses yangUses3 = (YangUses) yangGrouping2.getChild();
+ assertThat(yangUses3.getName(), is("Percentage"));
+
+ // Check uses is getting resolved.
+ assertThat(yangUses3.getResolvableStatus(),
+ is(ResolvableStatus.RESOLVED));
+
+ // Check grouping is the child of module.
+ YangGrouping yangGrouping3 = (YangGrouping) node.getChild();
+ ListIterator<YangLeaf> leafIterator;
+ YangLeaf leafInfo;
+ leafIterator = yangGrouping3.getListOfLeaf().listIterator();
+ leafInfo = leafIterator.next();
+
+ // Check whether the information in the leaf is correct under grouping.
+ assertThat(leafInfo.getName(), is("hello"));
+ assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
+ assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
+ }
+
+}
diff --git a/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/NotificationTranslatorTest.java b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/NotificationTranslatorTest.java
new file mode 100644
index 0000000..6043bee
--- /dev/null
+++ b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/NotificationTranslatorTest.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.plugin.maven;
+
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGeneratorUtil;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+import org.onosproject.yang.compiler.utils.io.impl.YangIoUtils;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+
+/**
+ * Unit tests for union translator.
+ */
+public final class NotificationTranslatorTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+ private final static String YANG = "src/test/resources/NotificationTest" +
+ ".yang";
+ private final static String DIR = "target/notificationTranslator/";
+
+ /**
+ * Checks union translation should not result in any exception.
+ */
+ @Test
+ public void processNotificationTranslator()
+ throws IOException, ParserException {
+ YangIoUtils.deleteDirectory(DIR);
+ YangNode node = manager.getDataModel(YANG);
+
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir(DIR);
+
+ JavaCodeGeneratorUtil.generateJavaCode(node, yangPluginConfig);
+ YangIoUtils.deleteDirectory(DIR);
+ }
+
+ // TODO enhance the test cases, after having a framework of translator test.
+}
diff --git a/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/PathPredicateLinkingTest.java b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/PathPredicateLinkingTest.java
new file mode 100644
index 0000000..5f6f15b
--- /dev/null
+++ b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/PathPredicateLinkingTest.java
@@ -0,0 +1,360 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.plugin.maven;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangAtomicPath;
+import org.onosproject.yang.compiler.datamodel.YangAugment;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafRef;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangPathPredicate;
+import org.onosproject.yang.compiler.linker.exceptions.LinkerException;
+import org.onosproject.yang.compiler.linker.impl.YangLinkerManager;
+import org.onosproject.yang.compiler.linker.impl.YangLinkerUtils;
+import org.onosproject.yang.compiler.utils.io.impl.YangFileScanner;
+
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.ListIterator;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for path predicate linking in leaf-ref.
+ */
+public class PathPredicateLinkingTest {
+
+ private final YangUtilManager utilMgr = new YangUtilManager();
+ private final YangLinkerManager linkerMgr = new YangLinkerManager();
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ private ListIterator<YangLeaf> leafItr;
+ private YangLeaf ifName;
+ private YangLeaf address;
+ private YangLeaf name;
+ private Iterator<YangAtomicPath> pathItr;
+ private YangAtomicPath atomicPath;
+ private Iterator<YangPathPredicate> predicateItr;
+ private YangPathPredicate predicate;
+
+ /**
+ * Processes simple path predicate which gets linked within the same file
+ * using relative path.
+ *
+ * @throws IOException IO file error
+ */
+ @Test
+ public void processSimplePathPredicate() throws IOException {
+
+ String searchDir = "src/test/resources/pathpredicate/simple";
+ utilMgr.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilMgr.parseYangFileInfoSet();
+ utilMgr.createYangNodeSet();
+ YangNode selfNode;
+
+ linkerMgr.createYangNodeSet(utilMgr.getYangNodeSet());
+ linkerMgr.addRefToYangFilesImportList(utilMgr.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilMgr.getYangNodeSet());
+
+ linkerMgr.processInterFileLinking(utilMgr.getYangNodeSet());
+ Iterator<YangNode> nodeItr = utilMgr.getYangNodeSet().iterator();
+ selfNode = nodeItr.next();
+
+ // Gets the list node.
+ YangList yangList = (YangList) selfNode.getChild();
+ // Gets the container node.
+ YangContainer container = (YangContainer) yangList.getNextSibling();
+
+ ListIterator<YangLeaf> leafIterator;
+ YangLeaf ifName;
+ YangLeaf address;
+ YangLeaf name;
+ Iterator<YangAtomicPath> pathItr;
+ YangAtomicPath atomicPath;
+ Iterator<YangPathPredicate> predicateItr;
+ YangPathPredicate predicate;
+
+ leafIterator = container.getListOfLeaf().listIterator();
+ ifName = leafIterator.next();
+ address = leafIterator.next();
+
+ // Gets the address leaf's leaf-ref type.
+ YangLeafRef<?> leafRef2 = (YangLeafRef) address.getDataType()
+ .getDataTypeExtendedInfo();
+ pathItr = leafRef2.getAtomicPath().listIterator();
+ atomicPath = pathItr.next();
+
+ // Gets the path-predicate.
+ predicateItr = atomicPath.getPathPredicatesList().listIterator();
+ predicate = predicateItr.next();
+
+ // Gets the left and right axis node in path-predicate.
+ YangLeaf yangLeftLeaf = (YangLeaf) predicate.getLeftAxisNode();
+ YangLeaf yangRightLeaf = (YangLeaf) predicate.getRightAxisNode();
+
+ leafIterator = yangList.getListOfLeaf().listIterator();
+ name = leafIterator.next();
+
+ // Checks that right and left path-predicates are correct.
+ assertThat(yangLeftLeaf, is(name));
+ assertThat(yangRightLeaf, is(ifName));
+ }
+
+ /**
+ * Processes simple inter file path predicate which gets linked to another
+ * file using absolute path.
+ *
+ * @throws IOException IO file error
+ */
+ @Test
+ public void processSimpleInterFilePathPredicate() throws IOException {
+
+ String searchDir = "src/test/resources/pathpredicate/simpleinterfile";
+ utilMgr.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilMgr.parseYangFileInfoSet();
+ utilMgr.createYangNodeSet();
+ YangModule selfNode;
+
+ linkerMgr.createYangNodeSet(utilMgr.getYangNodeSet());
+ linkerMgr.addRefToYangFilesImportList(utilMgr.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilMgr.getYangNodeSet());
+
+ linkerMgr.processInterFileLinking(utilMgr.getYangNodeSet());
+ Iterator<YangNode> nodeItr = utilMgr.getYangNodeSet().iterator();
+
+ YangNode rootNode = nodeItr.next();
+ YangModule refNode;
+ if (rootNode.getName().equals("ietf-network")) {
+ selfNode = (YangModule) rootNode;
+ refNode = (YangModule) nodeItr.next();
+ } else {
+ refNode = (YangModule) rootNode;
+ selfNode = (YangModule) nodeItr.next();
+ }
+
+ // Gets the container node.
+ YangContainer container = (YangContainer) selfNode.getChild();
+ // Gets the list node.
+ YangList yangList = (YangList) refNode.getChild();
+
+ ListIterator<YangLeaf> leafItr;
+ YangLeaf ifName;
+ YangLeaf address;
+ YangLeaf name;
+ Iterator<YangAtomicPath> pathItr;
+ YangAtomicPath atomicPath;
+ Iterator<YangPathPredicate> predicateItr;
+ YangPathPredicate predicate;
+
+ leafItr = container.getListOfLeaf().listIterator();
+ ifName = leafItr.next();
+ address = leafItr.next();
+
+ // Gets the address leaf's leaf-ref type.
+ YangLeafRef<?> leafRef2 = (YangLeafRef) address.getDataType()
+ .getDataTypeExtendedInfo();
+ pathItr = leafRef2.getAtomicPath().listIterator();
+ atomicPath = pathItr.next();
+
+ // Gets the path-predicate.
+ predicateItr = atomicPath.getPathPredicatesList().listIterator();
+ predicate = predicateItr.next();
+
+ // Gets the left and right axis node in path-predicate.
+ YangLeaf yangLeftLeaf = (YangLeaf) predicate.getLeftAxisNode();
+ YangLeaf yangRightLeaf = (YangLeaf) predicate.getRightAxisNode();
+
+ leafItr = yangList.getListOfLeaf().listIterator();
+ name = leafItr.next();
+
+ // Checks that right and left path-predicates are correct.
+ assertThat(yangLeftLeaf, is(name));
+ assertThat(yangRightLeaf, is(ifName));
+ }
+
+ /**
+ * Processes inter file path predicate, where leaf-ref is present under
+ * YANG augment.
+ *
+ * @throws IOException IO file error
+ */
+ @Test
+ public void processInterFilePathPredicateFromAugment() throws IOException {
+
+ String searchDir = "src/test/resources/pathpredicate/interfileaugment";
+ utilMgr.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilMgr.parseYangFileInfoSet();
+ utilMgr.createYangNodeSet();
+ YangModule selfNode;
+
+ linkerMgr.createYangNodeSet(utilMgr.getYangNodeSet());
+ linkerMgr.addRefToYangFilesImportList(utilMgr.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilMgr.getYangNodeSet());
+
+ linkerMgr.processInterFileLinking(utilMgr.getYangNodeSet());
+ Iterator<YangNode> nodeItr = utilMgr.getYangNodeSet().iterator();
+
+ YangNode rootNode = nodeItr.next();
+ YangModule refNode;
+ if (rootNode.getName().equals("ietf-network")) {
+ selfNode = (YangModule) rootNode;
+ refNode = (YangModule) nodeItr.next();
+ } else {
+ refNode = (YangModule) rootNode;
+ selfNode = (YangModule) nodeItr.next();
+ }
+
+ // Gets the augment node.
+ YangList list = (YangList) selfNode.getChild().getChild();
+
+ // Gets the augment node.
+ YangAugment augment = (YangAugment) refNode.getChild();
+
+ ListIterator<YangLeaf> leafItr;
+ YangLeaf test;
+ YangLeaf networkId;
+ YangLeaf networkRef;
+ Iterator<YangAtomicPath> pathItr;
+ YangAtomicPath atomicPath;
+ Iterator<YangPathPredicate> predicateItr;
+ YangPathPredicate predicate;
+
+ leafItr = augment.getListOfLeaf().listIterator();
+ test = leafItr.next();
+
+ YangLeafRef<?> leafRef =
+ (YangLeafRef) test.getDataType().getDataTypeExtendedInfo();
+ pathItr = leafRef.getAtomicPath().listIterator();
+ pathItr.next();
+ atomicPath = pathItr.next();
+
+ // Gets the path-predicate.
+ predicateItr = atomicPath.getPathPredicatesList().listIterator();
+ predicate = predicateItr.next();
+
+ // Gets the left and right axis node in path-predicate.
+ YangLeaf yangLeftLeaf = (YangLeaf) predicate.getLeftAxisNode();
+ YangLeaf yangRightLeaf = (YangLeaf) predicate.getRightAxisNode();
+
+ leafItr = list.getListOfLeaf().listIterator();
+ networkId = leafItr.next();
+ YangContainer reference = (YangContainer) list.getChild();
+ leafItr = reference.getListOfLeaf().listIterator();
+ networkRef = leafItr.next();
+
+ // Checks that right and left path-predicates are correct.
+ assertThat(yangLeftLeaf, is(networkId));
+ assertThat(yangRightLeaf, is(networkRef));
+ }
+
+ /**
+ * Processes an invalid scenario where the target leaf/leaf-list in
+ * path-predicate is not found.
+ *
+ * @throws IOException IO file error
+ */
+ @Test
+ public void processInvalidPathLink() throws IOException {
+ thrown.expect(LinkerException.class);
+ thrown.expectMessage(
+ "YANG file error: There is no leaf/leaf-list in YANG node as " +
+ "mentioned in the path predicate of the leafref path " +
+ "../../interface[ifname = current()/../../ifname]" +
+ "/address/ip");
+
+ String searchDir = "src/test/resources/pathpredicate/invalidlinking";
+ utilMgr.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilMgr.parseYangFileInfoSet();
+ utilMgr.createYangNodeSet();
+
+ linkerMgr.createYangNodeSet(utilMgr.getYangNodeSet());
+ linkerMgr.addRefToYangFilesImportList(utilMgr.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilMgr.getYangNodeSet());
+
+ linkerMgr.processInterFileLinking(utilMgr.getYangNodeSet());
+ }
+
+ /**
+ * Processes an invalid scenario where the right axis node doesn't come
+ * under YANG list node.
+ *
+ * @throws IOException IO file error
+ */
+ @Test
+ public void processInvalidPathLinkForList() throws IOException {
+ thrown.expect(LinkerException.class);
+ thrown.expectMessage(
+ "YANG file error: Path predicates are only applicable for " +
+ "YANG list. The leafref path has path predicate for" +
+ " non-list node in the path ../../default-address" +
+ "[ifname = current()/../ifname]/ifname");
+
+ String searchDir = "src/test/resources/pathpredicate/invalidlinking2";
+ utilMgr.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilMgr.parseYangFileInfoSet();
+ utilMgr.createYangNodeSet();
+ YangNode selfNode;
+
+ linkerMgr.createYangNodeSet(utilMgr.getYangNodeSet());
+ linkerMgr.addRefToYangFilesImportList(utilMgr.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilMgr.getYangNodeSet());
+
+ linkerMgr.processInterFileLinking(utilMgr.getYangNodeSet());
+ }
+
+ /**
+ * Processes an invalid scenario where the node in path predicate is not
+ * present in the traversal.
+ *
+ * @throws IOException IO file error
+ */
+ @Test
+ public void processInvalidPathLinkForInvalidNode()
+ throws IOException {
+ thrown.expect(LinkerException.class);
+ thrown.expectMessage(
+ "YANG file error: The path predicate of the leafref has an " +
+ "invalid path in ../../interface[name = current()/" +
+ "../../address/ifname]/address/ip");
+
+ String searchDir = "src/test/resources/pathpredicate/invalidlinking3";
+ utilMgr.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilMgr.parseYangFileInfoSet();
+ utilMgr.createYangNodeSet();
+
+ linkerMgr.createYangNodeSet(utilMgr.getYangNodeSet());
+ linkerMgr.addRefToYangFilesImportList(utilMgr.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilMgr.getYangNodeSet());
+
+ linkerMgr.processInterFileLinking(utilMgr.getYangNodeSet());
+ }
+}
diff --git a/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/ProcessSubTreeCodeGenTest.java b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/ProcessSubTreeCodeGenTest.java
new file mode 100644
index 0000000..fcc5545
--- /dev/null
+++ b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/ProcessSubTreeCodeGenTest.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.plugin.maven;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.junit.Test;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+import org.onosproject.yang.compiler.utils.io.impl.YangFileScanner;
+import org.onosproject.yang.compiler.utils.io.impl.YangIoUtils;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * Unit test case for process sub tree code generation test.
+ */
+public class ProcessSubTreeCodeGenTest {
+
+ private final YangUtilManager utilManager = new YangUtilManager();
+ private static final String DIR = "target/pstf/";
+ private static final String COMP = System.getProperty("user.dir") + File
+ .separator + DIR;
+
+ /**
+ * Checks pst translation should not result in any exception.
+ *
+ * @throws MojoExecutionException
+ */
+ @Test
+ public void processTranslator() throws IOException, ParserException, MojoExecutionException {
+
+ YangIoUtils.deleteDirectory(DIR);
+ String searchDir = "src/test/resources/pstcodegen";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir(DIR);
+ utilManager.translateToJava(yangPluginConfig);
+ YangPluginConfig.compileCode(COMP);
+ YangIoUtils.deleteDirectory(DIR);
+ }
+
+}
diff --git a/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/RestrictionResolutionTest.java b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/RestrictionResolutionTest.java
new file mode 100644
index 0000000..9908367
--- /dev/null
+++ b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/RestrictionResolutionTest.java
@@ -0,0 +1,913 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.plugin.maven;
+
+import org.hamcrest.core.Is;
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangDerivedInfo;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangPatternRestriction;
+import org.onosproject.yang.compiler.datamodel.YangRangeInterval;
+import org.onosproject.yang.compiler.datamodel.YangRangeRestriction;
+import org.onosproject.yang.compiler.datamodel.YangStringRestriction;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.YangTypeDef;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.datamodel.utils.ResolvableStatus;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangInt16;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangInt32;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangUint64;
+import org.onosproject.yang.compiler.linker.exceptions.LinkerException;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.IOException;
+import java.math.BigInteger;
+import java.util.ListIterator;
+
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+import static org.hamcrest.core.IsNull.notNullValue;
+import static org.onosproject.yang.compiler.datamodel.YangNodeType.MODULE_NODE;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.INT32;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.STRING;
+
+/**
+ * Test cases for testing restriction resolution.
+ */
+public final class RestrictionResolutionTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks length restriction in typedef.
+ */
+ @Test
+ public void processLengthRestrictionInTypedef()
+ throws IOException, ParserException, DataModelException {
+
+ YangNode node = manager.getDataModel("src/test/resources/LengthRestrictionInTypedef.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(node instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ 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("hello"));
+ assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
+
+ assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
+ Is.is((YangTypeDef) node.getChild()));
+
+ assertThat(leafInfo.getDataType().getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ // Check for the effective built-in type.
+ assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
+
+ // Check for the restriction.
+ assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
+ assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
+
+ // Check for the restriction value.
+ YangStringRestriction stringRestriction = (YangStringRestriction) derivedInfo.getResolvedExtendedInfo();
+ 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)));
+ }
+
+ /**
+ * Checks length restriction in referred type.
+ */
+ @Test
+ public void processLengthRestrictionInRefType()
+ throws IOException, ParserException, DataModelException {
+
+ YangNode node = manager.getDataModel("src/test/resources/LengthRestrictionInRefType.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(node instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ 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("hello"));
+ assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
+
+ assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
+ is((YangTypeDef) node.getChild()));
+
+ assertThat(leafInfo.getDataType().getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ // Check for the effective built-in type.
+ assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
+
+ // Check for the restriction.
+ assertThat(derivedInfo.getLengthRestrictionString(), is(notNullValue()));
+ assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
+ assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
+
+ // Check for the restriction value.
+ YangStringRestriction stringRestriction = (YangStringRestriction) derivedInfo.getResolvedExtendedInfo();
+ 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)));
+ }
+
+ /**
+ * Checks length restriction in typedef and in type with stricter value.
+ */
+ @Test
+ public void processLengthRestrictionInTypedefAndTypeValid()
+ throws IOException, ParserException, DataModelException {
+
+ YangNode node = manager.getDataModel("src/test/resources/LengthRestrictionInTypedefAndTypeValid.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(node instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ 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("hello"));
+ assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
+
+ assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
+ is((YangTypeDef) node.getChild()));
+
+ assertThat(leafInfo.getDataType().getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ // Check for the effective built-in type.
+ assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
+
+ // Check for the restriction.
+ assertThat(derivedInfo.getLengthRestrictionString(), is(notNullValue()));
+ assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
+ assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
+
+ // Check for the restriction value.
+ YangStringRestriction stringRestriction = (YangStringRestriction) derivedInfo.getResolvedExtendedInfo();
+ YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
+
+ ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
+ .listIterator();
+
+ YangRangeInterval rangeInterval1 = lengthListIterator.next();
+
+ assertThat(((YangUint64) rangeInterval1.getStartValue()).getValue(), is(BigInteger.valueOf(0)));
+ assertThat(((YangUint64) rangeInterval1.getEndValue()).getValue(), is(BigInteger.valueOf(20)));
+
+ YangRangeInterval rangeInterval2 = lengthListIterator.next();
+
+ assertThat(((YangUint64) rangeInterval2.getStartValue()).getValue(), is(BigInteger.valueOf(201)));
+ assertThat(((YangUint64) rangeInterval2.getEndValue()).getValue(), is(BigInteger.valueOf(300)));
+ }
+
+ /**
+ * Checks length restriction in typedef and in type with not stricter value.
+ */
+ @Test(expected = LinkerException.class)
+ public void processLengthRestrictionInTypedefAndTypeInValid()
+ throws IOException, DataModelException {
+ YangNode node = manager.getDataModel("src/test/resources/LengthRestrictionInTypedefAndTypeInValid.yang");
+ }
+
+ /**
+ * Checks range restriction in typedef.
+ */
+ @Test
+ public void processRangeRestrictionInTypedef()
+ throws IOException, ParserException, DataModelException {
+
+ YangNode node = manager.getDataModel("src/test/resources/RangeRestrictionInTypedef.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(node instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ 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("hello"));
+ assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
+
+ assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
+ is((YangTypeDef) node.getChild()));
+
+ assertThat(leafInfo.getDataType().getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ // Check for the effective built-in type.
+ assertThat(derivedInfo.getEffectiveBuiltInType(), is(INT32));
+
+ // Check for the restriction.
+ assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
+ assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
+
+ // Check for the restriction value.
+ YangRangeRestriction rangeRestriction = (YangRangeRestriction) derivedInfo.getResolvedExtendedInfo();
+
+ ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
+ .listIterator();
+
+ YangRangeInterval rangeInterval1 = rangeListIterator.next();
+
+ assertThat(((YangInt32) rangeInterval1.getStartValue()).getValue(), is(1));
+ assertThat(((YangInt32) rangeInterval1.getEndValue()).getValue(), is(4));
+
+ YangRangeInterval rangeInterval2 = rangeListIterator.next();
+
+ assertThat(((YangInt32) rangeInterval2.getStartValue()).getValue(), is(10));
+ assertThat(((YangInt32) rangeInterval2.getEndValue()).getValue(), is(20));
+ }
+
+ /**
+ * Checks range restriction in referred typedef.
+ */
+ @Test
+ public void processRangeRestrictionInRefTypedef()
+ throws IOException, ParserException, DataModelException {
+
+ YangNode node = manager.getDataModel("src/test/resources/RangeRestrictionInRefTypedef.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(node instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ YangModule yangNode = (YangModule) node;
+ assertThat(yangNode.getName(), is("Test"));
+
+ // check top typedef
+ YangTypeDef topTypedef = (YangTypeDef) yangNode.getChild();
+ assertThat(topTypedef.getName(), is("Num3"));
+ YangType type = topTypedef.getTypeList().iterator().next();
+ assertThat(type.getDataType(), is(YangDataTypes.INT16));
+ assertThat(type.getDataTypeName(), is("int16"));
+
+ // Check for the restriction value.
+ YangRangeRestriction rangeRestriction = (YangRangeRestriction) type.getDataTypeExtendedInfo();
+ ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
+ .listIterator();
+ YangRangeInterval rangeInterval1 = rangeListIterator.next();
+ assertThat((int) ((YangInt16) rangeInterval1.getStartValue()).getValue(), is(-32000));
+ assertThat((int) ((YangInt16) rangeInterval1.getEndValue()).getValue(), is(4));
+
+ YangRangeInterval rangeInterval2 = rangeListIterator.next();
+ assertThat((int) ((YangInt16) rangeInterval2.getStartValue()).getValue(), is(32767));
+ assertThat((int) ((YangInt16) rangeInterval2.getEndValue()).getValue(), is(32767));
+
+ // check referred typedef
+ YangTypeDef refTypedef = (YangTypeDef) topTypedef.getNextSibling();
+ assertThat(refTypedef.getName(), is("Num6"));
+ YangType refType = refTypedef.getTypeList().iterator().next();
+ assertThat(refType.getDataType(), is(YangDataTypes.DERIVED));
+ assertThat(refType.getDataTypeName(), is("Num3"));
+ YangDerivedInfo<YangRangeRestriction> derivedInfo =
+ (YangDerivedInfo<YangRangeRestriction>) refType.getDataTypeExtendedInfo();
+
+ // Check for the restriction value.
+ rangeRestriction = (YangRangeRestriction) derivedInfo.getResolvedExtendedInfo();
+ rangeListIterator = rangeRestriction.getAscendingRangeIntervals().listIterator();
+ rangeInterval1 = rangeListIterator.next();
+ assertThat((int) ((YangInt16) rangeInterval1.getStartValue()).getValue(), is(-3));
+ assertThat((int) ((YangInt16) rangeInterval1.getEndValue()).getValue(), is(-3));
+
+ rangeInterval2 = rangeListIterator.next();
+ assertThat((int) ((YangInt16) rangeInterval2.getStartValue()).getValue(), is(-2));
+ assertThat((int) ((YangInt16) rangeInterval2.getEndValue()).getValue(), is(2));
+
+ YangRangeInterval rangeInterval3 = rangeListIterator.next();
+ assertThat((int) ((YangInt16) rangeInterval3.getStartValue()).getValue(), is(3));
+ assertThat((int) ((YangInt16) rangeInterval3.getEndValue()).getValue(), is(3));
+ }
+
+ /**
+ * Checks invalid range restriction in referred typedef.
+ */
+ @Test(expected = LinkerException.class)
+ public void processInvalidRangeRestrictionInRefTypedef()
+ throws IOException, ParserException, DataModelException {
+
+ manager.getDataModel("src/test/resources/RangeRestrictionInvalidInRefTypedef.yang");
+ }
+
+ /**
+ * Checks range restriction in referred type.
+ */
+ @Test
+ public void processRangeRestrictionInRefType()
+ throws IOException, ParserException, DataModelException {
+
+ YangNode node = manager.getDataModel("src/test/resources/RangeRestrictionInRefType.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(node instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ 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("hello"));
+ assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
+
+ assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
+ is((YangTypeDef) node.getChild()));
+
+ assertThat(leafInfo.getDataType().getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ // Check for the effective built-in type.
+ assertThat(derivedInfo.getEffectiveBuiltInType(), is(INT32));
+
+ // Check for the restriction.
+ assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getRangeRestrictionString(), is(notNullValue()));
+ assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
+ assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
+
+ // Check for the restriction value.
+ YangRangeRestriction rangeRestriction = (YangRangeRestriction) derivedInfo.getResolvedExtendedInfo();
+
+ ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
+ .listIterator();
+
+ YangRangeInterval rangeInterval1 = rangeListIterator.next();
+
+ assertThat(((YangInt32) rangeInterval1.getStartValue()).getValue(), is(1));
+ assertThat(((YangInt32) rangeInterval1.getEndValue()).getValue(), is(4));
+
+ YangRangeInterval rangeInterval2 = rangeListIterator.next();
+
+ assertThat(((YangInt32) rangeInterval2.getStartValue()).getValue(), is(10));
+ assertThat(((YangInt32) rangeInterval2.getEndValue()).getValue(), is(20));
+ }
+
+ /**
+ * Checks range restriction in typedef and stricter in referred type.
+ */
+ @Test
+ public void processRangeRestrictionInRefTypeAndTypedefValid()
+ throws IOException, ParserException, DataModelException {
+
+ YangNode node = manager.getDataModel("src/test/resources/RangeRestrictionInRefTypeAndTypedefValid.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(node instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ 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("hello"));
+ assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
+
+ assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
+ is((YangTypeDef) node.getChild()));
+
+ assertThat(leafInfo.getDataType().getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ // Check for the effective built-in type.
+ assertThat(derivedInfo.getEffectiveBuiltInType(), is(INT32));
+
+ // Check for the restriction.
+ assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getRangeRestrictionString(), is(notNullValue()));
+ assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
+ assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
+
+ // Check for the restriction value.
+ YangRangeRestriction rangeRestriction = (YangRangeRestriction) derivedInfo.getResolvedExtendedInfo();
+
+ ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
+ .listIterator();
+
+ YangRangeInterval rangeInterval1 = rangeListIterator.next();
+
+ assertThat(((YangInt32) rangeInterval1.getStartValue()).getValue(), is(1));
+ assertThat(((YangInt32) rangeInterval1.getEndValue()).getValue(), is(4));
+
+ YangRangeInterval rangeInterval2 = rangeListIterator.next();
+
+ assertThat(((YangInt32) rangeInterval2.getStartValue()).getValue(), is(10));
+ assertThat(((YangInt32) rangeInterval2.getEndValue()).getValue(), is(20));
+ }
+
+ /**
+ * Checks range restriction in typedef and not stricter in referred type.
+ */
+ @Test(expected = LinkerException.class)
+ public void processRangeRestrictionInRefTypeAndTypedefInValid()
+ throws IOException, ParserException, DataModelException {
+ YangNode node = manager.getDataModel("src/test/resources/RangeRestrictionInRefTypeAndTypedefInValid.yang");
+ }
+
+ /**
+ * Checks range restriction for string.
+ */
+ @Test(expected = ParserException.class)
+ public void processRangeRestrictionInString()
+ throws IOException, ParserException, DataModelException {
+ YangNode node = manager.getDataModel("src/test/resources/RangeRestrictionInString.yang");
+ }
+
+ /**
+ * Checks range restriction for string in referred type.
+ */
+ @Test(expected = LinkerException.class)
+ public void processRangeRestrictionInStringInRefType()
+ throws IOException, DataModelException {
+ YangNode node = manager.getDataModel("src/test/resources/RangeRestrictionInStringInRefType.yang");
+ }
+
+ /**
+ * Checks pattern restriction in typedef.
+ */
+ @Test
+ public void processPatternRestrictionInTypedef()
+ throws IOException, ParserException, DataModelException {
+
+ YangNode node = manager.getDataModel("src/test/resources/PatternRestrictionInTypedef.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(node instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ 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("hello"));
+ assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
+
+ assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
+ is((YangTypeDef) node.getChild()));
+
+ assertThat(leafInfo.getDataType().getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ // Check for the effective built-in type.
+ assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
+
+ // Check for the restriction.
+ assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
+ assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
+
+ // Check for the restriction value.
+ YangStringRestriction stringRestriction = (YangStringRestriction) derivedInfo.getResolvedExtendedInfo();
+ YangPatternRestriction patternRestriction = stringRestriction.getPatternRestriction();
+
+ ListIterator<String> patternListIterator = patternRestriction.getPatternList().listIterator();
+ String pattern1 = patternListIterator.next();
+
+ assertThat(pattern1, is("[a-zA-Z]"));
+ }
+
+ /**
+ * Checks pattern restriction in referred type.
+ */
+ @Test
+ public void processPatternRestrictionInRefType()
+ throws IOException, ParserException, DataModelException {
+
+ YangNode node = manager.getDataModel("src/test/resources/PatternRestrictionInRefType.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(node instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ 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("hello"));
+ assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
+
+ assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
+ is((YangTypeDef) node.getChild()));
+
+ assertThat(leafInfo.getDataType().getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ // Check for the effective built-in type.
+ assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
+
+ // Check for the restriction.
+ assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getPatternRestriction(), is(notNullValue()));
+ assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
+
+ // Check for the restriction value.
+ YangStringRestriction stringRestriction = (YangStringRestriction) derivedInfo.getResolvedExtendedInfo();
+ YangPatternRestriction patternRestriction = stringRestriction.getPatternRestriction();
+
+ ListIterator<String> patternListIterator = patternRestriction.getPatternList().listIterator();
+ String pattern1 = patternListIterator.next();
+
+ assertThat(pattern1, is("[a-zA-Z]"));
+ }
+
+ /**
+ * Checks pattern restriction in referred type and typedef.
+ */
+ @Test
+ public void processPatternRestrictionInRefTypeAndTypedef()
+ throws IOException, ParserException, DataModelException {
+
+ YangNode node = manager.getDataModel("src/test/resources/PatternRestrictionInRefTypeAndTypedef.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(node instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ 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("hello"));
+ assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
+
+ assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
+ is((YangTypeDef) node.getChild()));
+
+ assertThat(leafInfo.getDataType().getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ // Check for the effective built-in type.
+ assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
+
+ // Check for the restriction.
+ assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getPatternRestriction(), is(notNullValue()));
+ assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
+
+ // Check for the restriction value.
+ YangStringRestriction stringRestriction = (YangStringRestriction) derivedInfo.getResolvedExtendedInfo();
+ YangPatternRestriction patternRestriction = stringRestriction.getPatternRestriction();
+
+ ListIterator<String> patternListIterator = patternRestriction.getPatternList().listIterator();
+ String pattern1 = patternListIterator.next();
+
+ assertThat(pattern1, is("[a-zA-Z]"));
+
+ String pattern2 = patternListIterator.next();
+
+ assertThat(pattern2, is("[0-9]"));
+ }
+
+ /**
+ * Checks multiple pattern restriction in referred type and typedef.
+ */
+ @Test
+ public void processMultiplePatternRestriction()
+ throws IOException, ParserException, DataModelException {
+
+ YangNode node = manager.getDataModel("src/test/resources/MultiplePatternRestrictionInRefTypeAndTypedef.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(node instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ 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("hello"));
+ assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
+
+ assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
+ is((YangTypeDef) node.getChild()));
+
+ assertThat(leafInfo.getDataType().getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ // Check for the effective built-in type.
+ assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
+
+ // Check for the restriction.
+ assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getPatternRestriction(), is(notNullValue()));
+ assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
+
+ // Check for the restriction value.
+ YangStringRestriction stringRestriction = (YangStringRestriction) derivedInfo.getResolvedExtendedInfo();
+ YangPatternRestriction patternRestriction = stringRestriction.getPatternRestriction();
+
+ ListIterator<String> patternListIterator = patternRestriction.getPatternList().listIterator();
+ String pattern1 = patternListIterator.next();
+
+ assertThat(pattern1, is("[a-z]"));
+
+ String pattern2 = patternListIterator.next();
+
+ assertThat(pattern2, is("[A-Z]"));
+
+ String pattern3 = patternListIterator.next();
+
+ assertThat(pattern3, is("[0-9]"));
+
+ String pattern4 = patternListIterator.next();
+
+ assertThat(pattern4, is("[\\n]"));
+ }
+
+ /**
+ * Checks multiple pattern and length restriction in referred type and
+ * typedef.
+ */
+ @Test
+ public void processMultiplePatternAndLengthRestriction()
+ throws IOException, ParserException, DataModelException {
+
+ YangNode node = manager.getDataModel("src/test/resources/MultiplePatternAndLengthRestriction.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(node instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ 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("hello"));
+ assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
+
+ assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
+ is((YangTypeDef) node.getChild()));
+
+ assertThat(leafInfo.getDataType().getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ // Check for the effective built-in type.
+ assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
+
+ // Check for the restriction.
+ assertThat(derivedInfo.getLengthRestrictionString(), is(notNullValue()));
+ assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getPatternRestriction(), is(notNullValue()));
+ assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
+
+ // Check for the restriction value.
+ YangStringRestriction stringRestriction = (YangStringRestriction) derivedInfo.getResolvedExtendedInfo();
+
+ // Check for pattern restriction.
+ YangPatternRestriction patternRestriction = stringRestriction.getPatternRestriction();
+ ListIterator<String> patternListIterator = patternRestriction.getPatternList().listIterator();
+ String pattern1 = patternListIterator.next();
+
+ assertThat(pattern1, is("[a-z]"));
+
+ String pattern2 = patternListIterator.next();
+
+ assertThat(pattern2, is("[A-Z]"));
+
+ String pattern3 = patternListIterator.next();
+
+ assertThat(pattern3, is("[0-9]"));
+
+ String pattern4 = patternListIterator.next();
+
+ assertThat(pattern4, is("[\\n]"));
+
+ // Check for length restriction.
+ YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
+ ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
+ .listIterator();
+
+ YangRangeInterval rangeInterval1 = lengthListIterator.next();
+
+ assertThat(((YangUint64) rangeInterval1.getStartValue()).getValue(), is(BigInteger.valueOf(0)));
+ assertThat(((YangUint64) rangeInterval1.getEndValue()).getValue(), is(BigInteger.valueOf(20)));
+
+ YangRangeInterval rangeInterval2 = lengthListIterator.next();
+
+ assertThat(((YangUint64) rangeInterval2.getStartValue()).getValue(), is(BigInteger.valueOf(201)));
+ assertThat(((YangUint64) rangeInterval2.getEndValue()).getValue(), is(BigInteger.valueOf(300)));
+ }
+
+ /**
+ * Checks multiple pattern and length restriction in referred type and
+ * typedef.
+ */
+ @Test
+ public void processMultiplePatternAndLengthRestrictionValid()
+ throws IOException, ParserException, DataModelException {
+
+ YangNode node = manager.getDataModel("src/test/resources/MultiplePatternAndLengthRestrictionValid.yang");
+
+ // Check whether the data model tree returned is of type module.
+ assertThat(node instanceof YangModule, is(true));
+
+ // Check whether the node type is set properly to module.
+ assertThat(node.getNodeType(), is(MODULE_NODE));
+
+ // Check whether the module name is set correctly.
+ 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("hello"));
+ assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
+
+ assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
+ is((YangTypeDef) node.getChild()));
+
+ assertThat(leafInfo.getDataType().getResolvableStatus(), Is.is(ResolvableStatus.RESOLVED));
+
+ YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
+
+ // Check for the effective built-in type.
+ assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
+
+ // Check for the restriction.
+ assertThat(derivedInfo.getLengthRestrictionString(), is(notNullValue()));
+ assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
+ assertThat(derivedInfo.getPatternRestriction(), is(notNullValue()));
+ assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
+
+ // Check for the restriction value.
+ YangStringRestriction stringRestriction = (YangStringRestriction) derivedInfo.getResolvedExtendedInfo();
+
+ // Check for pattern restriction.
+ YangPatternRestriction patternRestriction = stringRestriction.getPatternRestriction();
+ ListIterator<String> patternListIterator = patternRestriction.getPatternList().listIterator();
+ String pattern1 = patternListIterator.next();
+
+ assertThat(pattern1, is("[a-z]"));
+
+ String pattern2 = patternListIterator.next();
+
+ assertThat(pattern2, is("[A-Z]"));
+
+ String pattern3 = patternListIterator.next();
+
+ assertThat(pattern3, is("[0-9]"));
+
+ String pattern4 = patternListIterator.next();
+
+ assertThat(pattern4, is("[\\n]"));
+
+ // Check for length restriction.
+ YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
+ ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
+ .listIterator();
+
+ YangRangeInterval rangeInterval1 = lengthListIterator.next();
+
+ assertThat(((YangUint64) rangeInterval1.getStartValue()).getValue(), is(BigInteger.valueOf(0)));
+ assertThat(((YangUint64) rangeInterval1.getEndValue()).getValue(), is(BigInteger.valueOf(20)));
+
+ YangRangeInterval rangeInterval2 = lengthListIterator.next();
+
+ assertThat(((YangUint64) rangeInterval2.getStartValue()).getValue(), is(BigInteger.valueOf(100)));
+ assertThat(((YangUint64) rangeInterval2.getEndValue()).getValue(),
+ is(new BigInteger("18446744073709551615")));
+ }
+
+ /**
+ * Checks multiple pattern and length restriction in referred type and
+ * typedef invalid scenario.
+ */
+ @Test(expected = LinkerException.class)
+ public void processMultiplePatternAndLengthRestrictionInValid()
+ throws IOException, DataModelException {
+ YangNode node = manager.getDataModel("src/test/resources/MultiplePatternAndLengthRestrictionInValid.yang");
+ }
+}
diff --git a/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/RootClassGeneratorTest.java b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/RootClassGeneratorTest.java
new file mode 100644
index 0000000..2b01abe
--- /dev/null
+++ b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/RootClassGeneratorTest.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.plugin.maven;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.junit.Test;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+import org.onosproject.yang.compiler.utils.io.impl.YangFileScanner;
+import org.onosproject.yang.compiler.utils.io.impl.YangIoUtils;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+
+import java.io.File;
+import java.io.IOException;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Unit test case for root node's code generation.
+ */
+public class RootClassGeneratorTest {
+
+ private final YangUtilManager utilManager = new YangUtilManager();
+
+ @Test
+ public void rootClassGenTest() throws IOException, ParserException, MojoExecutionException {
+ YangIoUtils.deleteDirectory("target/manager/");
+ String searchDir = "src/test/resources/manager/singleChild";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir("target/manager/");
+ utilManager.translateToJava(yangPluginConfig);
+ String dir1 = System.getProperty("user.dir") + File.separator + "target/manager/";
+ YangPluginConfig.compileCode(dir1);
+ String path = System.getProperty("user.dir") + "/target/manager/" +
+ "org/onosproject/yang/gen/v1/single/test5/test/rev20160704" +
+ "/Test5.java";
+ assertThat(true, is((new File(path)).exists()));
+
+ path = System.getProperty("user.dir") + "/target/manager/" +
+ "org/onosproject/yang/gen/v1/single/test5/test/rev20160704" +
+ "/Test7.java";
+ assertThat(true, is((new File(path)).exists()));
+ YangIoUtils.deleteDirectory("target/manager/");
+ }
+
+ @Test
+ public void rootClassGenwithoutRevTest() throws IOException, ParserException, MojoExecutionException {
+ YangIoUtils.deleteDirectory("target/manager/");
+ String searchDir = "src/test/resources/manager/genwithoutrev";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir("target/manager/");
+ utilManager.translateToJava(yangPluginConfig);
+ String dir1 = System.getProperty("user.dir") + File.separator + "target/manager/";
+ YangPluginConfig.compileCode(dir1);
+ String path = System.getProperty("user.dir") + "/target/manager/" +
+ "org/onosproject/yang/gen/v1/test5/test/Test5.java";
+
+ assertThat(true, is((new File(path)).exists()));
+ YangIoUtils.deleteDirectory("target/manager/");
+ }
+
+ @Test
+ public void rootClassMethodGenTest() throws IOException, ParserException, MojoExecutionException {
+ YangIoUtils.deleteDirectory("target/manager/");
+ String searchDir = "src/test/resources/manager/MultiChild";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir("target/manager/");
+ utilManager.translateToJava(yangPluginConfig);
+ String dir1 = System.getProperty("user.dir") + File.separator + "target/manager/";
+ YangPluginConfig.compileCode(dir1);
+ String path = System.getProperty("user.dir") + "/target/manager/" +
+ "org/onosproject/yang/gen/v1/multi/test5/test/rev20160704" +
+ "/Test5.java";
+ assertThat(true, is((new File(path)).exists()));
+
+ path = System.getProperty("user.dir") + "/target/manager/" +
+ "org/onosproject/yang/gen/v1/multi/test5/test/rev20160704" +
+ "/Test7.java";
+ assertThat(true, is((new File(path)).exists()));
+
+ path = System.getProperty("user.dir") + "/target/manager/" +
+ "org/onosproject/yang/gen/v1/multi/test8/test/rev20160704" +
+ "/Test8.java";
+ assertThat(true, is((new File(path)).exists()));
+
+ YangIoUtils.deleteDirectory("target/manager/");
+ }
+}
diff --git a/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/RpcTranslatorTest.java b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/RpcTranslatorTest.java
new file mode 100644
index 0000000..f4b35bb
--- /dev/null
+++ b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/RpcTranslatorTest.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.plugin.maven;
+
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGeneratorUtil;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+import org.onosproject.yang.compiler.utils.io.impl.YangIoUtils;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * Unit tests for rpc translator.
+ */
+public final class RpcTranslatorTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+
+ /**
+ * Checks rpc translation should not result in any exception.
+ */
+ @Test
+ public void processRpcTranslator()
+ throws IOException, ParserException {
+
+ YangNode node = manager.getDataModel("src/test/resources/RpcTranslator.yang");
+
+ String dir = "target/rpcTranslator/";
+ YangIoUtils.deleteDirectory(dir);
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir(dir);
+
+ JavaCodeGeneratorUtil.generateJavaCode(node, yangPluginConfig);
+ String dir1 = System.getProperty("user.dir") + File.separator + dir;
+ YangPluginConfig.compileCode(dir1);
+ YangIoUtils.deleteDirectory(dir);
+ }
+ // TODO enhance the test cases, after having a framework of translator test.
+}
diff --git a/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/SchemaNodeTest.java b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/SchemaNodeTest.java
new file mode 100644
index 0000000..3593398
--- /dev/null
+++ b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/SchemaNodeTest.java
@@ -0,0 +1,218 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.plugin.maven;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeavesHolder;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangSchemaNode;
+import org.onosproject.yang.compiler.datamodel.YangSchemaNodeContextInfo;
+import org.onosproject.yang.compiler.datamodel.YangSchemaNodeIdentifier;
+import org.onosproject.yang.compiler.datamodel.exceptions.DataModelException;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+import org.onosproject.yang.compiler.utils.io.impl.YangFileScanner;
+import org.onosproject.yang.compiler.utils.io.impl.YangIoUtils;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Test cases for testing YANG schema node.
+ */
+public class SchemaNodeTest {
+
+ private final YangUtilManager utilManager = new YangUtilManager();
+
+ /**
+ * Checks method to get schema node from map.
+ *
+ * @throws IOException a violation in IO rule
+ * @throws ParserException a violation in parser rule
+ * @throws MojoExecutionException a violation in mojo rule
+ * @throws DataModelException a violation in data model rule
+ */
+ @Test
+ public void processSchemaNodeMap()
+ throws IOException, ParserException,
+ MojoExecutionException, DataModelException {
+
+ YangIoUtils.deleteDirectory("target/schemaMap/");
+ String searchDir = "src/test/resources/schemaMap";
+ utilManager
+ .createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir("target/schemaMap/");
+ utilManager.translateToJava(yangPluginConfig);
+
+ Iterator<YangNode> yangNodeIterator =
+ utilManager.getYangNodeSet().iterator();
+ YangNode rootNode = yangNodeIterator.next();
+
+ // Validate the notification enum map
+ assertThat(rootNode.getChild().getNextSibling(),
+ is(rootNode.getNotificationSchemaNode("TESTNOTIFICATION1")));
+
+ // Validate the notification enum map shouldn't have container
+ assertThat(rootNode.getNotificationSchemaNode("TESTCONTAINER"),
+ is(nullValue()));
+
+ // Validation for RPC input/output node.
+ YangNode yangRpcNode = rootNode.getChild().getNextSibling()
+ .getNextSibling();
+ YangSchemaNodeIdentifier yangInputNode = new YangSchemaNodeIdentifier();
+ yangInputNode.setName("input");
+ yangInputNode.setNameSpace(yangRpcNode.getNameSpace());
+ assertThat(yangRpcNode.getChildSchema(yangInputNode).getSchemaNode(),
+ is(yangRpcNode.getChild()));
+
+ YangSchemaNodeIdentifier yangOutputNode = new
+ YangSchemaNodeIdentifier();
+ yangOutputNode.setName("output");
+ yangOutputNode.setNameSpace(yangRpcNode.getNameSpace());
+ assertThat(yangRpcNode.getChildSchema(yangOutputNode).getSchemaNode(),
+ is(yangRpcNode.getChild().getNextSibling()));
+
+ // Validate the input schema map
+ YangSchemaNode yangInput = yangRpcNode.getChild();
+ YangSchemaNodeIdentifier yangInputLeafNode = new
+ YangSchemaNodeIdentifier();
+ yangInputLeafNode.setName("image-name");
+ yangInputLeafNode.setNameSpace(yangRpcNode.getNameSpace());
+ assertThat(yangInput.getChildSchema(yangInputLeafNode),
+ is(notNullValue()));
+
+ YangSchemaNode yangOutput = yangRpcNode.getChild().getNextSibling();
+ YangSchemaNodeIdentifier yangOutputLeafNode = new
+ YangSchemaNodeIdentifier();
+ yangOutputLeafNode.setName("image-name");
+ yangOutputLeafNode.setNameSpace(yangRpcNode.getNameSpace());
+ assertThat(yangOutput.getChildSchema(yangOutputLeafNode),
+ is(notNullValue()));
+
+ // Validate schema node
+ assertThat(rootNode.getYsnContextInfoMap(), is(notNullValue()));
+ Map<YangSchemaNodeIdentifier, YangSchemaNodeContextInfo> schemaMap =
+ rootNode.getYsnContextInfoMap();
+ YangSchemaNodeIdentifier yangSchemaNodeIdentifier =
+ new YangSchemaNodeIdentifier();
+ yangSchemaNodeIdentifier.setName("testcontainer");
+ yangSchemaNodeIdentifier.setNameSpace(yangRpcNode.getNameSpace());
+ assertThat(schemaMap.get(yangSchemaNodeIdentifier), is(notNullValue()));
+ YangSchemaNodeContextInfo yangSchemaNodeContextInfo =
+ schemaMap.get(yangSchemaNodeIdentifier);
+ assertThat(yangSchemaNodeContextInfo.getSchemaNode(),
+ is(rootNode.getChild()));
+
+ assertThat(rootNode.getChild().getYsnContextInfoMap(),
+ is(notNullValue()));
+ Map<YangSchemaNodeIdentifier, YangSchemaNodeContextInfo> schemaMap2 =
+ rootNode.getChild()
+ .getYsnContextInfoMap();
+ yangSchemaNodeIdentifier.setName("testleaf");
+ yangSchemaNodeIdentifier.setNameSpace(yangRpcNode.getNameSpace());
+ assertThat(schemaMap2.get(yangSchemaNodeIdentifier),
+ is(notNullValue()));
+
+ yangSchemaNodeIdentifier.setName("pretzel");
+ yangSchemaNodeIdentifier.setNameSpace(yangRpcNode.getNameSpace());
+ assertThat(schemaMap2.get(yangSchemaNodeIdentifier),
+ is(notNullValue()));
+
+ assertThat(rootNode.getChild().getChild().getYsnContextInfoMap(),
+ is(notNullValue()));
+ Map<YangSchemaNodeIdentifier, YangSchemaNodeContextInfo> schemaMap3 =
+ rootNode.getChild().getChild()
+ .getYsnContextInfoMap();
+ yangSchemaNodeIdentifier.setName("pretzel");
+ yangSchemaNodeIdentifier.setNameSpace(yangRpcNode.getNameSpace());
+ assertThat(schemaMap3.get(yangSchemaNodeIdentifier),
+ is(notNullValue()));
+ YangSchemaNodeContextInfo yangSchemaNodeContextInfo3 =
+ schemaMap3.get(yangSchemaNodeIdentifier);
+
+ assertThat(rootNode.getChild().getChild().getChild()
+ .getYsnContextInfoMap(),
+ is(notNullValue()));
+ Map<YangSchemaNodeIdentifier, YangSchemaNodeContextInfo> schemaMap4 =
+ rootNode.getChild().getChild().getChild()
+ .getYsnContextInfoMap();
+ yangSchemaNodeIdentifier.setName("pretzel");
+ yangSchemaNodeIdentifier.setNameSpace(yangRpcNode.getNameSpace());
+ assertThat(schemaMap4.get(yangSchemaNodeIdentifier),
+ is(notNullValue()));
+
+ YangSchemaNodeContextInfo yangSchemaNodeContextInfo2 =
+ schemaMap4.get(yangSchemaNodeIdentifier);
+ List<YangLeaf> yangListOfLeaf = ((YangLeavesHolder) rootNode.getChild()
+ .getChild().getChild()).getListOfLeaf();
+ YangLeaf yangLeaf = yangListOfLeaf.get(0);
+ assertThat(yangSchemaNodeContextInfo2.getSchemaNode(), is(yangLeaf));
+
+ assertThat(yangSchemaNodeContextInfo3.getSchemaNode(), is(yangLeaf));
+ assertThat(yangSchemaNodeContextInfo3.getContextSwitchedNode(),
+ is(rootNode.getChild().getChild().getChild()));
+
+ YangIoUtils.deleteDirectory("target/schemaMap/");
+ }
+
+ /**
+ * Checks that notification map shouldn't be present in other YANG node.
+ *
+ * @throws IOException a violation in IO rule
+ * @throws ParserException a violation in parser rule
+ * @throws MojoExecutionException a violation in mojo rule
+ * @throws DataModelException a violation in data model rule
+ */
+ @Test(expected = DataModelException.class)
+ public void processNotificationEnumMapInvalidScenario()
+ throws IOException,
+ ParserException, MojoExecutionException,
+ DataModelException {
+
+ YangIoUtils.deleteDirectory("target/schemaMap/");
+ String searchDir = "src/test/resources/schemaMap";
+ utilManager
+ .createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir("target/schemaMap/");
+ utilManager.translateToJava(yangPluginConfig);
+
+ Iterator<YangNode> yangNodeIterator =
+ utilManager.getYangNodeSet().iterator();
+ YangNode rootNode = yangNodeIterator.next();
+
+ YangIoUtils.deleteDirectory("target/schemaMap/");
+
+ rootNode.getChild().getNotificationSchemaNode("TESTNOTIFICATION1");
+ }
+}
diff --git a/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/TypeDefTranslatorTest.java b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/TypeDefTranslatorTest.java
new file mode 100644
index 0000000..d45be4a
--- /dev/null
+++ b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/TypeDefTranslatorTest.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.plugin.maven;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.junit.Test;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+import org.onosproject.yang.compiler.utils.io.impl.YangFileScanner;
+import org.onosproject.yang.compiler.utils.io.impl.YangIoUtils;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * Unit test case for typedef translator.
+ */
+public class TypeDefTranslatorTest {
+
+ private final YangUtilManager utilManager = new YangUtilManager();
+ private static final String DIR = "target/typedefTranslator/";
+ private static final String DIR1 = System.getProperty("user.dir") + File
+ .separator + DIR;
+
+ /**
+ * Checks typedef translation should not result in any exception.
+ *
+ * @throws MojoExecutionException
+ */
+ @Test
+ public void processTypeDefTranslator() throws IOException,
+ ParserException, MojoExecutionException {
+
+ YangIoUtils.deleteDirectory(DIR);
+ String searchDir = "src/test/resources/typedefTranslator/without";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir(DIR);
+ utilManager.translateToJava(yangPluginConfig);
+ YangPluginConfig.compileCode(DIR1);
+ YangIoUtils.deleteDirectory(DIR);
+ }
+
+ /**
+ * Checks typedef translation should not result in any exception.
+ *
+ * @throws MojoExecutionException
+ */
+ @Test
+ public void processTypeDefWithRestrictionsTranslator() throws IOException,
+ ParserException, MojoExecutionException {
+
+ YangIoUtils.deleteDirectory(DIR);
+ String searchDir = "src/test/resources/typedefTranslator/with";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir(DIR);
+ utilManager.translateToJava(yangPluginConfig);
+ YangPluginConfig.compileCode(DIR1);
+ YangIoUtils.deleteDirectory(DIR);
+
+ }
+
+ /**
+ * Checks typedef translation should not result in any exception.
+ *
+ * @throws MojoExecutionException
+ */
+ @Test
+ public void processTypeDefWithUnionAndBitsTranslator() throws IOException,
+ ParserException, MojoExecutionException {
+
+ YangIoUtils.deleteDirectory(DIR);
+ String searchDir = "src/test/resources/typedefTranslator/union";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir(DIR);
+ utilManager.translateToJava(yangPluginConfig);
+ YangPluginConfig.compileCode(DIR1);
+ YangIoUtils.deleteDirectory(DIR);
+ }
+}
diff --git a/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/TypeLinkingAfterCloningTest.java b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/TypeLinkingAfterCloningTest.java
new file mode 100644
index 0000000..88937ae
--- /dev/null
+++ b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/TypeLinkingAfterCloningTest.java
@@ -0,0 +1,817 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.plugin.maven;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onosproject.yang.compiler.datamodel.YangContainer;
+import org.onosproject.yang.compiler.datamodel.YangDerivedInfo;
+import org.onosproject.yang.compiler.datamodel.YangIdentityRef;
+import org.onosproject.yang.compiler.datamodel.YangLeaf;
+import org.onosproject.yang.compiler.datamodel.YangLeafList;
+import org.onosproject.yang.compiler.datamodel.YangLeafRef;
+import org.onosproject.yang.compiler.datamodel.YangList;
+import org.onosproject.yang.compiler.datamodel.YangModule;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangType;
+import org.onosproject.yang.compiler.datamodel.YangTypeDef;
+import org.onosproject.yang.compiler.datamodel.YangUnion;
+import org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes;
+import org.onosproject.yang.compiler.linker.impl.YangLinkerManager;
+import org.onosproject.yang.compiler.linker.impl.YangLinkerUtils;
+import org.onosproject.yang.compiler.utils.io.impl.YangFileScanner;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.ListIterator;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+import static org.onosproject.yang.compiler.datamodel.YangNodeType.MODULE_NODE;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.IDENTITYREF;
+import static org.onosproject.yang.compiler.datamodel.utils.builtindatatype.YangDataTypes.STRING;
+
+/**
+ * Test cases for type linking after cloning happens grouping.
+ */
+public class TypeLinkingAfterCloningTest {
+
+ private static final String MODULE = "module";
+ private static final String OPEN_ROAD = "org-open-road-m-device";
+ private static final String NODE_ID = "node-id";
+ private static final String LEAF = "leaf";
+ private static final String LEAF_LIST = "leaf-list";
+ private static final String NODE_REF = "node-ref";
+ private static final String FACILITY = "facility";
+ private static final String FACILITY_SYS_LOG = "syslog-facility";
+ private static final String USABILITY_SYS_LOG = "syslog-usability";
+ private static final String AVAILABILITY_SYS_LOG = "syslog-availability";
+ private static final String THIRD = "third";
+ private static final String SECOND = "second";
+ private static final String FIRST = "first";
+ private static final String TYPEDEF = "typedef";
+ private static final String CORRECT = "correct";
+ private static final String UNI = "with-uni";
+ private static final String UNION = "union";
+ private static final String BASE1 = "id2";
+ private static final String BASE2 = "id1";
+ private static final String DIR =
+ "src/test/resources/typelinkingaftercloning/";
+
+ private final YangUtilManager utilMgr = new YangUtilManager();
+ private final YangLinkerManager linkerMgr = new YangLinkerManager();
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ private ListIterator<YangLeaf> leafItr;
+ private YangLeaf leafInfo;
+ private ListIterator<YangLeafList> leafListItr;
+ private YangLeafList leafListInfo;
+ private YangIdentityRef idRef;
+ private YangUnion union;
+ private Iterator<YangType<?>> unionTypeItr;
+ private YangType type;
+ private YangDerivedInfo derInfo;
+ private YangType type2;
+ private YangType type3;
+ private YangType type1;
+ private YangDerivedInfo derInfo1;
+ private YangTypeDef typedef1;
+
+ /**
+ * Returns the error message as the node name incorrect, when assert fails.
+ *
+ * @param node YANG node
+ * @param nodeName node name
+ * @return error message as the name is incorrect
+ */
+ private static String getInCrtName(String node, Object nodeName) {
+ return getCapitalCase(node) + "'s name " + nodeName + " is incorrect.";
+ }
+
+ /**
+ * Returns the capital cased first letter of the given string.
+ *
+ * @param name string to be capital cased
+ * @return capital cased string
+ */
+ private static String getCapitalCase(String name) {
+ return name.substring(0, 1).toUpperCase() + name.substring(1);
+ }
+
+ /**
+ * Returns the error message as the node type incorrect, when assert fails.
+ *
+ * @param node YANG node
+ * @param nodeName node name
+ * @return error message as the type is incorrect
+ */
+ private static String getInCrtLeafType(String node, String nodeName) {
+ return "The " + node + " " + nodeName + " has incorrect data type.";
+ }
+
+ /**
+ * Returns the error message, stating the union and identity-ref level in
+ * the type, has not resolved to the referred identity.
+ *
+ * @param unionLvl union level in node
+ * @param idLvl identity-ref level in node
+ * @param baseName referred base
+ * @param node YANG node having type
+ * @param nodeName node name
+ * @return error message for incorrect identity-ref in union.
+ */
+ public static String getInCrtUnionWithIdRef(
+ String unionLvl, String idLvl, String baseName, String node,
+ String nodeName) {
+ return "The " + idLvl + " direct occurrence identity-ref in " +
+ unionLvl + " level union, of " + node + " " + nodeName +
+ " is not " + baseName;
+ }
+
+ /**
+ * Processes leaf-ref after its cloned to uses from grouping.
+ *
+ * @throws IOException if violates IO operation
+ */
+ @Test
+ public void processLeafRefAfterCloning() throws IOException {
+
+ utilMgr.createYangFileInfoSet(YangFileScanner.getYangFiles(DIR + "leafref/intrafile"));
+ utilMgr.parseYangFileInfoSet();
+ utilMgr.createYangNodeSet();
+ YangNode selfNode;
+
+ // Create YANG node set
+ linkerMgr.createYangNodeSet(utilMgr.getYangNodeSet());
+
+ // Add references to import list.
+ linkerMgr.addRefToYangFilesImportList(utilMgr.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilMgr.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ linkerMgr.processInterFileLinking(utilMgr.getYangNodeSet());
+
+ Iterator<YangNode> nodeItr = utilMgr.getYangNodeSet().iterator();
+
+ selfNode = nodeItr.next();
+
+ // Checks whether the data model tree returned is of type module.
+ assertThat((selfNode instanceof YangModule), is(true));
+
+ // Checks whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(MODULE_NODE));
+
+ assertThat(getInCrtName(MODULE, OPEN_ROAD), selfNode.getName(),
+ is(OPEN_ROAD));
+
+ YangList list = (YangList) selfNode.getChild().getNextSibling()
+ .getNextSibling();
+
+ YangLeafRef leafRef;
+
+ leafItr = list.getListOfLeaf().listIterator();
+ leafInfo = leafItr.next();
+
+ // Checks whether the information in the leaf is correct under list.
+ assertThat(getInCrtName(LEAF, NODE_ID), leafInfo.getName(),
+ is(NODE_ID));
+ leafRef = (YangLeafRef) leafInfo.getDataType()
+ .getDataTypeExtendedInfo();
+
+ // Checks the effective type for the leaf.
+ assertThat(getInCrtLeafType(LEAF, NODE_ID),
+ leafRef.getEffectiveDataType().getDataType(), is(STRING));
+
+ leafListItr = list.getListOfLeafList().listIterator();
+ leafListInfo = leafListItr.next();
+
+ // Checks whether the information in the leaf-list is correct.
+ assertThat(getInCrtName(LEAF_LIST, NODE_REF), leafListInfo.getName(),
+ is(NODE_REF));
+ leafRef = (YangLeafRef) leafListInfo.getDataType()
+ .getDataTypeExtendedInfo();
+
+ assertThat(getInCrtLeafType(LEAF_LIST, NODE_REF),
+ leafRef.getEffectiveDataType().getDataType(), is(DERIVED));
+
+ // Checks whether the information under cloned container is correct.
+ YangContainer container = (YangContainer) list.getChild()
+ .getNextSibling();
+
+ leafItr = container.getListOfLeaf().listIterator();
+ leafInfo = leafItr.next();
+
+ // Checks whether the information in the leaf is correct under cont.
+ assertThat(getInCrtName(LEAF, NODE_ID), leafInfo.getName(),
+ is(NODE_ID));
+ leafRef = (YangLeafRef) leafListInfo.getDataType()
+ .getDataTypeExtendedInfo();
+ assertThat(getInCrtLeafType(LEAF, NODE_ID),
+ leafRef.getEffectiveDataType().getDataType(), is(DERIVED));
+
+ leafListItr = container.getListOfLeafList().listIterator();
+ leafListInfo = leafListItr.next();
+
+ // Checks whether the information in the leaf-list is correct.
+ assertThat(getInCrtName(LEAF_LIST, NODE_REF), leafListInfo.getName(),
+ is(NODE_REF));
+ leafRef = (YangLeafRef) leafListInfo.getDataType()
+ .getDataTypeExtendedInfo();
+ assertThat(getInCrtLeafType(LEAF_LIST, NODE_REF),
+ leafRef.getEffectiveDataType().getDataType(),
+ is(STRING));
+ }
+
+ /**
+ * Processes invalid scenario where a leaf-ref is present in union.
+ *
+ * @throws IOException io error when finding file
+ */
+ @Test
+ public void processInvalidLeafRef() throws IOException {
+ thrown.expect(ParserException.class);
+ thrown.expectMessage("Union member type must not be one of the " +
+ "built-in types \"empty\" or " +
+ "\"leafref\"node-id_union");
+ utilMgr.createYangFileInfoSet(YangFileScanner.getYangFiles(DIR + "leafref/invalid"));
+ utilMgr.parseYangFileInfoSet();
+ }
+
+ /**
+ * Processes simple identity-ref after it gets cloned from grouping.
+ *
+ * @throws IOException if violates IO operation
+ */
+ @Test
+ public void processIdentityRefBeforeCloning() throws IOException {
+
+ utilMgr.createYangFileInfoSet(YangFileScanner.getYangFiles(DIR + "identityref"));
+ utilMgr.parseYangFileInfoSet();
+ utilMgr.createYangNodeSet();
+ YangNode selfNode;
+
+ // Create YANG node set
+ linkerMgr.createYangNodeSet(utilMgr.getYangNodeSet());
+
+ // Add references to import list.
+ linkerMgr.addRefToYangFilesImportList(utilMgr.getYangNodeSet());
+
+ YangLinkerUtils.updateFilePriority(utilMgr.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ linkerMgr.processInterFileLinking(utilMgr.getYangNodeSet());
+
+ Iterator<YangNode> nodeItr = utilMgr.getYangNodeSet().iterator();
+
+ selfNode = nodeItr.next();
+
+ // Checks whether the data model tree returned is of type module.
+ assertThat((selfNode instanceof YangModule), is(true));
+
+ // Checks whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(MODULE_NODE));
+
+ assertThat(getInCrtName(MODULE, OPEN_ROAD), selfNode.getName(),
+ is(OPEN_ROAD));
+
+ YangList list = (YangList) selfNode.getChild().getNextSibling()
+ .getNextSibling().getNextSibling();
+
+ leafItr = list.getListOfLeaf().listIterator();
+ leafInfo = leafItr.next();
+
+ // Checks if the leaf has identity-ref in union.
+ assertThat(getInCrtName(LEAF, FACILITY), leafInfo.getName(),
+ is(FACILITY));
+ union = (YangUnion) leafInfo.getDataType().getDataTypeExtendedInfo();
+ unionTypeItr = union.getTypeList().listIterator();
+ type = unionTypeItr.next();
+ idRef = (YangIdentityRef) type.getDataTypeExtendedInfo();
+
+ // Checks the effective type for the leaf.
+ assertThat(getInCrtLeafType(LEAF, FACILITY),
+ idRef.getBaseIdentity().getName(),
+ is(FACILITY_SYS_LOG));
+
+ leafInfo = leafItr.next();
+
+ // Checks whether the information in the leaf is correct under list.
+ assertThat(getInCrtName(LEAF, NODE_ID), leafInfo.getName(),
+ is(NODE_ID));
+ idRef = (YangIdentityRef) leafInfo.getDataType()
+ .getDataTypeExtendedInfo();
+
+ // Checks the effective type for the leaf.
+ assertThat(getInCrtLeafType(LEAF, NODE_ID),
+ idRef.getBaseIdentity().getName(),
+ is(FACILITY_SYS_LOG));
+
+ leafListItr = list.getListOfLeafList().listIterator();
+ leafListInfo = leafListItr.next();
+
+ // Checks if the information in the leaf-list is correct under list.
+ assertThat(getInCrtName(LEAF_LIST, NODE_REF), leafListInfo.getName(),
+ is(NODE_REF));
+
+ derInfo = (YangDerivedInfo) leafListInfo.getDataType()
+ .getDataTypeExtendedInfo();
+
+ type = derInfo.getReferredTypeDef().getTypeList().get(0);
+ idRef = (YangIdentityRef) type.getDataTypeExtendedInfo();
+
+ // Checks the effective type for the leaf-list.
+ assertThat(getInCrtLeafType(LEAF, NODE_REF),
+ idRef.getBaseIdentity().getName(),
+ is(FACILITY_SYS_LOG));
+
+ YangContainer container = (YangContainer) list.getChild()
+ .getNextSibling().getNextSibling();
+
+ leafListItr = container.getListOfLeafList().listIterator();
+ leafListInfo = leafListItr.next();
+
+ // Checks the leaf-list information is correct.
+ assertThat(getInCrtName(LEAF_LIST, FACILITY), leafListInfo.getName(),
+ is(FACILITY));
+ union = (YangUnion) leafListInfo.getDataType()
+ .getDataTypeExtendedInfo();
+ unionTypeItr = union.getTypeList().listIterator();
+ type = unionTypeItr.next();
+ idRef = (YangIdentityRef) type.getDataTypeExtendedInfo();
+
+ // Checks the effective type for the leaf-list.
+ assertThat(getInCrtLeafType(LEAF_LIST, FACILITY),
+ idRef.getBaseIdentity().getName(),
+ is(FACILITY_SYS_LOG));
+
+ leafListInfo = leafListItr.next();
+
+ // Checks the leaf-list information is correct.
+ assertThat(getInCrtName(LEAF_LIST, NODE_REF), leafListInfo.getName(),
+ is(NODE_REF));
+ idRef = (YangIdentityRef) leafListInfo.getDataType()
+ .getDataTypeExtendedInfo();
+
+ // Checks the effective type for the leaf.
+ assertThat(getInCrtLeafType(LEAF_LIST, NODE_REF),
+ idRef.getBaseIdentity().getName(),
+ is(FACILITY_SYS_LOG));
+
+ leafItr = container.getListOfLeaf().listIterator();
+ leafInfo = leafItr.next();
+
+ // Checks the leaf information is correct.
+ assertThat(getInCrtName(LEAF, NODE_ID), leafInfo.getName(),
+ is(NODE_ID));
+ idRef = (YangIdentityRef) leafListInfo.getDataType()
+ .getDataTypeExtendedInfo();
+
+ assertThat(getInCrtLeafType(LEAF, NODE_ID),
+ idRef.getBaseIdentity().getName(),
+ is(FACILITY_SYS_LOG));
+
+ }
+
+ /**
+ * Processes union having different recursive level with identity-ref.
+ *
+ * @throws IOException if violates IO operation
+ */
+ @Test
+ public void processUnionAfterCloning() throws IOException {
+
+ utilMgr.createYangFileInfoSet(YangFileScanner.getYangFiles(DIR + "union"));
+ utilMgr.parseYangFileInfoSet();
+ utilMgr.createYangNodeSet();
+ YangNode selfNode;
+
+ // Create YANG node set
+ linkerMgr.createYangNodeSet(utilMgr.getYangNodeSet());
+
+ // Add references to import list.
+ linkerMgr.addRefToYangFilesImportList(utilMgr.getYangNodeSet());
+ YangLinkerUtils.updateFilePriority(utilMgr.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ linkerMgr.processInterFileLinking(utilMgr.getYangNodeSet());
+ Iterator<YangNode> nodeItr = utilMgr.getYangNodeSet().iterator();
+ selfNode = nodeItr.next();
+
+ YangUnion union2;
+ YangUnion union3;
+ Iterator<YangType<?>> unionTypeItr2;
+ Iterator<YangType<?>> unionTypeItr3;
+ YangDerivedInfo derivedInfo;
+ YangTypeDef typeDef;
+ Iterator<YangType<?>> typeDefItr;
+
+ // Checks whether the data model tree returned is of type module.
+ assertThat((selfNode instanceof YangModule), is(true));
+
+ // Checks whether the node type is set properly to module.
+ assertThat(selfNode.getNodeType(), is(MODULE_NODE));
+
+ assertThat(getInCrtName(MODULE, OPEN_ROAD), selfNode.getName(),
+ is(OPEN_ROAD));
+
+ YangList list = (YangList) selfNode.getChild().getNextSibling()
+ .getNextSibling().getNextSibling().getNextSibling()
+ .getNextSibling().getNextSibling();
+
+ Iterator<YangLeaf> leafItr = list.getListOfLeaf().listIterator();
+ YangLeaf leafInfo = leafItr.next();
+
+ // Checks if the leaf has identity-ref in union.
+ assertThat(getInCrtName(LEAF, FACILITY), leafInfo.getName(),
+ is(FACILITY));
+
+ // Gets the first level union and the list of type in it.
+ union = (YangUnion) leafInfo.getDataType().getDataTypeExtendedInfo();
+ unionTypeItr = union.getTypeList().listIterator();
+ type = unionTypeItr.next();
+
+ // Gets the second level union and types in it.
+ union2 = (YangUnion) type.getDataTypeExtendedInfo();
+ unionTypeItr2 = union2.getTypeList().listIterator();
+ type2 = unionTypeItr2.next();
+
+ // Gets the third level union and types in it.
+ union3 = (YangUnion) type2.getDataTypeExtendedInfo();
+ unionTypeItr3 = union3.getTypeList().listIterator();
+ type3 = unionTypeItr3.next();
+
+ // Checks the first identity-ref in third level union.
+ idRef = (YangIdentityRef) type3.getDataTypeExtendedInfo();
+ assertThat(getInCrtUnionWithIdRef(
+ THIRD, FIRST, USABILITY_SYS_LOG, LEAF, FACILITY),
+ idRef.getBaseIdentity().getName(),
+ is(USABILITY_SYS_LOG));
+
+ // Checks the first identity-ref in second level union.
+ type2 = unionTypeItr2.next();
+ idRef = (YangIdentityRef) type2.getDataTypeExtendedInfo();
+ assertThat(getInCrtUnionWithIdRef(
+ SECOND, FIRST, FACILITY_SYS_LOG, LEAF, FACILITY),
+ idRef.getBaseIdentity().getName(),
+ is(FACILITY_SYS_LOG));
+
+ // Checks the first identity-ref in first level union.
+ type = unionTypeItr.next();
+ derInfo = (YangDerivedInfo) type.getDataTypeExtendedInfo();
+ type = derInfo.getReferredTypeDef().getTypeList().get(0);
+ idRef = (YangIdentityRef) type.getDataTypeExtendedInfo();
+ assertThat(getInCrtUnionWithIdRef(
+ FIRST, FIRST, AVAILABILITY_SYS_LOG, LEAF, FACILITY),
+ idRef.getBaseIdentity().getName(),
+ is(AVAILABILITY_SYS_LOG));
+
+ // Checks derived type in third level union.
+ type3 = unionTypeItr3.next();
+ derivedInfo = (YangDerivedInfo) type3.getDataTypeExtendedInfo();
+ typeDef = derivedInfo.getReferredTypeDef();
+ typeDefItr = typeDef.getTypeList().listIterator();
+ type = typeDefItr.next();
+
+ // Gets the first level union and the list of type in it.
+ union = (YangUnion) type.getDataTypeExtendedInfo();
+ unionTypeItr = union.getTypeList().listIterator();
+ type = unionTypeItr.next();
+
+ // Gets the first level union and the list of type in it.
+ union2 = (YangUnion) type.getDataTypeExtendedInfo();
+ unionTypeItr2 = union2.getTypeList().listIterator();
+ type2 = unionTypeItr2.next();
+
+ // Checks the first identity-ref in second level union.
+ idRef = (YangIdentityRef) type2.getDataTypeExtendedInfo();
+ assertThat(getInCrtUnionWithIdRef(
+ SECOND, FIRST, AVAILABILITY_SYS_LOG, TYPEDEF, CORRECT),
+ idRef.getBaseIdentity().getName(),
+ is(AVAILABILITY_SYS_LOG));
+
+ // Checks the second identity-ref in second level union.
+ type2 = unionTypeItr2.next();
+ derInfo = (YangDerivedInfo) type2.getDataTypeExtendedInfo();
+ type2 = derInfo.getReferredTypeDef().getTypeList().get(0);
+ idRef = (YangIdentityRef) type2.getDataTypeExtendedInfo();
+ assertThat(getInCrtUnionWithIdRef(
+ SECOND, SECOND, AVAILABILITY_SYS_LOG, TYPEDEF, CORRECT),
+ idRef.getBaseIdentity().getName(),
+ is(AVAILABILITY_SYS_LOG));
+
+ // Checks the first identity-ref in first level union.
+ type = unionTypeItr.next();
+ idRef = (YangIdentityRef) type.getDataTypeExtendedInfo();
+ assertThat(getInCrtUnionWithIdRef(
+ FIRST, FIRST, USABILITY_SYS_LOG, TYPEDEF, CORRECT),
+ idRef.getBaseIdentity().getName(),
+ is(USABILITY_SYS_LOG));
+
+ YangContainer container = (YangContainer) list.getChild()
+ .getNextSibling().getNextSibling();
+
+
+ Iterator<YangLeafList> leafListItr = container.getListOfLeafList()
+ .listIterator();
+ YangLeafList leafListInfo = leafListItr.next();
+
+ // Checks if the leaf-list has identity-ref in union.
+ assertThat(getInCrtName(LEAF_LIST, FACILITY), leafListInfo.getName(),
+ is(FACILITY));
+
+ // Gets the first level union and the list of type in it.
+ union = (YangUnion) leafListInfo.getDataType()
+ .getDataTypeExtendedInfo();
+ unionTypeItr = union.getTypeList().listIterator();
+ type = unionTypeItr.next();
+
+ // Gets the second level union and types in it.
+ union2 = (YangUnion) type.getDataTypeExtendedInfo();
+ unionTypeItr2 = union2.getTypeList().listIterator();
+ type2 = unionTypeItr2.next();
+
+ // Gets the third level union and types in it.
+ union3 = (YangUnion) type2.getDataTypeExtendedInfo();
+ unionTypeItr3 = union3.getTypeList().listIterator();
+ type3 = unionTypeItr3.next();
+
+ // Checks the first identity-ref in third level union.
+ idRef = (YangIdentityRef) type3.getDataTypeExtendedInfo();
+ assertThat(getInCrtUnionWithIdRef(
+ THIRD, FIRST, USABILITY_SYS_LOG, LEAF_LIST, FACILITY),
+ idRef.getBaseIdentity().getName(),
+ is(USABILITY_SYS_LOG));
+
+ // Checks the first identity-ref in second level union.
+ type2 = unionTypeItr2.next();
+ idRef = (YangIdentityRef) type2.getDataTypeExtendedInfo();
+ assertThat(getInCrtUnionWithIdRef(
+ SECOND, FIRST, FACILITY_SYS_LOG, LEAF_LIST, FACILITY),
+ idRef.getBaseIdentity().getName(),
+ is(FACILITY_SYS_LOG));
+
+ // Checks the first identity-ref in first level union.
+ type = unionTypeItr.next();
+ derInfo = (YangDerivedInfo) type.getDataTypeExtendedInfo();
+ type = derInfo.getReferredTypeDef().getTypeList().get(0);
+ idRef = (YangIdentityRef) type.getDataTypeExtendedInfo();
+ assertThat(getInCrtUnionWithIdRef(
+ FIRST, FIRST, AVAILABILITY_SYS_LOG, LEAF_LIST, FACILITY),
+ idRef.getBaseIdentity().getName(),
+ is(AVAILABILITY_SYS_LOG));
+
+ // Checks derived type in third level union.
+ type3 = unionTypeItr3.next();
+ derivedInfo = (YangDerivedInfo) type3.getDataTypeExtendedInfo();
+ typeDef = derivedInfo.getReferredTypeDef();
+ typeDefItr = typeDef.getTypeList().listIterator();
+ type = typeDefItr.next();
+
+ // Gets the first level union and the list of type in it.
+ union = (YangUnion) type.getDataTypeExtendedInfo();
+ unionTypeItr = union.getTypeList().listIterator();
+ type = unionTypeItr.next();
+
+ // Gets the first level union and the list of type in it.
+ union2 = (YangUnion) type.getDataTypeExtendedInfo();
+ unionTypeItr2 = union2.getTypeList().listIterator();
+ type2 = unionTypeItr2.next();
+
+ // Checks the first identity-ref in second level union.
+ idRef = (YangIdentityRef) type2.getDataTypeExtendedInfo();
+ assertThat(getInCrtUnionWithIdRef(
+ SECOND, FIRST, AVAILABILITY_SYS_LOG, TYPEDEF, CORRECT),
+ idRef.getBaseIdentity().getName(),
+ is(AVAILABILITY_SYS_LOG));
+
+ // Checks the second identity-ref in second level union.
+ type2 = unionTypeItr2.next();
+ derInfo = (YangDerivedInfo) type2.getDataTypeExtendedInfo();
+ type2 = derInfo.getReferredTypeDef().getTypeList().get(0);
+ idRef = (YangIdentityRef) type2.getDataTypeExtendedInfo();
+ assertThat(getInCrtUnionWithIdRef(
+ SECOND, SECOND, AVAILABILITY_SYS_LOG, TYPEDEF, CORRECT),
+ idRef.getBaseIdentity().getName(),
+ is(AVAILABILITY_SYS_LOG));
+
+ // Checks the first identity-ref in first level union.
+ type = unionTypeItr.next();
+ idRef = (YangIdentityRef) type.getDataTypeExtendedInfo();
+ assertThat(getInCrtUnionWithIdRef(
+ FIRST, FIRST, USABILITY_SYS_LOG, TYPEDEF, CORRECT),
+ idRef.getBaseIdentity().getName(),
+ is(USABILITY_SYS_LOG));
+ }
+
+ /**
+ * Processes identity-ref when present under typedef, during intra and
+ * inter file linking.
+ *
+ * @throws IOException if violates IO operation
+ */
+ @Test
+ public void processIdentityRefWithTypeDef() throws IOException {
+
+ utilMgr.createYangFileInfoSet(YangFileScanner.getYangFiles(DIR + "idreftypedef"));
+ utilMgr.parseYangFileInfoSet();
+ utilMgr.createYangNodeSet();
+ YangNode selfNode;
+
+ // Create YANG node set
+ linkerMgr.createYangNodeSet(utilMgr.getYangNodeSet());
+
+ // Add references to import list.
+ linkerMgr.addRefToYangFilesImportList(utilMgr.getYangNodeSet());
+ YangLinkerUtils.updateFilePriority(utilMgr.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ linkerMgr.processInterFileLinking(utilMgr.getYangNodeSet());
+ Iterator<YangNode> nodeItr = utilMgr.getYangNodeSet().iterator();
+ YangNode rootNode = nodeItr.next();
+
+ if (rootNode.getName().equals("IdRefInTypeDef1")) {
+ selfNode = rootNode;
+ } else {
+ selfNode = nodeItr.next();
+ }
+
+ YangDerivedInfo derInfo2;
+ YangTypeDef typedef2;
+ YangDerivedInfo derInfo3;
+ YangTypeDef typedef3;
+
+ YangModule module = (YangModule) selfNode;
+ leafItr = module.getListOfLeaf().listIterator();
+
+ // Gets the first leaf, which has three typedef with effective id-ref.
+ leafInfo = leafItr.next();
+ assertThat(getInCrtName(LEAF, LEAF), leafInfo.getName(), is(LEAF));
+ assertThat(getInCrtLeafType(LEAF, LEAF),
+ leafInfo.getDataType().getDataType(), is(DERIVED));
+
+ // Traverses through the three typedef in it.
+ derInfo1 = (YangDerivedInfo) leafInfo.getDataType()
+ .getDataTypeExtendedInfo();
+ typedef1 = derInfo1.getReferredTypeDef();
+ type1 = typedef1.getTypeList().get(0);
+ derInfo2 = (YangDerivedInfo) type1.getDataTypeExtendedInfo();
+ typedef2 = derInfo2.getReferredTypeDef();
+ type2 = typedef2.getTypeList().get(0);
+ derInfo3 = (YangDerivedInfo) type2.getDataTypeExtendedInfo();
+ typedef3 = derInfo3.getReferredTypeDef();
+ type3 = typedef3.getTypeList().get(0);
+ idRef = (YangIdentityRef) type3.getDataTypeExtendedInfo();
+
+ assertThat(getInCrtLeafType(TYPEDEF, typedef1.getName()),
+ derInfo1.getEffectiveBuiltInType(), is(IDENTITYREF));
+ assertThat(getInCrtLeafType(TYPEDEF, typedef3.getName()),
+ idRef.getBaseIdentity().getName(), is(BASE1));
+
+ leafListItr = module.getListOfLeafList().listIterator();
+
+ // Gets the first leaf, which has two typedef with effective id-ref.
+ leafListInfo = leafListItr.next();
+ assertThat(getInCrtName(LEAF_LIST, LEAF_LIST), leafListInfo.getName(),
+ is(LEAF_LIST));
+ assertThat(getInCrtLeafType(LEAF_LIST, LEAF_LIST),
+ leafListInfo.getDataType().getDataType(), is(DERIVED));
+
+ // Traverses through the two typedef in it.
+ derInfo1 = (YangDerivedInfo) leafListInfo.getDataType()
+ .getDataTypeExtendedInfo();
+ typedef1 = derInfo1.getReferredTypeDef();
+ type1 = typedef1.getTypeList().get(0);
+ derInfo2 = (YangDerivedInfo) type1.getDataTypeExtendedInfo();
+ typedef2 = derInfo2.getReferredTypeDef();
+ type2 = typedef2.getTypeList().get(0);
+ idRef = (YangIdentityRef) type2.getDataTypeExtendedInfo();
+
+ assertThat(getInCrtLeafType(TYPEDEF, typedef1.getName()),
+ derInfo1.getEffectiveBuiltInType(), is(IDENTITYREF));
+ assertThat(getInCrtLeafType(TYPEDEF, typedef3.getName()),
+ idRef.getBaseIdentity().getName(), is(BASE1));
+
+ // Gets the leaf with union having typedef referred from other file.
+ leafInfo = leafItr.next();
+ assertThat(getInCrtName(LEAF, UNI), leafInfo.getName(), is(UNI));
+ assertThat(getInCrtLeafType(LEAF, UNI),
+ leafInfo.getDataType().getDataType(),
+ is(YangDataTypes.UNION));
+
+ union = (YangUnion) leafInfo.getDataType().getDataTypeExtendedInfo();
+ type1 = union.getTypeList().get(0);
+ idRef = (YangIdentityRef) type1.getDataTypeExtendedInfo();
+
+ assertThat(getInCrtLeafType(UNION, "first type"),
+ idRef.getBaseIdentity().getName(), is(BASE1));
+
+ type1 = union.getTypeList().get(1);
+ derInfo1 = (YangDerivedInfo) type1.getDataTypeExtendedInfo();
+ typedef1 = derInfo1.getReferredTypeDef();
+ type2 = typedef1.getTypeList().get(0);
+ idRef = (YangIdentityRef) type2.getDataTypeExtendedInfo();
+ assertThat(getInCrtLeafType(UNION, "second type"),
+ idRef.getBaseIdentity().getName(), is("id3"));
+ }
+
+ /**
+ * Processes identity-ref when present in grouping used by inter file uses.
+ *
+ * @throws IOException if violates IO operation
+ */
+ @Test
+ public void processIdentityRefInGrouping() throws IOException {
+
+ utilMgr.createYangFileInfoSet(YangFileScanner.getYangFiles(DIR + "idrefingrouping"));
+ utilMgr.parseYangFileInfoSet();
+ utilMgr.createYangNodeSet();
+ YangNode selfNode;
+
+ // Create YANG node set
+ linkerMgr.createYangNodeSet(utilMgr.getYangNodeSet());
+
+ // Add references to import list.
+ linkerMgr.addRefToYangFilesImportList(utilMgr.getYangNodeSet());
+ YangLinkerUtils.updateFilePriority(utilMgr.getYangNodeSet());
+
+ // Carry out inter-file linking.
+ linkerMgr.processInterFileLinking(utilMgr.getYangNodeSet());
+ Iterator<YangNode> nodeItr = utilMgr.getYangNodeSet().iterator();
+ YangNode rootNode = nodeItr.next();
+
+ if (rootNode.getName().equals("IdRefInGrouping2")) {
+ selfNode = rootNode;
+ } else {
+ selfNode = nodeItr.next();
+ }
+
+ YangModule module = (YangModule) selfNode;
+ YangContainer cont = (YangContainer) module.getChild();
+
+ leafItr = cont.getListOfLeaf().listIterator();
+
+ // Gets the first leaf, which has three typedef with effective id-ref.
+ leafInfo = leafItr.next();
+ assertThat(getInCrtName(LEAF, LEAF), leafInfo.getName(), is(LEAF));
+ assertThat(getInCrtLeafType(LEAF, LEAF),
+ leafInfo.getDataType().getDataType(), is(IDENTITYREF));
+
+ idRef = (YangIdentityRef) leafInfo.getDataType()
+ .getDataTypeExtendedInfo();
+ assertThat(getInCrtLeafType(LEAF, LEAF),
+ idRef.getBaseIdentity().getName(), is(BASE1));
+
+ leafListItr = cont.getListOfLeafList().listIterator();
+
+ // Gets the first leaf, which has two typedef with effective id-ref.
+ leafListInfo = leafListItr.next();
+ assertThat(getInCrtName(LEAF_LIST, LEAF_LIST), leafListInfo.getName(),
+ is(LEAF_LIST));
+ assertThat(getInCrtLeafType(LEAF_LIST, LEAF_LIST),
+ leafListInfo.getDataType().getDataType(), is(DERIVED));
+
+ // Traverses through the two typedef in it.
+ derInfo1 = (YangDerivedInfo) leafListInfo.getDataType()
+ .getDataTypeExtendedInfo();
+ typedef1 = derInfo1.getReferredTypeDef();
+ type1 = typedef1.getTypeList().get(0);
+ idRef = (YangIdentityRef) type1.getDataTypeExtendedInfo();
+
+ assertThat(getInCrtLeafType(TYPEDEF, typedef1.getName()),
+ derInfo1.getEffectiveBuiltInType(), is(IDENTITYREF));
+ assertThat(getInCrtLeafType(TYPEDEF, typedef1.getName()),
+ idRef.getBaseIdentity().getName(), is(BASE2));
+
+ YangContainer cont2 = (YangContainer) cont.getChild().getNextSibling();
+ leafItr = cont2.getListOfLeaf().listIterator();
+ leafInfo = leafItr.next();
+
+ assertThat(getInCrtName(LEAF, LEAF), leafInfo.getName(), is(LEAF));
+ assertThat(getInCrtLeafType(LEAF, LEAF),
+ leafInfo.getDataType().getDataType(), is(IDENTITYREF));
+ idRef = (YangIdentityRef) leafInfo.getDataType()
+ .getDataTypeExtendedInfo();
+ assertThat(getInCrtLeafType(LEAF, LEAF),
+ idRef.getBaseIdentity().getName(), is(BASE2));
+ }
+}
diff --git a/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/UnionTranslatorTest.java b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/UnionTranslatorTest.java
new file mode 100644
index 0000000..cf4fb1f
--- /dev/null
+++ b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/UnionTranslatorTest.java
@@ -0,0 +1,259 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.plugin.maven;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.translator.tojava.JavaCodeGeneratorUtil;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+import org.onosproject.yang.compiler.utils.io.impl.YangFileScanner;
+import org.onosproject.yang.compiler.utils.io.impl.YangIoUtils;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * Unit tests for union translator.
+ */
+public final class UnionTranslatorTest {
+
+ private final YangUtilsParserManager manager = new YangUtilsParserManager();
+ private static final String DIR = "target/unionTranslator/";
+ private static final String DIR1 = System.getProperty("user.dir") + File
+ .separator + DIR;
+
+ /**
+ * Checks union translation should not result in any exception.
+ */
+ @Test
+ public void processUnionTranslator()
+ throws IOException, ParserException {
+ YangIoUtils.deleteDirectory(DIR);
+ YangNode node = manager.getDataModel("src/test/resources/UnionTranslator.yang");
+
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir(DIR);
+
+ JavaCodeGeneratorUtil.generateJavaCode(node, yangPluginConfig);
+ YangPluginConfig.compileCode(DIR1);
+ YangIoUtils.deleteDirectory(DIR);
+ }
+
+ /**
+ * Unit test case to test conflicting types.
+ *
+ * @throws IOException when fails to do IO operations
+ * @throws MojoExecutionException when fails to do mojo operations
+ */
+ @Test
+ public void processUnionIntUintConflictingTypes() throws IOException, MojoExecutionException {
+ YangIoUtils.deleteDirectory(DIR);
+ String searchDir = "src/test/resources/unionTranslator/intuint";
+ YangUtilManager utilManager = new YangUtilManager();
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir(DIR);
+
+ utilManager.translateToJava(yangPluginConfig);
+ YangPluginConfig.compileCode(DIR1);
+ YangIoUtils.deleteDirectory(DIR);
+ }
+
+ /**
+ * Unit test case to test conflicting types.
+ *
+ * @throws IOException when fails to do IO operations
+ * @throws MojoExecutionException when fails to do mojo operations
+ */
+ @Test
+ public void processUnionUintIntConflictingTypes() throws IOException,
+ MojoExecutionException {
+ YangIoUtils.deleteDirectory(DIR);
+ String searchDir = "src/test/resources/unionTranslator/uintint";
+ YangUtilManager utilManager = new YangUtilManager();
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir(DIR);
+
+ utilManager.translateToJava(yangPluginConfig);
+ YangPluginConfig.compileCode(DIR1);
+ YangIoUtils.deleteDirectory(DIR);
+ }
+
+ /**
+ * Unit test case to test conflicting types.
+ *
+ * @throws IOException when fails to do IO operations
+ * @throws MojoExecutionException when fails to do mojo operations
+ */
+ @Test
+ public void processUnionLongUlongConflictingTypes() throws IOException,
+ MojoExecutionException {
+ YangIoUtils.deleteDirectory(DIR);
+ String searchDir = "src/test/resources/unionTranslator/longulong";
+ YangUtilManager utilManager = new YangUtilManager();
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir(DIR);
+
+ utilManager.translateToJava(yangPluginConfig);
+ YangPluginConfig.compileCode(DIR1);
+ YangIoUtils.deleteDirectory(DIR);
+ }
+
+ /**
+ * Unit test case to test conflicting types.
+ *
+ * @throws IOException when fails to do IO operations
+ * @throws MojoExecutionException when fails to do mojo operations
+ */
+ @Test
+ public void processUnionUlongLongConflictingTypes() throws IOException,
+ MojoExecutionException {
+ YangIoUtils.deleteDirectory(DIR);
+ String searchDir = "src/test/resources/unionTranslator/ulonglong";
+ YangUtilManager utilManager = new YangUtilManager();
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir(DIR);
+
+ utilManager.translateToJava(yangPluginConfig);
+ YangPluginConfig.compileCode(DIR1);
+ YangIoUtils.deleteDirectory(DIR);
+ }
+
+ /**
+ * Unit test case to test conflicting types.
+ *
+ * @throws IOException when fails to do IO operations
+ * @throws MojoExecutionException when fails to do mojo operations
+ */
+ @Test
+ public void processUnionIntUintUlongLongConflictingTypes() throws IOException,
+ MojoExecutionException {
+ YangIoUtils.deleteDirectory(DIR);
+ String searchDir = "src/test/resources/unionTranslator/intuintulonglong";
+ YangUtilManager utilManager = new YangUtilManager();
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir(DIR);
+
+ utilManager.translateToJava(yangPluginConfig);
+ YangPluginConfig.compileCode(DIR1);
+ YangIoUtils.deleteDirectory(DIR);
+ }
+
+ /**
+ * Unit test case to test conflicting types.
+ *
+ * @throws IOException when fails to do IO operations
+ * @throws MojoExecutionException when fails to do mojo operations
+ */
+ @Test
+ public void processUnionIntUintUlongLongStringConflictingTypes() throws IOException,
+ MojoExecutionException {
+ YangIoUtils.deleteDirectory(DIR);
+ String searchDir = "src/test/resources/unionTranslator/intuintulonglongstring";
+ YangUtilManager utilManager = new YangUtilManager();
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir(DIR);
+
+ utilManager.translateToJava(yangPluginConfig);
+ YangPluginConfig.compileCode(DIR1);
+ YangIoUtils.deleteDirectory(DIR);
+ }
+
+ /**
+ * Unit test case to test conflicting types.
+ *
+ * @throws IOException when fails to do IO operations
+ * @throws MojoExecutionException when fails to do mojo operations
+ */
+ @Test
+ public void processUnionIntUintStringConflictingTypes() throws IOException,
+ MojoExecutionException {
+ YangIoUtils.deleteDirectory(DIR);
+ String searchDir = "src/test/resources/unionTranslator/intuintstring";
+ YangUtilManager utilManager = new YangUtilManager();
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir(DIR);
+
+ utilManager.translateToJava(yangPluginConfig);
+ YangPluginConfig.compileCode(DIR1);
+ YangIoUtils.deleteDirectory(DIR);
+ }
+
+ /**
+ * Unit test case to test Union with binary type.
+ *
+ * @throws IOException when fails to do IO operations
+ * @throws MojoExecutionException when fails to do mojo operations
+ */
+ @Test
+ public void processUnionWithBinaryTypes() throws IOException,
+ MojoExecutionException {
+ YangIoUtils.deleteDirectory(DIR);
+ String searchDir = "src/test/resources/unionTranslator/unionwithbinary";
+ YangUtilManager utilManager = new YangUtilManager();
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir(DIR);
+
+ utilManager.translateToJava(yangPluginConfig);
+ YangPluginConfig.compileCode(DIR1);
+ YangIoUtils.deleteDirectory(DIR);
+ }
+
+ // TODO enhance the test cases, after having a framework of translator test.
+}
diff --git a/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/YangJavaModelUtilsTest.java b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/YangJavaModelUtilsTest.java
new file mode 100644
index 0000000..e1cad16
--- /dev/null
+++ b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/YangJavaModelUtilsTest.java
@@ -0,0 +1,194 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.plugin.maven;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.hamcrest.core.Is;
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.translator.tojava.YangJavaModelUtils;
+import org.onosproject.yang.compiler.utils.io.impl.YangFileScanner;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+
+import java.io.IOException;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Unit test case for java model utils.
+ */
+public class YangJavaModelUtilsTest {
+
+
+ private final YangUtilManager utilManager = new YangUtilManager();
+
+ @Test
+ public void isRootNodeContainsOnlyAugmentTest() throws IOException,
+ ParserException, MojoExecutionException {
+ String searchDir = "src/test/resources/rootNode/onlyaugment";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ for (YangNode node : utilManager.getYangNodeSet()) {
+ if (node.getName().equals("test5")) {
+ assertThat(false, Is.is(YangJavaModelUtils.isGetSetOfRootNodeRequired(node)));
+ assertThat(true, Is.is(YangJavaModelUtils.isRootNodesCodeGenRequired(node)));
+ }
+ if (node.getName().equals("test6")) {
+ assertThat(true, Is.is(YangJavaModelUtils.isGetSetOfRootNodeRequired(node)));
+ assertThat(true, Is.is(YangJavaModelUtils.isRootNodesCodeGenRequired(node)));
+ }
+ }
+ }
+
+ @Test
+ public void isRootNodeCodeGenRequiredOnlyLeafTest() throws IOException
+ , ParserException, MojoExecutionException {
+ String searchDir = "src/test/resources/rootNode/onlyleaf";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ for (YangNode node : utilManager.getYangNodeSet()) {
+ if (node.getName().equals("test5")) {
+ assertThat(true, Is.is(YangJavaModelUtils.isGetSetOfRootNodeRequired(node)));
+ assertThat(true, Is.is(YangJavaModelUtils.isRootNodesCodeGenRequired(node)));
+ }
+ }
+ }
+
+ @Test
+ public void isRootNodeCodeGenRequiredOnlyLeafListTest() throws IOException
+ , ParserException, MojoExecutionException {
+ String searchDir = "src/test/resources/rootNode/onlyleaflist";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ for (YangNode node : utilManager.getYangNodeSet()) {
+ if (node.getName().equals("test5")) {
+ assertThat(true, Is.is(YangJavaModelUtils.isGetSetOfRootNodeRequired(node)));
+ assertThat(true, Is.is(YangJavaModelUtils.isRootNodesCodeGenRequired(node)));
+ }
+ }
+ }
+
+ @Test
+ public void isRootNodeCodeGenRequiredOnlyGroupingTest() throws IOException
+ , ParserException, MojoExecutionException {
+ String searchDir = "src/test/resources/rootNode/onlygrouping";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ for (YangNode node : utilManager.getYangNodeSet()) {
+ if (node.getName().equals("test5")) {
+ assertThat(true, Is.is(YangJavaModelUtils.isGetSetOfRootNodeRequired(node)));
+ assertThat(false, Is.is(YangJavaModelUtils.isRootNodesCodeGenRequired(node)));
+ }
+ if (node.getName().equals("test6")) {
+ assertThat(true, Is.is(YangJavaModelUtils.isGetSetOfRootNodeRequired(node)));
+ assertThat(false, Is.is(YangJavaModelUtils.isRootNodesCodeGenRequired(node)));
+ }
+ }
+ }
+
+
+ @Test
+ public void isRootNodeCodeGenRequiredOnlyTypeDefTest() throws IOException
+ , ParserException, MojoExecutionException {
+ String searchDir = "src/test/resources/rootNode/onlytypdef";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ for (YangNode node : utilManager.getYangNodeSet()) {
+ if (node.getName().equals("test5")) {
+ assertThat(false, Is.is(YangJavaModelUtils.isGetSetOfRootNodeRequired(node)));
+ assertThat(false, Is.is(YangJavaModelUtils.isRootNodesCodeGenRequired(node)));
+ }
+ if (node.getName().equals("test6")) {
+ assertThat(true, Is.is(YangJavaModelUtils.isGetSetOfRootNodeRequired(node)));
+ assertThat(false, Is.is(YangJavaModelUtils.isRootNodesCodeGenRequired(node)));
+ }
+ }
+ }
+
+ @Test
+ public void isRootNodeCodeGenRequiredNoGenTest() throws IOException
+ , ParserException, MojoExecutionException {
+ String searchDir = "src/test/resources/rootNode/nogen";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ for (YangNode node : utilManager.getYangNodeSet()) {
+ if (node.getName().equals("test5")) {
+ assertThat(false, Is.is(YangJavaModelUtils.isGetSetOfRootNodeRequired(node)));
+ assertThat(false, Is.is(YangJavaModelUtils.isRootNodesCodeGenRequired(node)));
+ }
+ }
+
+ }
+
+ @Test
+ public void isRootNodeCodeGenRequiredMixedTest() throws IOException
+ , ParserException, MojoExecutionException {
+ String searchDir = "src/test/resources/rootNode/mixed";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ for (YangNode node : utilManager.getYangNodeSet()) {
+ if (node.getName().equals("test5")) {
+ assertThat(false, Is.is(YangJavaModelUtils.isGetSetOfRootNodeRequired(node)));
+ assertThat(true, Is.is(YangJavaModelUtils.isRootNodesCodeGenRequired(node)));
+ }
+ if (node.getName().equals("test6")) {
+ assertThat(true, Is.is(YangJavaModelUtils.isGetSetOfRootNodeRequired(node)));
+ assertThat(true, Is.is(YangJavaModelUtils.isRootNodesCodeGenRequired(node)));
+ }
+ }
+
+ }
+
+ @Test
+ public void isRootNodeCodeGenRequiredTypedefGroupingTest() throws IOException
+ , ParserException, MojoExecutionException {
+ String searchDir = "src/test/resources/rootNode/typedefgrouping";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ for (YangNode node : utilManager.getYangNodeSet()) {
+ if (node.getName().equals("test5")) {
+ assertThat(true, Is.is(YangJavaModelUtils.isGetSetOfRootNodeRequired(node)));
+ assertThat(false, Is.is(YangJavaModelUtils.isRootNodesCodeGenRequired(node)));
+ }
+ }
+
+ }
+}
diff --git a/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/YangPluginUtilsTest.java b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/YangPluginUtilsTest.java
new file mode 100644
index 0000000..1759d48
--- /dev/null
+++ b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/YangPluginUtilsTest.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.plugin.maven;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.maven.project.MavenProject;
+import org.junit.Test;
+import org.sonatype.plexus.build.incremental.BuildContext;
+import org.sonatype.plexus.build.incremental.DefaultBuildContext;
+
+import java.io.File;
+import java.io.IOException;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Unit test case for YANG plugin utils.
+ */
+public class YangPluginUtilsTest {
+
+ private static final String BASE_DIR = "target/UnitTestCase";
+
+ /**
+ * This test case checks whether the source is getting added.
+ */
+ @Test
+ public void testForAddSource() throws IOException {
+
+ MavenProject project = new MavenProject();
+ BuildContext context = new DefaultBuildContext();
+ String dir = BASE_DIR + File.separator + "yang";
+ String path = System.getProperty("user.dir") + File.separator + dir;
+ File sourceDir = new File(dir);
+ sourceDir.mkdirs();
+ YangPluginUtils.addToCompilationRoot(sourceDir.toString(), project, context);
+ assertThat(true, is(project.getCompileSourceRoots().contains(path)));
+ FileUtils.deleteDirectory(sourceDir);
+ }
+}
diff --git a/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/YangXpathLinkerTest.java b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/YangXpathLinkerTest.java
new file mode 100644
index 0000000..28c3db8
--- /dev/null
+++ b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/YangXpathLinkerTest.java
@@ -0,0 +1,761 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.plugin.maven;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.junit.Test;
+import org.onosproject.yang.compiler.datamodel.ResolvableType;
+import org.onosproject.yang.compiler.datamodel.YangAugment;
+import org.onosproject.yang.compiler.datamodel.YangNode;
+import org.onosproject.yang.compiler.datamodel.YangReferenceResolver;
+import org.onosproject.yang.compiler.datamodel.YangResolutionInfo;
+import org.onosproject.yang.compiler.linker.impl.XpathLinkingTypes;
+import org.onosproject.yang.compiler.linker.impl.YangLinkerManager;
+import org.onosproject.yang.compiler.linker.impl.YangLinkerUtils;
+import org.onosproject.yang.compiler.linker.impl.YangXpathLinker;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+import org.onosproject.yang.compiler.utils.io.impl.YangFileScanner;
+import org.onosproject.yang.compiler.utils.io.impl.YangIoUtils;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+
+/**
+ * Unit test cases for x-path linker.
+ */
+public class YangXpathLinkerTest {
+
+ private static final String INTRA_FILE_PATH = "src/test/resources/xPathLinker/IntraFile/";
+ private static final String INTER_FILE_PATH = "src/test/resources/xPathLinker/InterFile/";
+ private static final String CASE_FILE_PATH = "src/test/resources/xPathLinker/Case/";
+ private YangUtilManager utilManager = new YangUtilManager();
+ private YangXpathLinker<?> linker = new YangXpathLinker();
+ private YangLinkerManager linkerManager = new YangLinkerManager();
+
+ /**
+ * Unit test case for intra file linking for single level container.
+ *
+ * @throws IOException when fails to do IO operations
+ * @throws MojoExecutionException
+ */
+ @Test
+ public void processIntraFileLinkingSingleLevel() throws IOException, MojoExecutionException {
+
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(INTRA_FILE_PATH + "IntraSingle/"));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ YangNode targetNode = null;
+ String targetNodeName = null;
+
+ for (YangNode node : utilManager.getYangNodeSet()) {
+ YangReferenceResolver ref = (YangReferenceResolver) node;
+ List<YangResolutionInfo> infos = ref.getUnresolvedResolutionList(ResolvableType.YANG_AUGMENT);
+ YangResolutionInfo info = infos.get(0);
+
+ YangAugment augment = (YangAugment) info.getEntityToResolveInfo().getEntityToResolve();
+ targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1).getNodeIdentifier()
+ .getName();
+ targetNode = augment.getAugmentedNode();
+
+ }
+
+ assertThat(true, is(targetNode.getName().equals(targetNodeName)));
+ }
+
+ /**
+ * Unit test case for intra file linking for multiple level container.
+ *
+ * @throws IOException when fails to do IO operations
+ */
+ @Test
+ public void processIntraFileLinkingMultipleLevel() throws IOException {
+
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(INTRA_FILE_PATH + "IntraMulti/"));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+
+ YangNode targetNode = null;
+ String targetNodeName = null;
+
+ for (YangNode node : utilManager.getYangNodeSet()) {
+ List<YangAugment> augments = linker.getListOfYangAugment(node);
+
+ for (YangAugment augment : augments) {
+ targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1).getNodeIdentifier()
+ .getName();
+ targetNode = linker.processXpathLinking(augment.getTargetNode(), node, XpathLinkingTypes.AUGMENT_LINKING);
+ }
+ }
+
+ assertThat(true, is(targetNode.getName().equals(targetNodeName)));
+ }
+
+ /**
+ * Unit test case for intra file linking for single level augment.
+ *
+ * @throws IOException when fails to do IO operations
+ */
+ @Test
+ public void processIntraFileLinkingInAugmentSingleLevel() throws IOException {
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(INTRA_FILE_PATH + "IntraSingleAugment/"));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+
+ YangNode targetNode = null;
+ String targetNodeName = null;
+
+ for (YangNode node : utilManager.getYangNodeSet()) {
+ List<YangAugment> augments = linker.getListOfYangAugment(node);
+
+ for (YangAugment augment : augments) {
+ targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1).getNodeIdentifier()
+ .getName();
+ targetNode = linker.processXpathLinking(augment.getTargetNode(), node, XpathLinkingTypes.AUGMENT_LINKING);
+ }
+ }
+
+ assertThat(true, is(targetNode.getName().equals(targetNodeName)));
+ }
+
+ /**
+ * Unit test case for intra file linking for multiple level augment
+ * without prefix.
+ *
+ * @throws IOException if fails to do IO operations
+ */
+ @Test
+ public void processIntraFileMultiLevelWithoutPrefix() throws IOException {
+
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(
+ INTRA_FILE_PATH + "IntraMultiAugment/withoutprefix"));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+ linkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+ linkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
+ linkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ YangNode target = null;
+ String name = null;
+
+ for (YangNode node : utilManager.getYangNodeSet()) {
+ List<YangAugment> augments = linker.getListOfYangAugment(node);
+ for (YangAugment augment : augments) {
+ name = augment.getTargetNode()
+ .get(augment.getTargetNode().size() - 1)
+ .getNodeIdentifier().getName();
+ target = linker.processXpathLinking(augment.getTargetNode(),
+ node, XpathLinkingTypes.AUGMENT_LINKING);
+ }
+ }
+ assertThat(true, is(target.getName().equals(name)));
+ }
+
+ /**
+ * Unit test case for intra file linking for multiple level augment with
+ * prefix.
+ *
+ * @throws IOException if fails to do IO operations
+ */
+ @Test
+ public void processIntraFileWithPrefix() throws IOException {
+
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(
+ INTRA_FILE_PATH + "IntraMultiAugment/withprefix"));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+ linkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+ linkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
+ linkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ YangNode target = null;
+ String name = null;
+
+ for (YangNode node : utilManager.getYangNodeSet()) {
+ List<YangAugment> augments = linker.getListOfYangAugment(node);
+ for (YangAugment augment : augments) {
+ name = augment.getTargetNode()
+ .get(augment.getTargetNode().size() - 1)
+ .getNodeIdentifier().getName();
+ target = linker.processXpathLinking(augment.getTargetNode(),
+ node, XpathLinkingTypes.AUGMENT_LINKING);
+ }
+ }
+ assertThat(true, is(target.getName().equals(name)));
+
+ }
+
+ /**
+ * Unit test case for intra file linking for multiple level augment with
+ * partial prefix.
+ *
+ * @throws IOException if fails to do IO operations
+ */
+ @Test
+ public void processIntraFileWithPartialPrefix() throws IOException {
+
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(
+ INTRA_FILE_PATH + "IntraMultiAugment/withpartialprefix"));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+ linkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+ linkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
+ linkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ YangNode target = null;
+ String name = null;
+
+ for (YangNode node : utilManager.getYangNodeSet()) {
+ List<YangAugment> augments = linker.getListOfYangAugment(node);
+ for (YangAugment augment : augments) {
+ name = augment.getTargetNode()
+ .get(augment.getTargetNode().size() - 1)
+ .getNodeIdentifier().getName();
+ target = linker.processXpathLinking(augment.getTargetNode(),
+ node, XpathLinkingTypes.AUGMENT_LINKING);
+ }
+ }
+ assertThat(true, is(target.getName().equals(name)));
+ }
+
+ /**
+ * Unit test case for intra file linking for multiple level submodule.
+ *
+ * @throws IOException when fails to do IO operations
+ */
+ @Test
+ public void processIntraFileLinkingInSubModuleSingleLevel() throws IOException {
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(INTRA_FILE_PATH + "IntraSingleSubModule/"));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+ linkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
+ linkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
+
+ YangNode targetNode = null;
+ String targetNodeName = null;
+
+ for (YangNode node : utilManager.getYangNodeSet()) {
+ List<YangAugment> augments = linker.getListOfYangAugment(node);
+
+ for (YangAugment augment : augments) {
+ targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1).getNodeIdentifier()
+ .getName();
+ targetNode = linker.processXpathLinking(augment.getTargetNode(), node, XpathLinkingTypes.AUGMENT_LINKING);
+ }
+ }
+
+ assertThat(true, is(targetNode.getName().equals(targetNodeName)));
+ }
+
+ /**
+ * Unit test case for intra file linking for multiple level submodule.
+ *
+ * @throws IOException when fails to do IO operations
+ */
+ @Test
+ public void processIntraFileLinkingInSubModuleMultiLevel() throws IOException {
+
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(INTRA_FILE_PATH + "IntraMultiSubModule/"));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+ linkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
+ linkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
+
+ YangNode targetNode = null;
+ String targetNodeName = null;
+
+ for (YangNode node : utilManager.getYangNodeSet()) {
+ List<YangAugment> augments = linker.getListOfYangAugment(node);
+
+ for (YangAugment augment : augments) {
+ targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1).getNodeIdentifier()
+ .getName();
+ targetNode = linker.processXpathLinking(augment.getTargetNode(), node, XpathLinkingTypes.AUGMENT_LINKING);
+ }
+ }
+
+ assertThat(true, is(targetNode.getName().equals(targetNodeName)));
+ }
+
+ /**
+ * Unit test case for intra file linking for single level uses.
+ *
+ * @throws IOException when fails to do IO operations
+ */
+ @Test
+ public void processIntraFileLinkingInUsesSingleLevel() throws IOException {
+
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(INTRA_FILE_PATH + "IntraSingleUses/"));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+ linkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ YangNode targetNode = null;
+ String targetNodeName = null;
+
+ for (YangNode node : utilManager.getYangNodeSet()) {
+ List<YangAugment> augments = linker.getListOfYangAugment(node);
+
+ for (YangAugment augment : augments) {
+ targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1).getNodeIdentifier()
+ .getName();
+ targetNode = linker.processXpathLinking(augment.getTargetNode(), node, XpathLinkingTypes.AUGMENT_LINKING);
+ }
+ }
+
+ assertThat(true, is(targetNode.getName().equals(targetNodeName)));
+ }
+
+ /**
+ * Unit test case for intra file linking for multi level uses.
+ *
+ * @throws IOException when fails to do IO operations
+ */
+ @Test
+ public void processIntraFileLinkingInUsesMultiLevel() throws IOException {
+
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(INTRA_FILE_PATH + "IntraMultiUses/"));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+ linkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ YangNode targetNode = null;
+ String targetNodeName = null;
+
+ for (YangNode node : utilManager.getYangNodeSet()) {
+ List<YangAugment> augments = linker.getListOfYangAugment(node);
+
+ for (YangAugment augment : augments) {
+ targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1).getNodeIdentifier()
+ .getName();
+ targetNode = linker.processXpathLinking(augment.getTargetNode(), node, XpathLinkingTypes.AUGMENT_LINKING);
+ }
+ }
+
+ assertThat(true, is(targetNode.getName().equals(targetNodeName)));
+ }
+
+ /**
+ * Unit test case for inter file linking for single level container.
+ *
+ * @throws IOException when fails to do IO operations
+ */
+ @Test
+ public void processInterFileLinkingSingleLevel() throws IOException {
+
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(INTER_FILE_PATH + "InterSingle/"));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+ linkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangNode targetNode = null;
+ String targetNodeName = null;
+
+ for (YangNode node : utilManager.getYangNodeSet()) {
+ List<YangAugment> augments = linker.getListOfYangAugment(node);
+
+ for (YangAugment augment : augments) {
+ targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1).getNodeIdentifier()
+ .getName();
+ targetNode = linker.processXpathLinking(augment.getTargetNode(), node, XpathLinkingTypes.AUGMENT_LINKING);
+ }
+ }
+
+ assertThat(true, is(targetNode.getName().equals(targetNodeName)));
+ }
+
+ /**
+ * Unit test case for inter file linking for multi level container.
+ *
+ * @throws IOException when fails to do IO operations
+ */
+ @Test
+ public void processInterFileLinkingMultipleLevel() throws IOException {
+
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(INTER_FILE_PATH + "InterMulti/"));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+ linkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangNode targetNode = null;
+ String targetNodeName = null;
+
+ for (YangNode node : utilManager.getYangNodeSet()) {
+ List<YangAugment> augments = linker.getListOfYangAugment(node);
+
+ for (YangAugment augment : augments) {
+ targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1).getNodeIdentifier()
+ .getName();
+ targetNode = linker.processXpathLinking(augment.getTargetNode(), node, XpathLinkingTypes.AUGMENT_LINKING);
+ }
+ }
+
+ assertThat(true, is(targetNode.getName().equals(targetNodeName)));
+ }
+
+ /**
+ * Unit test case for inter file linking for single level augment.
+ *
+ * @throws IOException when fails to do IO operations
+ */
+ @Test
+ public void processInterFileLinkingInAugmentSingleLevel() throws IOException {
+
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(INTER_FILE_PATH + "InterSingleAugment/"));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+ linkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangNode targetNode = null;
+ String targetNodeName = null;
+
+ for (YangNode node : utilManager.getYangNodeSet()) {
+ List<YangAugment> augments = linker.getListOfYangAugment(node);
+
+ for (YangAugment augment : augments) {
+ targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1).getNodeIdentifier()
+ .getName();
+ targetNode = linker.processXpathLinking(augment.getTargetNode(), node, XpathLinkingTypes.AUGMENT_LINKING);
+ }
+ }
+
+ assertThat(true, is(targetNode.getName().equals(targetNodeName)));
+ }
+
+ /**
+ * Unit test case for inter file linking for multi level augment.
+ *
+ * @throws IOException when fails to do IO operations
+ */
+ @Test
+ public void processInterFileLinkingInAugmentMultiLevel() throws IOException {
+
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(INTER_FILE_PATH + "InterMultiAugment/"));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+ linkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangNode targetNode = null;
+ String targetNodeName = null;
+
+ for (YangNode node : utilManager.getYangNodeSet()) {
+ List<YangAugment> augments = linker.getListOfYangAugment(node);
+
+ for (YangAugment augment : augments) {
+ targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1).getNodeIdentifier()
+ .getName();
+ targetNode = linker.processXpathLinking(augment.getTargetNode(), node, XpathLinkingTypes.AUGMENT_LINKING);
+ }
+ }
+
+ assertThat(true, is(targetNode.getName().equals(targetNodeName)));
+ }
+
+ /**
+ * Unit test case for multipler inter file linking for single level augment.
+ *
+ * @throws IOException when fails to do IO operations
+ */
+ @Test
+ public void processMultiInterFileLinkingInAugmentSingleLevel() throws IOException {
+
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(INTER_FILE_PATH + "InterMultiFileAugment/"));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+ linkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+
+ YangNode targetNode = null;
+ String targetNodeName = null;
+
+ for (YangNode node : utilManager.getYangNodeSet()) {
+ List<YangAugment> augments = linker.getListOfYangAugment(node);
+
+ for (YangAugment augment : augments) {
+ targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1).getNodeIdentifier()
+ .getName();
+ targetNode = linker.processXpathLinking(augment.getTargetNode(), node, XpathLinkingTypes.AUGMENT_LINKING);
+ }
+ }
+
+ assertThat(true, is(targetNode.getName().equals(targetNodeName)));
+ }
+
+ /**
+ * Unit test case for multiple inter file linking for multi level augment.
+ *
+ * @throws IOException when fails to do IO operations
+ */
+ @Test
+ public void processMultiInterFileLinkingInAugmentMultiLevel() throws IOException {
+
+ utilManager
+ .createYangFileInfoSet(YangFileScanner.getYangFiles(INTER_FILE_PATH + "InterMultiFileAugmentMulti/"));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+ linkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+ linkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
+ linkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+ linkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ YangNode targetNode = null;
+ String targetNodeName = null;
+
+ for (YangNode node : utilManager.getYangNodeSet()) {
+ List<YangAugment> augments = linker.getListOfYangAugment(node);
+
+ for (YangAugment augment : augments) {
+ targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1).getNodeIdentifier()
+ .getName();
+ targetNode = augment.getAugmentedNode();
+ }
+ }
+
+ assertThat(true, is(targetNode.getName().equals(targetNodeName)));
+ }
+
+ /**
+ * Unit test case for inter file linking for single level submodule.
+ *
+ * @throws IOException when fails to do IO operations
+ */
+ @Test
+ public void processInterFileLinkingInSubModuleSingleLevel() throws IOException {
+
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(INTER_FILE_PATH + "InterSingleSubModule/"));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+ linkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
+ linkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+ linkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+ linkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+ YangNode targetNode = null;
+ String targetNodeName = null;
+
+ for (YangNode node : utilManager.getYangNodeSet()) {
+ List<YangAugment> augments = linker.getListOfYangAugment(node);
+
+ for (YangAugment augment : augments) {
+ targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1).getNodeIdentifier()
+ .getName();
+ targetNode = augment.getAugmentedNode();
+ }
+ }
+
+ assertThat(true, is(targetNode.getName().equals(targetNodeName)));
+ }
+
+ /**
+ * Unit test case for inter file linking for multi level submodule.
+ *
+ * @throws IOException when fails to do IO operations
+ */
+ @Test
+ public void processInterFileLinkingInSubModuleMultiLevel() throws IOException {
+
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(INTER_FILE_PATH + "InterMultiSubModule/"));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+ linkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
+ linkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+ linkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+ linkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+ YangNode targetNode = null;
+ String targetNodeName = null;
+
+ for (YangNode node : utilManager.getYangNodeSet()) {
+ List<YangAugment> augments = linker.getListOfYangAugment(node);
+
+ for (YangAugment augment : augments) {
+ targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1).getNodeIdentifier()
+ .getName();
+ targetNode = augment.getAugmentedNode();
+ }
+ }
+
+ assertThat(true, is(targetNode.getName().equals(targetNodeName)));
+ }
+
+ /**
+ * Unit test case for inter file linking for multi level uses inside augment.
+ *
+ * @throws IOException when fails to do IO operations
+ */
+ @Test
+ public void processInterFileLinkingInUsesInAugment() throws IOException {
+
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(INTER_FILE_PATH + "InterSingleUses/"));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+ linkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
+ linkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+ linkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+ linkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ YangNode targetNode = null;
+ String targetNodeName = null;
+
+ for (YangNode node : utilManager.getYangNodeSet()) {
+ List<YangAugment> augments = linker.getListOfYangAugment(node);
+
+ for (YangAugment augment : augments) {
+ targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1)
+ .getNodeIdentifier().getName();
+ targetNode = augment.getAugmentedNode();
+ }
+ }
+
+ assertThat(true, is(targetNode.getName().equals(targetNodeName)));
+
+ }
+
+ /**
+ * Unit test case for inter file linking for multi level uses.
+ *
+ * @throws IOException when fails to do IO operations
+ */
+ @Test
+ public void processInterFileLinkingInUsesMultiLevel() throws IOException {
+
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(INTER_FILE_PATH + "InterMultiUses/"));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+ linkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+ linkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+ linkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ YangNode targetNode = null;
+ String targetNodeName = null;
+
+ for (YangNode node : utilManager.getYangNodeSet()) {
+ List<YangAugment> augments = linker.getListOfYangAugment(node);
+
+ for (YangAugment augment : augments) {
+ targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1).getNodeIdentifier()
+ .getName();
+ targetNode = linker.processXpathLinking(augment.getTargetNode(), node, XpathLinkingTypes.AUGMENT_LINKING);
+ }
+ }
+
+ assertThat(true, is(targetNode.getName().equals(targetNodeName)));
+ }
+
+ /**
+ * Unit test case for inter file linking for multi level uses inside augment.
+ *
+ * @throws IOException when fails to do IO operations
+ */
+ @Test
+ public void processInterFileLinkingInMultipleSubmodules() throws IOException {
+
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(CASE_FILE_PATH + "submodule/"));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+ linkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
+ linkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+ linkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+
+ linkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ YangNode targetNode = null;
+ String targetNodeName = null;
+
+ for (YangNode node : utilManager.getYangNodeSet()) {
+ List<YangAugment> augments = linker.getListOfYangAugment(node);
+
+ for (YangAugment augment : augments) {
+ targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1)
+ .getNodeIdentifier().getName();
+ targetNode = augment.getAugmentedNode();
+ }
+ }
+
+ assertThat(true, is(targetNode.getName().equals(targetNodeName)));
+
+ }
+
+ /**
+ * Unit test case for inter file linking for multi level uses inside augment.
+ *
+ * @throws IOException when fails to do IO operations
+ */
+ @Test
+ public void processInterFileLinkingInMultipleUses() throws IOException {
+
+ YangIoUtils.deleteDirectory("target/xpath/");
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(CASE_FILE_PATH + "uses/"));
+ utilManager.parseYangFileInfoSet();
+ utilManager.createYangNodeSet();
+ linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
+ linkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
+ linkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
+ linkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
+ YangLinkerUtils.updateFilePriority(utilManager.getYangNodeSet());
+ linkerManager.processInterFileLinking(utilManager.getYangNodeSet());
+
+ YangNode targetNode = null;
+ String targetNodeName = null;
+
+ for (YangNode node : utilManager.getYangNodeSet()) {
+ List<YangAugment> augments = linker.getListOfYangAugment(node);
+
+ for (YangAugment augment : augments) {
+ targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1)
+ .getNodeIdentifier().getName();
+ targetNode = augment.getAugmentedNode();
+ }
+ }
+
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir("target/xpath/");
+ utilManager.translateToJava(yangPluginConfig);
+ String dir = System.getProperty("user.dir") + File.separator + "target/xpath/";
+ YangPluginConfig.compileCode(dir);
+ YangIoUtils.deleteDirectory("target/xpath/");
+ assertThat(true, is(targetNode.getName().equals(targetNodeName)));
+ }
+}
diff --git a/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/ietfyang/IetfYangFileTest.java b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/ietfyang/IetfYangFileTest.java
new file mode 100644
index 0000000..82de4c5
--- /dev/null
+++ b/compiler/plugin/maven/src/test/java/org/onosproject/yang/compiler/plugin/maven/ietfyang/IetfYangFileTest.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License 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.
+ */
+
+package org.onosproject.yang.compiler.plugin.maven.ietfyang;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.junit.Test;
+import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+import org.onosproject.yang.compiler.utils.io.impl.YangFileScanner;
+import org.onosproject.yang.compiler.utils.io.impl.YangIoUtils;
+import org.onosproject.yang.compiler.parser.exceptions.ParserException;
+import org.onosproject.yang.compiler.plugin.maven.YangUtilManager;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * Test cases for testing IETF YANG files.
+ */
+public class IetfYangFileTest {
+
+ private final YangUtilManager utilManager = new YangUtilManager();
+
+ /**
+ * Checks hierarchical intra with inter file type linking.
+ * Reference: https://datatracker.ietf.org/doc/draft-zha-l3sm-l3vpn-onos-deployment
+ */
+ @Test
+ public void l3vpnserviceyang()
+ throws IOException, ParserException, MojoExecutionException {
+
+ String dir = "target/ietfyang/l3vpnservice/";
+ YangIoUtils.deleteDirectory(dir);
+ String searchDir = "src/test/resources/ietfyang/l3vpnservice";
+ utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
+ utilManager.parseYangFileInfoSet();
+ utilManager.resolveDependenciesUsingLinker();
+
+ YangPluginConfig yangPluginConfig = new YangPluginConfig();
+ yangPluginConfig.setCodeGenDir(dir);
+
+ utilManager.translateToJava(yangPluginConfig);
+ String dir1 = System.getProperty("user.dir") + File.separator + dir;
+ YangPluginConfig.compileCode(dir1);
+ YangIoUtils.deleteDirectory("target/ietfyang/");
+ }
+
+}
diff --git a/plugin/maven/src/test/resources/ChoiceCaseTranslator.yang b/compiler/plugin/maven/src/test/resources/ChoiceCaseTranslator.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ChoiceCaseTranslator.yang
rename to compiler/plugin/maven/src/test/resources/ChoiceCaseTranslator.yang
diff --git a/plugin/maven/src/test/resources/EnumTranslator.yang b/compiler/plugin/maven/src/test/resources/EnumTranslator.yang
similarity index 100%
rename from plugin/maven/src/test/resources/EnumTranslator.yang
rename to compiler/plugin/maven/src/test/resources/EnumTranslator.yang
diff --git a/plugin/maven/src/test/resources/LengthRestrictionInRefType.yang b/compiler/plugin/maven/src/test/resources/LengthRestrictionInRefType.yang
similarity index 100%
rename from plugin/maven/src/test/resources/LengthRestrictionInRefType.yang
rename to compiler/plugin/maven/src/test/resources/LengthRestrictionInRefType.yang
diff --git a/plugin/maven/src/test/resources/LengthRestrictionInTypedef.yang b/compiler/plugin/maven/src/test/resources/LengthRestrictionInTypedef.yang
similarity index 100%
rename from plugin/maven/src/test/resources/LengthRestrictionInTypedef.yang
rename to compiler/plugin/maven/src/test/resources/LengthRestrictionInTypedef.yang
diff --git a/plugin/maven/src/test/resources/LengthRestrictionInTypedefAndTypeInValid.yang b/compiler/plugin/maven/src/test/resources/LengthRestrictionInTypedefAndTypeInValid.yang
similarity index 100%
rename from plugin/maven/src/test/resources/LengthRestrictionInTypedefAndTypeInValid.yang
rename to compiler/plugin/maven/src/test/resources/LengthRestrictionInTypedefAndTypeInValid.yang
diff --git a/plugin/maven/src/test/resources/LengthRestrictionInTypedefAndTypeValid.yang b/compiler/plugin/maven/src/test/resources/LengthRestrictionInTypedefAndTypeValid.yang
similarity index 100%
rename from plugin/maven/src/test/resources/LengthRestrictionInTypedefAndTypeValid.yang
rename to compiler/plugin/maven/src/test/resources/LengthRestrictionInTypedefAndTypeValid.yang
diff --git a/plugin/maven/src/test/resources/MultiplePatternAndLengthRestriction.yang b/compiler/plugin/maven/src/test/resources/MultiplePatternAndLengthRestriction.yang
similarity index 100%
rename from plugin/maven/src/test/resources/MultiplePatternAndLengthRestriction.yang
rename to compiler/plugin/maven/src/test/resources/MultiplePatternAndLengthRestriction.yang
diff --git a/plugin/maven/src/test/resources/MultiplePatternAndLengthRestrictionInValid.yang b/compiler/plugin/maven/src/test/resources/MultiplePatternAndLengthRestrictionInValid.yang
similarity index 100%
rename from plugin/maven/src/test/resources/MultiplePatternAndLengthRestrictionInValid.yang
rename to compiler/plugin/maven/src/test/resources/MultiplePatternAndLengthRestrictionInValid.yang
diff --git a/plugin/maven/src/test/resources/MultiplePatternAndLengthRestrictionValid.yang b/compiler/plugin/maven/src/test/resources/MultiplePatternAndLengthRestrictionValid.yang
similarity index 100%
rename from plugin/maven/src/test/resources/MultiplePatternAndLengthRestrictionValid.yang
rename to compiler/plugin/maven/src/test/resources/MultiplePatternAndLengthRestrictionValid.yang
diff --git a/plugin/maven/src/test/resources/MultiplePatternRestrictionInRefTypeAndTypedef.yang b/compiler/plugin/maven/src/test/resources/MultiplePatternRestrictionInRefTypeAndTypedef.yang
similarity index 100%
rename from plugin/maven/src/test/resources/MultiplePatternRestrictionInRefTypeAndTypedef.yang
rename to compiler/plugin/maven/src/test/resources/MultiplePatternRestrictionInRefTypeAndTypedef.yang
diff --git a/plugin/maven/src/test/resources/NotificationTest.yang b/compiler/plugin/maven/src/test/resources/NotificationTest.yang
similarity index 100%
rename from plugin/maven/src/test/resources/NotificationTest.yang
rename to compiler/plugin/maven/src/test/resources/NotificationTest.yang
diff --git a/plugin/maven/src/test/resources/PatternRestrictionInRefType.yang b/compiler/plugin/maven/src/test/resources/PatternRestrictionInRefType.yang
similarity index 100%
rename from plugin/maven/src/test/resources/PatternRestrictionInRefType.yang
rename to compiler/plugin/maven/src/test/resources/PatternRestrictionInRefType.yang
diff --git a/plugin/maven/src/test/resources/PatternRestrictionInRefTypeAndTypedef.yang b/compiler/plugin/maven/src/test/resources/PatternRestrictionInRefTypeAndTypedef.yang
similarity index 100%
rename from plugin/maven/src/test/resources/PatternRestrictionInRefTypeAndTypedef.yang
rename to compiler/plugin/maven/src/test/resources/PatternRestrictionInRefTypeAndTypedef.yang
diff --git a/plugin/maven/src/test/resources/PatternRestrictionInTypedef.yang b/compiler/plugin/maven/src/test/resources/PatternRestrictionInTypedef.yang
similarity index 100%
rename from plugin/maven/src/test/resources/PatternRestrictionInTypedef.yang
rename to compiler/plugin/maven/src/test/resources/PatternRestrictionInTypedef.yang
diff --git a/plugin/maven/src/test/resources/RangeRestrictionInRefType.yang b/compiler/plugin/maven/src/test/resources/RangeRestrictionInRefType.yang
similarity index 100%
rename from plugin/maven/src/test/resources/RangeRestrictionInRefType.yang
rename to compiler/plugin/maven/src/test/resources/RangeRestrictionInRefType.yang
diff --git a/plugin/maven/src/test/resources/RangeRestrictionInRefTypeAndTypedefInValid.yang b/compiler/plugin/maven/src/test/resources/RangeRestrictionInRefTypeAndTypedefInValid.yang
similarity index 100%
rename from plugin/maven/src/test/resources/RangeRestrictionInRefTypeAndTypedefInValid.yang
rename to compiler/plugin/maven/src/test/resources/RangeRestrictionInRefTypeAndTypedefInValid.yang
diff --git a/plugin/maven/src/test/resources/RangeRestrictionInRefTypeAndTypedefValid.yang b/compiler/plugin/maven/src/test/resources/RangeRestrictionInRefTypeAndTypedefValid.yang
similarity index 100%
rename from plugin/maven/src/test/resources/RangeRestrictionInRefTypeAndTypedefValid.yang
rename to compiler/plugin/maven/src/test/resources/RangeRestrictionInRefTypeAndTypedefValid.yang
diff --git a/plugin/maven/src/test/resources/RangeRestrictionInRefTypedef.yang b/compiler/plugin/maven/src/test/resources/RangeRestrictionInRefTypedef.yang
similarity index 100%
rename from plugin/maven/src/test/resources/RangeRestrictionInRefTypedef.yang
rename to compiler/plugin/maven/src/test/resources/RangeRestrictionInRefTypedef.yang
diff --git a/plugin/maven/src/test/resources/RangeRestrictionInString.yang b/compiler/plugin/maven/src/test/resources/RangeRestrictionInString.yang
similarity index 100%
rename from plugin/maven/src/test/resources/RangeRestrictionInString.yang
rename to compiler/plugin/maven/src/test/resources/RangeRestrictionInString.yang
diff --git a/plugin/maven/src/test/resources/RangeRestrictionInStringInRefType.yang b/compiler/plugin/maven/src/test/resources/RangeRestrictionInStringInRefType.yang
similarity index 100%
rename from plugin/maven/src/test/resources/RangeRestrictionInStringInRefType.yang
rename to compiler/plugin/maven/src/test/resources/RangeRestrictionInStringInRefType.yang
diff --git a/plugin/maven/src/test/resources/RangeRestrictionInTypedef.yang b/compiler/plugin/maven/src/test/resources/RangeRestrictionInTypedef.yang
similarity index 100%
rename from plugin/maven/src/test/resources/RangeRestrictionInTypedef.yang
rename to compiler/plugin/maven/src/test/resources/RangeRestrictionInTypedef.yang
diff --git a/plugin/maven/src/test/resources/RangeRestrictionInvalidInRefTypedef.yang b/compiler/plugin/maven/src/test/resources/RangeRestrictionInvalidInRefTypedef.yang
similarity index 100%
rename from plugin/maven/src/test/resources/RangeRestrictionInvalidInRefTypedef.yang
rename to compiler/plugin/maven/src/test/resources/RangeRestrictionInvalidInRefTypedef.yang
diff --git a/plugin/maven/src/test/resources/RpcTranslator.yang b/compiler/plugin/maven/src/test/resources/RpcTranslator.yang
similarity index 100%
rename from plugin/maven/src/test/resources/RpcTranslator.yang
rename to compiler/plugin/maven/src/test/resources/RpcTranslator.yang
diff --git a/plugin/maven/src/test/resources/SelfFileLinkingTypedefAtMiddleLevelAfterParentHolder.yang b/compiler/plugin/maven/src/test/resources/SelfFileLinkingTypedefAtMiddleLevelAfterParentHolder.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SelfFileLinkingTypedefAtMiddleLevelAfterParentHolder.yang
rename to compiler/plugin/maven/src/test/resources/SelfFileLinkingTypedefAtMiddleLevelAfterParentHolder.yang
diff --git a/plugin/maven/src/test/resources/SelfFileLinkingTypedefAtRootIsAfterContainerHavingType.yang b/compiler/plugin/maven/src/test/resources/SelfFileLinkingTypedefAtRootIsAfterContainerHavingType.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SelfFileLinkingTypedefAtRootIsAfterContainerHavingType.yang
rename to compiler/plugin/maven/src/test/resources/SelfFileLinkingTypedefAtRootIsAfterContainerHavingType.yang
diff --git a/plugin/maven/src/test/resources/SelfFileLinkingTypedefAtRootTypeTwoLevelInHierarchy.yang b/compiler/plugin/maven/src/test/resources/SelfFileLinkingTypedefAtRootTypeTwoLevelInHierarchy.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SelfFileLinkingTypedefAtRootTypeTwoLevelInHierarchy.yang
rename to compiler/plugin/maven/src/test/resources/SelfFileLinkingTypedefAtRootTypeTwoLevelInHierarchy.yang
diff --git a/plugin/maven/src/test/resources/SelfFileLinkingTypedefNotFound.yang b/compiler/plugin/maven/src/test/resources/SelfFileLinkingTypedefNotFound.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SelfFileLinkingTypedefNotFound.yang
rename to compiler/plugin/maven/src/test/resources/SelfFileLinkingTypedefNotFound.yang
diff --git a/plugin/maven/src/test/resources/SelfFileLinkingWithFeature.yang b/compiler/plugin/maven/src/test/resources/SelfFileLinkingWithFeature.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SelfFileLinkingWithFeature.yang
rename to compiler/plugin/maven/src/test/resources/SelfFileLinkingWithFeature.yang
diff --git a/plugin/maven/src/test/resources/SelfFileLinkingWithFeatureInSubModule.yang b/compiler/plugin/maven/src/test/resources/SelfFileLinkingWithFeatureInSubModule.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SelfFileLinkingWithFeatureInSubModule.yang
rename to compiler/plugin/maven/src/test/resources/SelfFileLinkingWithFeatureInSubModule.yang
diff --git a/plugin/maven/src/test/resources/SelfFileLinkingWithFeatureUndefined.yang b/compiler/plugin/maven/src/test/resources/SelfFileLinkingWithFeatureUndefined.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SelfFileLinkingWithFeatureUndefined.yang
rename to compiler/plugin/maven/src/test/resources/SelfFileLinkingWithFeatureUndefined.yang
diff --git a/plugin/maven/src/test/resources/SelfFileLinkingWithGroupingHierarchicalRefUnresolved.yang b/compiler/plugin/maven/src/test/resources/SelfFileLinkingWithGroupingHierarchicalRefUnresolved.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SelfFileLinkingWithGroupingHierarchicalRefUnresolved.yang
rename to compiler/plugin/maven/src/test/resources/SelfFileLinkingWithGroupingHierarchicalRefUnresolved.yang
diff --git a/plugin/maven/src/test/resources/SelfFileLinkingWithGroupingWithSelfAndExternalPrefixMix.yang b/compiler/plugin/maven/src/test/resources/SelfFileLinkingWithGroupingWithSelfAndExternalPrefixMix.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SelfFileLinkingWithGroupingWithSelfAndExternalPrefixMix.yang
rename to compiler/plugin/maven/src/test/resources/SelfFileLinkingWithGroupingWithSelfAndExternalPrefixMix.yang
diff --git a/plugin/maven/src/test/resources/SelfFileLinkingWithGroupingWithSelfModulePrefix.yang b/compiler/plugin/maven/src/test/resources/SelfFileLinkingWithGroupingWithSelfModulePrefix.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SelfFileLinkingWithGroupingWithSelfModulePrefix.yang
rename to compiler/plugin/maven/src/test/resources/SelfFileLinkingWithGroupingWithSelfModulePrefix.yang
diff --git a/plugin/maven/src/test/resources/SelfFileLinkingWithHierarchicalTypeFailureScenario.yang b/compiler/plugin/maven/src/test/resources/SelfFileLinkingWithHierarchicalTypeFailureScenario.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SelfFileLinkingWithHierarchicalTypeFailureScenario.yang
rename to compiler/plugin/maven/src/test/resources/SelfFileLinkingWithHierarchicalTypeFailureScenario.yang
diff --git a/plugin/maven/src/test/resources/SelfFileLinkingWithMultipleDependency.yang b/compiler/plugin/maven/src/test/resources/SelfFileLinkingWithMultipleDependency.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SelfFileLinkingWithMultipleDependency.yang
rename to compiler/plugin/maven/src/test/resources/SelfFileLinkingWithMultipleDependency.yang
diff --git a/plugin/maven/src/test/resources/SelfFileLinkingWithMultipleDependencyUnresolved.yang b/compiler/plugin/maven/src/test/resources/SelfFileLinkingWithMultipleDependencyUnresolved.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SelfFileLinkingWithMultipleDependencyUnresolved.yang
rename to compiler/plugin/maven/src/test/resources/SelfFileLinkingWithMultipleDependencyUnresolved.yang
diff --git a/plugin/maven/src/test/resources/SelfFileLinkingWithMultipleFeature.yang b/compiler/plugin/maven/src/test/resources/SelfFileLinkingWithMultipleFeature.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SelfFileLinkingWithMultipleFeature.yang
rename to compiler/plugin/maven/src/test/resources/SelfFileLinkingWithMultipleFeature.yang
diff --git a/plugin/maven/src/test/resources/SelfFileLinkingWithTypdefHierarchicalRefUnresolved.yang b/compiler/plugin/maven/src/test/resources/SelfFileLinkingWithTypdefHierarchicalRefUnresolved.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SelfFileLinkingWithTypdefHierarchicalRefUnresolved.yang
rename to compiler/plugin/maven/src/test/resources/SelfFileLinkingWithTypdefHierarchicalRefUnresolved.yang
diff --git a/plugin/maven/src/test/resources/SelfFileLinkingWithTypdefHierarchicalReference.yang b/compiler/plugin/maven/src/test/resources/SelfFileLinkingWithTypdefHierarchicalReference.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SelfFileLinkingWithTypdefHierarchicalReference.yang
rename to compiler/plugin/maven/src/test/resources/SelfFileLinkingWithTypdefHierarchicalReference.yang
diff --git a/plugin/maven/src/test/resources/SelfFileLinkingWithTypeWithSelfAndExternalPrefixMix.yang b/compiler/plugin/maven/src/test/resources/SelfFileLinkingWithTypeWithSelfAndExternalPrefixMix.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SelfFileLinkingWithTypeWithSelfAndExternalPrefixMix.yang
rename to compiler/plugin/maven/src/test/resources/SelfFileLinkingWithTypeWithSelfAndExternalPrefixMix.yang
diff --git a/plugin/maven/src/test/resources/SelfFileLinkingWithTypeWithSelfModulePrefix.yang b/compiler/plugin/maven/src/test/resources/SelfFileLinkingWithTypeWithSelfModulePrefix.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SelfFileLinkingWithTypeWithSelfModulePrefix.yang
rename to compiler/plugin/maven/src/test/resources/SelfFileLinkingWithTypeWithSelfModulePrefix.yang
diff --git a/plugin/maven/src/test/resources/SelfResolutionGroupingHavingSameUsesManyTimes.yang b/compiler/plugin/maven/src/test/resources/SelfResolutionGroupingHavingSameUsesManyTimes.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SelfResolutionGroupingHavingSameUsesManyTimes.yang
rename to compiler/plugin/maven/src/test/resources/SelfResolutionGroupingHavingSameUsesManyTimes.yang
diff --git a/plugin/maven/src/test/resources/SelfResolutionGroupingInRpcAndUsesInOutput.yang b/compiler/plugin/maven/src/test/resources/SelfResolutionGroupingInRpcAndUsesInOutput.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SelfResolutionGroupingInRpcAndUsesInOutput.yang
rename to compiler/plugin/maven/src/test/resources/SelfResolutionGroupingInRpcAndUsesInOutput.yang
diff --git a/plugin/maven/src/test/resources/SelfResolutionGroupingReferencingItselfFailureScenerio.yang b/compiler/plugin/maven/src/test/resources/SelfResolutionGroupingReferencingItselfFailureScenerio.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SelfResolutionGroupingReferencingItselfFailureScenerio.yang
rename to compiler/plugin/maven/src/test/resources/SelfResolutionGroupingReferencingItselfFailureScenerio.yang
diff --git a/plugin/maven/src/test/resources/SelfResolutionGroupingWithMultipleUses.yang b/compiler/plugin/maven/src/test/resources/SelfResolutionGroupingWithMultipleUses.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SelfResolutionGroupingWithMultipleUses.yang
rename to compiler/plugin/maven/src/test/resources/SelfResolutionGroupingWithMultipleUses.yang
diff --git a/plugin/maven/src/test/resources/SelfResolutionNestedGroupingWithUnresolvedUses.yang b/compiler/plugin/maven/src/test/resources/SelfResolutionNestedGroupingWithUnresolvedUses.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SelfResolutionNestedGroupingWithUnresolvedUses.yang
rename to compiler/plugin/maven/src/test/resources/SelfResolutionNestedGroupingWithUnresolvedUses.yang
diff --git a/plugin/maven/src/test/resources/SelfResolutionRpcWithOneTypedefAndTwoGroupingUnderDifferentNode.yang b/compiler/plugin/maven/src/test/resources/SelfResolutionRpcWithOneTypedefAndTwoGroupingUnderDifferentNode.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SelfResolutionRpcWithOneTypedefAndTwoGroupingUnderDifferentNode.yang
rename to compiler/plugin/maven/src/test/resources/SelfResolutionRpcWithOneTypedefAndTwoGroupingUnderDifferentNode.yang
diff --git a/plugin/maven/src/test/resources/SelfResolutionWhenLeafrefDoesntHavePath.yang b/compiler/plugin/maven/src/test/resources/SelfResolutionWhenLeafrefDoesntHavePath.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SelfResolutionWhenLeafrefDoesntHavePath.yang
rename to compiler/plugin/maven/src/test/resources/SelfResolutionWhenLeafrefDoesntHavePath.yang
diff --git a/plugin/maven/src/test/resources/SelfResolutionWhenTypeAndTypedefAtRootLevel.yang b/compiler/plugin/maven/src/test/resources/SelfResolutionWhenTypeAndTypedefAtRootLevel.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SelfResolutionWhenTypeAndTypedefAtRootLevel.yang
rename to compiler/plugin/maven/src/test/resources/SelfResolutionWhenTypeAndTypedefAtRootLevel.yang
diff --git a/plugin/maven/src/test/resources/SelfResolutionWhenTypeAndTypedefAtRootLevelForBinary.yang b/compiler/plugin/maven/src/test/resources/SelfResolutionWhenTypeAndTypedefAtRootLevelForBinary.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SelfResolutionWhenTypeAndTypedefAtRootLevelForBinary.yang
rename to compiler/plugin/maven/src/test/resources/SelfResolutionWhenTypeAndTypedefAtRootLevelForBinary.yang
diff --git a/plugin/maven/src/test/resources/SelfResolutionWhenTypeReferredTypedefNotDefined.yang b/compiler/plugin/maven/src/test/resources/SelfResolutionWhenTypeReferredTypedefNotDefined.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SelfResolutionWhenTypeReferredTypedefNotDefined.yang
rename to compiler/plugin/maven/src/test/resources/SelfResolutionWhenTypeReferredTypedefNotDefined.yang
diff --git a/plugin/maven/src/test/resources/SelfResolutionWhenUsesAndGroupingAtRootLevel.yang b/compiler/plugin/maven/src/test/resources/SelfResolutionWhenUsesAndGroupingAtRootLevel.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SelfResolutionWhenUsesAndGroupingAtRootLevel.yang
rename to compiler/plugin/maven/src/test/resources/SelfResolutionWhenUsesAndGroupingAtRootLevel.yang
diff --git a/plugin/maven/src/test/resources/SelfResolutionWhenUsesAndGroupingAtRootLevelGroupingWithChild.yang b/compiler/plugin/maven/src/test/resources/SelfResolutionWhenUsesAndGroupingAtRootLevelGroupingWithChild.yang
similarity index 100%
rename from plugin/maven/src/test/resources/SelfResolutionWhenUsesAndGroupingAtRootLevelGroupingWithChild.yang
rename to compiler/plugin/maven/src/test/resources/SelfResolutionWhenUsesAndGroupingAtRootLevelGroupingWithChild.yang
diff --git a/plugin/maven/src/test/resources/UnionTranslator.yang b/compiler/plugin/maven/src/test/resources/UnionTranslator.yang
similarity index 100%
rename from plugin/maven/src/test/resources/UnionTranslator.yang
rename to compiler/plugin/maven/src/test/resources/UnionTranslator.yang
diff --git a/plugin/maven/src/test/resources/augmentTranslator/test.yang b/compiler/plugin/maven/src/test/resources/augmentTranslator/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/augmentTranslator/test.yang
rename to compiler/plugin/maven/src/test/resources/augmentTranslator/test.yang
diff --git a/plugin/maven/src/test/resources/augmentTranslator/test2.yang b/compiler/plugin/maven/src/test/resources/augmentTranslator/test2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/augmentTranslator/test2.yang
rename to compiler/plugin/maven/src/test/resources/augmentTranslator/test2.yang
diff --git a/plugin/maven/src/test/resources/augmentTranslator/test3.yang b/compiler/plugin/maven/src/test/resources/augmentTranslator/test3.yang
similarity index 100%
rename from plugin/maven/src/test/resources/augmentTranslator/test3.yang
rename to compiler/plugin/maven/src/test/resources/augmentTranslator/test3.yang
diff --git a/plugin/maven/src/test/resources/augmentTranslator/test4.yang b/compiler/plugin/maven/src/test/resources/augmentTranslator/test4.yang
similarity index 100%
rename from plugin/maven/src/test/resources/augmentTranslator/test4.yang
rename to compiler/plugin/maven/src/test/resources/augmentTranslator/test4.yang
diff --git a/plugin/maven/src/test/resources/augmentTranslator/test5.yang b/compiler/plugin/maven/src/test/resources/augmentTranslator/test5.yang
similarity index 100%
rename from plugin/maven/src/test/resources/augmentTranslator/test5.yang
rename to compiler/plugin/maven/src/test/resources/augmentTranslator/test5.yang
diff --git a/plugin/maven/src/test/resources/choiceAugment/test.yang b/compiler/plugin/maven/src/test/resources/choiceAugment/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/choiceAugment/test.yang
rename to compiler/plugin/maven/src/test/resources/choiceAugment/test.yang
diff --git a/plugin/maven/src/test/resources/choiceAugment/test2.yang b/compiler/plugin/maven/src/test/resources/choiceAugment/test2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/choiceAugment/test2.yang
rename to compiler/plugin/maven/src/test/resources/choiceAugment/test2.yang
diff --git a/plugin/maven/src/test/resources/choiceTranslator/all.yang b/compiler/plugin/maven/src/test/resources/choiceTranslator/all.yang
similarity index 100%
rename from plugin/maven/src/test/resources/choiceTranslator/all.yang
rename to compiler/plugin/maven/src/test/resources/choiceTranslator/all.yang
diff --git a/plugin/maven/src/test/resources/compilerAnnotation/test.yang b/compiler/plugin/maven/src/test/resources/compilerAnnotation/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/compilerAnnotation/test.yang
rename to compiler/plugin/maven/src/test/resources/compilerAnnotation/test.yang
diff --git a/plugin/maven/src/test/resources/compilerAnnotation/test2.yang b/compiler/plugin/maven/src/test/resources/compilerAnnotation/test2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/compilerAnnotation/test2.yang
rename to compiler/plugin/maven/src/test/resources/compilerAnnotation/test2.yang
diff --git a/plugin/maven/src/test/resources/file1UsesFile2TypeDefFile3Type/ietf-inet-types.yang b/compiler/plugin/maven/src/test/resources/file1UsesFile2TypeDefFile3Type/ietf-inet-types.yang
similarity index 100%
rename from plugin/maven/src/test/resources/file1UsesFile2TypeDefFile3Type/ietf-inet-types.yang
rename to compiler/plugin/maven/src/test/resources/file1UsesFile2TypeDefFile3Type/ietf-inet-types.yang
diff --git a/plugin/maven/src/test/resources/file1UsesFile2TypeDefFile3Type/ietf-network-topology.yang b/compiler/plugin/maven/src/test/resources/file1UsesFile2TypeDefFile3Type/ietf-network-topology.yang
similarity index 100%
rename from plugin/maven/src/test/resources/file1UsesFile2TypeDefFile3Type/ietf-network-topology.yang
rename to compiler/plugin/maven/src/test/resources/file1UsesFile2TypeDefFile3Type/ietf-network-topology.yang
diff --git a/plugin/maven/src/test/resources/file1UsesFile2TypeDefFile3Type/ietf-te-topology.yang b/compiler/plugin/maven/src/test/resources/file1UsesFile2TypeDefFile3Type/ietf-te-topology.yang
similarity index 100%
rename from plugin/maven/src/test/resources/file1UsesFile2TypeDefFile3Type/ietf-te-topology.yang
rename to compiler/plugin/maven/src/test/resources/file1UsesFile2TypeDefFile3Type/ietf-te-topology.yang
diff --git a/plugin/maven/src/test/resources/grouping/grouping.yang b/compiler/plugin/maven/src/test/resources/grouping/grouping.yang
similarity index 100%
rename from plugin/maven/src/test/resources/grouping/grouping.yang
rename to compiler/plugin/maven/src/test/resources/grouping/grouping.yang
diff --git a/plugin/maven/src/test/resources/groupingNodeSameAsModule/portpair.yang b/compiler/plugin/maven/src/test/resources/groupingNodeSameAsModule/portpair.yang
similarity index 100%
rename from plugin/maven/src/test/resources/groupingNodeSameAsModule/portpair.yang
rename to compiler/plugin/maven/src/test/resources/groupingNodeSameAsModule/portpair.yang
diff --git a/plugin/maven/src/test/resources/hierarchicalinterfiletype/ietf-inet-types.yang b/compiler/plugin/maven/src/test/resources/hierarchicalinterfiletype/ietf-inet-types.yang
similarity index 100%
rename from plugin/maven/src/test/resources/hierarchicalinterfiletype/ietf-inet-types.yang
rename to compiler/plugin/maven/src/test/resources/hierarchicalinterfiletype/ietf-inet-types.yang
diff --git a/plugin/maven/src/test/resources/hierarchicalinterfiletype/ietf-network-topology.yang b/compiler/plugin/maven/src/test/resources/hierarchicalinterfiletype/ietf-network-topology.yang
similarity index 100%
rename from plugin/maven/src/test/resources/hierarchicalinterfiletype/ietf-network-topology.yang
rename to compiler/plugin/maven/src/test/resources/hierarchicalinterfiletype/ietf-network-topology.yang
diff --git a/plugin/maven/src/test/resources/hierarchicalinterfiletype/ietf-network.yang b/compiler/plugin/maven/src/test/resources/hierarchicalinterfiletype/ietf-network.yang
similarity index 100%
rename from plugin/maven/src/test/resources/hierarchicalinterfiletype/ietf-network.yang
rename to compiler/plugin/maven/src/test/resources/hierarchicalinterfiletype/ietf-network.yang
diff --git a/plugin/maven/src/test/resources/hierarchicalintrawithinterfiletype/ietf-inet-types.yang b/compiler/plugin/maven/src/test/resources/hierarchicalintrawithinterfiletype/ietf-inet-types.yang
similarity index 100%
rename from plugin/maven/src/test/resources/hierarchicalintrawithinterfiletype/ietf-inet-types.yang
rename to compiler/plugin/maven/src/test/resources/hierarchicalintrawithinterfiletype/ietf-inet-types.yang
diff --git a/plugin/maven/src/test/resources/hierarchicalintrawithinterfiletype/ietf-network.yang b/compiler/plugin/maven/src/test/resources/hierarchicalintrawithinterfiletype/ietf-network.yang
similarity index 100%
rename from plugin/maven/src/test/resources/hierarchicalintrawithinterfiletype/ietf-network.yang
rename to compiler/plugin/maven/src/test/resources/hierarchicalintrawithinterfiletype/ietf-network.yang
diff --git a/plugin/maven/src/test/resources/identityRef/identityRef.yang b/compiler/plugin/maven/src/test/resources/identityRef/identityRef.yang
similarity index 100%
rename from plugin/maven/src/test/resources/identityRef/identityRef.yang
rename to compiler/plugin/maven/src/test/resources/identityRef/identityRef.yang
diff --git a/plugin/maven/src/test/resources/identityTranslator/test.yang b/compiler/plugin/maven/src/test/resources/identityTranslator/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/identityTranslator/test.yang
rename to compiler/plugin/maven/src/test/resources/identityTranslator/test.yang
diff --git a/plugin/maven/src/test/resources/ietfyang/l3vpnservice/ietf-inet-types.yang b/compiler/plugin/maven/src/test/resources/ietfyang/l3vpnservice/ietf-inet-types.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ietfyang/l3vpnservice/ietf-inet-types.yang
rename to compiler/plugin/maven/src/test/resources/ietfyang/l3vpnservice/ietf-inet-types.yang
diff --git a/plugin/maven/src/test/resources/ietfyang/l3vpnservice/ietf-sd-onos-common-types.yang b/compiler/plugin/maven/src/test/resources/ietfyang/l3vpnservice/ietf-sd-onos-common-types.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ietfyang/l3vpnservice/ietf-sd-onos-common-types.yang
rename to compiler/plugin/maven/src/test/resources/ietfyang/l3vpnservice/ietf-sd-onos-common-types.yang
diff --git a/plugin/maven/src/test/resources/ietfyang/l3vpnservice/ietf-sd-onos-service-l3vpn.yang b/compiler/plugin/maven/src/test/resources/ietfyang/l3vpnservice/ietf-sd-onos-service-l3vpn.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ietfyang/l3vpnservice/ietf-sd-onos-service-l3vpn.yang
rename to compiler/plugin/maven/src/test/resources/ietfyang/l3vpnservice/ietf-sd-onos-service-l3vpn.yang
diff --git a/plugin/maven/src/test/resources/ietfyang/l3vpnservice/ietf-sd-onos-service-types.yang b/compiler/plugin/maven/src/test/resources/ietfyang/l3vpnservice/ietf-sd-onos-service-types.yang
similarity index 100%
rename from plugin/maven/src/test/resources/ietfyang/l3vpnservice/ietf-sd-onos-service-types.yang
rename to compiler/plugin/maven/src/test/resources/ietfyang/l3vpnservice/ietf-sd-onos-service-types.yang
diff --git a/plugin/maven/src/test/resources/interFileUsesInsideChildOfGrouping/ietf-network-topology.yang b/compiler/plugin/maven/src/test/resources/interFileUsesInsideChildOfGrouping/ietf-network-topology.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interFileUsesInsideChildOfGrouping/ietf-network-topology.yang
rename to compiler/plugin/maven/src/test/resources/interFileUsesInsideChildOfGrouping/ietf-network-topology.yang
diff --git a/plugin/maven/src/test/resources/interFileUsesInsideChildOfGrouping/ietf-network.yang b/compiler/plugin/maven/src/test/resources/interFileUsesInsideChildOfGrouping/ietf-network.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interFileUsesInsideChildOfGrouping/ietf-network.yang
rename to compiler/plugin/maven/src/test/resources/interFileUsesInsideChildOfGrouping/ietf-network.yang
diff --git a/plugin/maven/src/test/resources/interFileUsesInsideChildOfGrouping/ietf-te-topology.yang b/compiler/plugin/maven/src/test/resources/interFileUsesInsideChildOfGrouping/ietf-te-topology.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interFileUsesInsideChildOfGrouping/ietf-te-topology.yang
rename to compiler/plugin/maven/src/test/resources/interFileUsesInsideChildOfGrouping/ietf-te-topology.yang
diff --git a/plugin/maven/src/test/resources/interFileUsesInsideChildOfGrouping/ietf-te-types.yang b/compiler/plugin/maven/src/test/resources/interFileUsesInsideChildOfGrouping/ietf-te-types.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interFileUsesInsideChildOfGrouping/ietf-te-types.yang
rename to compiler/plugin/maven/src/test/resources/interFileUsesInsideChildOfGrouping/ietf-te-types.yang
diff --git a/plugin/maven/src/test/resources/interJarFileLinking/yangFiles/flowclassifier.yang b/compiler/plugin/maven/src/test/resources/interJarFileLinking/yangFiles/flowclassifier.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interJarFileLinking/yangFiles/flowclassifier.yang
rename to compiler/plugin/maven/src/test/resources/interJarFileLinking/yangFiles/flowclassifier.yang
diff --git a/plugin/maven/src/test/resources/interJarFileLinking/yangFiles/portpair.yang b/compiler/plugin/maven/src/test/resources/interJarFileLinking/yangFiles/portpair.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interJarFileLinking/yangFiles/portpair.yang
rename to compiler/plugin/maven/src/test/resources/interJarFileLinking/yangFiles/portpair.yang
diff --git a/plugin/maven/src/test/resources/interJarFileLinking/yangFiles/test.yang b/compiler/plugin/maven/src/test/resources/interJarFileLinking/yangFiles/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interJarFileLinking/yangFiles/test.yang
rename to compiler/plugin/maven/src/test/resources/interJarFileLinking/yangFiles/test.yang
diff --git a/plugin/maven/src/test/resources/interfilefeatureimport/featureFile1.yang b/compiler/plugin/maven/src/test/resources/interfilefeatureimport/featureFile1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfilefeatureimport/featureFile1.yang
rename to compiler/plugin/maven/src/test/resources/interfilefeatureimport/featureFile1.yang
diff --git a/plugin/maven/src/test/resources/interfilefeatureimport/featureFile2.yang b/compiler/plugin/maven/src/test/resources/interfilefeatureimport/featureFile2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfilefeatureimport/featureFile2.yang
rename to compiler/plugin/maven/src/test/resources/interfilefeatureimport/featureFile2.yang
diff --git a/plugin/maven/src/test/resources/interfilefeatureimportdependency/featurefile1.yang b/compiler/plugin/maven/src/test/resources/interfilefeatureimportdependency/featurefile1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfilefeatureimportdependency/featurefile1.yang
rename to compiler/plugin/maven/src/test/resources/interfilefeatureimportdependency/featurefile1.yang
diff --git a/plugin/maven/src/test/resources/interfilefeatureimportdependency/featurefile2.yang b/compiler/plugin/maven/src/test/resources/interfilefeatureimportdependency/featurefile2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfilefeatureimportdependency/featurefile2.yang
rename to compiler/plugin/maven/src/test/resources/interfilefeatureimportdependency/featurefile2.yang
diff --git a/plugin/maven/src/test/resources/interfilefeatureimportdependency/featurefile3.yang b/compiler/plugin/maven/src/test/resources/interfilefeatureimportdependency/featurefile3.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfilefeatureimportdependency/featurefile3.yang
rename to compiler/plugin/maven/src/test/resources/interfilefeatureimportdependency/featurefile3.yang
diff --git a/plugin/maven/src/test/resources/interfilefeatureimportdependencyUndefined/featurefile1.yang b/compiler/plugin/maven/src/test/resources/interfilefeatureimportdependencyUndefined/featurefile1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfilefeatureimportdependencyUndefined/featurefile1.yang
rename to compiler/plugin/maven/src/test/resources/interfilefeatureimportdependencyUndefined/featurefile1.yang
diff --git a/plugin/maven/src/test/resources/interfilefeatureimportdependencyUndefined/featurefile2.yang b/compiler/plugin/maven/src/test/resources/interfilefeatureimportdependencyUndefined/featurefile2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfilefeatureimportdependencyUndefined/featurefile2.yang
rename to compiler/plugin/maven/src/test/resources/interfilefeatureimportdependencyUndefined/featurefile2.yang
diff --git a/plugin/maven/src/test/resources/interfilefeatureimportdependencyUndefined/featurefile3.yang b/compiler/plugin/maven/src/test/resources/interfilefeatureimportdependencyUndefined/featurefile3.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfilefeatureimportdependencyUndefined/featurefile3.yang
rename to compiler/plugin/maven/src/test/resources/interfilefeatureimportdependencyUndefined/featurefile3.yang
diff --git a/plugin/maven/src/test/resources/interfilefeatureinclude/featureFile3.yang b/compiler/plugin/maven/src/test/resources/interfilefeatureinclude/featureFile3.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfilefeatureinclude/featureFile3.yang
rename to compiler/plugin/maven/src/test/resources/interfilefeatureinclude/featureFile3.yang
diff --git a/plugin/maven/src/test/resources/interfilefeatureinclude/featureFile4.yang b/compiler/plugin/maven/src/test/resources/interfilefeatureinclude/featureFile4.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfilefeatureinclude/featureFile4.yang
rename to compiler/plugin/maven/src/test/resources/interfilefeatureinclude/featureFile4.yang
diff --git a/plugin/maven/src/test/resources/interfilefeatureincludedependency/featurefile1.yang b/compiler/plugin/maven/src/test/resources/interfilefeatureincludedependency/featurefile1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfilefeatureincludedependency/featurefile1.yang
rename to compiler/plugin/maven/src/test/resources/interfilefeatureincludedependency/featurefile1.yang
diff --git a/plugin/maven/src/test/resources/interfilefeatureincludedependency/featurefile2.yang b/compiler/plugin/maven/src/test/resources/interfilefeatureincludedependency/featurefile2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfilefeatureincludedependency/featurefile2.yang
rename to compiler/plugin/maven/src/test/resources/interfilefeatureincludedependency/featurefile2.yang
diff --git a/plugin/maven/src/test/resources/interfilefeatureincludedependency/featurefile3.yang b/compiler/plugin/maven/src/test/resources/interfilefeatureincludedependency/featurefile3.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfilefeatureincludedependency/featurefile3.yang
rename to compiler/plugin/maven/src/test/resources/interfilefeatureincludedependency/featurefile3.yang
diff --git a/plugin/maven/src/test/resources/interfilefeatureincludedependencyUndefined/featurefile1.yang b/compiler/plugin/maven/src/test/resources/interfilefeatureincludedependencyUndefined/featurefile1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfilefeatureincludedependencyUndefined/featurefile1.yang
rename to compiler/plugin/maven/src/test/resources/interfilefeatureincludedependencyUndefined/featurefile1.yang
diff --git a/plugin/maven/src/test/resources/interfilefeatureincludedependencyUndefined/featurefile2.yang b/compiler/plugin/maven/src/test/resources/interfilefeatureincludedependencyUndefined/featurefile2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfilefeatureincludedependencyUndefined/featurefile2.yang
rename to compiler/plugin/maven/src/test/resources/interfilefeatureincludedependencyUndefined/featurefile2.yang
diff --git a/plugin/maven/src/test/resources/interfilefeatureincludedependencyUndefined/featurefile3.yang b/compiler/plugin/maven/src/test/resources/interfilefeatureincludedependencyUndefined/featurefile3.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfilefeatureincludedependencyUndefined/featurefile3.yang
rename to compiler/plugin/maven/src/test/resources/interfilefeatureincludedependencyUndefined/featurefile3.yang
diff --git a/plugin/maven/src/test/resources/interfileidentityimport/IdentityInModule.yang b/compiler/plugin/maven/src/test/resources/interfileidentityimport/IdentityInModule.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfileidentityimport/IdentityInModule.yang
rename to compiler/plugin/maven/src/test/resources/interfileidentityimport/IdentityInModule.yang
diff --git a/plugin/maven/src/test/resources/interfileidentityimport/IdentityIntraFile.yang b/compiler/plugin/maven/src/test/resources/interfileidentityimport/IdentityIntraFile.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfileidentityimport/IdentityIntraFile.yang
rename to compiler/plugin/maven/src/test/resources/interfileidentityimport/IdentityIntraFile.yang
diff --git a/plugin/maven/src/test/resources/interfileidentityimportdependency/featurefile1.yang b/compiler/plugin/maven/src/test/resources/interfileidentityimportdependency/featurefile1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfileidentityimportdependency/featurefile1.yang
rename to compiler/plugin/maven/src/test/resources/interfileidentityimportdependency/featurefile1.yang
diff --git a/plugin/maven/src/test/resources/interfileidentityimportdependency/featurefile2.yang b/compiler/plugin/maven/src/test/resources/interfileidentityimportdependency/featurefile2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfileidentityimportdependency/featurefile2.yang
rename to compiler/plugin/maven/src/test/resources/interfileidentityimportdependency/featurefile2.yang
diff --git a/plugin/maven/src/test/resources/interfileidentityimportdependency/featurefile3.yang b/compiler/plugin/maven/src/test/resources/interfileidentityimportdependency/featurefile3.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfileidentityimportdependency/featurefile3.yang
rename to compiler/plugin/maven/src/test/resources/interfileidentityimportdependency/featurefile3.yang
diff --git a/plugin/maven/src/test/resources/interfileidentityimportdependencyUndefined/featurefile1.yang b/compiler/plugin/maven/src/test/resources/interfileidentityimportdependencyUndefined/featurefile1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfileidentityimportdependencyUndefined/featurefile1.yang
rename to compiler/plugin/maven/src/test/resources/interfileidentityimportdependencyUndefined/featurefile1.yang
diff --git a/plugin/maven/src/test/resources/interfileidentityimportdependencyUndefined/featurefile2.yang b/compiler/plugin/maven/src/test/resources/interfileidentityimportdependencyUndefined/featurefile2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfileidentityimportdependencyUndefined/featurefile2.yang
rename to compiler/plugin/maven/src/test/resources/interfileidentityimportdependencyUndefined/featurefile2.yang
diff --git a/plugin/maven/src/test/resources/interfileidentityimportdependencyUndefined/featurefile3.yang b/compiler/plugin/maven/src/test/resources/interfileidentityimportdependencyUndefined/featurefile3.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfileidentityimportdependencyUndefined/featurefile3.yang
rename to compiler/plugin/maven/src/test/resources/interfileidentityimportdependencyUndefined/featurefile3.yang
diff --git a/plugin/maven/src/test/resources/interfileidentityincludedependency/featurefile1.yang b/compiler/plugin/maven/src/test/resources/interfileidentityincludedependency/featurefile1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfileidentityincludedependency/featurefile1.yang
rename to compiler/plugin/maven/src/test/resources/interfileidentityincludedependency/featurefile1.yang
diff --git a/plugin/maven/src/test/resources/interfileidentityincludedependency/featurefile2.yang b/compiler/plugin/maven/src/test/resources/interfileidentityincludedependency/featurefile2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfileidentityincludedependency/featurefile2.yang
rename to compiler/plugin/maven/src/test/resources/interfileidentityincludedependency/featurefile2.yang
diff --git a/plugin/maven/src/test/resources/interfileidentityincludedependency/featurefile3.yang b/compiler/plugin/maven/src/test/resources/interfileidentityincludedependency/featurefile3.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfileidentityincludedependency/featurefile3.yang
rename to compiler/plugin/maven/src/test/resources/interfileidentityincludedependency/featurefile3.yang
diff --git a/plugin/maven/src/test/resources/interfileidentityincludedependencyUndefined/featurefile1.yang b/compiler/plugin/maven/src/test/resources/interfileidentityincludedependencyUndefined/featurefile1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfileidentityincludedependencyUndefined/featurefile1.yang
rename to compiler/plugin/maven/src/test/resources/interfileidentityincludedependencyUndefined/featurefile1.yang
diff --git a/plugin/maven/src/test/resources/interfileidentityincludedependencyUndefined/featurefile2.yang b/compiler/plugin/maven/src/test/resources/interfileidentityincludedependencyUndefined/featurefile2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfileidentityincludedependencyUndefined/featurefile2.yang
rename to compiler/plugin/maven/src/test/resources/interfileidentityincludedependencyUndefined/featurefile2.yang
diff --git a/plugin/maven/src/test/resources/interfileidentityincludedependencyUndefined/featurefile3.yang b/compiler/plugin/maven/src/test/resources/interfileidentityincludedependencyUndefined/featurefile3.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfileidentityincludedependencyUndefined/featurefile3.yang
rename to compiler/plugin/maven/src/test/resources/interfileidentityincludedependencyUndefined/featurefile3.yang
diff --git a/plugin/maven/src/test/resources/interfileidentityinlude/IdentityInModule.yang b/compiler/plugin/maven/src/test/resources/interfileidentityinlude/IdentityInModule.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfileidentityinlude/IdentityInModule.yang
rename to compiler/plugin/maven/src/test/resources/interfileidentityinlude/IdentityInModule.yang
diff --git a/plugin/maven/src/test/resources/interfileidentityinlude/IdentityIntraFile.yang b/compiler/plugin/maven/src/test/resources/interfileidentityinlude/IdentityIntraFile.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfileidentityinlude/IdentityIntraFile.yang
rename to compiler/plugin/maven/src/test/resources/interfileidentityinlude/IdentityIntraFile.yang
diff --git a/plugin/maven/src/test/resources/interfileidentitytypedef/IdentityInModule.yang b/compiler/plugin/maven/src/test/resources/interfileidentitytypedef/IdentityInModule.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfileidentitytypedef/IdentityInModule.yang
rename to compiler/plugin/maven/src/test/resources/interfileidentitytypedef/IdentityInModule.yang
diff --git a/plugin/maven/src/test/resources/interfileidentitytypedef/IdentityIntraFile.yang b/compiler/plugin/maven/src/test/resources/interfileidentitytypedef/IdentityIntraFile.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfileidentitytypedef/IdentityIntraFile.yang
rename to compiler/plugin/maven/src/test/resources/interfileidentitytypedef/IdentityIntraFile.yang
diff --git a/plugin/maven/src/test/resources/interfileidentitytypedef/IdentityTypedef.yang b/compiler/plugin/maven/src/test/resources/interfileidentitytypedef/IdentityTypedef.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfileidentitytypedef/IdentityTypedef.yang
rename to compiler/plugin/maven/src/test/resources/interfileidentitytypedef/IdentityTypedef.yang
diff --git a/plugin/maven/src/test/resources/interfileietf/ietf-inet-types.yang b/compiler/plugin/maven/src/test/resources/interfileietf/ietf-inet-types.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfileietf/ietf-inet-types.yang
rename to compiler/plugin/maven/src/test/resources/interfileietf/ietf-inet-types.yang
diff --git a/plugin/maven/src/test/resources/interfileietf/ietf-network-topology.yang b/compiler/plugin/maven/src/test/resources/interfileietf/ietf-network-topology.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfileietf/ietf-network-topology.yang
rename to compiler/plugin/maven/src/test/resources/interfileietf/ietf-network-topology.yang
diff --git a/plugin/maven/src/test/resources/interfileietf/ietf-network.yang b/compiler/plugin/maven/src/test/resources/interfileietf/ietf-network.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfileietf/ietf-network.yang
rename to compiler/plugin/maven/src/test/resources/interfileietf/ietf-network.yang
diff --git a/plugin/maven/src/test/resources/interfileietf/ietf-schedule.yang b/compiler/plugin/maven/src/test/resources/interfileietf/ietf-schedule.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfileietf/ietf-schedule.yang
rename to compiler/plugin/maven/src/test/resources/interfileietf/ietf-schedule.yang
diff --git a/plugin/maven/src/test/resources/interfileietf/ietf-te-topology.yang b/compiler/plugin/maven/src/test/resources/interfileietf/ietf-te-topology.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfileietf/ietf-te-topology.yang
rename to compiler/plugin/maven/src/test/resources/interfileietf/ietf-te-topology.yang
diff --git a/plugin/maven/src/test/resources/interfileietf/ietf-te-types.yang b/compiler/plugin/maven/src/test/resources/interfileietf/ietf-te-types.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfileietf/ietf-te-types.yang
rename to compiler/plugin/maven/src/test/resources/interfileietf/ietf-te-types.yang
diff --git a/plugin/maven/src/test/resources/interfileietf/ietf-yang-types.yang b/compiler/plugin/maven/src/test/resources/interfileietf/ietf-yang-types.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfileietf/ietf-yang-types.yang
rename to compiler/plugin/maven/src/test/resources/interfileietf/ietf-yang-types.yang
diff --git a/plugin/maven/src/test/resources/interfilepriority/module1.yang b/compiler/plugin/maven/src/test/resources/interfilepriority/module1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfilepriority/module1.yang
rename to compiler/plugin/maven/src/test/resources/interfilepriority/module1.yang
diff --git a/plugin/maven/src/test/resources/interfilepriority/module2.yang b/compiler/plugin/maven/src/test/resources/interfilepriority/module2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfilepriority/module2.yang
rename to compiler/plugin/maven/src/test/resources/interfilepriority/module2.yang
diff --git a/plugin/maven/src/test/resources/interfilepriority/module3.yang b/compiler/plugin/maven/src/test/resources/interfilepriority/module3.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfilepriority/module3.yang
rename to compiler/plugin/maven/src/test/resources/interfilepriority/module3.yang
diff --git a/plugin/maven/src/test/resources/interfilepriority/module4.yang b/compiler/plugin/maven/src/test/resources/interfilepriority/module4.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfilepriority/module4.yang
rename to compiler/plugin/maven/src/test/resources/interfilepriority/module4.yang
diff --git a/plugin/maven/src/test/resources/interfiletype/module1.yang b/compiler/plugin/maven/src/test/resources/interfiletype/module1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfiletype/module1.yang
rename to compiler/plugin/maven/src/test/resources/interfiletype/module1.yang
diff --git a/plugin/maven/src/test/resources/interfiletype/module2.yang b/compiler/plugin/maven/src/test/resources/interfiletype/module2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfiletype/module2.yang
rename to compiler/plugin/maven/src/test/resources/interfiletype/module2.yang
diff --git a/plugin/maven/src/test/resources/interfiletypewithinclude/module1.yang b/compiler/plugin/maven/src/test/resources/interfiletypewithinclude/module1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfiletypewithinclude/module1.yang
rename to compiler/plugin/maven/src/test/resources/interfiletypewithinclude/module1.yang
diff --git a/plugin/maven/src/test/resources/interfiletypewithinclude/module2.yang b/compiler/plugin/maven/src/test/resources/interfiletypewithinclude/module2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfiletypewithinclude/module2.yang
rename to compiler/plugin/maven/src/test/resources/interfiletypewithinclude/module2.yang
diff --git a/plugin/maven/src/test/resources/interfiletypewithrevision/module1.yang b/compiler/plugin/maven/src/test/resources/interfiletypewithrevision/module1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfiletypewithrevision/module1.yang
rename to compiler/plugin/maven/src/test/resources/interfiletypewithrevision/module1.yang
diff --git a/plugin/maven/src/test/resources/interfiletypewithrevision/module2.yang b/compiler/plugin/maven/src/test/resources/interfiletypewithrevision/module2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfiletypewithrevision/module2.yang
rename to compiler/plugin/maven/src/test/resources/interfiletypewithrevision/module2.yang
diff --git a/plugin/maven/src/test/resources/interfiletypewithrevisioninname/module1.yang b/compiler/plugin/maven/src/test/resources/interfiletypewithrevisioninname/module1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfiletypewithrevisioninname/module1.yang
rename to compiler/plugin/maven/src/test/resources/interfiletypewithrevisioninname/module1.yang
diff --git a/plugin/maven/src/test/resources/interfiletypewithrevisioninname/module2@2007-06-09.yang b/compiler/plugin/maven/src/test/resources/interfiletypewithrevisioninname/module2@2007-06-09.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfiletypewithrevisioninname/module2@2007-06-09.yang
rename to compiler/plugin/maven/src/test/resources/interfiletypewithrevisioninname/module2@2007-06-09.yang
diff --git a/plugin/maven/src/test/resources/interfileuses/module1.yang b/compiler/plugin/maven/src/test/resources/interfileuses/module1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfileuses/module1.yang
rename to compiler/plugin/maven/src/test/resources/interfileuses/module1.yang
diff --git a/plugin/maven/src/test/resources/interfileuses/module2.yang b/compiler/plugin/maven/src/test/resources/interfileuses/module2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfileuses/module2.yang
rename to compiler/plugin/maven/src/test/resources/interfileuses/module2.yang
diff --git a/plugin/maven/src/test/resources/interfileuseswithinclude/module1.yang b/compiler/plugin/maven/src/test/resources/interfileuseswithinclude/module1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfileuseswithinclude/module1.yang
rename to compiler/plugin/maven/src/test/resources/interfileuseswithinclude/module1.yang
diff --git a/plugin/maven/src/test/resources/interfileuseswithinclude/module2.yang b/compiler/plugin/maven/src/test/resources/interfileuseswithinclude/module2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfileuseswithinclude/module2.yang
rename to compiler/plugin/maven/src/test/resources/interfileuseswithinclude/module2.yang
diff --git a/plugin/maven/src/test/resources/interfilewithusesreferringtype/ietf-network.yang b/compiler/plugin/maven/src/test/resources/interfilewithusesreferringtype/ietf-network.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfilewithusesreferringtype/ietf-network.yang
rename to compiler/plugin/maven/src/test/resources/interfilewithusesreferringtype/ietf-network.yang
diff --git a/plugin/maven/src/test/resources/interfilewithusesreferringtype/ietf-te-topology.yang b/compiler/plugin/maven/src/test/resources/interfilewithusesreferringtype/ietf-te-topology.yang
similarity index 100%
rename from plugin/maven/src/test/resources/interfilewithusesreferringtype/ietf-te-topology.yang
rename to compiler/plugin/maven/src/test/resources/interfilewithusesreferringtype/ietf-te-topology.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/iffeatuinleafref/featurebymultileafref/SelfFileLinkingWithFeatureReferredByMultiLeafref.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/iffeatuinleafref/featurebymultileafref/SelfFileLinkingWithFeatureReferredByMultiLeafref.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/iffeatuinleafref/featurebymultileafref/SelfFileLinkingWithFeatureReferredByMultiLeafref.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/iffeatuinleafref/featurebymultileafref/SelfFileLinkingWithFeatureReferredByMultiLeafref.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/iffeatuinleafref/simpleleafrefwithiffeature/SelfFileLinkingWithFeatureReferredByLeafref.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/iffeatuinleafref/simpleleafrefwithiffeature/SelfFileLinkingWithFeatureReferredByLeafref.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/iffeatuinleafref/simpleleafrefwithiffeature/SelfFileLinkingWithFeatureReferredByLeafref.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/iffeatuinleafref/simpleleafrefwithiffeature/SelfFileLinkingWithFeatureReferredByLeafref.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/interfile/interfileleafreffromgroupingreferstootherfile/module1.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/interfile/interfileleafreffromgroupingreferstootherfile/module1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/interfile/interfileleafreffromgroupingreferstootherfile/module1.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/interfile/interfileleafreffromgroupingreferstootherfile/module1.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/interfile/interfileleafreffromgroupingreferstootherfile/module2.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/interfile/interfileleafreffromgroupingreferstootherfile/module2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/interfile/interfileleafreffromgroupingreferstootherfile/module2.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/interfile/interfileleafreffromgroupingreferstootherfile/module2.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/interfile/interfileleafrefreferstomultipleleafrefinmultiplefiles/ieft-inet-types.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/interfile/interfileleafrefreferstomultipleleafrefinmultiplefiles/ieft-inet-types.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/interfile/interfileleafrefreferstomultipleleafrefinmultiplefiles/ieft-inet-types.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/interfile/interfileleafrefreferstomultipleleafrefinmultiplefiles/ieft-inet-types.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/interfile/interfileleafrefreferstomultipleleafrefinmultiplefiles/ietf-network-topology.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/interfile/interfileleafrefreferstomultipleleafrefinmultiplefiles/ietf-network-topology.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/interfile/interfileleafrefreferstomultipleleafrefinmultiplefiles/ietf-network-topology.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/interfile/interfileleafrefreferstomultipleleafrefinmultiplefiles/ietf-network-topology.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/interfile/interfileleafrefreferstomultipleleafrefinmultiplefiles/ietf-network.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/interfile/interfileleafrefreferstomultipleleafrefinmultiplefiles/ietf-network.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/interfile/interfileleafrefreferstomultipleleafrefinmultiplefiles/ietf-network.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/interfile/interfileleafrefreferstomultipleleafrefinmultiplefiles/ietf-network.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/interfile/interfileleafrefwithimport/module1.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/interfile/interfileleafrefwithimport/module1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/interfile/interfileleafrefwithimport/module1.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/interfile/interfileleafrefwithimport/module1.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/interfile/interfileleafrefwithimport/module2.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/interfile/interfileleafrefwithimport/module2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/interfile/interfileleafrefwithimport/module2.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/interfile/interfileleafrefwithimport/module2.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/interfile/leafrefInGroupingWithPrefix/GroupingCopiedInModule2.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/interfile/leafrefInGroupingWithPrefix/GroupingCopiedInModule2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/interfile/leafrefInGroupingWithPrefix/GroupingCopiedInModule2.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/interfile/leafrefInGroupingWithPrefix/GroupingCopiedInModule2.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/interfile/leafrefInGroupingWithPrefix/LeafrefInGroupingOfModule1.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/interfile/leafrefInGroupingWithPrefix/LeafrefInGroupingOfModule1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/interfile/leafrefInGroupingWithPrefix/LeafrefInGroupingOfModule1.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/interfile/leafrefInGroupingWithPrefix/LeafrefInGroupingOfModule1.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/interfile/leafrefInGroupingWithPrefixAndManyReference/GroupingCopiedInModule2.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/interfile/leafrefInGroupingWithPrefixAndManyReference/GroupingCopiedInModule2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/interfile/leafrefInGroupingWithPrefixAndManyReference/GroupingCopiedInModule2.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/interfile/leafrefInGroupingWithPrefixAndManyReference/GroupingCopiedInModule2.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/interfile/leafrefInGroupingWithPrefixAndManyReference/LeafrefInGroupingOfModule1.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/interfile/leafrefInGroupingWithPrefixAndManyReference/LeafrefInGroupingOfModule1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/interfile/leafrefInGroupingWithPrefixAndManyReference/LeafrefInGroupingOfModule1.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/interfile/leafrefInGroupingWithPrefixAndManyReference/LeafrefInGroupingOfModule1.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/interfile/typedefreferredmultipletimes/ietf-interfaces.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/interfile/typedefreferredmultipletimes/ietf-interfaces.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/interfile/typedefreferredmultipletimes/ietf-interfaces.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/interfile/typedefreferredmultipletimes/ietf-interfaces.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/intrafile/invalidscenerioforgrouping/SelfResolutionWhenLeafrefInModuleReferToGroupingInModule.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/invalidscenerioforgrouping/SelfResolutionWhenLeafrefInModuleReferToGroupingInModule.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/intrafile/invalidscenerioforgrouping/SelfResolutionWhenLeafrefInModuleReferToGroupingInModule.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/invalidscenerioforgrouping/SelfResolutionWhenLeafrefInModuleReferToGroupingInModule.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/intrafile/invalidsceneriowithinvalidnode/SelfResolutionWhenLeafrefInModuleReferToInvalidNode.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/invalidsceneriowithinvalidnode/SelfResolutionWhenLeafrefInModuleReferToInvalidNode.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/intrafile/invalidsceneriowithinvalidnode/SelfResolutionWhenLeafrefInModuleReferToInvalidNode.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/invalidsceneriowithinvalidnode/SelfResolutionWhenLeafrefInModuleReferToInvalidNode.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/intrafile/invalidsceneriowithnorefleaf/SelfResolutionWhenLeafrefDoesNotReferToLeafOrLeafList.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/invalidsceneriowithnorefleaf/SelfResolutionWhenLeafrefDoesNotReferToLeafOrLeafList.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/intrafile/invalidsceneriowithnorefleaf/SelfResolutionWhenLeafrefDoesNotReferToLeafOrLeafList.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/invalidsceneriowithnorefleaf/SelfResolutionWhenLeafrefDoesNotReferToLeafOrLeafList.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefInAugment/SelfResolutionIfLeafrefInGroupingIsCopiedToAugment.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefInAugment/SelfResolutionIfLeafrefInGroupingIsCopiedToAugment.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefInAugment/SelfResolutionIfLeafrefInGroupingIsCopiedToAugment.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefInAugment/SelfResolutionIfLeafrefInGroupingIsCopiedToAugment.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefingroupingonly/SelfResolutionWithLeafrefInGrouping.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefingroupingonly/SelfResolutionWithLeafrefInGrouping.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefingroupingonly/SelfResolutionWithLeafrefInGrouping.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefingroupingonly/SelfResolutionWithLeafrefInGrouping.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefintypedef/SelfResolutionWhenLeafrefInTypedefReferToContainer.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefintypedef/SelfResolutionWhenLeafrefInTypedefReferToContainer.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefintypedef/SelfResolutionWhenLeafrefInTypedefReferToContainer.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefintypedef/SelfResolutionWhenLeafrefInTypedefReferToContainer.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefintypedefwithsamereferpath/SelfResolutionWhenLeafrefInTypedefIsUsedInSameReferredNode.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefintypedefwithsamereferpath/SelfResolutionWhenLeafrefInTypedefIsUsedInSameReferredNode.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefintypedefwithsamereferpath/SelfResolutionWhenLeafrefInTypedefIsUsedInSameReferredNode.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefintypedefwithsamereferpath/SelfResolutionWhenLeafrefInTypedefIsUsedInSameReferredNode.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefinusesundergrouping/ietf-network.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefinusesundergrouping/ietf-network.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefinusesundergrouping/ietf-network.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefinusesundergrouping/ietf-network.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefinusesundergrouping/network.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefinusesundergrouping/network.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefinusesundergrouping/network.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefinusesundergrouping/network.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/intrafile/leafreflinking/SelfResolutionWhenLeafrefIsInDeepTreeAndLeafIsInModuleWithReferredTypeUnion.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafreflinking/SelfResolutionWhenLeafrefIsInDeepTreeAndLeafIsInModuleWithReferredTypeUnion.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/intrafile/leafreflinking/SelfResolutionWhenLeafrefIsInDeepTreeAndLeafIsInModuleWithReferredTypeUnion.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafreflinking/SelfResolutionWhenLeafrefIsInDeepTreeAndLeafIsInModuleWithReferredTypeUnion.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefreferingtoleaflist/SelfResolutionWhenLeafrefReferToContainerLeafList.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefreferingtoleaflist/SelfResolutionWhenLeafrefReferToContainerLeafList.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefreferingtoleaflist/SelfResolutionWhenLeafrefReferToContainerLeafList.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefreferingtoleaflist/SelfResolutionWhenLeafrefReferToContainerLeafList.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/intrafile/leafreftoderivedtype/SelfResolutionWhenLeafrefReferToAnotherDerivedType.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafreftoderivedtype/SelfResolutionWhenLeafrefReferToAnotherDerivedType.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/intrafile/leafreftoderivedtype/SelfResolutionWhenLeafrefReferToAnotherDerivedType.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafreftoderivedtype/SelfResolutionWhenLeafrefReferToAnotherDerivedType.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/intrafile/leafreftoinputinrpc/SelfResolutionWhenLeafrefInModuleReferToLeafListInInputOfRpc.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafreftoinputinrpc/SelfResolutionWhenLeafrefInModuleReferToLeafListInInputOfRpc.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/intrafile/leafreftoinputinrpc/SelfResolutionWhenLeafrefInModuleReferToLeafListInInputOfRpc.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafreftoinputinrpc/SelfResolutionWhenLeafrefInModuleReferToLeafListInInputOfRpc.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/intrafile/leafreftoleafref/SelfResolutionWhenLeafrefReferToAnotherLeafref.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafreftoleafref/SelfResolutionWhenLeafrefReferToAnotherLeafref.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/intrafile/leafreftoleafref/SelfResolutionWhenLeafrefReferToAnotherLeafref.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafreftoleafref/SelfResolutionWhenLeafrefReferToAnotherLeafref.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/intrafile/leafreftoleafrefwithtypedef/SelfResolutionWhenLeafrefInTypedefIsInDeepTreeAndLeafListIsInModuleWithReferredTypeEnumeration.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafreftoleafrefwithtypedef/SelfResolutionWhenLeafrefInTypedefIsInDeepTreeAndLeafListIsInModuleWithReferredTypeEnumeration.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/intrafile/leafreftoleafrefwithtypedef/SelfResolutionWhenLeafrefInTypedefIsInDeepTreeAndLeafListIsInModuleWithReferredTypeEnumeration.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafreftoleafrefwithtypedef/SelfResolutionWhenLeafrefInTypedefIsInDeepTreeAndLeafListIsInModuleWithReferredTypeEnumeration.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/intrafile/leafreftomultileafref/SelfResolutionWhenLeafrefReferToMultipleLeafref.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafreftomultileafref/SelfResolutionWhenLeafrefReferToMultipleLeafref.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/intrafile/leafreftomultileafref/SelfResolutionWhenLeafrefReferToMultipleLeafref.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafreftomultileafref/SelfResolutionWhenLeafrefReferToMultipleLeafref.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/intrafile/leafreftomultitypedef/SelfResolutionWhenLeafrefReferToMultipleTypedef.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafreftomultitypedef/SelfResolutionWhenLeafrefReferToMultipleTypedef.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/intrafile/leafreftomultitypedef/SelfResolutionWhenLeafrefReferToMultipleTypedef.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafreftomultitypedef/SelfResolutionWhenLeafrefReferToMultipleTypedef.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/intrafile/leafreftorpcinputleaflist/SelfResolutionWhenLeafrefInTypedefModuleReferToLeafListInInputOfRpc.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafreftorpcinputleaflist/SelfResolutionWhenLeafrefInTypedefModuleReferToLeafListInInputOfRpc.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/intrafile/leafreftorpcinputleaflist/SelfResolutionWhenLeafrefInTypedefModuleReferToLeafListInInputOfRpc.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafreftorpcinputleaflist/SelfResolutionWhenLeafrefInTypedefModuleReferToLeafListInInputOfRpc.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/intrafile/leafreftotypedefwithleafref/SelfResolutionWhenLeafrefReferToDerivedTypeReferringToLeafWithLeafref.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafreftotypedefwithleafref/SelfResolutionWhenLeafrefReferToDerivedTypeReferringToLeafWithLeafref.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/intrafile/leafreftotypedefwithleafref/SelfResolutionWhenLeafrefReferToDerivedTypeReferringToLeafWithLeafref.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafreftotypedefwithleafref/SelfResolutionWhenLeafrefReferToDerivedTypeReferringToLeafWithLeafref.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefundernodeingrouping/ietf-network.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefundernodeingrouping/ietf-network.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefundernodeingrouping/ietf-network.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefundernodeingrouping/ietf-network.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefwithrefleafderived/SelfResolutionWhenLeafrefIsInDeepTreeAndLeafListIsInModuleWithReferredTypeEnumeration.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefwithrefleafderived/SelfResolutionWhenLeafrefIsInDeepTreeAndLeafListIsInModuleWithReferredTypeEnumeration.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefwithrefleafderived/SelfResolutionWhenLeafrefIsInDeepTreeAndLeafListIsInModuleWithReferredTypeEnumeration.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefwithrefleafderived/SelfResolutionWhenLeafrefIsInDeepTreeAndLeafListIsInModuleWithReferredTypeEnumeration.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefwithrpc/SelfResolutionWhenLeafrefInModuleReferToLeafInInputOfRpc.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefwithrpc/SelfResolutionWhenLeafrefInModuleReferToLeafInInputOfRpc.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefwithrpc/SelfResolutionWhenLeafrefInModuleReferToLeafInInputOfRpc.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefwithrpc/SelfResolutionWhenLeafrefInModuleReferToLeafInInputOfRpc.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefwithrpcandgrouping/SelfResolutionWhenLeafrefInModuleReferToGroupingWithInputInRpc.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefwithrpcandgrouping/SelfResolutionWhenLeafrefInModuleReferToGroupingWithInputInRpc.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefwithrpcandgrouping/SelfResolutionWhenLeafrefInModuleReferToGroupingWithInputInRpc.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/leafrefwithrpcandgrouping/SelfResolutionWhenLeafrefInModuleReferToGroupingWithInputInRpc.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/intrafile/relativepath/invalidnode/SelfResolutionWhenLeafrefInModuleReferToInvalidNodeRelPath.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/relativepath/invalidnode/SelfResolutionWhenLeafrefInModuleReferToInvalidNodeRelPath.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/intrafile/relativepath/invalidnode/SelfResolutionWhenLeafrefInModuleReferToInvalidNodeRelPath.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/relativepath/invalidnode/SelfResolutionWhenLeafrefInModuleReferToInvalidNodeRelPath.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/intrafile/relativepath/invalidrelativeancestoraccess/SelfResolutionWhenLeafrefInModuleReferToInvalidRootNodeRelPath.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/relativepath/invalidrelativeancestoraccess/SelfResolutionWhenLeafrefInModuleReferToInvalidRootNodeRelPath.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/intrafile/relativepath/invalidrelativeancestoraccess/SelfResolutionWhenLeafrefInModuleReferToInvalidRootNodeRelPath.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/relativepath/invalidrelativeancestoraccess/SelfResolutionWhenLeafrefInModuleReferToInvalidRootNodeRelPath.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/intrafile/relativepath/leafrefintypedef/SelfResolutionWhenLeafrefInTypedefReferToContainerRelPath.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/relativepath/leafrefintypedef/SelfResolutionWhenLeafrefInTypedefReferToContainerRelPath.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/intrafile/relativepath/leafrefintypedef/SelfResolutionWhenLeafrefInTypedefReferToContainerRelPath.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/relativepath/leafrefintypedef/SelfResolutionWhenLeafrefInTypedefReferToContainerRelPath.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/intrafile/relativepath/leafreftoinputwithgroupinginrpc/SelfResolutionWhenLeafrefInModuleReferToGroupingWithInputInRpcRelPath.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/relativepath/leafreftoinputwithgroupinginrpc/SelfResolutionWhenLeafrefInModuleReferToGroupingWithInputInRpcRelPath.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/intrafile/relativepath/leafreftoinputwithgroupinginrpc/SelfResolutionWhenLeafrefInModuleReferToGroupingWithInputInRpcRelPath.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/relativepath/leafreftoinputwithgroupinginrpc/SelfResolutionWhenLeafrefInModuleReferToGroupingWithInputInRpcRelPath.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/intrafile/relativepath/leafreftomultileafref/SelfResolutionWhenLeafrefReferToMultipleLeafrefRelPath.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/relativepath/leafreftomultileafref/SelfResolutionWhenLeafrefReferToMultipleLeafrefRelPath.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/intrafile/relativepath/leafreftomultileafref/SelfResolutionWhenLeafrefReferToMultipleLeafrefRelPath.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/relativepath/leafreftomultileafref/SelfResolutionWhenLeafrefReferToMultipleLeafrefRelPath.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/intrafile/relativepath/leafreftotypedef/SelfResolutionWhenLeafrefReferToDerivedTypeReferringToLeafWithLeafrefRelType.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/relativepath/leafreftotypedef/SelfResolutionWhenLeafrefReferToDerivedTypeReferringToLeafWithLeafrefRelType.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/intrafile/relativepath/leafreftotypedef/SelfResolutionWhenLeafrefReferToDerivedTypeReferringToLeafWithLeafrefRelType.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/relativepath/leafreftotypedef/SelfResolutionWhenLeafrefReferToDerivedTypeReferringToLeafWithLeafrefRelType.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/intrafile/relativepath/pathlistener/PathListener.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/relativepath/pathlistener/PathListener.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/intrafile/relativepath/pathlistener/PathListener.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/relativepath/pathlistener/PathListener.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/intrafile/relativepath/simpleleafref/SelfResolutionWhenLeafrefReferToContainerLeafRelPath.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/relativepath/simpleleafref/SelfResolutionWhenLeafrefReferToContainerLeafRelPath.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/intrafile/relativepath/simpleleafref/SelfResolutionWhenLeafrefReferToContainerLeafRelPath.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/relativepath/simpleleafref/SelfResolutionWhenLeafrefReferToContainerLeafRelPath.yang
diff --git a/plugin/maven/src/test/resources/leafreflinker/intrafile/simpleleafref/SelfResolutionWhenLeafrefReferToContainerLeaf.yang b/compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/simpleleafref/SelfResolutionWhenLeafrefReferToContainerLeaf.yang
similarity index 100%
rename from plugin/maven/src/test/resources/leafreflinker/intrafile/simpleleafref/SelfResolutionWhenLeafrefReferToContainerLeaf.yang
rename to compiler/plugin/maven/src/test/resources/leafreflinker/intrafile/simpleleafref/SelfResolutionWhenLeafrefReferToContainerLeaf.yang
diff --git a/plugin/maven/src/test/resources/manager/MultiChild/module.yang b/compiler/plugin/maven/src/test/resources/manager/MultiChild/module.yang
similarity index 100%
rename from plugin/maven/src/test/resources/manager/MultiChild/module.yang
rename to compiler/plugin/maven/src/test/resources/manager/MultiChild/module.yang
diff --git a/plugin/maven/src/test/resources/manager/MultiChild/submodule.yang b/compiler/plugin/maven/src/test/resources/manager/MultiChild/submodule.yang
similarity index 100%
rename from plugin/maven/src/test/resources/manager/MultiChild/submodule.yang
rename to compiler/plugin/maven/src/test/resources/manager/MultiChild/submodule.yang
diff --git a/plugin/maven/src/test/resources/manager/MultiChild/test.yang b/compiler/plugin/maven/src/test/resources/manager/MultiChild/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/manager/MultiChild/test.yang
rename to compiler/plugin/maven/src/test/resources/manager/MultiChild/test.yang
diff --git a/plugin/maven/src/test/resources/manager/MultiChild/test2.yang b/compiler/plugin/maven/src/test/resources/manager/MultiChild/test2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/manager/MultiChild/test2.yang
rename to compiler/plugin/maven/src/test/resources/manager/MultiChild/test2.yang
diff --git a/plugin/maven/src/test/resources/manager/genwithoutrev/module.yang b/compiler/plugin/maven/src/test/resources/manager/genwithoutrev/module.yang
similarity index 100%
rename from plugin/maven/src/test/resources/manager/genwithoutrev/module.yang
rename to compiler/plugin/maven/src/test/resources/manager/genwithoutrev/module.yang
diff --git a/plugin/maven/src/test/resources/manager/nogen/module.yang b/compiler/plugin/maven/src/test/resources/manager/nogen/module.yang
similarity index 100%
rename from plugin/maven/src/test/resources/manager/nogen/module.yang
rename to compiler/plugin/maven/src/test/resources/manager/nogen/module.yang
diff --git a/plugin/maven/src/test/resources/manager/singleChild/module.yang b/compiler/plugin/maven/src/test/resources/manager/singleChild/module.yang
similarity index 100%
rename from plugin/maven/src/test/resources/manager/singleChild/module.yang
rename to compiler/plugin/maven/src/test/resources/manager/singleChild/module.yang
diff --git a/plugin/maven/src/test/resources/manager/singleChild/submodule.yang b/compiler/plugin/maven/src/test/resources/manager/singleChild/submodule.yang
similarity index 100%
rename from plugin/maven/src/test/resources/manager/singleChild/submodule.yang
rename to compiler/plugin/maven/src/test/resources/manager/singleChild/submodule.yang
diff --git a/plugin/maven/src/test/resources/manager/singleChild/test.yang b/compiler/plugin/maven/src/test/resources/manager/singleChild/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/manager/singleChild/test.yang
rename to compiler/plugin/maven/src/test/resources/manager/singleChild/test.yang
diff --git a/plugin/maven/src/test/resources/decimal64/Decimal64MultiTypedefMultiInvalidRangeStatement.yang b/compiler/plugin/maven/src/test/resources/org/onosproject/yang/compiler/parser/impl/decimal64/Decimal64MultiTypedefMultiInvalidRangeStatement.yang
similarity index 100%
copy from plugin/maven/src/test/resources/decimal64/Decimal64MultiTypedefMultiInvalidRangeStatement.yang
copy to compiler/plugin/maven/src/test/resources/org/onosproject/yang/compiler/parser/impl/decimal64/Decimal64MultiTypedefMultiInvalidRangeStatement.yang
diff --git a/plugin/maven/src/test/resources/decimal64/Decimal64MultiTypedefMultiRangeStatement.yang b/compiler/plugin/maven/src/test/resources/org/onosproject/yang/compiler/parser/impl/decimal64/Decimal64MultiTypedefMultiRangeStatement.yang
similarity index 100%
copy from plugin/maven/src/test/resources/decimal64/Decimal64MultiTypedefMultiRangeStatement.yang
copy to compiler/plugin/maven/src/test/resources/org/onosproject/yang/compiler/parser/impl/decimal64/Decimal64MultiTypedefMultiRangeStatement.yang
diff --git a/plugin/maven/src/test/resources/decimal64/Decimal64MultiTypedefRangeInLeafStatement.yang b/compiler/plugin/maven/src/test/resources/org/onosproject/yang/compiler/parser/impl/decimal64/Decimal64MultiTypedefRangeInLeafStatement.yang
similarity index 100%
copy from plugin/maven/src/test/resources/decimal64/Decimal64MultiTypedefRangeInLeafStatement.yang
copy to compiler/plugin/maven/src/test/resources/org/onosproject/yang/compiler/parser/impl/decimal64/Decimal64MultiTypedefRangeInLeafStatement.yang
diff --git a/plugin/maven/src/test/resources/decimal64/Decimal64MultiTypedefRangeStatement.yang b/compiler/plugin/maven/src/test/resources/org/onosproject/yang/compiler/parser/impl/decimal64/Decimal64MultiTypedefRangeStatement.yang
similarity index 100%
copy from plugin/maven/src/test/resources/decimal64/Decimal64MultiTypedefRangeStatement.yang
copy to compiler/plugin/maven/src/test/resources/org/onosproject/yang/compiler/parser/impl/decimal64/Decimal64MultiTypedefRangeStatement.yang
diff --git a/plugin/maven/src/test/resources/decimal64/Decimal64MultiTypedefStatement.yang b/compiler/plugin/maven/src/test/resources/org/onosproject/yang/compiler/parser/impl/decimal64/Decimal64MultiTypedefStatement.yang
similarity index 100%
copy from plugin/maven/src/test/resources/decimal64/Decimal64MultiTypedefStatement.yang
copy to compiler/plugin/maven/src/test/resources/org/onosproject/yang/compiler/parser/impl/decimal64/Decimal64MultiTypedefStatement.yang
diff --git a/plugin/maven/src/test/resources/decimal64/Decimal64MultiTypedefWithMaxRange.yang b/compiler/plugin/maven/src/test/resources/org/onosproject/yang/compiler/parser/impl/decimal64/Decimal64MultiTypedefWithMaxRange.yang
similarity index 100%
copy from plugin/maven/src/test/resources/decimal64/Decimal64MultiTypedefWithMaxRange.yang
copy to compiler/plugin/maven/src/test/resources/org/onosproject/yang/compiler/parser/impl/decimal64/Decimal64MultiTypedefWithMaxRange.yang
diff --git a/plugin/maven/src/test/resources/decimal64/Decimal64TypeInvalidMaxValueFraction.yang b/compiler/plugin/maven/src/test/resources/org/onosproject/yang/compiler/parser/impl/decimal64/Decimal64TypeInvalidMaxValueFraction.yang
similarity index 100%
copy from plugin/maven/src/test/resources/decimal64/Decimal64TypeInvalidMaxValueFraction.yang
copy to compiler/plugin/maven/src/test/resources/org/onosproject/yang/compiler/parser/impl/decimal64/Decimal64TypeInvalidMaxValueFraction.yang
diff --git a/plugin/maven/src/test/resources/decimal64/Decimal64TypeInvalidMinValueFraction1.yang b/compiler/plugin/maven/src/test/resources/org/onosproject/yang/compiler/parser/impl/decimal64/Decimal64TypeInvalidMinValueFraction1.yang
similarity index 100%
copy from plugin/maven/src/test/resources/decimal64/Decimal64TypeInvalidMinValueFraction1.yang
copy to compiler/plugin/maven/src/test/resources/org/onosproject/yang/compiler/parser/impl/decimal64/Decimal64TypeInvalidMinValueFraction1.yang
diff --git a/plugin/maven/src/test/resources/decimal64/Decimal64TypeInvalidMinValueFraction2.yang b/compiler/plugin/maven/src/test/resources/org/onosproject/yang/compiler/parser/impl/decimal64/Decimal64TypeInvalidMinValueFraction2.yang
similarity index 100%
copy from plugin/maven/src/test/resources/decimal64/Decimal64TypeInvalidMinValueFraction2.yang
copy to compiler/plugin/maven/src/test/resources/org/onosproject/yang/compiler/parser/impl/decimal64/Decimal64TypeInvalidMinValueFraction2.yang
diff --git a/plugin/maven/src/test/resources/decimal64/Decimal64TypeInvalidRangeStmnt.yang b/compiler/plugin/maven/src/test/resources/org/onosproject/yang/compiler/parser/impl/decimal64/Decimal64TypeInvalidRangeStmnt.yang
similarity index 100%
copy from plugin/maven/src/test/resources/decimal64/Decimal64TypeInvalidRangeStmnt.yang
copy to compiler/plugin/maven/src/test/resources/org/onosproject/yang/compiler/parser/impl/decimal64/Decimal64TypeInvalidRangeStmnt.yang
diff --git a/plugin/maven/src/test/resources/decimal64/Decimal64TypeStatement.yang b/compiler/plugin/maven/src/test/resources/org/onosproject/yang/compiler/parser/impl/decimal64/Decimal64TypeStatement.yang
similarity index 100%
copy from plugin/maven/src/test/resources/decimal64/Decimal64TypeStatement.yang
copy to compiler/plugin/maven/src/test/resources/org/onosproject/yang/compiler/parser/impl/decimal64/Decimal64TypeStatement.yang
diff --git a/plugin/maven/src/test/resources/decimal64/Decimal64TypeValidation.yang b/compiler/plugin/maven/src/test/resources/org/onosproject/yang/compiler/parser/impl/decimal64/Decimal64TypeValidation.yang
similarity index 100%
copy from plugin/maven/src/test/resources/decimal64/Decimal64TypeValidation.yang
copy to compiler/plugin/maven/src/test/resources/org/onosproject/yang/compiler/parser/impl/decimal64/Decimal64TypeValidation.yang
diff --git a/plugin/maven/src/test/resources/decimal64/Decimal64TypeWithMultiValueRangeStmnt.yang b/compiler/plugin/maven/src/test/resources/org/onosproject/yang/compiler/parser/impl/decimal64/Decimal64TypeWithMultiValueRangeStmnt.yang
similarity index 100%
copy from plugin/maven/src/test/resources/decimal64/Decimal64TypeWithMultiValueRangeStmnt.yang
copy to compiler/plugin/maven/src/test/resources/org/onosproject/yang/compiler/parser/impl/decimal64/Decimal64TypeWithMultiValueRangeStmnt.yang
diff --git a/plugin/maven/src/test/resources/decimal64/Decimal64TypeWithRangeStatement.yang b/compiler/plugin/maven/src/test/resources/org/onosproject/yang/compiler/parser/impl/decimal64/Decimal64TypeWithRangeStatement.yang
similarity index 100%
copy from plugin/maven/src/test/resources/decimal64/Decimal64TypeWithRangeStatement.yang
copy to compiler/plugin/maven/src/test/resources/org/onosproject/yang/compiler/parser/impl/decimal64/Decimal64TypeWithRangeStatement.yang
diff --git a/plugin/maven/src/test/resources/decimal64/Decimal64TypeWithoutFraction.yang b/compiler/plugin/maven/src/test/resources/org/onosproject/yang/compiler/parser/impl/decimal64/Decimal64TypeWithoutFraction.yang
similarity index 100%
copy from plugin/maven/src/test/resources/decimal64/Decimal64TypeWithoutFraction.yang
copy to compiler/plugin/maven/src/test/resources/org/onosproject/yang/compiler/parser/impl/decimal64/Decimal64TypeWithoutFraction.yang
diff --git a/plugin/maven/src/test/resources/decimal64/Decimal64TypedefStatement.yang b/compiler/plugin/maven/src/test/resources/org/onosproject/yang/compiler/parser/impl/decimal64/Decimal64TypedefStatement.yang
similarity index 100%
copy from plugin/maven/src/test/resources/decimal64/Decimal64TypedefStatement.yang
copy to compiler/plugin/maven/src/test/resources/org/onosproject/yang/compiler/parser/impl/decimal64/Decimal64TypedefStatement.yang
diff --git a/plugin/maven/src/test/resources/pathpredicate/interfileaugment/ietf-network.yang b/compiler/plugin/maven/src/test/resources/pathpredicate/interfileaugment/ietf-network.yang
similarity index 100%
rename from plugin/maven/src/test/resources/pathpredicate/interfileaugment/ietf-network.yang
rename to compiler/plugin/maven/src/test/resources/pathpredicate/interfileaugment/ietf-network.yang
diff --git a/plugin/maven/src/test/resources/pathpredicate/interfileaugment/ietf-topology.yang b/compiler/plugin/maven/src/test/resources/pathpredicate/interfileaugment/ietf-topology.yang
similarity index 100%
rename from plugin/maven/src/test/resources/pathpredicate/interfileaugment/ietf-topology.yang
rename to compiler/plugin/maven/src/test/resources/pathpredicate/interfileaugment/ietf-topology.yang
diff --git a/plugin/maven/src/test/resources/pathpredicate/invalidlinking/ietf-network.yang b/compiler/plugin/maven/src/test/resources/pathpredicate/invalidlinking/ietf-network.yang
similarity index 100%
rename from plugin/maven/src/test/resources/pathpredicate/invalidlinking/ietf-network.yang
rename to compiler/plugin/maven/src/test/resources/pathpredicate/invalidlinking/ietf-network.yang
diff --git a/plugin/maven/src/test/resources/pathpredicate/invalidlinking2/ietf-network.yang b/compiler/plugin/maven/src/test/resources/pathpredicate/invalidlinking2/ietf-network.yang
similarity index 100%
rename from plugin/maven/src/test/resources/pathpredicate/invalidlinking2/ietf-network.yang
rename to compiler/plugin/maven/src/test/resources/pathpredicate/invalidlinking2/ietf-network.yang
diff --git a/plugin/maven/src/test/resources/pathpredicate/invalidlinking3/ietf-network.yang b/compiler/plugin/maven/src/test/resources/pathpredicate/invalidlinking3/ietf-network.yang
similarity index 100%
rename from plugin/maven/src/test/resources/pathpredicate/invalidlinking3/ietf-network.yang
rename to compiler/plugin/maven/src/test/resources/pathpredicate/invalidlinking3/ietf-network.yang
diff --git a/plugin/maven/src/test/resources/pathpredicate/simple/ietf-network.yang b/compiler/plugin/maven/src/test/resources/pathpredicate/simple/ietf-network.yang
similarity index 100%
rename from plugin/maven/src/test/resources/pathpredicate/simple/ietf-network.yang
rename to compiler/plugin/maven/src/test/resources/pathpredicate/simple/ietf-network.yang
diff --git a/plugin/maven/src/test/resources/pathpredicate/simpleinterfile/ietf-network.yang b/compiler/plugin/maven/src/test/resources/pathpredicate/simpleinterfile/ietf-network.yang
similarity index 100%
rename from plugin/maven/src/test/resources/pathpredicate/simpleinterfile/ietf-network.yang
rename to compiler/plugin/maven/src/test/resources/pathpredicate/simpleinterfile/ietf-network.yang
diff --git a/plugin/maven/src/test/resources/pathpredicate/simpleinterfile/ietf-topology.yang b/compiler/plugin/maven/src/test/resources/pathpredicate/simpleinterfile/ietf-topology.yang
similarity index 100%
rename from plugin/maven/src/test/resources/pathpredicate/simpleinterfile/ietf-topology.yang
rename to compiler/plugin/maven/src/test/resources/pathpredicate/simpleinterfile/ietf-topology.yang
diff --git a/plugin/maven/src/test/resources/pstcodegen/test.yang b/compiler/plugin/maven/src/test/resources/pstcodegen/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/pstcodegen/test.yang
rename to compiler/plugin/maven/src/test/resources/pstcodegen/test.yang
diff --git a/plugin/maven/src/test/resources/refincludecontentwithprefix/ietf-snmp-common.yang b/compiler/plugin/maven/src/test/resources/refincludecontentwithprefix/ietf-snmp-common.yang
similarity index 100%
rename from plugin/maven/src/test/resources/refincludecontentwithprefix/ietf-snmp-common.yang
rename to compiler/plugin/maven/src/test/resources/refincludecontentwithprefix/ietf-snmp-common.yang
diff --git a/plugin/maven/src/test/resources/refincludecontentwithprefix/ietf-snmp-vacm.yang b/compiler/plugin/maven/src/test/resources/refincludecontentwithprefix/ietf-snmp-vacm.yang
similarity index 100%
rename from plugin/maven/src/test/resources/refincludecontentwithprefix/ietf-snmp-vacm.yang
rename to compiler/plugin/maven/src/test/resources/refincludecontentwithprefix/ietf-snmp-vacm.yang
diff --git a/plugin/maven/src/test/resources/refincludecontentwithprefix/ietf-snmp.yang b/compiler/plugin/maven/src/test/resources/refincludecontentwithprefix/ietf-snmp.yang
similarity index 100%
rename from plugin/maven/src/test/resources/refincludecontentwithprefix/ietf-snmp.yang
rename to compiler/plugin/maven/src/test/resources/refincludecontentwithprefix/ietf-snmp.yang
diff --git a/plugin/maven/src/test/resources/rootNode/mixed/module.yang b/compiler/plugin/maven/src/test/resources/rootNode/mixed/module.yang
similarity index 100%
rename from plugin/maven/src/test/resources/rootNode/mixed/module.yang
rename to compiler/plugin/maven/src/test/resources/rootNode/mixed/module.yang
diff --git a/plugin/maven/src/test/resources/rootNode/mixed/submodule.yang b/compiler/plugin/maven/src/test/resources/rootNode/mixed/submodule.yang
similarity index 100%
rename from plugin/maven/src/test/resources/rootNode/mixed/submodule.yang
rename to compiler/plugin/maven/src/test/resources/rootNode/mixed/submodule.yang
diff --git a/plugin/maven/src/test/resources/rootNode/nogen/module.yang b/compiler/plugin/maven/src/test/resources/rootNode/nogen/module.yang
similarity index 100%
rename from plugin/maven/src/test/resources/rootNode/nogen/module.yang
rename to compiler/plugin/maven/src/test/resources/rootNode/nogen/module.yang
diff --git a/plugin/maven/src/test/resources/rootNode/onlyaugment/module.yang b/compiler/plugin/maven/src/test/resources/rootNode/onlyaugment/module.yang
similarity index 100%
rename from plugin/maven/src/test/resources/rootNode/onlyaugment/module.yang
rename to compiler/plugin/maven/src/test/resources/rootNode/onlyaugment/module.yang
diff --git a/plugin/maven/src/test/resources/rootNode/onlyaugment/submodule.yang b/compiler/plugin/maven/src/test/resources/rootNode/onlyaugment/submodule.yang
similarity index 100%
rename from plugin/maven/src/test/resources/rootNode/onlyaugment/submodule.yang
rename to compiler/plugin/maven/src/test/resources/rootNode/onlyaugment/submodule.yang
diff --git a/plugin/maven/src/test/resources/rootNode/onlygrouping/module.yang b/compiler/plugin/maven/src/test/resources/rootNode/onlygrouping/module.yang
similarity index 100%
rename from plugin/maven/src/test/resources/rootNode/onlygrouping/module.yang
rename to compiler/plugin/maven/src/test/resources/rootNode/onlygrouping/module.yang
diff --git a/plugin/maven/src/test/resources/rootNode/onlygrouping/submodule.yang b/compiler/plugin/maven/src/test/resources/rootNode/onlygrouping/submodule.yang
similarity index 100%
rename from plugin/maven/src/test/resources/rootNode/onlygrouping/submodule.yang
rename to compiler/plugin/maven/src/test/resources/rootNode/onlygrouping/submodule.yang
diff --git a/plugin/maven/src/test/resources/rootNode/onlyleaf/module.yang b/compiler/plugin/maven/src/test/resources/rootNode/onlyleaf/module.yang
similarity index 100%
rename from plugin/maven/src/test/resources/rootNode/onlyleaf/module.yang
rename to compiler/plugin/maven/src/test/resources/rootNode/onlyleaf/module.yang
diff --git a/plugin/maven/src/test/resources/rootNode/onlyleaflist/module.yang b/compiler/plugin/maven/src/test/resources/rootNode/onlyleaflist/module.yang
similarity index 100%
rename from plugin/maven/src/test/resources/rootNode/onlyleaflist/module.yang
rename to compiler/plugin/maven/src/test/resources/rootNode/onlyleaflist/module.yang
diff --git a/plugin/maven/src/test/resources/rootNode/onlytypedef/module.yang b/compiler/plugin/maven/src/test/resources/rootNode/onlytypedef/module.yang
similarity index 100%
rename from plugin/maven/src/test/resources/rootNode/onlytypedef/module.yang
rename to compiler/plugin/maven/src/test/resources/rootNode/onlytypedef/module.yang
diff --git a/plugin/maven/src/test/resources/rootNode/typedefgrouping/module.yang b/compiler/plugin/maven/src/test/resources/rootNode/typedefgrouping/module.yang
similarity index 100%
rename from plugin/maven/src/test/resources/rootNode/typedefgrouping/module.yang
rename to compiler/plugin/maven/src/test/resources/rootNode/typedefgrouping/module.yang
diff --git a/plugin/maven/src/test/resources/rpcAugment/inter/1.yang b/compiler/plugin/maven/src/test/resources/rpcAugment/inter/1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/rpcAugment/inter/1.yang
rename to compiler/plugin/maven/src/test/resources/rpcAugment/inter/1.yang
diff --git a/plugin/maven/src/test/resources/rpcAugment/inter/2.yang b/compiler/plugin/maven/src/test/resources/rpcAugment/inter/2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/rpcAugment/inter/2.yang
rename to compiler/plugin/maven/src/test/resources/rpcAugment/inter/2.yang
diff --git a/plugin/maven/src/test/resources/rpcAugment/intra/all.yang b/compiler/plugin/maven/src/test/resources/rpcAugment/intra/all.yang
similarity index 100%
rename from plugin/maven/src/test/resources/rpcAugment/intra/all.yang
rename to compiler/plugin/maven/src/test/resources/rpcAugment/intra/all.yang
diff --git a/plugin/maven/src/test/resources/schemaMap/SchemaMap.yang b/compiler/plugin/maven/src/test/resources/schemaMap/SchemaMap.yang
similarity index 100%
rename from plugin/maven/src/test/resources/schemaMap/SchemaMap.yang
rename to compiler/plugin/maven/src/test/resources/schemaMap/SchemaMap.yang
diff --git a/plugin/maven/src/test/resources/typedefTranslator/union/typedefs.yang b/compiler/plugin/maven/src/test/resources/typedefTranslator/union/typedefs.yang
similarity index 100%
rename from plugin/maven/src/test/resources/typedefTranslator/union/typedefs.yang
rename to compiler/plugin/maven/src/test/resources/typedefTranslator/union/typedefs.yang
diff --git a/plugin/maven/src/test/resources/typedefTranslator/with/Onos_Yang_1.yang b/compiler/plugin/maven/src/test/resources/typedefTranslator/with/Onos_Yang_1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/typedefTranslator/with/Onos_Yang_1.yang
rename to compiler/plugin/maven/src/test/resources/typedefTranslator/with/Onos_Yang_1.yang
diff --git a/plugin/maven/src/test/resources/typedefTranslator/with/remote.yang b/compiler/plugin/maven/src/test/resources/typedefTranslator/with/remote.yang
similarity index 100%
rename from plugin/maven/src/test/resources/typedefTranslator/with/remote.yang
rename to compiler/plugin/maven/src/test/resources/typedefTranslator/with/remote.yang
diff --git a/plugin/maven/src/test/resources/typedefTranslator/with/second-remote.yang b/compiler/plugin/maven/src/test/resources/typedefTranslator/with/second-remote.yang
similarity index 100%
rename from plugin/maven/src/test/resources/typedefTranslator/with/second-remote.yang
rename to compiler/plugin/maven/src/test/resources/typedefTranslator/with/second-remote.yang
diff --git a/plugin/maven/src/test/resources/typedefTranslator/without/Onos_Yang_1.yang b/compiler/plugin/maven/src/test/resources/typedefTranslator/without/Onos_Yang_1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/typedefTranslator/without/Onos_Yang_1.yang
rename to compiler/plugin/maven/src/test/resources/typedefTranslator/without/Onos_Yang_1.yang
diff --git a/plugin/maven/src/test/resources/typelinkingaftercloning/identityref/IntraFileIdentityRefAfterCloning.yang b/compiler/plugin/maven/src/test/resources/typelinkingaftercloning/identityref/IntraFileIdentityRefAfterCloning.yang
similarity index 100%
rename from plugin/maven/src/test/resources/typelinkingaftercloning/identityref/IntraFileIdentityRefAfterCloning.yang
rename to compiler/plugin/maven/src/test/resources/typelinkingaftercloning/identityref/IntraFileIdentityRefAfterCloning.yang
diff --git a/plugin/maven/src/test/resources/typelinkingaftercloning/idrefingrouping/idrefingrouping1.yang b/compiler/plugin/maven/src/test/resources/typelinkingaftercloning/idrefingrouping/idrefingrouping1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/typelinkingaftercloning/idrefingrouping/idrefingrouping1.yang
rename to compiler/plugin/maven/src/test/resources/typelinkingaftercloning/idrefingrouping/idrefingrouping1.yang
diff --git a/plugin/maven/src/test/resources/typelinkingaftercloning/idrefingrouping/idrefingrouping2.yang b/compiler/plugin/maven/src/test/resources/typelinkingaftercloning/idrefingrouping/idrefingrouping2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/typelinkingaftercloning/idrefingrouping/idrefingrouping2.yang
rename to compiler/plugin/maven/src/test/resources/typelinkingaftercloning/idrefingrouping/idrefingrouping2.yang
diff --git a/plugin/maven/src/test/resources/typelinkingaftercloning/idreftypedef/IdRefInTypeDef1.yang b/compiler/plugin/maven/src/test/resources/typelinkingaftercloning/idreftypedef/IdRefInTypeDef1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/typelinkingaftercloning/idreftypedef/IdRefInTypeDef1.yang
rename to compiler/plugin/maven/src/test/resources/typelinkingaftercloning/idreftypedef/IdRefInTypeDef1.yang
diff --git a/plugin/maven/src/test/resources/typelinkingaftercloning/idreftypedef/IdRefInTypeDef2.yang b/compiler/plugin/maven/src/test/resources/typelinkingaftercloning/idreftypedef/IdRefInTypeDef2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/typelinkingaftercloning/idreftypedef/IdRefInTypeDef2.yang
rename to compiler/plugin/maven/src/test/resources/typelinkingaftercloning/idreftypedef/IdRefInTypeDef2.yang
diff --git a/plugin/maven/src/test/resources/typelinkingaftercloning/leafref/intrafile/IntraFileLeafrefAfterCloning.yang b/compiler/plugin/maven/src/test/resources/typelinkingaftercloning/leafref/intrafile/IntraFileLeafrefAfterCloning.yang
similarity index 100%
rename from plugin/maven/src/test/resources/typelinkingaftercloning/leafref/intrafile/IntraFileLeafrefAfterCloning.yang
rename to compiler/plugin/maven/src/test/resources/typelinkingaftercloning/leafref/intrafile/IntraFileLeafrefAfterCloning.yang
diff --git a/plugin/maven/src/test/resources/typelinkingaftercloning/leafref/invalid/invalidleafref.yang b/compiler/plugin/maven/src/test/resources/typelinkingaftercloning/leafref/invalid/invalidleafref.yang
similarity index 100%
rename from plugin/maven/src/test/resources/typelinkingaftercloning/leafref/invalid/invalidleafref.yang
rename to compiler/plugin/maven/src/test/resources/typelinkingaftercloning/leafref/invalid/invalidleafref.yang
diff --git a/plugin/maven/src/test/resources/typelinkingaftercloning/union/IntraFileUnionAfterCloning.yang b/compiler/plugin/maven/src/test/resources/typelinkingaftercloning/union/IntraFileUnionAfterCloning.yang
similarity index 100%
rename from plugin/maven/src/test/resources/typelinkingaftercloning/union/IntraFileUnionAfterCloning.yang
rename to compiler/plugin/maven/src/test/resources/typelinkingaftercloning/union/IntraFileUnionAfterCloning.yang
diff --git a/plugin/maven/src/test/resources/unionTranslator/intuint/test.yang b/compiler/plugin/maven/src/test/resources/unionTranslator/intuint/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/unionTranslator/intuint/test.yang
rename to compiler/plugin/maven/src/test/resources/unionTranslator/intuint/test.yang
diff --git a/plugin/maven/src/test/resources/unionTranslator/intuintstring/test.yang b/compiler/plugin/maven/src/test/resources/unionTranslator/intuintstring/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/unionTranslator/intuintstring/test.yang
rename to compiler/plugin/maven/src/test/resources/unionTranslator/intuintstring/test.yang
diff --git a/plugin/maven/src/test/resources/unionTranslator/intuintstring/test2.yang b/compiler/plugin/maven/src/test/resources/unionTranslator/intuintstring/test2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/unionTranslator/intuintstring/test2.yang
rename to compiler/plugin/maven/src/test/resources/unionTranslator/intuintstring/test2.yang
diff --git a/plugin/maven/src/test/resources/unionTranslator/intuintulonglong/test.yang b/compiler/plugin/maven/src/test/resources/unionTranslator/intuintulonglong/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/unionTranslator/intuintulonglong/test.yang
rename to compiler/plugin/maven/src/test/resources/unionTranslator/intuintulonglong/test.yang
diff --git a/plugin/maven/src/test/resources/unionTranslator/intuintulonglongstring/test.yang b/compiler/plugin/maven/src/test/resources/unionTranslator/intuintulonglongstring/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/unionTranslator/intuintulonglongstring/test.yang
rename to compiler/plugin/maven/src/test/resources/unionTranslator/intuintulonglongstring/test.yang
diff --git a/plugin/maven/src/test/resources/unionTranslator/longulong/test.yang b/compiler/plugin/maven/src/test/resources/unionTranslator/longulong/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/unionTranslator/longulong/test.yang
rename to compiler/plugin/maven/src/test/resources/unionTranslator/longulong/test.yang
diff --git a/plugin/maven/src/test/resources/unionTranslator/uintint/test.yang b/compiler/plugin/maven/src/test/resources/unionTranslator/uintint/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/unionTranslator/uintint/test.yang
rename to compiler/plugin/maven/src/test/resources/unionTranslator/uintint/test.yang
diff --git a/plugin/maven/src/test/resources/unionTranslator/ulonglong/test.yang b/compiler/plugin/maven/src/test/resources/unionTranslator/ulonglong/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/unionTranslator/ulonglong/test.yang
rename to compiler/plugin/maven/src/test/resources/unionTranslator/ulonglong/test.yang
diff --git a/plugin/maven/src/test/resources/unionTranslator/unionwithbinary/test.yang b/compiler/plugin/maven/src/test/resources/unionTranslator/unionwithbinary/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/unionTranslator/unionwithbinary/test.yang
rename to compiler/plugin/maven/src/test/resources/unionTranslator/unionwithbinary/test.yang
diff --git a/plugin/maven/src/test/resources/usesInContainer/GroupingError.yang b/compiler/plugin/maven/src/test/resources/usesInContainer/GroupingError.yang
similarity index 100%
rename from plugin/maven/src/test/resources/usesInContainer/GroupingError.yang
rename to compiler/plugin/maven/src/test/resources/usesInContainer/GroupingError.yang
diff --git a/plugin/maven/src/test/resources/usesInsideChildOfGrouping/ietf-network.yang b/compiler/plugin/maven/src/test/resources/usesInsideChildOfGrouping/ietf-network.yang
similarity index 100%
rename from plugin/maven/src/test/resources/usesInsideChildOfGrouping/ietf-network.yang
rename to compiler/plugin/maven/src/test/resources/usesInsideChildOfGrouping/ietf-network.yang
diff --git a/plugin/maven/src/test/resources/usesInsideChildOfGrouping/ietf-te-topology.yang b/compiler/plugin/maven/src/test/resources/usesInsideChildOfGrouping/ietf-te-topology.yang
similarity index 100%
rename from plugin/maven/src/test/resources/usesInsideChildOfGrouping/ietf-te-topology.yang
rename to compiler/plugin/maven/src/test/resources/usesInsideChildOfGrouping/ietf-te-topology.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/Case/submodule/test.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/Case/submodule/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/Case/submodule/test.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/Case/submodule/test.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/Case/submodule/test1.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/Case/submodule/test1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/Case/submodule/test1.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/Case/submodule/test1.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/Case/submodule/test2.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/Case/submodule/test2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/Case/submodule/test2.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/Case/submodule/test2.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/Case/submodule/test4.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/Case/submodule/test4.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/Case/submodule/test4.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/Case/submodule/test4.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/Case/uses/test.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/Case/uses/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/Case/uses/test.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/Case/uses/test.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/Case/uses/test1.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/Case/uses/test1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/Case/uses/test1.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/Case/uses/test1.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/Case/uses/test2.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/Case/uses/test2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/Case/uses/test2.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/Case/uses/test2.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/Case/uses/test4.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/Case/uses/test4.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/Case/uses/test4.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/Case/uses/test4.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMulti/test.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMulti/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/InterFile/InterMulti/test.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMulti/test.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMulti/test1.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMulti/test1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/InterFile/InterMulti/test1.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMulti/test1.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiAugment/test.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiAugment/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiAugment/test.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiAugment/test.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiAugment/test1.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiAugment/test1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiAugment/test1.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiAugment/test1.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiFileAugment/test.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiFileAugment/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiFileAugment/test.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiFileAugment/test.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiFileAugment/test1.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiFileAugment/test1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiFileAugment/test1.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiFileAugment/test1.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiFileAugment/test2.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiFileAugment/test2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiFileAugment/test2.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiFileAugment/test2.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiFileAugmentMulti/test.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiFileAugmentMulti/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiFileAugmentMulti/test.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiFileAugmentMulti/test.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiFileAugmentMulti/test1.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiFileAugmentMulti/test1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiFileAugmentMulti/test1.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiFileAugmentMulti/test1.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiFileAugmentMulti/test2.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiFileAugmentMulti/test2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiFileAugmentMulti/test2.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiFileAugmentMulti/test2.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiSubModule/test.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiSubModule/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiSubModule/test.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiSubModule/test.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiSubModule/test1.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiSubModule/test1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiSubModule/test1.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiSubModule/test1.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiSubModule/test2.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiSubModule/test2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiSubModule/test2.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiSubModule/test2.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiUses/test.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiUses/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiUses/test.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiUses/test.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiUses/test2.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiUses/test2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiUses/test2.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterMultiUses/test2.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingle/test.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingle/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingle/test.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingle/test.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingle/test1.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingle/test1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingle/test1.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingle/test1.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingleAugment/test.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingleAugment/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingleAugment/test.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingleAugment/test.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingleAugment/test1.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingleAugment/test1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingleAugment/test1.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingleAugment/test1.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingleSubModule/test.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingleSubModule/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingleSubModule/test.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingleSubModule/test.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingleSubModule/test1.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingleSubModule/test1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingleSubModule/test1.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingleSubModule/test1.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingleSubModule/test2.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingleSubModule/test2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingleSubModule/test2.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingleSubModule/test2.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingleUses/test.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingleUses/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingleUses/test.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingleUses/test.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingleUses/test1.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingleUses/test1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingleUses/test1.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingleUses/test1.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingleUses/test2.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingleUses/test2.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingleUses/test2.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/InterFile/InterSingleUses/test2.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraMulti/test.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraMulti/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraMulti/test.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraMulti/test.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraMultiAugment/withoutprefix/test.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraMultiAugment/withoutprefix/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraMultiAugment/withoutprefix/test.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraMultiAugment/withoutprefix/test.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraMultiAugment/withpartialprefix/augmentpartialprefix.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraMultiAugment/withpartialprefix/augmentpartialprefix.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraMultiAugment/withpartialprefix/augmentpartialprefix.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraMultiAugment/withpartialprefix/augmentpartialprefix.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraMultiAugment/withprefix/augment.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraMultiAugment/withprefix/augment.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraMultiAugment/withprefix/augment.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraMultiAugment/withprefix/augment.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraMultiSubModule/test.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraMultiSubModule/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraMultiSubModule/test.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraMultiSubModule/test.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraMultiSubModule/test1.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraMultiSubModule/test1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraMultiSubModule/test1.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraMultiSubModule/test1.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraMultiUses/test.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraMultiUses/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraMultiUses/test.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraMultiUses/test.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraSingle/test.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraSingle/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraSingle/test.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraSingle/test.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraSingleAugment/test.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraSingleAugment/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraSingleAugment/test.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraSingleAugment/test.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraSingleSubModule/test.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraSingleSubModule/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraSingleSubModule/test.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraSingleSubModule/test.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraSingleSubModule/test1.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraSingleSubModule/test1.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraSingleSubModule/test1.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraSingleSubModule/test1.yang
diff --git a/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraSingleUses/test.yang b/compiler/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraSingleUses/test.yang
similarity index 100%
rename from plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraSingleUses/test.yang
rename to compiler/plugin/maven/src/test/resources/xPathLinker/IntraFile/IntraSingleUses/test.yang
diff --git a/compiler/plugin/pom.xml b/compiler/plugin/pom.xml
new file mode 100644
index 0000000..fd23dfc
--- /dev/null
+++ b/compiler/plugin/pom.xml
@@ -0,0 +1,73 @@
+<!--
+ ~ Copyright 2016-present Open Networking Laboratory
+ ~
+ ~ Licensed 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
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License 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.
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-compiler</artifactId>
+ <version>1.12-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>onos-yang-compiler-plugin</artifactId>
+ <packaging>pom</packaging>
+
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ </properties>
+
+ <modules>
+ <module>maven</module>
+ <module>buck</module>
+ </modules>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-compiler-datamodel</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-compiler-parser</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-compiler-translator</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-compiler-utils</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-compiler-linker</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-compiler-datamodel</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+</project>
+
+
diff --git a/compiler/pom.xml b/compiler/pom.xml
new file mode 100644
index 0000000..ce76fea
--- /dev/null
+++ b/compiler/pom.xml
@@ -0,0 +1,74 @@
+<!--
+ ~ Copyright 2016-present Open Networking Laboratory
+ ~
+ ~ Licensed 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
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License 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.
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-tools</artifactId>
+ <version>1.12-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>onos-yang-compiler</artifactId>
+ <packaging>pom</packaging>
+
+ <modules>
+ <module>api</module>
+ <module>base</module>
+ <module>plugin</module>
+ </modules>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-yang-model</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>2.4</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>1.7.21</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>3.0.2</version>
+ <configuration>
+ <skipIfEmpty>true</skipIfEmpty>
+ </configuration>
+ <executions>
+ <execution>
+ <id>default</id>
+ <goals>
+ <goal>test-jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/datamodel/pom.xml b/datamodel/pom.xml
deleted file mode 100644
index e7bbca9..0000000
--- a/datamodel/pom.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
- ~ Copyright 2016-present Open Networking Laboratory
- ~
- ~ Licensed 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
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License 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.
- -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-yang-utils</artifactId>
- <version>1.12-SNAPSHOT</version>
- </parent>
-
- <artifactId>onos-yang-datamodel</artifactId>
- <packaging>jar</packaging>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <version>3.0.2</version>
- <configuration>
- <skipIfEmpty>true</skipIfEmpty>
- </configuration>
- <executions>
- <execution>
- <id>default</id>
- <goals>
- <goal>test-jar</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
-</project>
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/BuiltInTypeObjectFactory.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/BuiltInTypeObjectFactory.java
deleted file mode 100644
index b77b6ae..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/BuiltInTypeObjectFactory.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*-
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel;
-
-import java.io.Serializable;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.DataTypeException;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangBuiltInDataTypeInfo;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangInt16;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangInt32;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangInt64;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangInt8;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangUint16;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangUint32;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangUint64;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangUint8;
-
-/**
- * Factory to create an object of required type.
- */
-public final class BuiltInTypeObjectFactory implements Serializable {
-
- private static final long serialVersionUID = 8006201671L;
-
- /**
- * Utility factory class, hence the object creation is forbidden.
- */
- private BuiltInTypeObjectFactory() {
- }
-
- /**
- * Given the value represented in string return the corresponding types
- * object with the value initialized.
- *
- * @param valueInStr value represented in string
- * @param builtInType built in data type
- * @param <T> the data type of the target object
- * @return the target data type object with the value initialized
- */
- public static <T extends YangBuiltInDataTypeInfo<?>> T getDataObjectFromString(String valueInStr,
- YangDataTypes builtInType) {
-
- switch (builtInType) {
- case INT8: {
- return (T) new YangInt8(valueInStr);
- }
- case INT16: {
- return (T) new YangInt16(valueInStr);
- }
- case INT32: {
- return (T) new YangInt32(valueInStr);
- }
- case INT64: {
- return (T) new YangInt64(valueInStr);
- }
- case UINT8: {
- return (T) new YangUint8(valueInStr);
- }
- case UINT16: {
- return (T) new YangUint16(valueInStr);
- }
- case UINT32: {
- return (T) new YangUint32(valueInStr);
- }
- case UINT64: {
- return (T) new YangUint64(valueInStr);
- }
- case DECIMAL64: {
- return (T) new YangDecimal64(valueInStr);
- }
- default: {
- throw new DataTypeException("YANG file error : Unsupported data type");
- }
- }
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/CollisionDetector.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/CollisionDetector.java
deleted file mode 100644
index ad6a904..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/CollisionDetector.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-
-/**
- * Abstraction of YANG collision function. Abstracted to unify the collision
- * detection functionality.
- */
-public interface CollisionDetector {
- /**
- * Checks for the colliding child.
- *
- * @param identifierName name of identifier for which collision to be
- * checked
- * @param dataType type of the YANG construct for which collision to be
- * checked
- * @throws DataModelException if there is any collision in YANG rules in
- * parsed data, corresponding exception should be thrown
- */
- void detectCollidingChild(String identifierName, YangConstructType dataType)
- throws DataModelException;
-
- /**
- * Check for the self collision.
- *
- * @param identifierName name of identifier for which collision to be
- * checked
- * @param dataType type of the YANG construct for which collision to be
- * checked
- * @throws DataModelException if there is any collision in YANG rules in
- * parsed data, corresponding exception should be thrown
- */
- void detectSelfCollision(String identifierName, YangConstructType dataType)
- throws DataModelException;
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/DefaultLocationInfo.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/DefaultLocationInfo.java
deleted file mode 100644
index 1f6c28f..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/DefaultLocationInfo.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-/**
- * Represents the implementation of location info.
- */
-public class DefaultLocationInfo implements LocationInfo {
-
- private transient int lineNumber;
- private transient int charPosition;
- private String fileName;
-
- @Override
- public int getLineNumber() {
- return lineNumber;
- }
-
- @Override
- public int getCharPosition() {
- return charPosition;
- }
-
- @Override
- public void setLineNumber(int lineNumber) {
- this.lineNumber = lineNumber;
- }
-
- @Override
- public void setCharPosition(int charPositionInLine) {
- charPosition = charPositionInLine;
- }
-
- @Override
- public String getFileName() {
- return fileName;
- }
-
- @Override
- public void setFileName(String name) {
- fileName = name;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/InvalidOpTypeHolder.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/InvalidOpTypeHolder.java
deleted file mode 100644
index bdf714e..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/InvalidOpTypeHolder.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel;
-
-/**
- * Represents non data nodes which will not have operation api's ex: operation
- * type, value leaf flag, select leaf flag and process sub tree filter in
- * their generated code.
- */
-public interface InvalidOpTypeHolder {
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/LeafRefInvalidHolder.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/LeafRefInvalidHolder.java
deleted file mode 100644
index 8b49d77..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/LeafRefInvalidHolder.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel;
-
-/**
- * Represents YANG nodes which linking of leaf ref should be avoided.
- */
-public interface LeafRefInvalidHolder {
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/LocationInfo.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/LocationInfo.java
deleted file mode 100644
index d5dbbde..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/LocationInfo.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-/**
- * Abstraction of location information, this is used during resolution is
- * carried out and line/character position in line is required to point
- * out the error location in YANG file.
- */
-public interface LocationInfo {
-
- /**
- * Returns the line number YANG construct in file.
- *
- * @return the line number YANG construct in file
- */
- int getLineNumber();
-
- /**
- * Returns the character position in line.
- *
- * @return the character position in line
- */
- int getCharPosition();
-
- /**
- * Sets line number of YANG construct.
- *
- * @param lineNumber the line number of YANG construct in file
- */
- void setLineNumber(int lineNumber);
-
- /**
- * Sets character position of YANG construct.
- *
- * @param charPositionInLine character position of YANG construct in file
- */
- void setCharPosition(int charPositionInLine);
-
- /**
- * Returns YANG file name.
- *
- * @return YANG file name
- */
- String getFileName();
-
- /**
- * Sets YANG file name
- *
- * @param name YANG file name
- */
- void setFileName(String name);
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/Resolvable.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/Resolvable.java
deleted file mode 100644
index c4091a9..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/Resolvable.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.ResolvableStatus;
-
-/**
- * Abstraction of YANG resolvable information. Abstracted to obtain the
- * information required for linking resolution.
- *
- * @param <T> YANG resolvable info
- */
-public interface Resolvable<T> {
-
- /**
- * Returns the status of resolution. If completely resolved returns enum
- * value "RESOLVED", if not returns "UNRESOLVED", in case reference of
- * grouping/typedef is added to uses/type but it's not resolved
- * "INTRA_FILE_RESOLVED" is returned.
- *
- * @return status of resolution
- */
- ResolvableStatus getResolvableStatus();
-
- /**
- * Set the status of type/uses resolution. If completely resolved set enum
- * value "RESOLVED", if not set it to "UNRESOLVED", in case reference of
- * grouping/typedef is added to uses/type but it's not resolved
- * "INTRA_FILE_RESOLVED" should be set.
- *
- * @param resolvableStatus status of resolution
- */
- void setResolvableStatus(ResolvableStatus resolvableStatus);
-
- /**
- * Resolves the linking.
- *
- * @return list of entities to be added for resolution
- * @throws DataModelException data model exception
- */
- T resolve()
- throws DataModelException;
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/ResolvableType.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/ResolvableType.java
deleted file mode 100644
index c97faa4..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/ResolvableType.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-/**
- * Type of the resolvable info.
- */
-public enum ResolvableType {
-
- /**
- * Identifies the derived data type.
- */
- YANG_DERIVED_DATA_TYPE,
-
- /**
- * Identifies the uses.
- */
- YANG_USES,
-
- /**
- * Identifies the if-feature.
- */
- YANG_IF_FEATURE,
-
- /**
- * Identifies the leafref.
- */
- YANG_LEAFREF,
-
- /**
- * Identifies the base.
- */
- YANG_BASE,
-
- /**
- * Identifies the identityref.
- */
- YANG_IDENTITYREF,
-
- /**
- * Identifies the augment.
- */
- YANG_AUGMENT,
-
- /**
- * Identifies the compiler annotations.
- */
- YANG_COMPILER_ANNOTATION
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/RpcNotificationContainer.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/RpcNotificationContainer.java
deleted file mode 100644
index e202abc..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/RpcNotificationContainer.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import java.util.List;
-
-/**
- * Represents class having rpc and notification.
- */
-public interface RpcNotificationContainer {
-
- /**
- * Sets notification presence flag.
- *
- * @param notificationPresent notification presence flag
- */
- void setNotificationPresenceFlag(boolean notificationPresent);
-
- /**
- * Adds to notification enumeration map.
- *
- * @param enumName name of notification in enum
- * @param schemaNode schema node of notification
- */
- void addToNotificationEnumMap(String enumName, YangSchemaNode schemaNode);
-
- /**
- * Adds augment which is augmenting input node to augment list.
- *
- * @param augment augment which is augmenting input
- */
- void addToAugmentList(YangAugment augment);
-
- /**
- * Returns augment list.
- *
- * @return augment list
- */
- List<YangAugment> getAugmentList();
-
- /**
- * Returns prefix.
- *
- * @return prefix
- */
- String getPrefix();
-
- /**
- * Returns list of notification nodes.
- *
- * @return list of notification nodes
- */
- List<YangNode> getNotificationNodes();
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/TraversalType.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/TraversalType.java
deleted file mode 100644
index e1a25c6..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/TraversalType.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-/**
- * Represents data model tree traversal types.
- */
-public enum TraversalType {
-
- /**
- * Start of traversal at the tree root.
- */
- ROOT,
-
- /**
- * Child node traversal.
- */
- CHILD,
-
- /**
- * Sibling node traversal.
- */
- SIBILING,
-
- /**
- * Parent node traversal.
- */
- PARENT
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAppDataStructure.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAppDataStructure.java
deleted file mode 100644
index ce57463..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAppDataStructure.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-
-import java.io.Serializable;
-import java.util.LinkedList;
-import java.util.List;
-
-import static java.util.Collections.unmodifiableList;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.APP_DATA_STRUCTURE;
-
-/**
- * Represents data model node to maintain information defined in YANG app-data-structure.
- */
-public class YangAppDataStructure extends DefaultLocationInfo
- implements Parsable, Serializable {
-
- private static final long serialVersionUID = 806201602L;
-
- /**
- * Data structure information.
- */
- private YangDataStructure dataStructure;
-
- /**
- * List of key names.
- */
- private List<String> keyList;
-
- /**
- * Prefix of app-data-structure.
- */
- private String prefix;
-
- /**
- * Returns the YANG data structure information.
- *
- * @return the YANG data structure information
- */
- public YangDataStructure getDataStructure() {
- return dataStructure;
- }
-
- /**
- * Sets the YANG data structure information.
- *
- * @param dataStructure the YANG data structure to set
- */
- public void setDataStructure(YangDataStructure dataStructure) {
- this.dataStructure = dataStructure;
- }
-
- /**
- * Returns the list of key field names.
- *
- * @return the list of key field names
- */
- public List<String> getKeyList() {
- return unmodifiableList(keyList);
- }
-
- /**
- * Adds a key field name.
- *
- * @param key key field name
- */
- public void addKey(String key) {
- if (keyList == null) {
- keyList = new LinkedList<>();
- }
- keyList.add(key);
- }
-
- /**
- * Returns the prefix.
- *
- * @return the prefix
- */
- public String getPrefix() {
- return prefix;
- }
-
- /**
- * Sets the prefix information.
- *
- * @param prefix the prefix to set
- */
- public void setPrefix(String prefix) {
- this.prefix = prefix;
- }
-
- @Override
- public YangConstructType getYangConstructType() {
- return APP_DATA_STRUCTURE;
- }
-
- @Override
- public void validateDataOnEntry() throws DataModelException {
- // TODO : to be implemented
- }
-
- @Override
- public void validateDataOnExit() throws DataModelException {
- // TODO : to be implemented
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAppErrorHolder.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAppErrorHolder.java
deleted file mode 100644
index 484aec1..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAppErrorHolder.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-/**
- * Represents data model node to maintain YANG app error message information.
- */
-public interface YangAppErrorHolder {
-
- /**
- * Sets the application's error information.
- *
- * @param yangAppErrorInfo the application's error information
- */
- void setAppErrorInfo(YangAppErrorInfo yangAppErrorInfo);
-
- /**
- * Returns application's error information.
- *
- * @return application's error information
- */
- YangAppErrorInfo getAppErrorInfo();
-
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAppErrorInfo.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAppErrorInfo.java
deleted file mode 100644
index 3b72e37..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAppErrorInfo.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import java.io.Serializable;
-
-/**
- * Represents data model to maintain yang app error information.
- */
-public class YangAppErrorInfo extends DefaultLocationInfo implements Serializable {
-
- private static final long serialVersionUID = 807201693L;
-
- /**
- * Application's error message, to be used for data error.
- */
- private String errorMessage;
-
- /**
- * Error tag, to be filled in data validation error response.
- */
- private String errorTag;
-
- /**
- * Application's error tag, to be filled in data validation error response.
- */
- private String errorAppTag;
-
- /**
- * Application's error path, to be filled in data validation error response.
- */
- private String errorAppPath;
-
- /**
- * Application's error info, to be filled in data validation error response.
- */
- private String errorAppInfo;
-
- /**
- * Creates a YANG app error info object.
- */
- @SuppressWarnings("unused")
- public YangAppErrorInfo() {
- }
-
- /**
- * Returns application's error message, to be used for data error.
- *
- * @return Application's error message, to be used for data error
- */
- public String getGetErrorMessage() {
- return errorMessage;
- }
-
- /**
- * Sets Application's error message, to be used for data error.
- *
- * @param errMsg Application's error message, to be used for data error
- */
- public void setErrorMessage(String errMsg) {
- errorMessage = errMsg;
- }
-
- /**
- * Returns error tag, to be used for data error.
- *
- * @return error tag, to be used for data error
- */
- public String getGetErrorTag() {
- return errorTag;
- }
-
- /**
- * Sets error tag, to be used for data error.
- *
- * @param errTag error tag, to be used for data error
- */
- public void setErrorTag(String errTag) {
- errorTag = errTag;
- }
-
- /**
- * Returns application's error tag, to be used for data error.
- *
- * @return application's error tag, to be used for data error
- */
- public String getGetErrorAppTag() {
- return errorAppTag;
- }
-
- /**
- * Sets application's error tag, to be used for data error.
- *
- * @param errTag application's error tag, to be used for data error
- */
- public void setErrorAppTag(String errTag) {
- errorAppTag = errTag;
- }
-
- /**
- * Returns application's error path, to be used for data error.
- *
- * @return application's error path, to be used for data error
- */
- public String getGetErrorAppPath() {
- return errorAppPath;
- }
-
- /**
- * Sets application's error path, to be used for data error.
- *
- * @param errPath application's error path, to be used for data error
- */
- public void setErrorAppPath(String errPath) {
- errorAppPath = errPath;
- }
-
- /**
- * Returns application's error info, to be used for data error.
- *
- * @return application's error info, to be used for data error
- */
- public String getGetErrorAppInfo() {
- return errorAppInfo;
- }
-
- /**
- * Sets application's error info, to be used for data error.
- *
- * @param errInfo application's error info, to be used for data error
- */
- public void setErrorAppInfo(String errInfo) {
- errorAppInfo = errInfo;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAppExtended.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAppExtended.java
deleted file mode 100644
index df5057b..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAppExtended.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import java.io.Serializable;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-
-/**
- * Represents data model node to maintain information defined in YANG extended name.
- */
-public class YangAppExtended extends DefaultLocationInfo
- implements Parsable, Serializable {
-
- private static final long serialVersionUID = 806201602L;
- /**
- * App extended name information.
- */
- private String yangAppExtendedName;
-
- /**
- * Prefix of extended name.
- */
- private String prefix;
-
- /**
- * Returns the YANG app extended name information.
- *
- * @return the YANG app extended name information
- */
- public String getYangAppExtendedName() {
- return yangAppExtendedName;
- }
-
- /**
- * Sets the YANG app extended name information.
- *
- * @param yangAppExtendedName the YANG app extended name to set
- */
- public void setYangAppExtendedName(String yangAppExtendedName) {
- this.yangAppExtendedName = yangAppExtendedName;
- }
-
- /**
- * Returns the prefix.
- *
- * @return the prefix
- */
- public String getPrefix() {
- return prefix;
- }
-
- /**
- * Sets the prefix information.
- *
- * @param prefix the prefix to set
- */
- public void setPrefix(String prefix) {
- this.prefix = prefix;
- }
-
- @Override
- public YangConstructType getYangConstructType() {
- return YangConstructType.APP_EXTENDED_NAME_DATA;
- }
-
- @Override
- public void validateDataOnEntry() throws DataModelException {
- // TODO : to be implemented
- }
-
- @Override
- public void validateDataOnExit() throws DataModelException {
- // TODO : to be implemented
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAtomicPath.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAtomicPath.java
deleted file mode 100644
index 14ff001..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAtomicPath.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel;
-
-import java.io.Serializable;
-import java.util.List;
-
-/**
- * Representation of data model node to maintain absolute path defined in YANG path-arg.
- */
-public class YangAtomicPath extends DefaultLocationInfo implements Serializable {
-
- private static final long serialVersionUID = 806201688L;
-
- // YANG node identifier.
- private YangNodeIdentifier nodeIdentifier;
-
- // List of path predicates expression.
- private List<YangPathPredicate> pathPredicatesList;
-
- /**
- * Resolved node for the absolute path.
- */
- private YangNode resolvedNode;
-
- /**
- * Returns the node identifier.
- *
- * @return the node identifier
- */
- public YangNodeIdentifier getNodeIdentifier() {
- return nodeIdentifier;
- }
-
- /**
- * Sets the node identifier.
- *
- * @param nodeIdentifier Sets the node identifier
- */
- public void setNodeIdentifier(YangNodeIdentifier nodeIdentifier) {
- this.nodeIdentifier = nodeIdentifier;
- }
-
- /**
- * Returns the path predicate expression.
- *
- * @return the path predicate expression
- */
- public List<YangPathPredicate> getPathPredicatesList() {
- return pathPredicatesList;
- }
-
- /**
- * Sets the path predicate expression.
- *
- * @param pathPredicatesList Sets the path predicate expression
- */
- public void setPathPredicatesList(List<YangPathPredicate> pathPredicatesList) {
- this.pathPredicatesList = pathPredicatesList;
- }
-
- /**
- * Adds predicate expression in data holder.
- *
- * @param predicatesExp the predicate expression to be added
- */
- public void addLeavesPredicate(YangPathPredicate predicatesExp) {
- getPathPredicatesList().add(predicatesExp);
- }
-
-
- /**
- * Returns resolved node.
- *
- * @return resolved node
- */
- public YangNode getResolvedNode() {
- return resolvedNode;
- }
-
- /**
- * Sets resolved node.
- *
- * @param resolvedNode resolved node
- */
- public void setResolvedNode(YangNode resolvedNode) {
- this.resolvedNode = resolvedNode;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugment.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugment.java
deleted file mode 100644
index 1593885..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugment.java
+++ /dev/null
@@ -1,535 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.ResolvableStatus;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
-
-/*-
- * Reference RFC 6020.
- *
- * The "augment" statement allows a module or submodule to add to the
- * schema tree defined in an external module, or the current module and
- * its submodules, and to add to the nodes from a grouping in a "uses"
- * statement. The argument is a string that identifies a node in the
- * schema tree. This node is called the augment's target node. The
- * target node MUST be either a container, list, choice, case, input,
- * output, or notification node. It is augmented with the nodes defined
- * in the sub-statements that follow the "augment" statement.
- *
- * The argument string is a schema node identifier.
- * If the "augment" statement is on the top level in a module or
- * submodule, the absolute form of a schema node identifier
- * MUST be used. If the "augment" statement is a sub-statement to the
- * "uses" statement, the descendant form MUST be used.
- *
- * If the target node is a container, list, case, input, output, or
- * notification node, the "container", "leaf", "list", "leaf-list",
- * "uses", and "choice" statements can be used within the "augment"
- * statement.
- *
- * If the target node is a choice node, the "case" statement, or a case
- * shorthand statement can be used within the "augment" statement.
- *
- * If the target node is in another module, then nodes added by the
- * augmentation MUST NOT be mandatory nodes.
- *
- * The "augment" statement MUST NOT add multiple nodes with the same
- * name from the same module to the target node.
- * The augment's sub-statements
- *
- * +--------------+---------+-------------+------------------+
- * | substatement | section | cardinality |data model mapping|
- * +--------------+---------+-------------+------------------+
- * | anyxml | 7.10 | 0..n |-not supported |
- * | case | 7.9.2 | 0..n |-child nodes |
- * | choice | 7.9 | 0..n |-child nodes |
- * | container | 7.5 | 0..n |-child nodes |
- * | description | 7.19.3 | 0..1 |-string |
- * | if-feature | 7.18.2 | 0..n |-YangIfFeature |
- * | leaf | 7.6 | 0..n |-YangLeaf |
- * | leaf-list | 7.7 | 0..n |-YangLeafList |
- * | list | 7.8 | 0..n |-child nodes |
- * | reference | 7.19.4 | 0..1 |-String |
- * | status | 7.19.2 | 0..1 |-YangStatus |
- * | uses | 7.12 | 0..n |-child nodes |
- * | when | 7.19.5 | 0..1 |-YangWhen |
- * +--------------+---------+-------------+------------------+
- */
-
-/**
- * Representation of data model node to maintain information defined in YANG
- * augment.
- */
-public abstract class YangAugment
- extends YangNode
- implements YangLeavesHolder, YangCommonInfo, Parsable,
- CollisionDetector, Resolvable,
- YangXPathResolver, YangWhenHolder, YangIfFeatureHolder {
-
- private static final long serialVersionUID = 806201602L;
-
- /**
- * Description of augment.
- */
- private String description;
-
- /**
- * List of leaves.
- */
- private List<YangLeaf> listOfLeaf;
-
- /**
- * List of leaf-lists.
- */
- private List<YangLeafList> listOfLeafList;
-
- /**
- * List of node identifiers.
- */
- private List<YangAtomicPath> targetNode;
-
- /**
- * Reference of the YANG augment.
- */
- private String reference;
-
- /**
- * Status of the node.
- */
- private YangStatusType status;
-
- /**
- * Resolved augmented node.
- */
- private YangNode augmentedNode;
-
- /**
- * Status of resolution. If completely resolved enum value is "RESOLVED",
- * if not enum value is "UNRESOLVED", in case
- * reference of grouping/typedef is added to uses/type but it's not
- * resolved value of enum should be
- * "INTRA_FILE_RESOLVED".
- */
- private ResolvableStatus resolvableStatus;
-
- /**
- * When data of the node.
- */
- private YangWhen when;
-
- /**
- * List of if-feature.
- */
- private List<YangIfFeature> ifFeatureList;
-
- /**
- * Name of augment when prefix is removed if it is in the same file. For
- * linking purpose the name with same prefix of the file is removed and
- * maintained.
- */
- private String prefixRemovedName;
-
- /**
- * Name of augment's setter method.
- */
- private String setterMethodName;
-
- /**
- * Create a YANG augment node.
- */
- public YangAugment() {
- super(YangNodeType.AUGMENT_NODE, new HashMap<>());
- listOfLeaf = new LinkedList<>();
- listOfLeafList = new LinkedList<>();
- targetNode = new LinkedList<>();
- ifFeatureList = new LinkedList<>();
- resolvableStatus = ResolvableStatus.UNRESOLVED;
- }
-
- @Override
- public void addToChildSchemaMap(
- YangSchemaNodeIdentifier schemaNodeIdentifier,
- YangSchemaNodeContextInfo yangSchemaNodeContextInfo)
- throws DataModelException {
- getYsnContextInfoMap()
- .put(schemaNodeIdentifier, yangSchemaNodeContextInfo);
- YangSchemaNodeContextInfo yangSchemaNodeContextInfo1 =
- new YangSchemaNodeContextInfo();
- yangSchemaNodeContextInfo1
- .setSchemaNode(yangSchemaNodeContextInfo.getSchemaNode());
- yangSchemaNodeContextInfo1.setContextSwitchedNode(this);
- getAugmentedNode().addToChildSchemaMap(schemaNodeIdentifier,
- yangSchemaNodeContextInfo1);
- }
-
- @Override
- public void setNameSpaceAndAddToParentSchemaMap() {
- // Get parent namespace and set namespace for self node.
- setNameSpace(getParent().getNameSpace());
- /*
- * Check if node contains leaf/leaf-list, if yes add namespace for leaf
- * and leaf list.
- */
- setLeafNameSpaceAndAddToParentSchemaMap();
- }
-
- @Override
- public void incrementMandatoryChildCount() {
- // TODO
- }
-
- @Override
- public void addToDefaultChildMap(
- YangSchemaNodeIdentifier yangSchemaNodeIdentifier,
- YangSchemaNode yangSchemaNode) {
- // TODO
- }
-
- @Override
- public YangSchemaNodeType getYangSchemaNodeType() {
- /*
- * Augment node to switch the name space in YMS
- */
- return YangSchemaNodeType.YANG_AUGMENT_NODE;
- }
-
- /**
- * Returns the augmented node.
- *
- * @return the augmented node
- */
- public List<YangAtomicPath> getTargetNode() {
- return targetNode;
- }
-
- /**
- * Sets the augmented node.
- *
- * @param nodeIdentifiers the augmented node
- */
- public void setTargetNode(List<YangAtomicPath> nodeIdentifiers) {
- targetNode = nodeIdentifiers;
- }
-
- /**
- * Returns the name of augment after removing the prefix, in each atomic
- * content, which is equal to the root prefix.
- *
- * @return prefix removed augment name
- */
- public String getPrefixRemovedName() {
- return prefixRemovedName;
- }
-
- /**
- * Sets the name of augment after removing the prefix, in each atomic
- * content, which is equal to the root prefix.
- *
- * @param prefixRemovedName augment name
- */
- public void setPrefixRemovedName(String prefixRemovedName) {
- this.prefixRemovedName = prefixRemovedName;
- }
-
- /**
- * Returns the when.
- *
- * @return the when
- */
- @Override
- public YangWhen getWhen() {
- return when;
- }
-
- /**
- * Sets the when.
- *
- * @param when the when to set
- */
- @Override
- public void setWhen(YangWhen when) {
- this.when = when;
- }
-
- /**
- * Returns the description.
- *
- * @return the description
- */
- @Override
- public String getDescription() {
- return description;
- }
-
- /**
- * Set the description.
- *
- * @param description set the description
- */
- @Override
- public void setDescription(String description) {
- this.description = description;
- }
-
- @Override
- public void detectCollidingChild(String identifierName,
- YangConstructType dataType)
- throws DataModelException {
- // Detect colliding child.
- detectCollidingChildUtil(identifierName, dataType, this);
- }
-
- @Override
- public void detectSelfCollision(String identifierName,
- YangConstructType dataType)
- throws DataModelException {
- if (getName().equals(identifierName)) {
- throw new DataModelException(
- "YANG file error: Duplicate input identifier detected, " +
- "same as input \"" +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition() +
- " in " + getFileName() + "\"");
- }
- }
-
- /**
- * Returns the list of leaves.
- *
- * @return the list of leaves
- */
- @Override
- public List<YangLeaf> getListOfLeaf() {
- return listOfLeaf;
- }
-
- /**
- * Sets the list of leaves.
- *
- * @param leafsList the list of leaf to set
- */
- @Override
- public void setListOfLeaf(List<YangLeaf> leafsList) {
- listOfLeaf = leafsList;
- }
-
- /**
- * Adds a leaf.
- *
- * @param leaf the leaf to be added
- */
- @Override
- public void addLeaf(YangLeaf leaf) {
- getListOfLeaf().add(leaf);
- }
-
- /**
- * Returns the list of leaf-list.
- *
- * @return the list of leaf-list
- */
- @Override
- public List<YangLeafList> getListOfLeafList() {
- return listOfLeafList;
- }
-
- /**
- * Sets the list of leaf-list.
- *
- * @param listOfLeafList the list of leaf-list to set
- */
- @Override
- public void setListOfLeafList(List<YangLeafList> listOfLeafList) {
- this.listOfLeafList = listOfLeafList;
- }
-
- /**
- * Adds a leaf-list.
- *
- * @param leafList the leaf-list to be added
- */
- @Override
- public void addLeafList(YangLeafList leafList) {
- getListOfLeafList().add(leafList);
- }
-
- @Override
- public void setLeafNameSpaceAndAddToParentSchemaMap() {
- // Add namespace for all leafs.
- for (YangLeaf yangLeaf : getListOfLeaf()) {
- yangLeaf.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
- }
- // Add namespace for all leaf list.
- for (YangLeafList yangLeafList : getListOfLeafList()) {
- yangLeafList
- .setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
- }
- }
-
- /**
- * Returns the textual reference.
- *
- * @return the reference
- */
- @Override
- public String getReference() {
- return reference;
- }
-
- /**
- * Sets the textual reference.
- *
- * @param reference the reference to set
- */
- @Override
- public void setReference(String reference) {
- this.reference = reference;
- }
-
- /**
- * Returns the status.
- *
- * @return the status
- */
- @Override
- public YangStatusType getStatus() {
- return status;
- }
-
- /**
- * Sets the status.
- *
- * @param status the status to set
- */
- @Override
- public void setStatus(YangStatusType status) {
- this.status = status;
- }
-
- /**
- * Returns the type of the data as belongs-to.
- *
- * @return returns AUGMENT_DATA
- */
- @Override
- public YangConstructType getYangConstructType() {
- return YangConstructType.AUGMENT_DATA;
- }
-
- /**
- * Validates the data on entering the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnEntry()
- throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
- }
-
- /**
- * Validates the data on exiting the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnExit()
- throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
- }
-
- /**
- * Returns augmented node.
- *
- * @return augmented node
- */
- public YangNode getAugmentedNode() {
- return augmentedNode;
- }
-
- /**
- * Sets augmented node.
- *
- * @param augmentedNode augmented node
- */
- public void setAugmentedNode(YangNode augmentedNode) {
- this.augmentedNode = augmentedNode;
- }
-
- @Override
- public List<YangIfFeature> getIfFeatureList() {
- return ifFeatureList;
- }
-
- @Override
- public void setIfFeatureList(List<YangIfFeature> ifFeatureList) {
- this.ifFeatureList = ifFeatureList;
- }
-
- @Override
- public void addIfFeatureList(YangIfFeature ifFeature) {
- if (getIfFeatureList() == null) {
- setIfFeatureList(new LinkedList<>());
- }
- getIfFeatureList().add(ifFeature);
- }
-
- @Override
- public ResolvableStatus getResolvableStatus() {
- return resolvableStatus;
- }
-
- @Override
- public void setResolvableStatus(ResolvableStatus resolvableStatus) {
- this.resolvableStatus = resolvableStatus;
-
- }
-
- @Override
- public Object resolve()
- throws DataModelException {
- // Resolving of target node is being done in XPathLinker.
- return null;
- }
-
- /**
- * Returns setter method name for augment in application.
- *
- * @return setter method name for augment in application
- */
- public String getSetterMethodName() {
- return setterMethodName;
- }
-
- /**
- * Sets setter method name for augment in application.
- *
- * @param name setter method name for augment in application
- */
- public void setSetterMethodName(String name) {
- setterMethodName = name;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugmentableNode.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugmentableNode.java
deleted file mode 100644
index 6c52346..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangAugmentableNode.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import java.util.List;
-
-/**
- * Represents YANG constructs which can be augmented.
- */
-public interface YangAugmentableNode {
-
- /**
- * Adds augment info to the augment info list.
- *
- * @param augmentInfo augment info of node
- */
- void addAugmentation(YangAugment augmentInfo);
-
- /**
- * Removes augment info from the node.
- *
- * @param augmentInfo augment info of node
- */
- void removeAugmentation(YangAugment augmentInfo);
-
- /**
- * Returns list of augment info.
- *
- * @return list of augment info
- */
- List<YangAugment> getAugmentedInfoList();
-
- /**
- * Clones augment info.
- */
- void cloneAugmentInfo();
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangBase.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangBase.java
deleted file mode 100644
index 0d71d32..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangBase.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel;
-
-import java.io.Serializable;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.ResolvableStatus;
-
-/**
- * Reference RFC 6020.
- *
- * Represents data model node to maintain information defined in YANG base.
- * The "base" statement, which is optional, takes as an argument a
- * string that is the name of an existing identity, from which the new
- * identity is derived. If no "base" statement is present, the identity
- * is defined from scratch.
- *
- * If a prefix is present on the base name, it refers to an identity
- * defined in the module that was imported with that prefix, or the
- * local module if the prefix matches the local module's prefix.
- * Otherwise, an identity with the matching name MUST be defined in the
- * current module or an included submodule.
- */
-
-/**
- * Represents data model node to maintain information defined in YANG base.
- */
-public class YangBase extends DefaultLocationInfo implements Resolvable, Serializable {
-
- private static final long serialVersionUID = 806201693L;
-
- // YANG node identifier.
- private YangNodeIdentifier baseIdentifier;
-
- // Referred identity parent information.
- private YangIdentity referredIdentity;
-
- /**
- * Status of resolution. If completely resolved enum value is "RESOLVED",
- * if not enum value is "UNRESOLVED", in case reference of grouping/typedef/base/identityref
- * is added to uses/type/base/identityref but it's not resolved value of enum should be
- * "INTRA_FILE_RESOLVED".
- */
- private ResolvableStatus resolvableStatus;
-
- // Creates a base type of node.
- public YangBase() {
- resolvableStatus = ResolvableStatus.UNRESOLVED;
- }
-
- /**
- * Returns the YANG node identifier.
- *
- * @return the YANG node identifier
- */
- public YangNodeIdentifier getBaseIdentifier() {
- return baseIdentifier;
- }
-
- /**
- * Sets the YANG node identifier.
- *
- * @param baseIdentifier the YANG node identifier to set
- */
- public void setBaseIdentifier(YangNodeIdentifier baseIdentifier) {
- this.baseIdentifier = baseIdentifier;
- }
-
- /**
- * Returns the parent identity node.
- *
- * @return the parent identity node
- */
- public YangIdentity getReferredIdentity() {
- return referredIdentity;
- }
-
- /**
- * Sets the parent identity node.
- *
- * @param referredIdentity the parent identity node to set
- */
- public void setReferredIdentity(YangIdentity referredIdentity) {
- this.referredIdentity = referredIdentity;
- }
-
- @Override
- public ResolvableStatus getResolvableStatus() {
- return resolvableStatus;
- }
-
- @Override
- public void setResolvableStatus(ResolvableStatus resolvableStatus) {
- this.resolvableStatus = resolvableStatus;
- }
-
- @Override
- public Object resolve() throws DataModelException {
- return null;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangBelongsTo.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangBelongsTo.java
deleted file mode 100644
index 85d7652..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangBelongsTo.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel;
-
-import java.io.Serializable;
-import java.util.Set;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.findReferredNode;
-
-/*-
- * Reference 6020.
- *
- * The "belongs-to" statement specifies the module to which the
- * submodule belongs. The argument is an identifier that is the name of
- * the module.
- *
- * A submodule MUST only be included by the module to which it belongs,
- * or by another submodule that belongs to that module.
- *
- * The mandatory "prefix" sub-statement assigns a prefix for the module
- * to which the submodule belongs. All definitions in the local
- * submodule and any included submodules can be accessed by using the
- * prefix.
- *
- * The belongs-to's sub-statements
- *
- * +--------------+---------+-------------+
- * | substatement | section | cardinality |
- * +--------------+---------+-------------+
- * | prefix | 7.1.4 | 1 |
- * +--------------+---------+-------------+
- */
-
-/**
- * Represents the belongs-to data type information.
- */
-public class YangBelongsTo extends DefaultLocationInfo implements Parsable, Serializable {
-
- private static final long serialVersionUID = 806201639L;
-
- /**
- * Reference RFC 6020.
- *
- * The "belongs-to" statement specifies the module to which the submodule
- * belongs. The argument is an identifier that is the name of the module.
- */
- private String belongsToModuleName;
-
- /**
- * Module node to which sub-module belongs to.
- */
- private YangNode moduleNode;
-
- /**
- * Reference RFC 6020.
- *
- * The mandatory "prefix" substatement assigns a prefix for the module to
- * which the submodule belongs. All definitions in the local submodule and
- * any included submodules can be accessed by using the prefix.
- */
- private String prefix;
-
- /**
- * Create a belongs to object.
- */
- public YangBelongsTo() {
-
- }
-
- /**
- * Returns the belongs to module name.
- *
- * @return the belongs to module name
- */
- public String getBelongsToModuleName() {
- return belongsToModuleName;
- }
-
- /**
- * Sets the belongs to module name.
- *
- * @param belongsToModuleName the belongs to module name to set
- */
- public void setBelongsToModuleName(String belongsToModuleName) {
- this.belongsToModuleName = belongsToModuleName;
- }
-
- /**
- * Returns the prefix.
- *
- * @return the prefix
- */
- public String getPrefix() {
- return prefix;
- }
-
- /**
- * Sets the prefix.
- *
- * @param prefix the prefix to set
- */
- public void setPrefix(String prefix) {
- this.prefix = prefix;
- }
-
- /**
- * Returns the module data model node.
- *
- * @return the module data model node
- */
- public YangNode getModuleNode() {
- return moduleNode;
- }
-
- /**
- * Sets the module node.
- *
- * @param moduleNode module data model node
- */
- public void setModuleNode(YangNode moduleNode) {
- this.moduleNode = moduleNode;
- }
-
- /**
- * Returns the type of the data as belongs-to.
- *
- * @return ParsedDataType returns BELONGS_TO_DATA
- */
- @Override
- public YangConstructType getYangConstructType() {
- return YangConstructType.BELONGS_TO_DATA;
- }
-
- /**
- * Validates the data on entering the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnEntry() throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
- }
-
- /**
- * Validates the data on exiting the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnExit() throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
- }
-
- /**
- * Links the belongs to with a module.
- *
- * @param yangNodeSet YANG file information set
- * @throws DataModelException a violation in data model rule
- */
- public void linkWithModule(Set<YangNode> yangNodeSet)
- throws DataModelException {
- String belongsToModuleName = getBelongsToModuleName();
- YangNode moduleNode = findReferredNode(yangNodeSet, belongsToModuleName);
- if (moduleNode != null) {
- if (moduleNode instanceof YangModule) {
- setModuleNode(moduleNode);
- return;
- }
- }
- DataModelException exception = new DataModelException("YANG file error : Module " + belongsToModuleName +
- "to which sub-module belongs to is not found. " + " in " +
- getLineNumber() + " at " +
- getCharPosition() +
- " in " + getFileName());
- exception.setLine(getLineNumber());
- exception.setCharPosition(getCharPosition());
- throw exception;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangBinary.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangBinary.java
deleted file mode 100644
index 47b47d0..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangBinary.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import java.io.Serializable;
-import java.util.Base64;
-
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangBuiltInDataTypeInfo;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-
-/*
- * Reference RFC 6020.
- *
- * The binary built-in type represents any binary data,
- * i.e., a sequence of octets.
- */
-public class YangBinary extends DefaultLocationInfo implements YangBuiltInDataTypeInfo<YangBinary>,
- Serializable, Comparable<YangBinary> {
-
- private static final long serialVersionUID = 2106201608L;
-
- // Binary data is a decoded value by base64 decoding scheme from data input (jason)
- private byte[] binaryData;
-
- /**
- * Creates a binary object corresponding to the base 64 encoding value.
- *
- * @param strValue base64 encoded value
- */
- public YangBinary(String strValue) {
- setBinaryData(Base64.getDecoder().decode(strValue));
- }
-
- /**
- * Retrieves decoded binary data.
- *
- * @return binary data
- */
- public byte[] getBinaryData() {
- return binaryData;
- }
-
- /**
- * Sets binary data.
- *
- * @param binaryData binary data
- */
- public void setBinaryData(byte[] binaryData) {
- this.binaryData = binaryData;
- }
-
- /**
- * Encodes binary data by base64 encoding scheme.
- *
- * @return encoded binary data
- */
- public String toString() {
- return Base64.getEncoder()
- .encodeToString(binaryData);
- }
-
- @Override
- public YangDataTypes getYangType() {
- return YangDataTypes.BINARY;
- }
-
- @Override
- public int compareTo(YangBinary o) {
- for (int i = 0, j = 0; i < this.binaryData.length && j < o.binaryData.length; i++, j++) {
- int a = (this.binaryData[i] & 0xff);
- int b = (o.binaryData[j] & 0xff);
- if (a != b) {
- return a - b;
- }
- }
- return this.binaryData.length - o.binaryData.length;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangBit.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangBit.java
deleted file mode 100644
index 1384fbe..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangBit.java
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import java.io.Serializable;
-import java.util.Objects;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-
-/*-
- * The "bit" statement, which is a sub-statement to the "type" statement,
- * MUST be present if the type is "bits". It is repeatedly used to
- * specify each assigned named bit of a bits type. It takes as an
- * argument a string that is the assigned name of the bit. It is
- * followed by a block of sub-statements that holds detailed bit
- * information.
- * All assigned names in a bits type MUST be unique.
- *
- * The bit's sub-statements
- *
- * +--------------+---------+-------------+------------------+
- * | substatement | section | cardinality |data model mapping|
- * +--------------+---------+-------------+------------------+
- * | description | 7.19.3 | 0..1 | - string |
- * | reference | 7.19.4 | 0..1 | - string |
- * | status | 7.19.2 | 0..1 | - YangStatus |
- * | position | 9.7.4.2 | 0..1 | - int |
- * +--------------+---------+-------------+------------------+
- */
-
-/**
- * Represents the bit data type information.
- */
-public class YangBit extends DefaultLocationInfo implements YangCommonInfo, Parsable, Serializable {
-
- private static final long serialVersionUID = 806201640L;
-
- /**
- * Name of the bit.
- */
- private String bitName;
-
- /**
- * Description of the bit field.
- */
- private String description;
-
- /**
- * Reference info of the bit field.
- */
- private String reference;
-
- /**
- * Status of the bit field.
- */
- private YangStatusType status;
-
- /**
- * Position of the bit whose name bit is described.
- */
- private int position;
-
- /**
- * Create a YANG bit type object.
- */
- public YangBit() {
-
- }
-
- /**
- * Returns bit name.
- *
- * @return the bit name
- */
- public String getBitName() {
- return bitName;
- }
-
- /**
- * Sets the bit name.
- *
- * @param bitName the bit name to set
- */
- public void setBitName(String bitName) {
- this.bitName = bitName;
- }
-
- /**
- * Returns description.
- *
- * @return the description
- */
- @Override
- public String getDescription() {
- return description;
- }
-
- /**
- * Sets the description.
- *
- * @param description set the description
- */
- @Override
- public void setDescription(String description) {
- this.description = description;
- }
-
- /**
- * Returns textual reference.
- *
- * @return the reference
- */
- @Override
- public String getReference() {
- return reference;
- }
-
- /**
- * Sets the textual reference.
- *
- * @param reference the reference to set
- */
- @Override
- public void setReference(String reference) {
- this.reference = reference;
- }
-
- /**
- * Returns status.
- *
- * @return the status
- */
- @Override
- public YangStatusType getStatus() {
- return status;
- }
-
- /**
- * Sets the status.
- *
- * @param status the status to set
- */
- @Override
- public void setStatus(YangStatusType status) {
- this.status = status;
- }
-
- /**
- * Returns bit position.
- *
- * @return the position
- */
- public int getPosition() {
- return position;
- }
-
- /**
- * Sets the bit position.
- *
- * @param position the position to set
- */
- public void setPosition(int position) {
- this.position = position;
- }
-
- /**
- * Returns the type of the data.
- *
- * @return ParsedDataType returns BIT_DATA
- */
- @Override
- public YangConstructType getYangConstructType() {
- return YangConstructType.BIT_DATA;
- }
-
- @Override
- public boolean equals(Object obj) {
-
- if (this == obj) {
- return true;
- }
- if (obj instanceof YangBit) {
- final YangBit other = (YangBit) obj;
- return Objects.equals(bitName, other.bitName);
- }
- return false;
- }
-
- @Override
- public int hashCode() {
- return Objects.hashCode(bitName);
- }
-
- /**
- * Validates the data on entering the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnEntry() throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
- }
-
- /**
- * Validates the data on exiting the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnExit() throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangBits.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangBits.java
deleted file mode 100644
index 89562d1..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangBits.java
+++ /dev/null
@@ -1,260 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import java.io.Serializable;
-import java.util.BitSet;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.regex.Pattern;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-
-/*
- * Reference RFC 6020.
- *
- * The bits built-in type represents a bit set. That is, a bits value
- * is a set of flags identified by small integer position numbers
- * starting at 0. Each bit number has an assigned name.
- */
-
-/**
- * Represents the bits data type information.
- */
-public class YangBits extends DefaultLocationInfo implements Parsable, Serializable {
-
- private static final long serialVersionUID = 806201641L;
- private static final String SPACE = " ";
-
- // Bits name
- private String bitsName;
- // Bits data contains bit-positions will be used to send to ONOS application
- private BitSet bitDataSet;
- /**
- * Mapping bit name to YangBit. In data input (jason), only bit name will be received.
- * By using the bit name corresponding (yang) bit-position will be retrieved from bitNameMap map.
- */
- private Map<String, YangBit> bitNameMap;
- /**
- * Mapping bit position to YangBit. The bit-position received from ONOS application
- * will be converted into bit-name by using bitPositionMap map to send (jason) output data as response.
- */
- private Map<Integer, YangBit> bitPositionMap;
-
- /**
- * Creates a YANG bits type object.
- */
- public YangBits() {
- bitDataSet = new BitSet();
- setBitNameMap(new HashMap<>());
- setBitPositionMap(new HashMap<>());
- }
-
- /**
- * Returns the bits name.
- *
- * @return the bits name
- */
- public String getBitsName() {
- return bitsName;
- }
-
- /**
- * Sets the bits name.
- *
- * @param bitsName the bits name
- */
- public void setBitsName(String bitsName) {
- this.bitsName = bitsName;
- }
-
- /**
- * Returns the bit data set.
- *
- * @return the bit data set
- */
- public BitSet getBitDataSet() {
- return bitDataSet;
- }
-
- /**
- * Sets the bit data set.
- *
- * @param bitNames the set of bit names
- * @throws DataModelException due to violation in data model rules
- */
- public void setBitDataSet(String[] bitNames) throws DataModelException {
- YangBit bit;
- for (String bitName : bitNames) {
- bit = bitNameMap.get(bitName);
- if (bit == null) {
- throw new DataModelException("YANG file error: Unable to find " +
- "corresponding bit position for bit name: " + bitName +
- " in " +
- getLineNumber() + " at " +
- getCharPosition() +
- " in " + getFileName());
- }
- bitDataSet.set(bit.getPosition());
- }
- }
-
- /**
- * Returns the bit name map.
- *
- * @return the bit name map
- */
- public Map<String, YangBit> getBitNameMap() {
- return bitNameMap;
- }
-
- /**
- * Sets the bit name map.
- *
- * @param bitNameMap the bit name map
- */
- public void setBitNameMap(Map<String, YangBit> bitNameMap) {
- this.bitNameMap = bitNameMap;
- }
-
- /**
- * Checks whether bit name already available.
- *
- * @param bitName bit name
- * @return true if bit name already available otherwise returns false
- */
- public boolean isBitNameExists(String bitName) {
- return bitNameMap.containsKey(bitName);
- }
-
- /**
- * Returns the bit position map.
- *
- * @return the bit position map
- */
- public Map<Integer, YangBit> getBitPositionMap() {
- return bitPositionMap;
- }
-
- /**
- * Sets the bit position map.
- *
- * @param bitPositionMap the bit position map
- */
- public void setBitPositionMap(Map<Integer, YangBit> bitPositionMap) {
- this.bitPositionMap = bitPositionMap;
- }
-
- /**
- * Checks whether bit position already available.
- *
- * @param bitPosition bit position
- * @return true if bit position already available otherwise returns false
- */
- public boolean isBitPositionExists(Integer bitPosition) {
- return bitPositionMap.containsKey(bitPosition);
- }
-
- /**
- * Adds bit info.
- *
- * @param bitInfo the bit information to be added
- * @throws DataModelException due to violation in data model rules
- */
- public void addBitInfo(YangBit bitInfo) throws DataModelException {
- if (bitNameMap.put(bitInfo.getBitName(), bitInfo) != null) {
- throw new DataModelException("YANG file error: Duplicate bit name detected, same as bit name \""
- + bitInfo.getBitName() + " in " +
- getLineNumber() + " at " +
- getCharPosition() +
- " in " + getFileName() + "\"");
- }
- if (bitPositionMap.put(bitInfo.getPosition(), bitInfo) != null) {
- throw new DataModelException("YANG file error: Duplicate bit position detected, same as bit position \""
- + bitInfo.getPosition() + " in " +
- getLineNumber() + " at " +
- getCharPosition() +
- " in " + getFileName() + "\"");
- }
- }
-
- /**
- * Returns the type of the data.
- *
- * @return ParsedDataType returns BITS_DATA
- */
- @Override
- public YangConstructType getYangConstructType() {
- return YangConstructType.BITS_DATA;
- }
-
- @Override
- public String toString() {
- YangBit bit;
- String bits = new String();
- for (int i = bitDataSet.nextSetBit(0); i >= 0; i = bitDataSet.nextSetBit(i + 1)) {
- bit = bitPositionMap.get(i);
- if (bit == null) {
- return null;
- }
- if (bits.isEmpty()) {
- bits = bit.getBitName();
- } else {
- bits += " " + bit.getBitName();
- }
- }
- return bits.trim();
- }
-
- /**
- * Returns the object of YANG bits based on specific set of bit names.
- *
- * @param bits set of bit names
- * @return Object of YANG bits
- */
- public YangBits fromString(String bits) {
- try {
- String[] bitNames = bits.trim().split(Pattern.quote(SPACE));
- setBitDataSet(bitNames);
- return this;
- } catch (Exception e) {
- }
- return null;
- }
-
- /**
- * Validates the data on entering the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnEntry() throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
- }
-
- /**
- * Validates the data on exiting the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnExit() throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangCase.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangCase.java
deleted file mode 100644
index ba7e362..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangCase.java
+++ /dev/null
@@ -1,448 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-
-import static java.util.Collections.unmodifiableList;
-import static org.onosproject.yangutils.datamodel.YangNodeType.CASE_NODE;
-import static org.onosproject.yangutils.datamodel.YangSchemaNodeType.YANG_NON_DATA_NODE;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.CASE;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.COLLISION_DETECTION;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.INVALID_CASE_HOLDER;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.getErrorMsg;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.getErrorMsgCollision;
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.CASE_DATA;
-
-/*-
- * Reference RFC 6020.
- *
- * The "case" statement is used to define branches of the choice. It takes as an
- * argument an identifier, followed by a block of sub-statements that holds
- * detailed case information.
- *
- * The identifier is used to identify the case node in the schema tree. A case
- * node does not exist in the data tree.
- *
- * Within a "case" statement, the "anyxml", "choice", "container", "leaf",
- * "list", "leaf-list", and "uses" statements can be used to define child nodes
- * to the case node. The identifiers of all these child nodes MUST be unique
- * within all cases in a choice. For example, the following is illegal:
- *
- * choice interface-type { // This example is illegal YANG
- * case a {
- * leaf ethernet { ... }
- * }
- * case b {
- * container ethernet { ...}
- * }
- * }
- *
- * As a shorthand, the "case" statement can be omitted if the branch
- * contains a single "anyxml", "container", "leaf", "list", or
- * "leaf-list" statement. In this case, the identifier of the case node
- * is the same as the identifier in the branch statement. The following
- * example:
- *
- * choice interface-type {
- * container ethernet { ... }
- * }
- *
- * is equivalent to:
- *
- * choice interface-type {
- * case ethernet {
- * container ethernet { ... }
- * }
- * }
- *
- * The case identifier MUST be unique within a choice.
- *
- * The case's sub-statements
- *
- * +--------------+---------+-------------+------------------+
- * | substatement | section | cardinality |data model mapping|
- * +--------------+---------+-------------+------------------+
- * | anyxml | 7.10 | 0..n |-not supported |
- * | choice | 7.9 | 0..n |-child nodes |
- * | container | 7.5 | 0..n |-child nodes |
- * | description | 7.19.3 | 0..1 |-string |
- * | if-feature | 7.18.2 | 0..n |-YangIfFeature |
- * | leaf | 7.6 | 0..n |-YangLeaf |
- * | leaf-list | 7.7 | 0..n |-YangLeafList |
- * | list | 7.8 | 0..n |-child nodes |
- * | reference | 7.19.4 | 0..1 |-string |
- * | status | 7.19.2 | 0..1 |-YangStatus |
- * | uses | 7.12 | 0..n |-child node |
- * | when | 7.19.5 | 0..1 |-YangWhen |
- * +--------------+---------+-------------+------------------+
- */
-
-/**
- * Represents data model node to maintain information defined in YANG case.
- */
-public abstract class YangCase
- extends YangNode
- implements YangLeavesHolder, YangCommonInfo, Parsable, CollisionDetector,
- YangAugmentableNode, YangWhenHolder, YangIfFeatureHolder, YangIsFilterContentNodes {
-
- private static final long serialVersionUID = 806201603L;
-
- /**
- * Description of case.
- */
- private String description;
-
- /**
- * List of leaves.
- */
- private List<YangLeaf> listOfLeaf;
-
- /**
- * List of leaf lists.
- */
- private List<YangLeafList> listOfLeafList;
-
- /**
- * Reference of the module.
- */
- private String reference;
-
- /**
- * Status of the node.
- */
- private YangStatusType status;
-
- /**
- * When data of the node.
- */
- private YangWhen when;
-
- /**
- * List of if-feature.
- */
- private List<YangIfFeature> ifFeatureList;
-
- private List<YangAugment> yangAugmentedInfo;
-
- /**
- * Creates a choice node.
- */
- public YangCase() {
- super(CASE_NODE, new HashMap<>());
- listOfLeaf = new LinkedList<>();
- listOfLeafList = new LinkedList<>();
- ifFeatureList = new LinkedList<>();
- yangAugmentedInfo = new ArrayList<>();
- }
-
- @Override
- public void addToChildSchemaMap(YangSchemaNodeIdentifier id,
- YangSchemaNodeContextInfo context)
- throws DataModelException {
- getYsnContextInfoMap().put(id, context);
- YangSchemaNodeContextInfo contextInfo = new YangSchemaNodeContextInfo();
- contextInfo.setSchemaNode(context.getSchemaNode());
- contextInfo.setContextSwitchedNode(this);
- getParent().addToChildSchemaMap(id, contextInfo);
- }
-
- @Override
- public void setNameSpaceAndAddToParentSchemaMap() {
- // Get parent namespace and set namespace for self node.
- setNameSpace(getParent().getNameSpace());
- /*
- * Check if node contains leaf/leaf-list, if yes add namespace for leaf
- * and leaf list.
- */
- setLeafNameSpaceAndAddToParentSchemaMap();
- }
-
- @Override
- public void incrementMandatoryChildCount() {
- //For non data nodes, mandatory child to be added to parent node.
- // TODO
- }
-
- @Override
- public void addToDefaultChildMap(YangSchemaNodeIdentifier id,
- YangSchemaNode node) {
- //For non data nodes, default child to be added to parent node.
- // TODO
- }
-
- @Override
- public YangSchemaNodeType getYangSchemaNodeType() {
- return YANG_NON_DATA_NODE;
- }
-
- /**
- * Returns the when.
- *
- * @return the when
- */
- @Override
- public YangWhen getWhen() {
- return when;
- }
-
- /**
- * Sets the when.
- *
- * @param when the when to set
- */
- @Override
- public void setWhen(YangWhen when) {
- this.when = when;
- }
-
- /**
- * Returns the description.
- *
- * @return the description
- */
- @Override
- public String getDescription() {
- return description;
- }
-
- /**
- * Sets the description.
- *
- * @param description set the description
- */
- @Override
- public void setDescription(String description) {
- this.description = description;
- }
-
- /**
- * Returns the list of leaves.
- *
- * @return the list of leaves
- */
- @Override
- public List<YangLeaf> getListOfLeaf() {
- return unmodifiableList(listOfLeaf);
- }
-
- /**
- * Sets the list of leaves.
- *
- * @param leafsList the list of leaf to set
- */
- @Override
- public void setListOfLeaf(List<YangLeaf> leafsList) {
- listOfLeaf = leafsList;
- }
-
- /**
- * Adds a leaf.
- *
- * @param leaf the leaf to be added
- */
- @Override
- public void addLeaf(YangLeaf leaf) {
- listOfLeaf.add(leaf);
- }
-
- /**
- * Returns the list of leaf-list.
- *
- * @return the list of leaf-list
- */
- @Override
- public List<YangLeafList> getListOfLeafList() {
- return unmodifiableList(listOfLeafList);
- }
-
- /**
- * Sets the list of leaf-list.
- *
- * @param listOfLeafList the list of leaf-list to set
- */
- @Override
- public void setListOfLeafList(List<YangLeafList> listOfLeafList) {
- this.listOfLeafList = listOfLeafList;
- }
-
- /**
- * Adds a leaf-list.
- *
- * @param leafList the leaf-list to be added
- */
- @Override
- public void addLeafList(YangLeafList leafList) {
- listOfLeafList.add(leafList);
- }
-
- /**
- * Returns the textual reference.
- *
- * @return the reference
- */
- @Override
- public String getReference() {
- return reference;
- }
-
- /**
- * Sets the textual reference.
- *
- * @param reference the reference to set
- */
- @Override
- public void setReference(String reference) {
- this.reference = reference;
- }
-
- /**
- * Returns the status.
- *
- * @return the status
- */
- @Override
- public YangStatusType getStatus() {
- return status;
- }
-
- /**
- * Sets the status.
- *
- * @param status the status to set
- */
- @Override
- public void setStatus(YangStatusType status) {
- this.status = status;
- }
-
- /**
- * Returns the type of the data.
- *
- * @return returns CASE_DATA
- */
- @Override
- public YangConstructType getYangConstructType() {
- return CASE_DATA;
- }
-
- /**
- * Validates the data on entering the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnEntry()
- throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
- }
-
- /**
- * Validates the data on exiting the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnExit()
- throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
- }
-
- @Override
- public void detectCollidingChild(String identifierName, YangConstructType dataType)
- throws DataModelException {
- if (!(getParent() instanceof YangChoice ||
- getParent() instanceof YangAugment)) {
- throw new DataModelException(getErrorMsg(
- INVALID_CASE_HOLDER, getName(), getLineNumber(),
- getCharPosition(), getFileName()));
- }
- // Traverse up in tree to ask parent choice start collision detection.
- ((CollisionDetector) getParent()).detectCollidingChild(identifierName, dataType);
- }
-
- @Override
- public void detectSelfCollision(String identifierName, YangConstructType dataType)
- throws DataModelException {
-
- if (dataType == CASE_DATA) {
- if (getName().equals(identifierName)) {
- throw new DataModelException(getErrorMsgCollision(
- COLLISION_DETECTION, getName(), getLineNumber(),
- getCharPosition(), CASE, getFileName()));
- }
- return;
- }
-
- // Asks helper to detect colliding child.
- detectCollidingChildUtil(identifierName, dataType, this);
- }
-
- @Override
- public List<YangIfFeature> getIfFeatureList() {
- return unmodifiableList(ifFeatureList);
- }
-
- @Override
- public void addIfFeatureList(YangIfFeature ifFeature) {
- ifFeatureList.add(ifFeature);
- }
-
- @Override
- public void setIfFeatureList(List<YangIfFeature> ifFeatureList) {
- this.ifFeatureList = ifFeatureList;
- }
-
- @Override
- public void addAugmentation(YangAugment augmentInfo) {
- yangAugmentedInfo.add(augmentInfo);
- }
-
- @Override
- public void removeAugmentation(YangAugment augmentInfo) {
- yangAugmentedInfo.remove(augmentInfo);
- }
-
- @Override
- public List<YangAugment> getAugmentedInfoList() {
- return unmodifiableList(yangAugmentedInfo);
- }
-
- @Override
- public void setLeafNameSpaceAndAddToParentSchemaMap() {
- // Add namespace for all leafs.
- for (YangLeaf yangLeaf : listOfLeaf) {
- yangLeaf.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
- }
- // Add namespace for all leaf list.
- for (YangLeafList yangLeafList : listOfLeafList) {
- yangLeafList.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
- }
- }
-
-
- public void cloneAugmentInfo() {
- yangAugmentedInfo = new ArrayList<>();
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangChoice.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangChoice.java
deleted file mode 100644
index e8a7190..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangChoice.java
+++ /dev/null
@@ -1,493 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-
-import static java.util.Collections.unmodifiableList;
-import static org.onosproject.yangutils.datamodel.YangNodeType.CHOICE_NODE;
-import static org.onosproject.yangutils.datamodel.YangSchemaNodeType.YANG_CHOICE_NODE;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.CHOICE;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.COLLISION_DETECTION;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.getErrorMsgCollision;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.CASE_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.CHOICE_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangErrMsgConstants.DATA_MISSING_ERROR_TAG;
-import static org.onosproject.yangutils.datamodel.utils.YangErrMsgConstants.ERROR_PATH_MISSING_CHOICE;
-import static org.onosproject.yangutils.datamodel.utils.YangErrMsgConstants.MISSING_CHOICE_ERROR_APP_TAG;
-
-/*-
- * Reference RFC 6020.
- *
- * The "choice" statement defines a set of alternatives, only one of
- * which may exist at any one time. The argument is an identifier,
- * followed by a block of sub-statements that holds detailed choice
- * information. The identifier is used to identify the choice node in
- * the schema tree. A choice node does not exist in the data tree.
- *
- * A choice consists of a number of branches, defined with the "case"
- * sub-statement. Each branch contains a number of child nodes. The
- * nodes from at most one of the choice's branches exist at the same
- * time.
- *
- * The choice's sub-statements
- *
- * +--------------+---------+-------------+------------------+
- * | substatement | section | cardinality |data model mapping|
- * +--------------+---------+-------------+------------------+
- * | anyxml | 7.10 | 0..n |-not supported |
- * | case | 7.9.2 | 0..n |-YangChoice |
- * | config | 7.19.1 | 0..1 |-boolean |
- * | container | 7.5 | 0..n |-child case nodes |
- * | default | 7.9.3 | 0..1 |-string |
- * | description | 7.19.3 | 0..1 |-string |
- * | if-feature | 7.18.2 | 0..n |-YangIfFeature |
- * | leaf | 7.6 | 0..n |-child case nodes |
- * | leaf-list | 7.7 | 0..n |-child case nodes |
- * | list | 7.8 | 0..n |-child case nodes |
- * | mandatory | 7.9.4 | 0..1 |-string |
- * | reference | 7.19.4 | 0..1 |-string |
- * | status | 7.19.2 | 0..1 |-string |
- * | when | 7.19.5 | 0..1 |-YangWhen |
- * +--------------+---------+-------------+------------------+
- */
-
-/**
- * Represents data model node to maintain information defined in YANG choice.
- */
-public abstract class YangChoice
- extends YangNode
- implements YangCommonInfo, Parsable, CollisionDetector,
- YangAugmentableNode, YangWhenHolder, YangIfFeatureHolder,
- YangAppErrorHolder, YangIsFilterContentNodes, YangConfig {
-
- private static final long serialVersionUID = 806201604L;
-
- /**
- * If the choice represents config data.
- */
- private boolean isConfig;
-
- /**
- * Description of choice.
- */
- private String description;
-
- /**
- * Reference RFC 6020.
- * <p>
- * The "mandatory" statement, which is optional, takes as an argument the
- * string "true" or "false", and puts a constraint on valid data. If
- * "mandatory" is "true", at least one node from exactly one of the choice's
- * case branches MUST exist.
- * <p>
- * If not specified, the default is "false".
- * <p>
- * The behavior of the constraint depends on the type of the choice's
- * closest ancestor node in the schema tree which is not a non-presence
- * container:
- * <p>
- * o If this ancestor is a case node, the constraint is enforced if any
- * other node from the case exists.
- * <p>
- * o Otherwise, it is enforced if the ancestor node exists.
- */
- private String mandatory;
-
- /**
- * Reference of the choice.
- */
- private String reference;
-
- /**
- * Status of the node.
- */
- private YangStatusType status;
-
- /**
- * Reference RFC 6020.
- * <p>
- * The "default" statement indicates if a case should be considered as the
- * default if no child nodes from any of the choice's cases exist. The
- * argument is the identifier of the "case" statement. If the "default"
- * statement is missing, there is no default case.
- * <p>
- * The "default" statement MUST NOT be present on choices where "mandatory"
- * is true.
- * <p>
- * The default case is only important when considering the default values of
- * nodes under the cases. The default values for nodes under the default
- * case are used if none of the nodes under any of the cases are present.
- * <p>
- * There MUST NOT be any mandatory nodes directly under the default case.
- * <p>
- * Default values for child nodes under a case are only used if one of the
- * nodes under that case is present, or if that case is the default case. If
- * none of the nodes under a case are present and the case is not the
- * default case, the default values of the cases' child nodes are ignored.
- * <p>
- * the default case to be used if no case members is present.
- */
- private String defaultValueInString;
-
- /**
- * When data of the node.
- */
- private YangWhen when;
-
- /**
- * List of if-feature.
- */
- private List<YangIfFeature> ifFeatureList;
-
- private List<YangAugment> yangAugmentedInfo;
-
- /**
- * YANG application error information.
- */
- private YangAppErrorInfo yangAppErrorInfo;
-
- /**
- * Create a choice node.
- */
- public YangChoice() {
- super(CHOICE_NODE, new HashMap<>());
- yangAppErrorInfo = new YangAppErrorInfo();
- ifFeatureList = new LinkedList<>();
- yangAugmentedInfo = new ArrayList<>();
- yangAppErrorInfo.setErrorTag(DATA_MISSING_ERROR_TAG);
- yangAppErrorInfo.setErrorAppTag(MISSING_CHOICE_ERROR_APP_TAG);
- yangAppErrorInfo.setErrorAppPath(ERROR_PATH_MISSING_CHOICE);
- }
-
- @Override
- public void addToChildSchemaMap(YangSchemaNodeIdentifier id,
- YangSchemaNodeContextInfo context)
- throws DataModelException {
- getYsnContextInfoMap().put(id, context);
- YangSchemaNodeContextInfo contextInfo =
- new YangSchemaNodeContextInfo();
- contextInfo.setSchemaNode(context.getSchemaNode());
- contextInfo.setContextSwitchedNode(this);
- getParent().addToChildSchemaMap(id, contextInfo);
- }
-
- @Override
- public void setNameSpaceAndAddToParentSchemaMap() {
- // Get parent namespace and set namespace for self node.
- setNameSpace(getParent().getNameSpace());
- }
-
- @Override
- public void incrementMandatoryChildCount() {
- //For non data nodes, mandatory child to be added to parent node.
- // TODO
- }
-
- @Override
- public void addToDefaultChildMap(
- YangSchemaNodeIdentifier yangSchemaNodeIdentifier,
- YangSchemaNode yangSchemaNode) {
- //For non data nodes, default child to be added to parent node.
- // TODO
- }
-
- @Override
- public YangSchemaNodeType getYangSchemaNodeType() {
- /*Choice node to be skipped in YANG data tree preparation*/
- return YANG_CHOICE_NODE;
- }
-
- /**
- * Returns the when.
- *
- * @return the when
- */
- @Override
- public YangWhen getWhen() {
- return when;
- }
-
- /**
- * Sets the when.
- *
- * @param when the when to set
- */
- @Override
- public void setWhen(YangWhen when) {
- this.when = when;
- }
-
- /**
- * Returns config flag.
- *
- * @return the config flag
- */
- @Override
- public boolean isConfig() {
- return isConfig;
- }
-
- /**
- * Sets config flag.
- *
- * @param isConfig the config flag
- */
- @Override
- public void setConfig(boolean isConfig) {
- this.isConfig = isConfig;
- }
-
- /**
- * Returns the mandatory status.
- *
- * @return the mandatory status
- */
- public String getMandatory() {
- return mandatory;
- }
-
- /**
- * Sets the mandatory status.
- *
- * @param mandatory the mandatory status
- */
- public void setMandatory(String mandatory) {
- this.mandatory = mandatory;
- }
-
- /**
- * Returns the description.
- *
- * @return the description
- */
- @Override
- public String getDescription() {
- return description;
- }
-
- /**
- * Sets the description.
- *
- * @param description set the description
- */
- @Override
- public void setDescription(String description) {
- this.description = description;
- }
-
- /**
- * Returns the textual reference.
- *
- * @return the reference
- */
- @Override
- public String getReference() {
- return reference;
- }
-
- /**
- * Sets the textual reference.
- *
- * @param reference the reference to set
- */
- @Override
- public void setReference(String reference) {
- this.reference = reference;
- }
-
- /**
- * Returns the status.
- *
- * @return the status
- */
- @Override
- public YangStatusType getStatus() {
- return status;
- }
-
- /**
- * Sets the status.
- *
- * @param status the status to set
- */
- @Override
- public void setStatus(YangStatusType status) {
- this.status = status;
- }
-
- /**
- * Returns the default value.
- *
- * @return the default value
- */
- public String getDefaultValueInString() {
- return defaultValueInString;
- }
-
- /**
- * Sets the default value.
- *
- * @param defaultValueInString the default value
- */
- public void setDefaultValueInString(String defaultValueInString) {
- this.defaultValueInString = defaultValueInString;
- }
-
- /**
- * Returns the type of the data.
- *
- * @return choice data
- */
- @Override
- public YangConstructType getYangConstructType() {
- return CHOICE_DATA;
- }
-
- /**
- * Validates the data on entering the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnEntry()
- throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
- }
-
- /**
- * Validates the data on exiting the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnExit()
- throws DataModelException {
- if (defaultValueInString != null && !defaultValueInString.isEmpty()) {
- YangNode node = getChild();
- boolean matched = false;
- // Check whether default string matches the case
- while (node != null) {
- if (node instanceof YangCase) {
- if (defaultValueInString.equals(node.getName())) {
- matched = true;
- break;
- }
- }
- node = node.getNextSibling();
- }
-
- if (!matched) {
- throw new DataModelException(
- "YANG file error: default string \"" +
- defaultValueInString + "\" not matching choice \"" +
- getName() + "\" case.");
- }
- }
- }
-
- @Override
- public void detectCollidingChild(String idName, YangConstructType type)
- throws DataModelException {
-
- if (getParent() instanceof YangCase && type != CASE_DATA) {
- ((CollisionDetector) getParent()).detectCollidingChild(idName, type);
- }
- YangNode node = getChild();
- while (node != null) {
- if (node instanceof CollisionDetector) {
- ((CollisionDetector) node).detectSelfCollision(idName, type);
- }
- node = node.getNextSibling();
- }
- }
-
- @Override
- public void detectSelfCollision(String identifierName,
- YangConstructType dataType)
- throws DataModelException {
-
- if (dataType == CHOICE_DATA) {
- if (getName().equals(identifierName)) {
- throw new DataModelException(
- getErrorMsgCollision(COLLISION_DETECTION, getName(),
- getLineNumber(), getCharPosition(),
- CHOICE, getFileName()));
- }
- return;
- }
-
- YangNode node = getChild();
- while (node != null) {
- if (node instanceof CollisionDetector) {
- ((CollisionDetector) node)
- .detectSelfCollision(identifierName, dataType);
- }
- node = node.getNextSibling();
- }
- }
-
- @Override
- public List<YangIfFeature> getIfFeatureList() {
- return unmodifiableList(ifFeatureList);
- }
-
- @Override
- public void addIfFeatureList(YangIfFeature ifFeature) {
- ifFeatureList.add(ifFeature);
- }
-
- @Override
- public void setIfFeatureList(List<YangIfFeature> ifFeatureList) {
- this.ifFeatureList = ifFeatureList;
- }
-
- @Override
- public void addAugmentation(YangAugment augmentInfo) {
- yangAugmentedInfo.add(augmentInfo);
- }
-
- @Override
- public void removeAugmentation(YangAugment augmentInfo) {
- yangAugmentedInfo.remove(augmentInfo);
- }
-
- @Override
- public List<YangAugment> getAugmentedInfoList() {
- return unmodifiableList(yangAugmentedInfo);
- }
-
- @Override
- public void setAppErrorInfo(YangAppErrorInfo yangAppErrorInfo) {
- this.yangAppErrorInfo = yangAppErrorInfo;
- }
-
- @Override
- public YangAppErrorInfo getAppErrorInfo() {
- return yangAppErrorInfo;
- }
-
- public void cloneAugmentInfo() {
- yangAugmentedInfo = new ArrayList<>();
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangCommonInfo.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangCommonInfo.java
deleted file mode 100644
index 89b7dc0..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangCommonInfo.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-/**
- * Abstraction of YANG entity's common meta data. Abstracted to unify the
- * parsing and translator processing.
- */
-public interface YangCommonInfo extends YangDesc, YangReference, YangStatus {
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangCompilerAnnotation.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangCompilerAnnotation.java
deleted file mode 100644
index 825d861..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangCompilerAnnotation.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.ResolvableStatus;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-
-import java.io.Serializable;
-import java.util.LinkedList;
-import java.util.List;
-
-import static java.util.Collections.unmodifiableList;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.COMPILER_ANNOTATION_DATA;
-
-/**
- * Represents data model node to maintain information defined in YANG compiler-annotation.
- */
-public class YangCompilerAnnotation extends DefaultLocationInfo
- implements Parsable, YangXPathResolver, Resolvable, Serializable {
-
- private static final long serialVersionUID = 806201602L;
-
- /**
- * App data structure information.
- */
- private YangAppDataStructure yangAppDataStructure;
-
- /**
- * App extended name information.
- */
- private YangAppExtended yangAppExtended;
-
- /**
- * Prefix of compiler-annotation.
- */
- private String prefix;
-
- /**
- * Path of compiler-annotation.
- */
- private String path;
-
- /**
- * Path of compiler-annotation.
- */
- private List<YangAtomicPath> atomicPathList = new LinkedList<>();
-
- /**
- * Resolution status.
- */
- private ResolvableStatus resolvableStatus;
-
- /**
- * Returns the YANG app data structure information.
- *
- * @return the YANG app data structure information
- */
- public YangAppDataStructure getYangAppDataStructure() {
- return yangAppDataStructure;
- }
-
- /**
- * Sets the YANG app data structure information.
- *
- * @param yangAppDataStructure the YANG app data structure to set
- */
- public void setYangAppDataStructure(YangAppDataStructure yangAppDataStructure) {
- this.yangAppDataStructure = yangAppDataStructure;
- }
-
- /**
- * Returns the prefix.
- *
- * @return the prefix
- */
- public String getPrefix() {
- return prefix;
- }
-
- /**
- * Sets the prefix information.
- *
- * @param prefix the prefix to set
- */
- public void setPrefix(String prefix) {
- this.prefix = prefix;
- }
-
- /**
- * Returns the path.
- *
- * @return the path
- */
- public String getPath() {
- return path;
- }
-
- /**
- * Sets the path.
- *
- * @param path the path to set
- */
- public void setPath(String path) {
- this.path = path;
- }
-
- /**
- * Returns the YANG app extended name information.
- *
- * @return the YANG app extended name information
- */
- public YangAppExtended getYangAppExtendedName() {
- return yangAppExtended;
- }
-
- /**
- * Sets the YANG app extended name information.
- *
- * @param yangAppExtendedName the YANG app extended name to set
- */
- public void setYangAppExtendedName(YangAppExtended yangAppExtendedName) {
- yangAppExtended = yangAppExtendedName;
- }
-
- /**
- * Returns the list of atomic path.
- *
- * @return the list of atomic path
- */
- public List<YangAtomicPath> getAtomicPathList() {
- return unmodifiableList(atomicPathList);
- }
-
- /**
- * Sets the atomic path.
- *
- * @param atomicPathList the atomic path list to set
- */
- public void setAtomicPathList(List<YangAtomicPath> atomicPathList) {
- this.atomicPathList = atomicPathList;
- }
-
- @Override
- public YangConstructType getYangConstructType() {
- return COMPILER_ANNOTATION_DATA;
- }
-
- @Override
- public void validateDataOnEntry() throws DataModelException {
- // TODO : to be implemented
- }
-
- @Override
- public void validateDataOnExit() throws DataModelException {
- // TODO : to be implemented
- }
-
- @Override
- public ResolvableStatus getResolvableStatus() {
- return resolvableStatus;
- }
-
- @Override
- public void setResolvableStatus(ResolvableStatus resolvableStatus) {
- this.resolvableStatus = resolvableStatus;
- }
-
- @Override
- public Object resolve()
- throws DataModelException {
- return null;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangConfig.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangConfig.java
deleted file mode 100644
index b64744f..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangConfig.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-/**
- * Abstraction of config entity. It is used to abstract the data holders of config statement.
- */
-public interface YangConfig {
-
- /**
- * Returns the config flag.
- *
- * @return if config flag
- */
- boolean isConfig();
-
- /**
- * Sets the config flag.
- *
- * @param isConfig the flag value to set
- */
- void setConfig(boolean isConfig);
-
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangContainer.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangContainer.java
deleted file mode 100644
index 85a81e0..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangContainer.java
+++ /dev/null
@@ -1,523 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
-
-/*-
- * Reference RFC 6020.
- *
- * The "container" statement is used to define an interior data node in the
- * schema tree. It takes one argument, which is an identifier, followed by a
- * block of sub-statements that holds detailed container information.
- *
- * A container node does not have a value, but it has a list of child nodes in
- * the data tree. The child nodes are defined in the container's sub-statements.
- *
- * Containers with Presence
- *
- * YANG supports two styles of containers, those that exist only for organizing
- * the hierarchy of data nodes, and those whose presence in the configuration
- * has an explicit meaning.
- *
- * In the first style, the container has no meaning of its own, existing only to
- * contain child nodes. This is the default style.
- *
- * For example, the set of scrambling options for Synchronous Optical Network
- * (SONET) interfaces may be placed inside a "scrambling" container to enhance
- * the organization of the configuration hierarchy, and to keep these nodes
- * together. The "scrambling" node itself has no meaning, so removing the node
- * when it becomes empty relieves the user from performing this task.
- *
- * In the second style, the presence of the container itself is configuration
- * data, representing a single bit of configuration data. The container acts as
- * both a configuration knob and a means of organizing related configuration.
- * These containers are explicitly created and deleted.
- *
- * YANG calls this style a "presence container" and it is indicated using the
- * "presence" statement, which takes as its argument a text string indicating
- * what the presence of the node means.
- *
- * The container's Substatements
- *
- * +--------------+---------+-------------+------------------+
- * | substatement | section | cardinality |data model mapping|
- * +--------------+---------+-------------+------------------+
- * | anyxml | 7.10 | 0..n | -not supported |
- * | choice | 7.9 | 0..n | -child nodes |
- * | config | 7.19.1 | 0..1 | -boolean |
- * | container | 7.5 | 0..n | -child nodes |
- * | description | 7.19.3 | 0..1 | -string |
- * | grouping | 7.11 | 0..n | -child nodes |
- * | if-feature | 7.18.2 | 0..n | -YangIfFeature |
- * | leaf | 7.6 | 0..n | -YangLeaf |
- * | leaf-list | 7.7 | 0..n | -YangLeafList |
- * | list | 7.8 | 0..n | -child nodes |
- * | must | 7.5.3 | 0..n | -YangMust |
- * | presence | 7.5.5 | 0..1 | -boolean |
- * | reference | 7.19.4 | 0..1 | -string |
- * | status | 7.19.2 | 0..1 | -YangStatus |
- * | typedef | 7.3 | 0..n | -child nodes |
- * | uses | 7.12 | 0..n | -child nodes |
- * | when | 7.19.5 | 0..1 | -YangWhen |
- * +--------------+---------+-------------+------------------+
- */
-
-/**
- * Represents data model node to maintain information defined in YANG container.
- */
-public abstract class YangContainer
- extends YangNode
- implements YangLeavesHolder, YangCommonInfo, Parsable, CollisionDetector,
- YangAugmentableNode, YangMustHolder, YangWhenHolder, YangIfFeatureHolder, YangIsFilterContentNodes,
- YangConfig {
-
- private static final long serialVersionUID = 806201605L;
-
- /**
- * If container maintains config data.
- */
- private boolean isConfig;
-
- /**
- * Description of container.
- */
- private String description;
-
- /**
- * List of leaves contained.
- */
- private List<YangLeaf> listOfLeaf;
-
- /**
- * List of leaf-lists contained.
- */
- private List<YangLeafList> listOfLeafList;
-
- /**
- * If it is a presence container, then the textual documentation of presence
- * usage.
- */
- private String presence;
-
- /**
- * Reference of the module.
- */
- private String reference;
-
- private List<YangAugment> yangAugmentedInfo = new ArrayList<>();
-
- /**
- * Status of the node.
- */
- private YangStatusType status = YangStatusType.CURRENT;
-
- /**
- * List of must statement constraints.
- */
- private List<YangMust> mustConstraintList;
-
- /**
- * When data of the node.
- */
- private YangWhen when;
-
- /**
- * List of if-feature.
- */
- private List<YangIfFeature> ifFeatureList;
-
- /**
- * Create a container node.
- */
- public YangContainer() {
- super(YangNodeType.CONTAINER_NODE, new HashMap<>());
- listOfLeaf = new LinkedList<>();
- listOfLeafList = new LinkedList<>();
- mustConstraintList = new LinkedList<>();
- ifFeatureList = new LinkedList<>();
- }
-
- @Override
- public void addToChildSchemaMap(YangSchemaNodeIdentifier schemaNodeIdentifier,
- YangSchemaNodeContextInfo yangSchemaNodeContextInfo) {
- getYsnContextInfoMap().put(schemaNodeIdentifier, yangSchemaNodeContextInfo);
- }
-
- @Override
- public void incrementMandatoryChildCount() {
- // TODO
- }
-
- @Override
- public void addToDefaultChildMap(YangSchemaNodeIdentifier yangSchemaNodeIdentifier, YangSchemaNode yangSchemaNode) {
- // TODO
- }
-
- @Override
- public YangSchemaNodeType getYangSchemaNodeType() {
- return YangSchemaNodeType.YANG_SINGLE_INSTANCE_NODE;
- }
-
- /**
- * Returns the when.
- *
- * @return the when
- */
- @Override
- public YangWhen getWhen() {
- return when;
- }
-
- /**
- * Sets the when.
- *
- * @param when the when to set
- */
- @Override
- public void setWhen(YangWhen when) {
- this.when = when;
- }
-
- /**
- * Returns the config flag.
- *
- * @return the isConfig
- */
- @Override
- public boolean isConfig() {
- return isConfig;
- }
-
- /**
- * Sets the config flag.
- *
- * @param isConfig the config flag
- */
- @Override
- public void setConfig(boolean isConfig) {
- this.isConfig = isConfig;
- }
-
- /**
- * Returns the description.
- *
- * @return the description
- */
- @Override
- public String getDescription() {
- return description;
- }
-
- /**
- * Sets the description.
- *
- * @param description set the description
- */
- @Override
- public void setDescription(String description) {
- this.description = description;
- }
-
- /**
- * Returns the list of leaves.
- *
- * @return the list of leaves
- */
- @Override
- public List<YangLeaf> getListOfLeaf() {
- return listOfLeaf;
- }
-
- /**
- * Sets the list of leaves.
- *
- * @param leafsList the list of leaf to set
- */
- @Override
- public void setListOfLeaf(List<YangLeaf> leafsList) {
- listOfLeaf = leafsList;
- }
-
- /**
- * Adds a leaf.
- *
- * @param leaf the leaf to be added
- */
- @Override
- public void addLeaf(YangLeaf leaf) {
- getListOfLeaf().add(leaf);
- }
-
- /**
- * Returns the list of leaf-list.
- *
- * @return the list of leaf-list
- */
- @Override
- public List<YangLeafList> getListOfLeafList() {
- return listOfLeafList;
- }
-
- /**
- * Sets the list of leaf-list.
- *
- * @param listOfLeafList the list of leaf-list to set
- */
- @Override
- public void setListOfLeafList(List<YangLeafList> listOfLeafList) {
- this.listOfLeafList = listOfLeafList;
- }
-
- /**
- * Adds a leaf-list.
- *
- * @param leafList the leaf-list to be added
- */
- @Override
- public void addLeafList(YangLeafList leafList) {
- getListOfLeafList().add(leafList);
- }
-
-
- /**
- * Returns the presence string if present.
- *
- * @return the presence
- */
- public String getPresence() {
- return presence;
- }
-
- /**
- * Sets the presence string.
- *
- * @param presence the presence flag
- */
- public void setPresence(String presence) {
- this.presence = presence;
- }
-
- /**
- * Returns the textual reference.
- *
- * @return the reference
- */
- @Override
- public String getReference() {
- return reference;
- }
-
- /**
- * Sets the textual reference.
- *
- * @param reference the reference to set
- */
- @Override
- public void setReference(String reference) {
- this.reference = reference;
- }
-
- /**
- * Returns the status.
- *
- * @return the status
- */
- @Override
- public YangStatusType getStatus() {
- return status;
- }
-
- /**
- * Sets the status.
- *
- * @param status the status to set
- */
- @Override
- public void setStatus(YangStatusType status) {
- this.status = status;
- }
-
- /**
- * Returns the type of the data.
- *
- * @return returns CONTAINER_DATA
- */
- @Override
- public YangConstructType getYangConstructType() {
- return YangConstructType.CONTAINER_DATA;
- }
-
- /**
- * Validates the data on entering the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnEntry()
- throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
- }
-
- /**
- * Validates the data on exiting the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnExit()
- throws DataModelException {
- List<YangLeaf> leaves = getListOfLeaf();
- List<YangLeafList> leafLists = getListOfLeafList();
- validateConfig(leaves, leafLists);
- }
-
- /**
- * Validates config statement of container.
- *
- * @param leaves list of leaf attributes of container
- * @param leafLists list of leaf-list attributes of container
- * @throws DataModelException a violation of data model rules
- */
- private void validateConfig(List<YangLeaf> leaves, List<YangLeafList> leafLists)
- throws DataModelException {
-
- /*
- * If a node has "config" set to "false", no node underneath it can have
- * "config" set to "true".
- */
- if (!isConfig && leaves != null) {
- for (YangLeaf leaf : leaves) {
- if (leaf.isConfig()) {
- throw new DataModelException("If a container has \"config\" set to \"false\", no node underneath " +
- "it can have \"config\" set to \"true\"." + getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition() +
- " in " + getFileName() + "\"");
- }
- }
- }
-
- if (!isConfig && leafLists != null) {
- for (YangLeafList leafList : leafLists) {
- if (leafList.isConfig()) {
- throw new DataModelException("If a container has \"config\" set to \"false\", no node underneath " +
- "it can have \"config\" set to \"true\"." +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition() +
- " in " + getFileName() + "\"");
- }
- }
- }
- }
-
- @Override
- public void detectCollidingChild(String identifierName, YangConstructType dataType)
- throws DataModelException {
- // Asks helper to detect colliding child.
- detectCollidingChildUtil(identifierName, dataType, this);
- }
-
- @Override
- public void detectSelfCollision(String identifierName, YangConstructType dataType)
- throws DataModelException {
- if (getName().equals(identifierName)) {
- throw new DataModelException("YANG file error: Duplicate input identifier detected, same as container \"" +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition() +
- " in " + getFileName() + "\"");
- }
- }
-
- @Override
- public List<YangIfFeature> getIfFeatureList() {
- return ifFeatureList;
- }
-
- @Override
- public void addIfFeatureList(YangIfFeature ifFeature) {
- if (getIfFeatureList() == null) {
- setIfFeatureList(new LinkedList<>());
- }
- getIfFeatureList().add(ifFeature);
- }
-
- @Override
- public void setIfFeatureList(List<YangIfFeature> ifFeatureList) {
- this.ifFeatureList = ifFeatureList;
- }
-
- @Override
- public List<YangMust> getListOfMust() {
- return mustConstraintList;
- }
-
- @Override
- public void setListOfMust(List<YangMust> mustConstraintList) {
- this.mustConstraintList = mustConstraintList;
- }
-
- @Override
- public void addMust(YangMust must) {
- if (getListOfMust() == null) {
- setListOfMust(new LinkedList<>());
- }
- getListOfMust().add(must);
- }
-
- @Override
- public void addAugmentation(YangAugment augmentInfo) {
- yangAugmentedInfo.add(augmentInfo);
- }
-
- @Override
- public void removeAugmentation(YangAugment augmentInfo) {
- yangAugmentedInfo.remove(augmentInfo);
- }
-
- @Override
- public List<YangAugment> getAugmentedInfoList() {
- return yangAugmentedInfo;
- }
-
- @Override
- public void setLeafNameSpaceAndAddToParentSchemaMap() {
- // Add namespace for all leafs.
- for (YangLeaf yangLeaf : getListOfLeaf()) {
- yangLeaf.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
- }
- // Add namespace for all leaf list.
- for (YangLeafList yangLeafList : getListOfLeafList()) {
- yangLeafList.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
- }
- }
-
- public void cloneAugmentInfo() {
- yangAugmentedInfo = new ArrayList<>();
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDataStructure.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDataStructure.java
deleted file mode 100644
index b6959e9..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDataStructure.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-/**
- * Represents ENUM to identify the YANG data type.
- */
-public enum YangDataStructure {
-
- QUEUE,
-
- LIST,
-
- MAP,
-
- SET;
-
- /**
- * Returns YANG data structure type for corresponding data structure name.
- *
- * @param name data structure name from YANG file.
- * @return YANG data structure for corresponding data structure name.
- */
- public static YangDataStructure getDataStructureType(String name) {
- name = name.replace("\"", "");
- for (YangDataStructure dataStructure : values()) {
- if (dataStructure.name().toLowerCase().equals(name.toLowerCase())) {
- return dataStructure;
- }
- }
- return null;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDecimal64.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDecimal64.java
deleted file mode 100644
index c61c69d..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDecimal64.java
+++ /dev/null
@@ -1,360 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.FractionDigits;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.DataTypeException;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangBuiltInDataTypeInfo;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.util.ListIterator;
-
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.getErrorMsg;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.DECIMAL64_DATA;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.DECIMAL64;
-
-/**
- * Represents YANG decimal 64.
- */
-public class YangDecimal64<T> extends DefaultLocationInfo
- implements YangBuiltInDataTypeInfo<YangDecimal64>, Parsable, Serializable,
- Comparable<YangDecimal64> {
-
- private static final long serialVersionUID = 8006201668L;
-
- /**
- * YANG's min keyword.
- */
- private static final String MIN_KEYWORD = "min";
-
- /**
- * YANG's max keyword.
- */
- private static final String MAX_KEYWORD = "max";
-
- /**
- * Valid minimum value of YANG's fraction-digits.
- */
- public static final int MIN_FRACTION_DIGITS_VALUE = 1;
-
- /**
- * Valid maximum value of YANG's fraction-digits.
- */
- public static final int MAX_FRACTION_DIGITS_VALUE = 18;
-
- /**
- * Valid minimum value of YANG's decimal64.
- */
- private static final BigDecimal MIN_VALUE =
- BigDecimal.valueOf(-922337203685477580.8);
-
- /**
- * Valid maximum value of YANG's decimal64.
- */
- private static final BigDecimal MAX_VALUE =
- BigDecimal.valueOf(922337203685477580.7);
-
- private static final int MIN_FRACTION_DIGIT_RANGE = 1;
- private static final int MAX_FRACTION_DIGIT_RANGE = 18;
- private static final int ZERO = 0;
-
-
- // Decimal64 value
- private BigDecimal value;
-
- // fraction-digits
- private int fractionDigit;
-
- /**
- * Additional information about range restriction.
- */
- private T rangeRestrictedExtendedInfo;
-
- /**
- * Creates an instance of YANG decimal64.
- */
- public YangDecimal64() {
- }
-
- /**
- * Creates an instance of YANG decimal64.
- *
- * @param value of decimal64
- */
- public YangDecimal64(BigDecimal value) {
- setValue(value);
- }
-
- /**
- * Creates an instance of YANG decimal64.
- *
- * @param valueInString of decimal64 in string
- */
- YangDecimal64(String valueInString) {
- if (valueInString.matches(MIN_KEYWORD)) {
- value = MIN_VALUE;
- } else if (valueInString.matches(MAX_KEYWORD)) {
- value = MAX_VALUE;
- } else {
- try {
- value = new BigDecimal(valueInString);
- } catch (Exception e) {
- throw new DataTypeException(
- "YANG file error : Input value \"" + valueInString + "\"" +
- " is not a valid decimal64.");
- }
- }
-
- if (value.doubleValue() < MIN_VALUE.doubleValue()) {
- throw new DataTypeException("YANG file error : " + valueInString +
- " is less than minimum value "
- + MIN_VALUE + ".");
- } else if (value.doubleValue() > MAX_VALUE.doubleValue()) {
- throw new DataTypeException("YANG file error : " + valueInString +
- " is greater than maximum value "
- + MAX_VALUE + ".");
- }
- }
-
- /**
- * Returns decimal64 value.
- *
- * @return value
- */
- public BigDecimal getValue() {
- return value;
- }
-
- /**
- * Sets the decimal64 value.
- *
- * @param value of decimal64
- */
- public void setValue(BigDecimal value) {
- this.value = value;
- }
-
- /**
- * Returns fraction digit.
- *
- * @return the fractionDigit
- */
- public int getFractionDigit() {
- return fractionDigit;
- }
-
- /**
- * Sets fraction digit.
- *
- * @param fractionDigit fraction digits.
- */
- public void setFractionDigit(int fractionDigit) {
- this.fractionDigit = fractionDigit;
- }
-
- /**
- * Returns additional information about range restriction.
- *
- * @return resolved range restricted extended information
- */
- public T getRangeRestrictedExtendedInfo() {
- return rangeRestrictedExtendedInfo;
- }
-
- /**
- * Sets additional information about range restriction.
- *
- * @param resolvedExtendedInfo resolved range restricted extended information
- */
- public void setRangeRestrictedExtendedInfo(T resolvedExtendedInfo) {
- rangeRestrictedExtendedInfo = resolvedExtendedInfo;
- }
-
- /**
- * Returns object of YANG decimal64.
- *
- * @param value of decimal64
- * @return YANG decimal64 object
- */
- public static YangDecimal64 of(BigDecimal value) {
- return new YangDecimal64(value);
- }
-
- @Override
- public YangDataTypes getYangType() {
- return DECIMAL64;
- }
-
- @Override
- public YangConstructType getYangConstructType() {
- return DECIMAL64_DATA;
- }
-
- @Override
- public String toString() {
- return value.toString();
- }
-
- /**
- * Returns the object of YANG decimal64 from input string.
- *
- * @param valInString input String
- * @return Object of YANG decimal64
- */
- static YangDecimal64 fromString(String valInString) {
- return new YangDecimal64(valInString);
- }
-
- /**
- * Checks whether specific fraction-digit in its range.
- *
- * @return true if fraction-digit is in its range otherwise false
- */
- public boolean isValidFractionDigit() {
- return fractionDigit >= MIN_FRACTION_DIGIT_RANGE &&
- fractionDigit <= MAX_FRACTION_DIGIT_RANGE;
- }
-
-
- /**
- * Checks whether value is in correct decimal64 value range.
- *
- * @throws DataModelException a violation of data model rules
- */
- public void validateDecimal64() throws DataModelException {
- YangRangeRestriction rangeRestriction =
- (YangRangeRestriction) getRangeRestrictedExtendedInfo();
- if (rangeRestriction != null) {
- // Check whether value is within provided range value
- ListIterator<YangRangeInterval> rangeListIterator =
- rangeRestriction.getAscendingRangeIntervals().listIterator();
-
- boolean isMatched = false;
- while (rangeListIterator.hasNext()) {
- YangRangeInterval rangeInterval = rangeListIterator.next();
- rangeInterval.setCharPosition(getCharPosition());
- rangeInterval.setLineNumber(getLineNumber());
- rangeInterval.setFileName(getFileName());
- BigDecimal startValue = ((YangDecimal64) rangeInterval.getStartValue()).getValue();
- BigDecimal endValue = ((YangDecimal64) rangeInterval.getEndValue()).getValue();
- if (value.compareTo(startValue) >= ZERO &&
- value.compareTo(endValue) <= ZERO) {
- isMatched = true;
- break;
- }
- }
- // If range is not matched then throw error
- if (!isMatched) {
- throw new DataModelException(getErrorMsg(
- "YANG file error : decimal64 validation failed.", "decimal64",
- getLineNumber(), getCharPosition(), getFileName() + "\""));
- }
- } else {
- // Check value is in fraction-digits decimal64 value range
- if (!FractionDigits.isValueInDecimal64Range(value, getFractionDigit())) {
- throw new DataModelException(
- "YANG file error : value is not in decimal64 range.");
- }
- }
- }
-
- /**
- * Validate range restriction values based on fraction-digits decimal64 range value.
- *
- * @throws DataModelException a violation of data model rules
- */
- public void validateRange() throws DataModelException {
- YangRangeRestriction rangeRestriction =
- (YangRangeRestriction) getRangeRestrictedExtendedInfo();
- if (rangeRestriction == null) {
- // No need to validate. Range is optional.
- return;
- }
- ListIterator<YangRangeInterval> rangeListIterator =
- rangeRestriction.getAscendingRangeIntervals().listIterator();
- while (rangeListIterator.hasNext()) {
- YangRangeInterval rangeInterval = rangeListIterator.next();
- rangeInterval.setCharPosition(getCharPosition());
- rangeInterval.setLineNumber(getLineNumber());
- rangeInterval.setFileName(getFileName());
- if (!FractionDigits.isValueInDecimal64Range(
- ((YangDecimal64) rangeInterval.getStartValue()).getValue(),
- getFractionDigit())) {
- throw new DataModelException(getErrorMsg(
- "YANG file error : decimal64 validation failed.", "decimal64",
- getLineNumber(), getCharPosition(), getFileName() + "\""));
- }
- if (!FractionDigits.isValueInDecimal64Range(
- ((YangDecimal64) rangeInterval.getEndValue()).getValue(),
- getFractionDigit())) {
- throw new DataModelException(getErrorMsg(
- "YANG file error : decimal64 validation failed.", "decimal64",
- getLineNumber(), getCharPosition(), getFileName() + "\""));
- }
- }
- }
-
- @Override
- public int compareTo(YangDecimal64 o) {
- return Double.compare(value.doubleValue(), o.value.doubleValue());
- }
-
- /**
- * Returns decimal64 default range restriction based on fraction-digits.
- * If range restriction is not provided then this default range value will be applicable.
- *
- * @return range restriction
- * @throws DataModelException a violation of data model rules
- */
- public YangRangeRestriction getDefaultRangeRestriction() throws DataModelException {
- YangRangeRestriction refRangeRestriction = new YangRangeRestriction();
- YangRangeInterval rangeInterval = new YangRangeInterval<>();
- rangeInterval.setCharPosition(getCharPosition());
- rangeInterval.setLineNumber(getLineNumber());
- rangeInterval.setFileName(getFileName());
- FractionDigits.Range range = FractionDigits.getRange(fractionDigit);
- rangeInterval.setStartValue(new YangDecimal64(new BigDecimal((range.getMin()))));
- rangeInterval.setEndValue(new YangDecimal64(new BigDecimal((range.getMax()))));
- refRangeRestriction.addRangeRestrictionInterval(rangeInterval);
- return refRangeRestriction;
- }
-
- /**
- * Validates the data on entering the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnEntry() throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
- }
-
- /**
- * Validates the data on exiting the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnExit() throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDerivedInfo.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDerivedInfo.java
deleted file mode 100644
index d8de31a..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDerivedInfo.java
+++ /dev/null
@@ -1,684 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.ResolvableStatus;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-
-import java.io.Serializable;
-
-import static com.google.common.base.Strings.isNullOrEmpty;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.getErrorMsg;
-import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.INTRA_FILE_RESOLVED;
-import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.RESOLVED;
-import static org.onosproject.yangutils.datamodel.utils.RestrictionResolver.processLengthRestriction;
-import static org.onosproject.yangutils.datamodel.utils.RestrictionResolver.processRangeRestriction;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypeUtils.isOfRangeRestrictedType;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BINARY;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.DECIMAL64;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.IDENTITYREF;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.LEAFREF;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.STRING;
-
-/**
- * Represents the derived information.
- *
- * @param <T> extended information.
- */
-public class YangDerivedInfo<T> extends DefaultLocationInfo
- implements Cloneable, Serializable {
-
- private static final long serialVersionUID = 806201641L;
-
- /**
- * YANG typedef reference.
- */
- private YangTypeDef referredTypeDef;
-
- /**
- * Resolved additional information about data type after linking, example
- * restriction info, named values, etc. The extra information is based
- * on the data type. Based on the data type, the extended info can vary.
- */
- private T resolvedExtendedInfo;
-
- /**
- * Effective built-in type, required in case type of typedef is again a
- * derived type. This information is to be added during linking.
- */
- private YangDataTypes effectiveBuiltInType;
-
- /**
- * Length restriction string to temporary store the length restriction when the type
- * is derived.
- */
- private String lengthRestrictionString;
-
- /**
- * Range restriction string to temporary store the range restriction when the type
- * is derived.
- */
- private String rangeRestrictionString;
-
- /**
- * Pattern restriction string to temporary store the pattern restriction when the type
- * is derived.
- */
- private YangPatternRestriction patternRestriction;
-
- /**
- * Returns the referred typedef reference.
- *
- * @return referred typedef reference
- */
- public YangTypeDef getReferredTypeDef() {
- return referredTypeDef;
- }
-
- /**
- * Sets the referred typedef reference.
- *
- * @param referredTypeDef referred typedef reference
- */
- public void setReferredTypeDef(YangTypeDef referredTypeDef) {
- this.referredTypeDef = referredTypeDef;
- }
-
- /**
- * Returns resolved extended information after successful linking.
- *
- * @return resolved extended information
- */
- public T getResolvedExtendedInfo() {
- return resolvedExtendedInfo;
- }
-
- /**
- * Returns the length restriction string.
- *
- * @return the length restriction string
- */
- public String getLengthRestrictionString() {
- return lengthRestrictionString;
- }
-
- /**
- * Sets the length restriction string.
- *
- * @param lengthRestrictionString the length restriction string
- */
- public void setLengthRestrictionString(String lengthRestrictionString) {
- this.lengthRestrictionString = lengthRestrictionString;
- }
-
- /**
- * Returns the range restriction string.
- *
- * @return the range restriction string
- */
- public String getRangeRestrictionString() {
- return rangeRestrictionString;
- }
-
- /**
- * Sets the range restriction string.
- *
- * @param rangeRestrictionString the range restriction string
- */
- public void setRangeRestrictionString(String rangeRestrictionString) {
- this.rangeRestrictionString = rangeRestrictionString;
- }
-
- /**
- * Returns the pattern restriction.
- *
- * @return the pattern restriction
- */
- public YangPatternRestriction getPatternRestriction() {
- return patternRestriction;
- }
-
- /**
- * Sets the pattern restriction.
- *
- * @param patternRestriction the pattern restriction
- */
- public void setPatternRestriction(YangPatternRestriction patternRestriction) {
- this.patternRestriction = patternRestriction;
- }
-
- /**
- * Returns effective built-in type.
- *
- * @return effective built-in type
- */
- public YangDataTypes getEffectiveBuiltInType() {
- return effectiveBuiltInType;
- }
-
- /**
- * Resolves the type derived info, by obtaining the effective built-in type
- * and resolving the restrictions.
- *
- * @return resolution status
- * @throws DataModelException a violation in data mode rule
- */
- public ResolvableStatus resolve() throws DataModelException {
- YangType<?> baseType = getReferredTypeDef().getTypeDefBaseType();
- YangDataTypes type = baseType.getDataType();
- T extended = (T) baseType.getDataTypeExtendedInfo();
-
- /*
- * Checks the data type of the referred typedef, if it's derived, obtain
- * effective built-in type and restrictions from it's derived info,
- * otherwise take from the base type of type itself.
- */
- if (type == DERIVED) {
- ResolvableStatus resolvableStatus = resolveTypeDerivedInfo(baseType);
- if (resolvableStatus != null) {
- return resolvableStatus;
- }
- } else if (type == LEAFREF || type == IDENTITYREF) {
- effectiveBuiltInType = type;
- return RESOLVED;
- } else {
- effectiveBuiltInType = type;
- /*
- * Check whether the effective built-in type can have range
- * restrictions, if yes call resolution of range.
- */
- if (isOfRangeRestrictedType(effectiveBuiltInType)) {
- return getResolveStatusForRangeRestrictionType(extended);
- } else if (effectiveBuiltInType == STRING) {
- return getResolveStatusForString(extended);
- } else if (effectiveBuiltInType == BINARY) {
- return getResolveStatusForBinary(extended);
- } else if (effectiveBuiltInType == DECIMAL64) {
- return getResolveStatusForDecimal64(extended);
- }
- }
-
- /*
- * Check if the data type is the one which can't be restricted, in this
- * case check whether no self restrictions should be present.
- */
- if (effectiveBuiltInType.isNonRestrictedType()) {
- if (isNullOrEmpty(getLengthRestrictionString()) &&
- isNullOrEmpty(getRangeRestrictionString()) &&
- getPatternRestriction() == null) {
- return RESOLVED;
- } else {
- throw new DataModelException(getErrorMsg(
- "YANG file error: Restrictions can't be applied to a " +
- "given type ", "type.", getLineNumber(),
- getCharPosition(), getFileName() + "\""));
- }
- }
- // Throw exception for unsupported types
- throw new DataModelException(getErrorMsg(
- "Linker error: Unable to process the derived type. ", "type.",
- getLineNumber(), getCharPosition(), getFileName() + "\""));
- }
-
- //Returns resolve status for range restrictions.
- private ResolvableStatus getResolveStatusForRangeRestrictionType(T extended)
- throws DataModelException {
- if (extended == null) {
- resolveRangeRestriction(null);
- /*
- * Return the resolution status as resolved, if it's not
- * resolve range/string restriction will throw exception in
- * previous function.
- */
- return RESOLVED;
- } else {
- if (!(extended instanceof YangRangeRestriction)) {
- throwError();
- }
- resolveRangeRestriction((YangRangeRestriction) extended);
- /*
- * Return the resolution status as resolved, if it's not
- * resolve range/string restriction will throw exception in
- * previous function.
- */
- return RESOLVED;
- }
- }
-
- //Returns resolve status for string.
- private ResolvableStatus getResolveStatusForString(T extended)
- throws DataModelException {
- if (extended == null) {
- resolveStringRestriction(null);
- /*
- * Return the resolution status as resolved, if it's not
- * resolve range/string restriction will throw exception in
- * previous function.
- */
- return RESOLVED;
- } else {
- if (!(extended instanceof YangStringRestriction)) {
- throwError();
- }
- resolveStringRestriction((YangStringRestriction) extended);
- /*
- * Return the resolution status as resolved, if it's not
- * resolve range/string restriction will throw exception in
- * previous function.
- */
- return RESOLVED;
- }
- }
-
- //Returns resolve status for binary type.
- private ResolvableStatus getResolveStatusForBinary(T extended)
- throws DataModelException {
- if (extended == null) {
- resolveBinaryRestriction(null);
- /*
- * Return the resolution status as resolved, if it's not
- * resolve length restriction will throw exception in
- * previous function.
- */
- return RESOLVED;
- } else {
- if (!(extended instanceof YangRangeRestriction)) {
- throwError();
- }
- resolveBinaryRestriction((YangRangeRestriction) extended);
- /*
- * Return the resolution status as resolved, if it's not
- * resolve length restriction will throw exception in
- * previous function.
- */
- return RESOLVED;
- }
- }
-
- //Returns resolve status for decimal64 type.
- private ResolvableStatus getResolveStatusForDecimal64(T extended)
- throws DataModelException {
- if (extended != null) {
- if (((YangDecimal64) extended).getRangeRestrictedExtendedInfo() == null) {
- resolveRangeRestriction(null);
- /*
- * Return the resolution status as resolved, if it's not;
- * resolve range restriction will throw exception in
- * previous function.
- */
- return RESOLVED;
- } else {
- if (!(((YangDecimal64) extended)
- .getRangeRestrictedExtendedInfo() instanceof YangRangeRestriction)) {
- throwError();
- }
- resolveRangeRestriction((YangRangeRestriction) (
- (YangDecimal64) extended).getRangeRestrictedExtendedInfo());
- /*
- * Return the resolution status as resolved, if it's not
- * resolve range/string restriction will throw exception in
- * previous function.
- */
- return RESOLVED;
- }
-
- } else {
- throw new DataModelException(getErrorMsg(
- "Linker error: Unable to find type extended info " +
- "for decimal64.", "type.", getLineNumber(),
- getCharPosition(), getFileName() + "\""));
- }
- }
-
- private void throwError() throws DataModelException {
- throw new DataModelException(getErrorMsg(
- "Linker error: Referred typedef restriction info is of invalid ",
- "type.", getLineNumber(), getCharPosition(), getFileName() + "\""));
- }
-
- /**
- * Resolves the type derived info, by obtaining the effective built-in type
- * and resolving the restrictions.
- *
- * @param baseType base type of typedef
- * @return resolution status
- * @throws DataModelException a violation in data mode rule
- */
- private ResolvableStatus resolveTypeDerivedInfo(YangType<?> baseType)
- throws DataModelException {
-
- //Check whether the referred typedef is resolved.
- if (baseType.getResolvableStatus() != INTRA_FILE_RESOLVED &&
- baseType.getResolvableStatus() != RESOLVED) {
- throwError();
- }
-
- /*
- * Check if the referred typedef is intra file resolved, if yes sets
- * current status also to intra file resolved .
- */
- if (getReferredTypeDef().getTypeDefBaseType()
- .getResolvableStatus() == INTRA_FILE_RESOLVED) {
- return INTRA_FILE_RESOLVED;
- }
- effectiveBuiltInType = ((YangDerivedInfo<?>) baseType
- .getDataTypeExtendedInfo()).getEffectiveBuiltInType();
- YangDerivedInfo refDerivedInfo = (YangDerivedInfo<?>) baseType.getDataTypeExtendedInfo();
- T extendedInfo = (T) refDerivedInfo.getResolvedExtendedInfo();
- /*
- * Check whether the effective built-in type can have range
- * restrictions, if yes call resolution of range.
- */
- if (isOfRangeRestrictedType(effectiveBuiltInType)) {
- return getResolveStatusForRangeRestrictionType(extendedInfo);
- } else if (effectiveBuiltInType == STRING) {
- return getResolveStatusForString(extendedInfo);
- } else if (effectiveBuiltInType == BINARY) {
- return getResolveStatusForBinary(extendedInfo);
- } else if (effectiveBuiltInType == DECIMAL64) {
- if (extendedInfo == null) {
- resolveRangeRestriction(null);
- /*
- * Return the resolution status as resolved, if it's not;
- * resolve range restriction will throw exception in
- * previous function.
- */
- return RESOLVED;
- } else {
- if (!(extendedInfo instanceof YangRangeRestriction)) {
- throwError();
- }
- resolveRangeRestriction((YangRangeRestriction) extendedInfo);
- /*
- * Return the resolution status as resolved, if it's not
- * resolve range/string restriction will throw exception in
- * previous function.
- */
- return RESOLVED;
- }
- }
- return null;
- }
-
- /**
- * Resolves the string restrictions.
- *
- * @param refSr referred string restriction of typedef
- * @throws DataModelException a violation in data model rule
- */
- private void resolveStringRestriction(YangStringRestriction refSr)
- throws DataModelException {
- YangStringRestriction curSr = null;
- YangRangeRestriction refRr = null;
- YangPatternRestriction refPr = null;
-
- /*
- * Check that range restriction should be null when built-in type is
- * string.
- */
- if (!isNullOrEmpty(getRangeRestrictionString())) {
- throw new DataModelException(getErrorMsg(
- "YANG file error: Range restriction should't be present for" +
- " string data type.", ".", getLineNumber(),
- getCharPosition(), getFileName()));
- }
-
- /*
- * If referred restriction and self restriction both are null, no
- * resolution is required.
- */
- if (refSr == null && isNullOrEmpty(getLengthRestrictionString()) &&
- getPatternRestriction() == null) {
- return;
- }
-
- /*
- * If referred string restriction is not null, take value of length and
- * pattern restriction and assign.
- */
- if (refSr != null) {
- refRr = refSr.getLengthRestriction();
- refPr = refSr.getPatternRestriction();
- }
-
- YangRangeRestriction lr = resolveLengthRestriction(refRr);
- YangPatternRestriction pr = resolvePatternRestriction(refPr);
-
- /*
- * Check if either of length or pattern restriction is present, if yes
- * create string restriction and assign value.
- */
- if (lr != null || pr != null) {
- curSr = new YangStringRestriction();
- curSr.setCharPosition(getCharPosition());
- curSr.setFileName(getFileName());
- curSr.setLineNumber(getLineNumber());
- curSr.setLengthRestriction(lr);
- curSr.setPatternRestriction(pr);
- }
- resolvedExtendedInfo = (T) curSr;
- }
-
- /**
- * Resolves the binary restrictions.
- *
- * @param refLr referred length restriction of typedef
- * @throws DataModelException a violation in data model rule
- */
- private void resolveBinaryRestriction(YangRangeRestriction refLr)
- throws DataModelException {
-
- if (rangeRestrictionString != null || patternRestriction != null) {
- throw new DataModelException(getErrorMsg(
- "YANG file error: for binary range restriction or pattern " +
- "restriction is not allowed.", "type.",
- getLineNumber(), getCharPosition(), getFileName()));
- }
-
- // Get the final resolved length restriction
- YangRangeRestriction lr = resolveLengthRestriction(refLr);
- // Set the length restriction.
- resolvedExtendedInfo = (T) lr;
- }
-
- /**
- * Resolves pattern restriction.
- *
- * @param refPr referred pattern restriction of typedef
- * @return resolved pattern restriction
- */
- private YangPatternRestriction resolvePatternRestriction(YangPatternRestriction refPr) {
- /*
- * If referred restriction and self restriction both are null, no
- * resolution is required.
- */
- if (refPr == null && getPatternRestriction() == null) {
- return null;
- }
-
- /*
- * If self restriction is null, and referred restriction is present
- * shallow copy the referred to self.
- */
- if (getPatternRestriction() == null) {
- return refPr;
- }
-
- /*
- * If referred restriction is null, and self restriction is present
- * carry out self resolution.
- */
- if (refPr == null) {
- return getPatternRestriction();
- }
-
- /*
- * Get patterns of referred type and add it to current pattern
- * restrictions.
- */
- for (String pattern : refPr.getPatternList()) {
- getPatternRestriction().addPattern(pattern);
- }
- return getPatternRestriction();
- }
-
- /**
- * Resolves the length restrictions.
- *
- * @param refLenRestriction referred length restriction of typedef
- * @return resolved length restriction
- * @throws DataModelException a violation in data model rule
- */
- private YangRangeRestriction resolveLengthRestriction(
- YangRangeRestriction refLenRestriction) throws DataModelException {
-
- /*
- * If referred restriction and self restriction both are null, no
- * resolution is required.
- */
- if (refLenRestriction == null && isNullOrEmpty(getLengthRestrictionString())) {
- return null;
- }
-
- /*
- * If self restriction is null, and referred restriction is present
- * shallow copy the referred to self.
- */
- if (isNullOrEmpty(getLengthRestrictionString())) {
- return refLenRestriction;
- }
-
- /*
- * If referred restriction is null, and self restriction is present
- * carry out self resolution.
- */
- if (refLenRestriction == null) {
- return processLengthRestriction(
- null, getLineNumber(), getCharPosition(), false,
- getLengthRestrictionString(), getFileName());
- }
-
- /*
- * Carry out self resolution based with obtained effective built-in type
- * and MIN/MAX values as per the referred typedef's values.
- */
- YangRangeRestriction curLengthRestriction =
- processLengthRestriction(refLenRestriction, getLineNumber(),
- getCharPosition(), true,
- getLengthRestrictionString(), getFileName());
-
- // Resolve the range with referred typedef's restriction.
- resolveLengthAndRangeRestriction(refLenRestriction, curLengthRestriction);
- return curLengthRestriction;
- }
-
- /**
- * Resolves the length/range self and referred restriction, to check whether
- * the all the range interval in self restriction is stricter than the
- * referred typedef's restriction.
- *
- * @param refRestriction referred restriction
- * @param curRestriction self restriction
- */
- private void resolveLengthAndRangeRestriction(YangRangeRestriction refRestriction,
- YangRangeRestriction curRestriction)
- throws DataModelException {
- for (Object curInterval : curRestriction.getAscendingRangeIntervals()) {
- if (!(curInterval instanceof YangRangeInterval)) {
- throw new DataModelException(getErrorMsg(
- "Linker error: Current range intervals not processed correctly.",
- "type.", getLineNumber(), getCharPosition(), getFileName()));
- }
- try {
- refRestriction.isValidInterval((YangRangeInterval)
- curInterval, getFileName());
- } catch (DataModelException e) {
- throw new DataModelException(getErrorMsg(
- e.getMessage(), "type.", getLineNumber(), getCharPosition(),
- getFileName()));
- }
- }
- }
-
- /**
- * Resolves the range restrictions.
- *
- * @param refRangeRestriction referred range restriction of typedef
- * @throws DataModelException a violation in data model rule
- */
- private void resolveRangeRestriction(YangRangeRestriction refRangeRestriction)
- throws DataModelException {
-
- /*
- * Check that string restriction should be null when built-in type is of
- * range type.
- */
- if (!isNullOrEmpty(getLengthRestrictionString())
- || getPatternRestriction() != null) {
- throw new DataModelException(getErrorMsg(
- "YANG file error: Length/Pattern restriction should't be present" +
- " for int/uint/decimal data type.", "type.", getLineNumber(),
- getCharPosition(), getFileName()));
- }
-
- /*
- * If referred restriction and self restriction both are null, no
- * resolution is required.
- */
- if (refRangeRestriction == null && isNullOrEmpty(getRangeRestrictionString())) {
- return;
- }
-
- /*
- * If self restriction is null, and referred restriction is present
- * shallow copy the referred to self.
- */
- if (isNullOrEmpty(getRangeRestrictionString())) {
- resolvedExtendedInfo = (T) refRangeRestriction;
- return;
- }
-
- /*
- * If referred restriction is null, and self restriction is present
- * carry out self resolution.
- */
- if (refRangeRestriction == null) {
- YangRangeRestriction curRangeRestriction =
- processRangeRestriction(null, getLineNumber(),
- getCharPosition(), false, getRangeRestrictionString(),
- effectiveBuiltInType, getFileName());
- resolvedExtendedInfo = (T) curRangeRestriction;
- return;
- }
-
- /*
- * Carry out self resolution based with obtained effective built-in type
- * and MIN/MAX values as per the referred typedef's values.
- */
- YangRangeRestriction curRangeRestriction =
- processRangeRestriction(refRangeRestriction, getLineNumber(),
- getCharPosition(), true,
- getRangeRestrictionString(),
- effectiveBuiltInType, getFileName());
-
- // Resolve the range with referred typedef's restriction.
- resolveLengthAndRangeRestriction(refRangeRestriction, curRangeRestriction);
- resolvedExtendedInfo = (T) curRangeRestriction;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDesc.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDesc.java
deleted file mode 100644
index 8c9d60e..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangDesc.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-/**
- * Abstraction of textual description for a YANG entity. Abstracted to unify the
- * parsing and translator processing of description.
- */
-public interface YangDesc {
-
- /**
- * Returns the description of YANG entity.
- *
- * @return the description of YANG entity.
- */
- String getDescription();
-
- /**
- * Set the description of YANG entity.
- *
- * @param description set the description of YANG entity.
- */
- void setDescription(String description);
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangEntityToResolveInfo.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangEntityToResolveInfo.java
deleted file mode 100644
index 77323f1..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangEntityToResolveInfo.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-/**
- * Abstraction of information about entity being resolved.
- *
- * @param <T> type of entity being resolved, uses / grouping
- */
-public interface YangEntityToResolveInfo<T> {
-
- /**
- * Retrieves the entity to be resolved.
- *
- * @return entity to be resolved
- */
- T getEntityToResolve();
-
- /**
- * Sets entity to be resolved.
- *
- * @param entityToResolve entity to be resolved
- */
- void setEntityToResolve(T entityToResolve);
-
- /**
- * Retrieves the parent node which contains the entity to be resolved.
- *
- * @return parent node which contains the entity to be resolved
- */
- YangNode getHolderOfEntityToResolve();
-
- /**
- * Sets parent node which contains the entity to be resolved.
- *
- * @param holderOfEntityToResolve parent node which contains the entity to
- * be resolved
- */
- void setHolderOfEntityToResolve(YangNode holderOfEntityToResolve);
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangEntityToResolveInfoImpl.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangEntityToResolveInfoImpl.java
deleted file mode 100644
index eac5d0c..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangEntityToResolveInfoImpl.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel;
-
-import java.io.Serializable;
-
-/**
- * Represents implementation of information about entity being resolved.
- *
- * @param <T> type of entity being resolved, uses / grouping
- */
-public class YangEntityToResolveInfoImpl<T> extends DefaultLocationInfo
- implements YangEntityToResolveInfo<T>, Serializable {
-
- private static final long serialVersionUID = 806201659L;
-
- /**
- * Parsable node for which resolution is to be performed.
- */
- private T entityToResolve;
-
- /**
- * Holder of the YANG construct for which resolution has to be carried out.
- */
- private YangNode holderOfEntityToResolve;
-
- @Override
- public T getEntityToResolve() {
- return entityToResolve;
- }
-
- @Override
- public void setEntityToResolve(T entityToResolve) {
- this.entityToResolve = entityToResolve;
- }
-
- @Override
- public YangNode getHolderOfEntityToResolve() {
- return holderOfEntityToResolve;
- }
-
- @Override
- public void setHolderOfEntityToResolve(YangNode holderOfEntityToResolve) {
- this.holderOfEntityToResolve = holderOfEntityToResolve;
- }
-
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangEnum.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangEnum.java
deleted file mode 100644
index 47b9381..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangEnum.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import java.io.Serializable;
-import java.util.Objects;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-
-/*-
- * The "ENUM" statement, which is a sub-statement to the "type"
- * statement, MUST be present if the type is "enumeration". It is
- * repeatedly used to specify each assigned name of an enumeration type.
- * It takes as an argument a string which is the assigned name. The
- * string MUST NOT be empty and MUST NOT have any leading or trailing
- * whitespace characters. The use of Unicode control codes SHOULD be
- * avoided.
- *
- * The statement is optionally followed by a block of sub-statements that
- * holds detailed ENUM information.
- * All assigned names in an enumeration MUST be unique.
- *
- * The ENUM's sub-statements
- *
- * +--------------+---------+-------------+------------------+
- * | substatement | section | cardinality |data model mapping|
- * +--------------+---------+-------------+------------------+
- * | description | 7.19.3 | 0..1 | - string |
- * | reference | 7.19.4 | 0..1 | - string |
- * | status | 7.19.2 | 0..1 | - YangStatus |
- * | value | 9.6.4.2 | 0..1 | - int |
- * +--------------+---------+-------------+------------------+
- */
-
-/**
- * Represents the ENUM data type information.
- */
-public class YangEnum extends DefaultLocationInfo implements YangCommonInfo, Parsable, Comparable<YangEnum>,
- Serializable {
-
- private static final long serialVersionUID = 806201643L;
-
- /**
- * Named value for the ENUM.
- */
- private String namedValue;
-
- /**
- * Description of the ENUM value.
- */
- private String description;
-
- /**
- * Reference info of the ENUM value.
- */
- private String reference;
-
- /**
- * Status of the ENUM value.
- */
- private YangStatusType status;
-
- /**
- * Value of ENUM.
- */
- private int value;
-
- /**
- * Create a YANG ENUM.
- */
- public YangEnum() {
-
- }
-
- /**
- * Returns the named value.
- *
- * @return the named value
- */
- public String getNamedValue() {
- return namedValue;
- }
-
- /**
- * Sets the named value.
- *
- * @param namedValue the named value to set
- */
- public void setNamedValue(String namedValue) {
- this.namedValue = namedValue;
- }
-
- /**
- * Returns the description.
- *
- * @return the description
- */
- @Override
- public String getDescription() {
- return description;
- }
-
- /**
- * Sets the description.
- *
- * @param description set the description
- */
- @Override
- public void setDescription(String description) {
- this.description = description;
- }
-
- /**
- * Returns the textual reference.
- *
- * @return the reference
- */
- @Override
- public String getReference() {
- return reference;
- }
-
- /**
- * Sets the textual reference.
- *
- * @param reference the reference to set
- */
- @Override
- public void setReference(String reference) {
- this.reference = reference;
- }
-
- /**
- * Returns the status.
- *
- * @return the status
- */
- @Override
- public YangStatusType getStatus() {
- return status;
- }
-
- /**
- * Sets the status.
- *
- * @param status the status to set
- */
- @Override
- public void setStatus(YangStatusType status) {
- this.status = status;
- }
-
- /**
- * Returns the value.
- *
- * @return the value
- */
- public int getValue() {
- return value;
- }
-
- /**
- * Sets the value.
- *
- * @param value the value to set
- */
- public void setValue(int value) {
- this.value = value;
- }
-
- /**
- * Returns the type of the data.
- *
- * @return ParsedDataType returns ENUM_DATA
- */
- @Override
- public YangConstructType getYangConstructType() {
- return YangConstructType.ENUM_DATA;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj instanceof YangEnum) {
- final YangEnum other = (YangEnum) obj;
- return Objects.equals(namedValue, other.namedValue);
- }
- return false;
- }
-
- @Override
- public int hashCode() {
- return Objects.hashCode(namedValue);
- }
-
- /**
- * Validates the data on entering the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnEntry() throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
- }
-
- /**
- * Validates the data on exiting the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnExit() throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
- }
-
- @Override
- public int compareTo(YangEnum otherEnum) {
- if (namedValue.equals(otherEnum.getNamedValue())) {
- return 0;
- }
- return new Integer(value).compareTo(otherEnum.getValue());
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangEnumeration.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangEnumeration.java
deleted file mode 100644
index f0bb31e..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangEnumeration.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import java.util.SortedSet;
-import java.util.TreeSet;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-
-/*
- * The enumeration built-in type represents values from a set of
- * assigned names.
- */
-
-/**
- * Represents the enumeration data type information.
- */
-public abstract class YangEnumeration
- extends YangNode
- implements Parsable, CollisionDetector {
-
- private static final long serialVersionUID = 806201606L;
-
- // Enumeration info set.
- private SortedSet<YangEnum> enumSet;
-
- /**
- * Creates an enumeration object.
- */
- public YangEnumeration() {
- super(YangNodeType.ENUMERATION_NODE, null);
- setEnumSet(new TreeSet<>());
- }
-
- @Override
- public void addToChildSchemaMap(YangSchemaNodeIdentifier schemaNodeIdentifier,
- YangSchemaNodeContextInfo yangSchemaNodeContextInfo)
- throws DataModelException {
- // Do nothing.
- }
-
- @Override
- public void incrementMandatoryChildCount() {
- // TODO
- }
-
- @Override
- public void addToDefaultChildMap(YangSchemaNodeIdentifier yangSchemaNodeIdentifier, YangSchemaNode yangSchemaNode) {
- // TODO
- }
-
- @Override
- public YangSchemaNodeType getYangSchemaNodeType() {
- return YangSchemaNodeType.YANG_NON_DATA_NODE;
- }
-
- /**
- * Returns the ENUM set.
- *
- * @return the ENUM set
- */
- public SortedSet<YangEnum> getEnumSet() {
- return enumSet;
- }
-
- /**
- * Sets the ENUM set.
- *
- * @param enumSet the ENUM set to set
- */
- private void setEnumSet(SortedSet<YangEnum> enumSet) {
- this.enumSet = enumSet;
- }
-
- /**
- * Adds ENUM information.
- *
- * @param enumInfo the ENUM information to be added
- * @throws DataModelException due to violation in data model rules
- */
- public void addEnumInfo(YangEnum enumInfo)
- throws DataModelException {
- if (!getEnumSet().add(enumInfo)) {
- throw new DataModelException("YANG ENUM already exists " +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition() +
- " in " + getFileName() + "\"");
- }
- }
-
- /**
- * Returns the type of the data.
- *
- * @return returns ENUMERATION_DATA
- */
- @Override
- public YangConstructType getYangConstructType() {
- return YangConstructType.ENUMERATION_DATA;
- }
-
- /**
- * Validates the data on entering the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnEntry()
- throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
- }
-
- /**
- * Validates the data on exiting the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnExit()
- throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
- }
-
- @Override
- public void detectCollidingChild(String identifierName, YangConstructType dataType)
- throws DataModelException {
- /*
- Do nothing, since it is not part of the schema tree, it is only type of an existing node in schema tree.
- */
- }
-
- @Override
- public void detectSelfCollision(String identifierName, YangConstructType dataType)
- throws DataModelException {
- /*
- Do nothing, since it is not part of the schema tree, it is only type of an existing node in schema tree.
- */
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangExtension.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangExtension.java
deleted file mode 100644
index 294de47..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangExtension.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import java.io.Serializable;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-
-/*-
- * Reference RFC 6020.
- *
- * The "extension" statement allows the definition of new statements
- * within the YANG language. This new statement definition can be
- * imported and used by other modules.
- *
- * The statement's argument is an identifier that is the new keyword for
- * the extension and must be followed by a block of sub-statements that
- * holds detailed extension information. The purpose of the "extension"
- * statement is to define a keyword, so that it can be imported and used
- * by other modules.
- *
- * The extension can be used like a normal YANG statement, with the
- * statement name followed by an argument if one is defined by the
- * extension, and an optional block of sub-statements. The statement's
- * name is created by combining the prefix of the module in which the
- * extension was defined, a colon (":"), and the extension's keyword,
- * with no interleaving whitespace. The sub-statements of an extension
- * are defined by the extension, using some mechanism outside the scope
- * of this specification. Syntactically, the sub-statements MUST be YANG
- * statements, or also defined using "extension" statements.
- *
- * The extension's Sub-statements
- *
- * +--------------+---------+-------------+------------------+
- * | substatement | section | cardinality |data model mapping|
- * +--------------+---------+-------------+------------------+
- * | description | 7.19.3 | 0..1 | -string |
- * | reference | 7.19.4 | 0..1 | -string |
- * | status | 7.19.2 | 0..1 | -YangStatus |
- * | argument | 7.17.2 | 0..1 | -string |
- * +--------------+---------+-------------+------------------+
- */
-
-/**
- * Represents data model node to maintain information defined in YANG extension.
- */
-public class YangExtension extends DefaultLocationInfo
- implements YangCommonInfo, Serializable, Parsable {
-
- private static final long serialVersionUID = 806201605L;
-
- /**
- * Name of the extension.
- */
- private String name;
-
- /**
- * Name of the argument.
- */
- private String argumentName;
-
- /**
- * Description of extension.
- */
- private String description;
-
- /**
- * Reference of the extension.
- */
- private String reference;
-
- /**
- * Status of the extension.
- */
- private YangStatusType status = YangStatusType.CURRENT;
-
- /**
- * Returns the YANG name of extension.
- *
- * @return the name of extension as defined in YANG file
- */
- public String getName() {
- return name;
- }
-
- /**
- * Sets the YANG name of extension.
- *
- * @param name the name of extension as defined in YANG file
- */
- public void setName(String name) {
- this.name = name;
- }
-
- /**
- * Returns the YANG argument name of extension.
- *
- * @return the name of argument as defined in YANG file
- */
- public String getArgumentName() {
- return argumentName;
- }
-
- /**
- * Sets the YANG argument name of extension.
- *
- * @param argumentName the name of argument as defined in YANG file
- */
- public void setArgumentName(String argumentName) {
- this.argumentName = argumentName;
- }
-
- /**
- * Returns the description.
- *
- * @return the description
- */
- @Override
- public String getDescription() {
- return description;
- }
-
- /**
- * Sets the description.
- *
- * @param description set the description
- */
- @Override
- public void setDescription(String description) {
- this.description = description;
- }
-
- /**
- * Returns the textual reference.
- *
- * @return the reference
- */
- @Override
- public String getReference() {
- return reference;
- }
-
- /**
- * Sets the textual reference.
- *
- * @param reference the reference to set
- */
- @Override
- public void setReference(String reference) {
- this.reference = reference;
- }
-
- /**
- * Returns the status.
- *
- * @return the status
- */
- @Override
- public YangStatusType getStatus() {
- return status;
- }
-
- /**
- * Sets the status.
- *
- * @param status the status to set
- */
- @Override
- public void setStatus(YangStatusType status) {
- this.status = status;
- }
-
- /**
- * Returns the type of the data.
- *
- * @return returns EXTENSION_DATA
- */
- @Override
- public YangConstructType getYangConstructType() {
- return YangConstructType.EXTENSION_DATA;
- }
-
- /**
- * Validates the data on entering the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnEntry()
- throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
- }
-
- /**
- * Validates the data on exiting the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnExit()
- throws DataModelException {
- // TODO : to be implemented
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangFeature.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangFeature.java
deleted file mode 100644
index 5fcaadf..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangFeature.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import java.io.Serializable;
-import java.util.LinkedList;
-import java.util.List;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-
-/*
- * Reference RFC 6020.
- *
- * The "feature" statement is used to define a mechanism by which
- * portions of the schema are marked as conditional. A feature name is
- * defined that can later be referenced using the "if-feature" statement.
- * Schema nodes tagged with a feature are ignored by the device unless
- * the device supports the given feature. This allows portions of the
- * YANG module to be conditional based on conditions on the device.
- * The model can represent the abilities of the device within the model,
- * giving a richer model that allows for differing device abilities and roles.
- *
- * The argument to the "feature" statement is the name of the new
- * feature, and follows the rules for identifiers. This name is used by the
- * "if-feature" statement to tie the schema nodes to the feature.
- *
- * The feature's Substatements
- *
- * +--------------+---------+-------------+------------------+
- * | substatement | section | cardinality |data model mapping|
- * +--------------+---------+-------------+------------------+
- * | description | 7.19.3 | 0..1 | -string |
- * | if-feature | 7.18.2 | 0..n | -YangIfFeature |
- * | reference | 7.19.4 | 0..1 | -string |
- * | status | 7.19.2 | 0..1 | -YangStatus |
- * +--------------+---------+-------------+------------------+
- */
-
-/**
- * Represents data model node to maintain information defined in YANG feature.
- */
-public class YangFeature extends DefaultLocationInfo
- implements YangCommonInfo, Parsable, YangIfFeatureHolder, Serializable {
-
- private static final long serialVersionUID = 806201635L;
-
- /**
- * Name of the feature.
- */
- private String name;
-
- /**
- * Description of feature.
- */
- private String description;
-
- /**
- * Reference of the feature.
- */
- private String reference;
-
- /**
- * Status of feature.
- */
- private YangStatusType statusType;
-
- /**
- * List of if-feature.
- */
- private List<YangIfFeature> ifFeatureList;
-
- @Override
- public String getDescription() {
- return description;
- }
-
- @Override
- public void setDescription(String description) {
- this.description = description;
- }
-
- @Override
- public String getReference() {
- return reference;
- }
-
- @Override
- public void setReference(String reference) {
- this.reference = reference;
- }
-
- @Override
- public YangStatusType getStatus() {
- return statusType;
- }
-
- @Override
- public void setStatus(YangStatusType status) {
- this.statusType = status;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- @Override
- public YangConstructType getYangConstructType() {
- return YangConstructType.FEATURE_DATA;
- }
-
- @Override
- public void validateDataOnEntry() throws DataModelException {
- //TODO : To be implemented
- }
-
- @Override
- public void validateDataOnExit() throws DataModelException {
- //TODO : To be implemented
- }
-
- @Override
- public List<YangIfFeature> getIfFeatureList() {
- return ifFeatureList;
- }
-
- @Override
- public void addIfFeatureList(YangIfFeature ifFeature) {
- if (getIfFeatureList() == null) {
- setIfFeatureList(new LinkedList<>());
- }
- getIfFeatureList().add(ifFeature);
- }
-
- @Override
- public void setIfFeatureList(List<YangIfFeature> ifFeatureList) {
- this.ifFeatureList = ifFeatureList;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangFeatureHolder.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangFeatureHolder.java
deleted file mode 100644
index a3e15f2..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangFeatureHolder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*Copyright 2016.year Open Networking Laboratory
-
-Licensed 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
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License 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.*/
-
-package org.onosproject.yangutils.datamodel;
-
-import java.util.List;
-
-/**
- * Abstraction of feature entity. It is used to abstract the data holders of feature.
- */
-public interface YangFeatureHolder {
-
- /**
- * Returns the list of feature from data holder like container / list.
- *
- * @return the list of feature
- */
- List<YangFeature> getFeatureList();
-
- /**
- * Adds feature in feature list.
- *
- * @param feature the feature to be added
- */
- void addFeatureList(YangFeature feature);
-
- /**
- * Sets the list of feature.
- *
- * @param listOfFeature the list of feature to set
- */
- void setListOfFeature(List<YangFeature> listOfFeature);
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangGrouping.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangGrouping.java
deleted file mode 100644
index a39fe43..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangGrouping.java
+++ /dev/null
@@ -1,367 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-
-import java.util.LinkedList;
-import java.util.List;
-
-import static java.util.Collections.unmodifiableList;
-import static org.onosproject.yangutils.datamodel.YangNodeType.GROUPING_NODE;
-import static org.onosproject.yangutils.datamodel.YangSchemaNodeType.YANG_NON_DATA_NODE;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.COLLISION_DETECTION;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.GROUPING;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.getErrorMsgCollision;
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.GROUPING_DATA;
-
-/*-
- * Reference RFC 6020.
- *
- * The "grouping" statement is used to define a reusable block of nodes,
- * which may be used locally in the module, in modules that include it,
- * and by other modules that import from it. It takes one argument,
- * which is an identifier, followed by a block of sub-statements that
- * holds detailed grouping information.
- *
- * The "grouping" statement is not a data definition statement and, as
- * such, does not define any nodes in the schema tree.
- *
- * A grouping is like a "structure" or a "record" in conventional
- * programming languages.
- * Once a grouping is defined, it can be referenced in a "uses"
- * statement. A grouping MUST NOT reference itself,
- * neither directly nor indirectly through a chain of other groupings.
- *
- * If the grouping is defined at the top level of a YANG module or
- * submodule, the grouping's identifier MUST be unique within the
- * module.
- *
- * A grouping is more than just a mechanism for textual substitution,
- * but defines a collection of nodes. Identifiers appearing inside the
- * grouping are resolved relative to the scope in which the grouping is
- * defined, not where it is used. Prefix mappings, type names, grouping
- * names, and extension usage are evaluated in the hierarchy where the
- * "grouping" statement appears. For extensions, this means that
- * extensions are applied to the grouping node, not the uses node.
- *
- * The grouping's sub-statements
- *
- * +--------------+---------+-------------+------------------+
- * | substatement | section | cardinality |data model mapping|
- * +--------------+---------+-------------+------------------+
- * | anyxml | 7.10 | 0..n |-not supported |
- * | choice | 7.9 | 0..n |-child nodes |
- * | container | 7.5 | 0..n |-child nodes |
- * | description | 7.19.3 | 0..1 |-string |
- * | grouping | 7.11 | 0..n |-child nodes |
- * | leaf | 7.6 | 0..n |-YangLeaf |
- * | leaf-list | 7.7 | 0..n |-YangLeafList |
- * | list | 7.8 | 0..n |-child nodes |
- * | reference | 7.19.4 | 0..1 |-string |
- * | status | 7.19.2 | 0..1 |-YangStatus |
- * | typedef | 7.3 | 0..n |-child nodes |
- * | uses | 7.12 | 0..n |-child nodes |
- * +--------------+---------+-------------+------------------+
- */
-
-/**
- * Represents data model node to maintain information defined in YANG grouping.
- */
-public abstract class YangGrouping
- extends YangNode
- implements YangLeavesHolder, YangCommonInfo, Parsable, CollisionDetector,
- YangTranslatorOperatorNode {
-
- private static final long serialVersionUID = 806201607L;
-
- /**
- * Description.
- */
- private String description;
-
- /**
- * List of leaves.
- */
- private List<YangLeaf> listOfLeaf;
-
- /**
- * List of leaf lists.
- */
- private List<YangLeafList> listOfLeafList;
-
- /**
- * Reference of the module.
- */
- private String reference;
-
- /**
- * Status of the node.
- */
- private YangStatusType status;
-
- /**
- * Grouping depth.
- */
- private int groupingDepth;
-
- /**
- * Creates the grouping node.
- */
- public YangGrouping() {
- super(GROUPING_NODE, null);
- listOfLeaf = new LinkedList<>();
- listOfLeafList = new LinkedList<>();
- }
-
- @Override
- public void addToChildSchemaMap(YangSchemaNodeIdentifier id,
- YangSchemaNodeContextInfo context)
- throws DataModelException {
- // Do nothing, to be handled during linking.
- }
-
- @Override
- public void incrementMandatoryChildCount() {
- // Do nothing, to be handled during linking.
- }
-
- @Override
- public void addToDefaultChildMap(YangSchemaNodeIdentifier id,
- YangSchemaNode node) {
- // Do nothing, to be handled during linking.
- }
-
- @Override
- public YangSchemaNodeType getYangSchemaNodeType() {
- return YANG_NON_DATA_NODE;
- }
-
- /**
- * Returns the description.
- *
- * @return the description
- */
- @Override
- public String getDescription() {
- return description;
- }
-
- /**
- * Sets the description.
- *
- * @param description set the description
- */
- @Override
- public void setDescription(String description) {
- this.description = description;
- }
-
- /**
- * Returns the list of leaves.
- *
- * @return the list of leaves
- */
- @Override
- public List<YangLeaf> getListOfLeaf() {
- return unmodifiableList(listOfLeaf);
- }
-
- /**
- * Sets the list of leaves.
- *
- * @param leafsList the list of leaf to set
- */
- @Override
- public void setListOfLeaf(List<YangLeaf> leafsList) {
- listOfLeaf = leafsList;
- }
-
- /**
- * Adds a leaf.
- *
- * @param leaf the leaf to be added
- */
- @Override
- public void addLeaf(YangLeaf leaf) {
- listOfLeaf.add(leaf);
- }
-
- /**
- * Returns the list of leaf-list.
- *
- * @return the list of leaf-list
- */
- @Override
- public List<YangLeafList> getListOfLeafList() {
- return unmodifiableList(listOfLeafList);
- }
-
- /**
- * Sets the list of leaf-list.
- *
- * @param listOfLeafList the list of leaf-list to set
- */
- @Override
- public void setListOfLeafList(List<YangLeafList> listOfLeafList) {
- this.listOfLeafList = listOfLeafList;
- }
-
- /**
- * Adds a leaf-list.
- *
- * @param leafList the leaf-list to be added
- */
- @Override
- public void addLeafList(YangLeafList leafList) {
- listOfLeafList.add(leafList);
- }
-
- /**
- * Returns the textual reference.
- *
- * @return the reference
- */
- @Override
- public String getReference() {
- return reference;
- }
-
- /**
- * Sets the textual reference.
- *
- * @param reference the reference to set
- */
- @Override
- public void setReference(String reference) {
- this.reference = reference;
- }
-
- /**
- * Returns the status.
- *
- * @return the status
- */
- @Override
- public YangStatusType getStatus() {
- return status;
- }
-
- /**
- * Sets the status.
- *
- * @param status the status to set
- */
- @Override
- public void setStatus(YangStatusType status) {
- this.status = status;
- }
-
- /**
- * Returns the type of the data.
- *
- * @return returns GROUPING_DATA
- */
- @Override
- public YangConstructType getYangConstructType() {
- return GROUPING_DATA;
- }
-
- /**
- * Validates the data on entering the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnEntry()
- throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
- }
-
- /**
- * Validates the data on exiting the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnExit()
- throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
- }
-
- /*
- * Reference RFC6020
- *
- * Once a grouping is defined, it can be referenced in a "uses"
- * statement (see Section 7.12). A grouping MUST NOT reference itself,
- * neither directly nor indirectly through a chain of other groupings.
- *
- * If the grouping is defined at the top level of a YANG module or
- * submodule, the grouping's identifier MUST be unique within the
- * module.
- */
- @Override
- public void detectCollidingChild(String identifierName, YangConstructType dataType)
- throws DataModelException {
- // Asks helper to detect colliding child.
- detectCollidingChildUtil(identifierName, dataType, this);
- }
-
- @Override
- public void detectSelfCollision(String identifierName, YangConstructType dataType)
- throws DataModelException {
- if (getName().equals(identifierName)) {
- throw new DataModelException(
- getErrorMsgCollision(COLLISION_DETECTION, getName(),
- getLineNumber(), getCharPosition(),
- GROUPING, getFileName()));
- }
- }
-
- @Override
- public void setLeafNameSpaceAndAddToParentSchemaMap() {
- // Add namespace for all leafs.
- for (YangLeaf yangLeaf : listOfLeaf) {
- yangLeaf.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
- }
- // Add namespace for all leaf list.
- for (YangLeafList yangLeafList : listOfLeafList) {
- yangLeafList.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
- }
- }
- // TODO A grouping MUST NOT reference itself, neither directly nor indirectly through a chain of other groupings.
-
- /**
- * Returns grouping depth.
- *
- * @return grouping depth
- */
- public int getGroupingDepth() {
- return groupingDepth;
- }
-
- /**
- * Sets grouping depth.
- *
- * @param groupingDepth grouping depth
- */
- public void setGroupingDepth(int groupingDepth) {
- this.groupingDepth = groupingDepth;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangIdentity.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangIdentity.java
deleted file mode 100644
index 1f08863..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangIdentity.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel;
-
-import java.io.Serializable;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-
-/*-
- * Reference RFC 6020.
- *
- * The "identity" statement is used to define a new globally unique,
- * abstract, and untyped identity. Its only purpose is to denote its
- * name, semantics, and existence. An identity can either be defined
- * from scratch or derived from a base identity. The identity's
- * argument is an identifier that is the name of the identity. It is
- * followed by a block of substatements that holds detailed identity
- * information.
- *
- * The identity's Substatements
- *
- * +--------------+---------+-------------+-----------------------+
- * | substatement | section | cardinality | data model mapping |
- * +--------------+---------+-------------+-----------------------+
- * | base | 7.16.2 | 0..1 | -YangNodeIdentifier |
- * | description | 7.19.3 | 0..1 | -string |
- * | reference | 7.19.4 | 0..1 | -string |
- * | status | 7.19.2 | 0..1 | -YangStatus |
- * +--------------+---------+-------------+-----------------------+
- */
-
-/**
- * Represents data model node to maintain information defined in YANG identity.
- */
-public abstract class YangIdentity
- extends YangNode
- implements YangCommonInfo, Parsable, Serializable, YangTranslatorOperatorNode {
-
- private static final long serialVersionUID = 806201691L;
-
- //Base node of identity.
- private YangBase baseNode;
-
- //Status of YANG identity.
- private YangStatusType status;
-
- //Description of YANG identity.
- private String description;
-
- //YANG reference of the identity.
- private String reference;
-
- //Creates a identity type of node.
- public YangIdentity() {
- super(YangNodeType.IDENTITY_NODE, null);
- }
-
- @Override
- public void addToChildSchemaMap(YangSchemaNodeIdentifier schemaNodeIdentifier,
- YangSchemaNodeContextInfo yangSchemaNodeContextInfo)
- throws DataModelException {
- // Do nothing.
- }
-
- @Override
- public void incrementMandatoryChildCount() {
- // TODO
- }
-
- @Override
- public void addToDefaultChildMap(YangSchemaNodeIdentifier yangSchemaNodeIdentifier, YangSchemaNode yangSchemaNode) {
- // TODO
- }
-
- @Override
- public YangSchemaNodeType getYangSchemaNodeType() {
- return YangSchemaNodeType.YANG_NON_DATA_NODE;
- }
-
- @Override
- public YangStatusType getStatus() {
- return status;
- }
-
- @Override
- public void setStatus(YangStatusType status) {
- this.status = status;
- }
-
- @Override
- public String getDescription() {
- return description;
- }
-
- @Override
- public void setDescription(String description) {
- this.description = description;
- }
-
- @Override
- public String getReference() {
- return reference;
- }
-
- @Override
- public void setReference(String reference) {
- this.reference = reference;
- }
-
- @Override
- public YangConstructType getYangConstructType() {
- return YangConstructType.IDENTITY_DATA;
- }
-
- @Override
- public void validateDataOnEntry()
- throws DataModelException {
- }
-
- @Override
- public void validateDataOnExit()
- throws DataModelException {
- }
-
- /**
- * Returns base node of identity.
- *
- * @return the base node of identity
- */
- public YangBase getBaseNode() {
- return baseNode;
- }
-
- /**
- * Sets the base node.
- *
- * @param baseNode the base node to set
- */
- public void setBaseNode(YangBase baseNode) {
- this.baseNode = baseNode;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangIdentityRef.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangIdentityRef.java
deleted file mode 100644
index c1f4b84..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangIdentityRef.java
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel;
-
-import java.io.Serializable;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.ResolvableStatus;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-
-/*-
- * Reference RFC 6020.
- *
- * The identityref type is used to reference an existing identity.
- *
- * The identityref's base Statement :
- * The "base" statement, which is a substatement to the "type"
- * statement, MUST be present if the type is "identityref". The
- * argument is the name of an identity, as defined by an "identity"
- * statement. If a prefix is present on the identity name, it refers to
- * an identity defined in the module that was imported with that prefix.
- * Otherwise, an identity with the matching name MUST be defined in the
- * current module or an included submodule.
- * Valid values for an identityref are any identities derived from the
- * identityref's base identity. On a particular server, the valid
- * values are further restricted to the set of identities defined in the
- * modules supported by the server.
- */
-
-/**
- * Represents data model node to maintain information defined in YANG identityref.
- */
-public class YangIdentityRef
- extends YangNode
- implements Cloneable, Parsable, Resolvable, Serializable {
-
- private static final long serialVersionUID = 806201692L;
-
- // Get referred identity parent information.
- private YangIdentity referredIdentity;
-
- // YANG node identifier.
- private YangNodeIdentifier baseIdentity;
-
- /**
- * Status of resolution. If completely resolved enum value is "RESOLVED",
- * if not enum value is "UNRESOLVED", in case reference of grouping/typedef/identityref/base
- * is added to uses/type/identityref/base but it's not resolved value of enum should be
- * "INTRA_FILE_RESOLVED".
- */
- private ResolvableStatus resolvableStatus;
-
- /**
- * Resolution for interfile grouping.
- */
- private boolean isIdentityForInterFileGroupingResolution;
-
- /**
- * Flag to indicate whether the leaf ref is inside grouping.
- */
- private boolean inGrouping;
-
- // Creates a specific identityref of node.
- public YangIdentityRef() {
- super(YangNodeType.IDENTITYREF_NODE, null);
- baseIdentity = new YangNodeIdentifier();
- resolvableStatus = ResolvableStatus.UNRESOLVED;
- }
-
- @Override
- public void addToChildSchemaMap(YangSchemaNodeIdentifier schemaNodeIdentifier,
- YangSchemaNodeContextInfo yangSchemaNodeContextInfo)
- throws DataModelException {
- // Do nothing.
- }
-
- @Override
- public void incrementMandatoryChildCount() {
- // TODO
- }
-
- @Override
- public void addToDefaultChildMap(YangSchemaNodeIdentifier yangSchemaNodeIdentifier, YangSchemaNode yangSchemaNode) {
- // TODO
- }
-
- @Override
- public YangSchemaNodeType getYangSchemaNodeType() {
- return YangSchemaNodeType.YANG_NON_DATA_NODE;
- }
-
- @Override
- public ResolvableStatus getResolvableStatus() {
- return resolvableStatus;
- }
-
- @Override
- public void setResolvableStatus(ResolvableStatus resolvableStatus) {
- this.resolvableStatus = resolvableStatus;
- }
-
- @Override
- public Object resolve()
- throws DataModelException {
-
- // Check if the derived info is present.
- YangIdentity identity = getReferredIdentity();
-
- if (identity == null) {
- throw new DataModelException("Linker Error: Identity information is missing. " +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition() +
- " in " + getFileName() + "\"");
- }
-
- while (identity.getBaseNode() != null) {
- if (identity.getBaseNode().getResolvableStatus() != ResolvableStatus.RESOLVED) {
- setResolvableStatus(ResolvableStatus.INTRA_FILE_RESOLVED);
- return null;
- }
- identity = identity.getBaseNode().getReferredIdentity();
- }
- return null;
- }
-
- /**
- * Returns the YANG base node identifier.
- *
- * @return the YANG base node identifier
- */
- public YangNodeIdentifier getBaseIdentity() {
- return baseIdentity;
- }
-
- /**
- * Sets the YANG node identifier.
- *
- * @param baseIdentity the YANG node identifier to set
- */
- public void setBaseIdentity(YangNodeIdentifier baseIdentity) {
- this.baseIdentity = baseIdentity;
- }
-
- /**
- * Returns the name of identity.
- *
- * @return the identity name
- */
- @Override
- public String getName() {
- return baseIdentity.getName();
- }
-
- /**
- * Sets the name of identity.
- *
- * @param name the identity name to set
- */
- @Override
- public void setName(String name) {
- baseIdentity.setName(name);
- }
-
- /**
- * Sets node identifier.
- *
- * @param nodeIdentifier the node identifier
- */
- public void setNodeIdentifier(YangNodeIdentifier nodeIdentifier) {
- this.baseIdentity = nodeIdentifier;
- }
-
- /**
- * Returns prefix associated with base.
- *
- * @return prefix associated with base
- */
- public String getPrefix() {
- return baseIdentity.getPrefix();
- }
-
- /**
- * Sets prefix associated with base.
- *
- * @param prefix prefix associated with base
- */
- public void setPrefix(String prefix) {
- baseIdentity.setPrefix(prefix);
- }
-
- @Override
- public YangConstructType getYangConstructType() {
- return YangConstructType.IDENTITYREF_DATA;
- }
-
- @Override
- public void validateDataOnEntry()
- throws DataModelException {
- }
-
- @Override
- public void validateDataOnExit()
- throws DataModelException {
- }
-
- /**
- * Returns the parent identity node.
- *
- * @return the parent identity node
- */
- public YangIdentity getReferredIdentity() {
- return referredIdentity;
- }
-
- /**
- * Sets the parent identity node.
- *
- * @param referredIdentity the parent identity node to set
- */
- public void setReferredIdentity(YangIdentity referredIdentity) {
- this.referredIdentity = referredIdentity;
- }
-
- public boolean isIdentityForInterFileGroupingResolution() {
- return isIdentityForInterFileGroupingResolution;
- }
-
- public void setIdentityForInterFileGroupingResolution(
- boolean identityForInterFileGroupingResolution) {
- isIdentityForInterFileGroupingResolution =
- identityForInterFileGroupingResolution;
- }
-
- @Override
- public YangIdentityRef clone()
- throws CloneNotSupportedException {
- YangIdentityRef identityRef = (YangIdentityRef) super.clone();
- return identityRef;
- }
-
- @Override
- public String getJavaPackage() {
- //TODO: throw exception
- return null;
- }
-
- @Override
- public String getJavaClassNameOrBuiltInType() {
- //TODO: throw exception
- return null;
- }
-
- @Override
- public String getJavaAttributeName() {
- throw new RuntimeException("Attribute name is not applicable ");
- }
-
- /**
- * Returns flag value indicating whether leafref is inside grouping.
- *
- * @return true if leafref is in grouping, false otherwise
- */
- public boolean isInGrouping() {
- return inGrouping;
- }
-
- /**
- * Sets in grouping flag.
- *
- * @param inGrouping flag
- */
- public void setInGrouping(boolean inGrouping) {
- this.inGrouping = inGrouping;
- }
-
- @Override
- public YangNode clone(YangUses yangUses) throws CloneNotSupportedException {
- return (YangNode) super.clone();
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangIfFeature.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangIfFeature.java
deleted file mode 100644
index 5134356..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangIfFeature.java
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import java.io.Serializable;
-import java.util.Iterator;
-import java.util.List;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.ResolvableStatus;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-
-/*
- * Reference RFC 6020.
- *
- * The "if-feature" statement makes its parent statement conditional.
- * The argument is the name of a feature, as defined by a "feature"
- * statement. The parent statement is implemented by servers that
- * support this feature. If a prefix is present on the feature name, it
- * refers to a feature defined in the module that was imported with that
- * prefix, or the local module if the prefix matches the local module's
- * prefix. Otherwise, a feature with the matching name MUST be defined
- * in the current module or an included submodule.
- *
- * Since submodules cannot include the parent module, any features in
- * the module that need to be exposed to submodules MUST be defined in a
- * submodule. Submodules can then include this submodule to find the
- * definition of the feature.
- */
-
-/**
- * Represents data model node to maintain information defined in YANG if-feature.
- */
-public class YangIfFeature extends DefaultLocationInfo
- implements Parsable, Resolvable, Serializable {
-
- private static final long serialVersionUID = 806201635L;
-
- /**
- * if-feature argument.
- */
- private YangNodeIdentifier name;
-
- /**
- * Referred feature information.
- */
- private YangFeature referredFeature;
-
- /**
- * Referred feature parent information.
- */
- private YangNode referredFeatureHolder;
-
- /**
- * Status of resolution. If completely resolved enum value is "RESOLVED",
- * if not enum value is "UNRESOLVED", in case reference of grouping/typedef
- * is added to uses/type but it's not resolved value of enum should be
- * "INTRA_FILE_RESOLVED".
- */
- private ResolvableStatus resolvableStatus;
-
- /**
- * Returns referred feature holder.
- *
- * @return referred feature holder
- */
- public YangNode getReferredFeatureHolder() {
- return referredFeatureHolder;
- }
-
- /**
- * Sets the referred feature holder.
- *
- * @param referredFeatureHolder referred feature holder
- */
- public void setReferredFeatureHolder(YangNode referredFeatureHolder) {
- this.referredFeatureHolder = referredFeatureHolder;
- }
-
- /**
- * Returns prefix associated with identifier.
- *
- * @return prefix associated with identifier
- */
- public String getPrefix() {
- return name.getPrefix();
- }
-
- /**
- * Sets prefix associated with identifier.
- *
- * @param prefix prefix associated with identifier
- */
- public void setPrefix(String prefix) {
- name.setPrefix(prefix);
- }
-
- /**
- * Returns referred feature associated with if-feature.
- *
- * @return referred feature associated with if-feature
- */
- public YangFeature getReferredFeature() {
- return referredFeature;
- }
-
- /**
- * Sets referred feature associated with if-feature.
- *
- * @param referredFeature referred feature associated with if-feature
- */
- public void setReferredFeature(YangFeature referredFeature) {
- this.referredFeature = referredFeature;
- }
-
- /**
- * Returns the YANG name of if-feature.
- *
- * @return the name of if-feature as defined in YANG file
- */
- public YangNodeIdentifier getName() {
- return name;
- }
-
- /**
- * Sets the YANG name of if-feature.
- *
- * @param name the name of if-feature as defined in YANG file
- */
- public void setName(YangNodeIdentifier name) {
- this.name = name;
- }
-
- @Override
- public YangConstructType getYangConstructType() {
- return YangConstructType.IF_FEATURE_DATA;
- }
-
- @Override
- public void validateDataOnEntry() throws DataModelException {
- // do nothing, no validation required for if-feature
- }
-
- @Override
- public void validateDataOnExit() throws DataModelException {
- // do nothing, no validation required for if-feature
- }
-
- @Override
- public ResolvableStatus getResolvableStatus() {
- return resolvableStatus;
- }
-
- @Override
- public void setResolvableStatus(ResolvableStatus resolvableStatus) {
- this.resolvableStatus = resolvableStatus;
- }
-
- @Override
- public Object resolve() throws DataModelException {
- YangFeature feature = getReferredFeature();
-
- // check whether feature has if-feature
- List<YangIfFeature> ifFeatureList = feature.getIfFeatureList();
- if (ifFeatureList != null && !ifFeatureList.isEmpty()) {
- Iterator<YangIfFeature> ifFeatureIterator = ifFeatureList.iterator();
- while (ifFeatureIterator.hasNext()) {
- YangIfFeature ifFeature = ifFeatureIterator.next();
- if (ifFeature.getResolvableStatus() != ResolvableStatus.RESOLVED) {
- setResolvableStatus(ResolvableStatus.INTRA_FILE_RESOLVED);
- return null;
- }
- }
- }
- return null;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangIfFeatureHolder.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangIfFeatureHolder.java
deleted file mode 100644
index 46c3233..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangIfFeatureHolder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*Copyright 2016.year Open Networking Laboratory
-
-Licensed 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
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License 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.*/
-
-package org.onosproject.yangutils.datamodel;
-
-import java.util.List;
-
-/**
- * Abstraction of if-feature entity. It is used to abstract the data holders of if-feature.
- */
-public interface YangIfFeatureHolder {
-
- /**
- * Returns the list of if-feature from data holder like container / list.
- *
- * @return the list of if-feature
- */
- List<YangIfFeature> getIfFeatureList();
-
- /**
- * Adds if-feature in if-feature list.
- *
- * @param ifFeature the if-feature to be added
- */
- void addIfFeatureList(YangIfFeature ifFeature);
-
- /**
- * Sets the list of if-feature.
- *
- * @param ifFeatureList the list of if-feature to set
- */
- void setIfFeatureList(List<YangIfFeature> ifFeatureList);
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangImport.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangImport.java
deleted file mode 100644
index b0d9f9e..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangImport.java
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel;
-
-import java.io.Serializable;
-import java.util.Date;
-import java.util.Set;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.findReferredNode;
-
-/*
- * Reference:RFC 6020.
- * The "import" statement makes definitions from one module available
- * inside another module or submodule. The argument is the name of the
- * module to import, and the statement is followed by a block of
- * sub statements that holds detailed import information.
- * When a module is imported, the importing module may:
- * o use any grouping and typedef defined at the top level in the
- * imported module or its submodules.
- *
- * o use any extension, feature, and identity defined in the imported
- * module or its submodules.
- *
- * o use any node in the imported module's schema tree in "must",
- * "path", and "when" statements, or as the target node in "augment"
- * and "deviation" statements.
- *
- * The mandatory "prefix" sub statement assigns a prefix for the imported
- * module that is scoped to the importing module or submodule. Multiple
- * "import" statements may be specified to import from different
- * modules.
- * When the optional "revision-date" sub-statement is present, any
- * typedef, grouping, extension, feature, and identity referenced by
- * definitions in the local module are taken from the specified revision
- * of the imported module. It is an error if the specified revision of
- * the imported module does not exist. If no "revision-date"
- * sub-statement is present, it is undefined from which revision of the
- * module they are taken.
- *
- * Multiple revisions of the same module MUST NOT be imported.
- *
- * The import's Substatements
- *
- * +---------------+---------+-------------+------------------+
- * | substatement | section | cardinality |data model mapping|
- * +---------------+---------+-------------+------------------+
- * | prefix | 7.1.4 | 1 | string |
- * | revision-date | 7.1.5.1 | 0..1 | Date |
- * +---------------+---------+-------------+------------------+
- */
-
-/**
- * Represents the information about the imported modules.
- */
-public class YangImport extends DefaultLocationInfo
- implements Parsable, Serializable {
-
- private static final long serialVersionUID = 806201642L;
-
- /**
- * Name of the module that is being imported.
- */
- private String name;
-
- /**
- * Prefix used to identify the entities from the imported module.
- */
- private String prefixId;
-
- /**
- * Reference:RFC 6020.
- * <p>
- * The import's "revision-date" statement is used to specify the exact
- * version of the module to import. The "revision-date" statement MUST match
- * the most recent "revision" statement in the imported module. organization
- * which defined the YANG module.
- */
- private Date revision;
-
- /**
- * Reference to node which is imported.
- */
- private YangNode importedNode;
-
- /**
- * Creates a YANG import.
- */
- public YangImport() {
- }
-
- /**
- * Returns the imported module name.
- *
- * @return the module name
- */
- public String getModuleName() {
- return name;
- }
-
- /**
- * Sets module name.
- *
- * @param moduleName the module name to set
- */
- public void setModuleName(String moduleName) {
- name = moduleName;
- }
-
- /**
- * Returns the prefix used to identify the entities from the imported module.
- *
- * @return the prefix used to identify the entities from the imported
- * module
- */
- public String getPrefixId() {
- return prefixId;
- }
-
- /**
- * Sets prefix identifier.
- *
- * @param prefixId set the prefix identifier of the imported module
- */
- public void setPrefixId(String prefixId) {
- this.prefixId = prefixId;
- }
-
- /**
- * Returns the revision of the imported module.
- *
- * @return the revision of the imported module
- */
- public Date getRevision() {
- return revision;
- }
-
- /**
- * Sets the revision of the imported module.
- *
- * @param rev set the revision of the imported module
- */
- public void setRevision(Date rev) {
- revision = rev;
- }
-
- /**
- * Returns the type of the parsed data.
- *
- * @return returns IMPORT_DATA
- */
- @Override
- public YangConstructType getYangConstructType() {
- return YangConstructType.IMPORT_DATA;
- }
-
- /**
- * Validates the data on entering the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnEntry()
- throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
-
- }
-
- /**
- * Validates the data on exiting the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnExit()
- throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
-
- }
-
- /**
- * Returns imported node.
- *
- * @return imported node
- */
- public YangNode getImportedNode() {
- return importedNode;
- }
-
- /**
- * Sets imported node.
- *
- * @param importedNode imported node
- */
- public void setImportedNode(YangNode importedNode) {
- this.importedNode = importedNode;
- }
-
- /**
- * Adds reference to an import.
- *
- * @param yangNodeSet YANG file info set
- * @throws DataModelException a violation of data model rules
- */
- public void addReferenceToImport(Set<YangNode> yangNodeSet) throws DataModelException {
- String importedModuleName = getModuleName();
- Date importedModuleRevision = getRevision();
- YangNode moduleNode = null;
- /*
- * Find the imported module node for a given module name with a
- * specified revision if revision is not null.
- */
- if (importedModuleRevision != null) {
- String importedModuleNameWithRevision = importedModuleName + "@" + importedModuleRevision;
- moduleNode = findReferredNode(yangNodeSet, importedModuleNameWithRevision);
- }
-
- /*
- * Find the imported module node for a given module name without
- * revision if can't find with revision.
- */
- if (moduleNode == null) {
- moduleNode = findReferredNode(yangNodeSet, importedModuleName);
- }
-
- if (moduleNode != null) {
- if (moduleNode instanceof YangModule) {
- if (getRevision() == null) {
- setImportedNode(moduleNode);
- return;
- }
- // Match revision if import is with revision.
- if (moduleNode.getRevision() != null && (moduleNode
- .getRevision().getRevDate()
- .equals(importedModuleRevision))) {
- setImportedNode(moduleNode);
- return;
- }
- }
- }
-
- // Exception if there is no match.
- DataModelException exception = new DataModelException("YANG file error : Imported module "
- + importedModuleName + " with revision " + importedModuleRevision + " is not found.");
- exception.setLine(getLineNumber());
- exception.setCharPosition(getCharPosition());
- exception.setFileName(getFileName());
- throw exception;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangInclude.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangInclude.java
deleted file mode 100644
index 3be5d7b..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangInclude.java
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel;
-
-import java.io.Serializable;
-import java.util.Date;
-import java.util.Set;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.findReferredNode;
-
-/*
- * Reference:RFC 6020.
- * The "include" statement is used to make content from a submodule
- * available to that submodule's parent module, or to another submodule
- * of that parent module. The argument is an identifier that is the
- * name of the submodule to include.
- * The includes's Substatements
- *
- * +---------------+---------+-------------+------------------+
- * | substatement | section | cardinality |data model mapping|
- * +---------------+---------+-------------+------------------+
- * | revision-date | 7.1.5.1 | 0..1 | string |
- * +---------------+---------+-------------+------------------+
- */
-
-/**
- * Represents the information about the included sub-modules.
- */
-public class YangInclude extends DefaultLocationInfo
- implements Parsable, Serializable {
-
- private static final long serialVersionUID = 806201644L;
-
- /**
- * Name of the sub-module that is being included.
- */
- private String subModuleName;
-
- /**
- * The include's "revision-date" statement is used to specify the exact
- * version of the submodule to import.
- */
- private Date revision;
-
- /**
- * Reference to node which is included.
- */
- private YangNode includedNode;
-
- /**
- * Creates a YANG include.
- */
- public YangInclude() {
- }
-
- /**
- * Returns the name of included sub-module.
- *
- * @return the sub-module name
- */
- public String getSubModuleName() {
- return subModuleName;
- }
-
- /**
- * Sets the name of included sub-modules.
- *
- * @param subModuleName the sub-module name to set
- */
- public void setSubModuleName(String subModuleName) {
- this.subModuleName = subModuleName;
- }
-
- /**
- * Returns the revision.
- *
- * @return the revision
- */
- public Date getRevision() {
- return revision;
- }
-
- /**
- * Sets the revision.
- *
- * @param revision the revision to set
- */
- public void setRevision(Date revision) {
- this.revision = revision;
- }
-
- /**
- * Returns the type of parsed data.
- *
- * @return returns INCLUDE_DATA
- */
- @Override
- public YangConstructType getYangConstructType() {
- return YangConstructType.INCLUDE_DATA;
- }
-
- /**
- * Validates the data on entering the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnEntry()
- throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
-
- }
-
- /**
- * Validates the data on exiting the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnExit()
- throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
-
- }
-
- public YangNode getIncludedNode() {
- return includedNode;
- }
-
- public void setIncludedNode(YangNode includedNode) {
- this.includedNode = includedNode;
- }
-
- /**
- * Adds reference to an include.
- *
- * @param yangNodeSet YANG node set
- * @return YANG sub module node
- * @throws DataModelException a violation of data model rules
- */
- public YangSubModule addReferenceToInclude(Set<YangNode> yangNodeSet) throws DataModelException {
- String includedSubModuleName = getSubModuleName();
- Date includedSubModuleRevision = getRevision();
- YangNode subModuleNode = null;
-
- /*
- * Find the included sub-module node for a given module name with a
- * specified revision if revision is not null.
- */
- if (includedSubModuleRevision != null) {
- String includedSubModuleNameWithRevision = includedSubModuleName + "@" + includedSubModuleRevision;
- subModuleNode = findReferredNode(yangNodeSet, includedSubModuleNameWithRevision);
- }
-
- /*
- * Find the imported sub module node for a given module name without
- * revision if can't find with revision.
- */
- if (subModuleNode == null) {
- subModuleNode = findReferredNode(yangNodeSet, includedSubModuleName);
- }
-
- if (subModuleNode != null) {
- if (subModuleNode instanceof YangSubModule) {
- if (getRevision() == null) {
- setIncludedNode(subModuleNode);
- return (YangSubModule) subModuleNode;
- }
-
- // Match revision if inclusion is with revision.
- if (subModuleNode.getRevision() != null && subModuleNode
- .getRevision().getRevDate()
- .equals(includedSubModuleRevision)) {
- setIncludedNode(subModuleNode);
- return (YangSubModule) subModuleNode;
- }
- }
- }
- // Exception if there is no match.
- DataModelException exception = new DataModelException("YANG file error : Included sub module " +
- includedSubModuleName + "with a given revision is not found.");
- exception.setLine(getLineNumber());
- exception.setCharPosition(getCharPosition());
- exception.setFileName(getFileName());
- throw exception;
- }
-
- /**
- * Reports an error when included sub-module doesn't meet condition that
- * "included sub-modules should belong module, as defined by the
- * "belongs-to" statement or sub-modules are only allowed to include other
- * sub-modules belonging to the same module.
- *
- * @throws DataModelException a violation in data model rule
- */
- public void reportIncludeError() throws DataModelException {
- DataModelException exception = new DataModelException("YANG file error : Included sub-module " +
- getSubModuleName() + "doesn't belongs to parent module also it doesn't belongs" +
- "to sub-module belonging to the same parent module.");
- exception.setLine(getLineNumber());
- exception.setCharPosition(getCharPosition());
- exception.setFileName(getFileName());
- throw exception;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangInput.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangInput.java
deleted file mode 100644
index 07d816a..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangInput.java
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-
-import static java.util.Collections.unmodifiableList;
-import static org.onosproject.yangutils.datamodel.YangNodeType.INPUT_NODE;
-import static org.onosproject.yangutils.datamodel.YangSchemaNodeType.YANG_SINGLE_INSTANCE_NODE;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.COLLISION_DETECTION;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.INPUT;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.getErrorMsgCollision;
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.INPUT_DATA;
-
-/*
- * Reference RFC 6020.
- *
- * The "input" statement, which is optional, is used to define input
- * parameters to the RPC operation. It does not take an argument. The
- * substatements to "input" define nodes under the RPC's input node.
- *
- * If a leaf in the input tree has a "mandatory" statement with the
- * value "true", the leaf MUST be present in a NETCONF RPC invocation.
- * Otherwise, the server MUST return a "missing-element" error.
- *
- * If a leaf in the input tree has a default value, the NETCONF server
- * MUST use this value in the same cases as described in Section 7.6.1.
- * In these cases, the server MUST operationally behave as if the leaf
- * was present in the NETCONF RPC invocation with the default value as
- * its value.
- *
- * If a "config" statement is present for any node in the input tree,
- * the "config" statement is ignored.
- *
- * If any node has a "when" statement that would evaluate to false, then
- * this node MUST NOT be present in the input tree.
- *
- * The input substatements
- *
- * +--------------+---------+-------------+------------------+
- * | substatement | section | cardinality |data model mapping|
- * +--------------+---------+-------------+------------------+
- * | anyxml | 7.10 | 0..n | -not supported |
- * | choice | 7.9 | 0..n | -child nodes |
- * | container | 7.5 | 0..n | -child nodes |
- * | grouping | 7.11 | 0..n | -child nodes |
- * | leaf | 7.6 | 0..n | -YangLeaf |
- * | leaf-list | 7.7 | 0..n | -YangLeafList |
- * | list | 7.8 | 0..n | -child nodes |
- * | typedef | 7.3 | 0..n | -child nodes |
- * | uses | 7.12 | 0..n | -child nodes |
- * +--------------+---------+-------------+------------------+
- */
-
-/**
- * Represents data model node to maintain information defined in YANG input.
- */
-public abstract class YangInput
- extends YangNode
- implements YangLeavesHolder, Parsable, CollisionDetector,
- YangAugmentableNode, YangIsFilterContentNodes, InvalidOpTypeHolder {
-
- private static final long serialVersionUID = 806201608L;
-
- /**
- * List of leaves contained.
- */
- private List<YangLeaf> listOfLeaf;
-
- /**
- * List of leaf-lists contained.
- */
- private List<YangLeafList> listOfLeafList;
-
- private List<YangAugment> yangAugmentedInfo;
-
- /**
- * Create a rpc input node.
- */
- public YangInput() {
- super(INPUT_NODE, new HashMap<>());
- listOfLeaf = new LinkedList<>();
- listOfLeafList = new LinkedList<>();
- yangAugmentedInfo = new ArrayList<>();
- }
-
- @Override
- public void addToChildSchemaMap(YangSchemaNodeIdentifier id,
- YangSchemaNodeContextInfo context)
- throws DataModelException {
- getYsnContextInfoMap().put(id, context);
- }
-
- @Override
- public void incrementMandatoryChildCount() {
- //For non data nodes, mandatory child to be added to parent node.
- // TODO
- }
-
- @Override
- public void addToDefaultChildMap(YangSchemaNodeIdentifier id,
- YangSchemaNode yangSchemaNode) {
- //For non data nodes, default child to be added to parent node.
- // TODO
- }
-
- @Override
- public YangSchemaNodeType getYangSchemaNodeType() {
- return YANG_SINGLE_INSTANCE_NODE;
- }
-
- @Override
- public void detectCollidingChild(String identifierName,
- YangConstructType dataType)
- throws DataModelException {
- // Detect colliding child.
- detectCollidingChildUtil(identifierName, dataType, this);
- }
-
- @Override
- public void detectSelfCollision(String identifierName,
- YangConstructType dataType)
- throws DataModelException {
- if (getName().equals(identifierName)) {
- throw new DataModelException(
- getErrorMsgCollision(COLLISION_DETECTION, getName(),
- getLineNumber(), getCharPosition(),
- INPUT, getFileName()));
- }
- }
-
- @Override
- public YangConstructType getYangConstructType() {
- return INPUT_DATA;
- }
-
- @Override
- public void validateDataOnEntry()
- throws DataModelException {
- //TODO: implement the method.
- }
-
- @Override
- public void validateDataOnExit()
- throws DataModelException {
- //TODO: implement the method.
- }
-
- @Override
- public List<YangLeaf> getListOfLeaf() {
- return unmodifiableList(listOfLeaf);
- }
-
- @Override
- public void setListOfLeaf(List<YangLeaf> leafsList) {
- listOfLeaf = leafsList;
- }
-
- @Override
- public void addLeaf(YangLeaf leaf) {
- listOfLeaf.add(leaf);
- }
-
- @Override
- public List<YangLeafList> getListOfLeafList() {
- return unmodifiableList(listOfLeafList);
- }
-
- @Override
- public void setListOfLeafList(List<YangLeafList> listOfLeafList) {
- this.listOfLeafList = listOfLeafList;
- }
-
- @Override
- public void addLeafList(YangLeafList leafList) {
- listOfLeafList.add(leafList);
- }
-
- @Override
- public void addAugmentation(YangAugment augmentInfo) {
- yangAugmentedInfo.add(augmentInfo);
- }
-
- @Override
- public void removeAugmentation(YangAugment augmentInfo) {
- yangAugmentedInfo.remove(augmentInfo);
- }
-
- @Override
- public List<YangAugment> getAugmentedInfoList() {
- return unmodifiableList(yangAugmentedInfo);
- }
-
- @Override
- public void setLeafNameSpaceAndAddToParentSchemaMap() {
- // Add namespace for all leafs.
- for (YangLeaf yangLeaf : listOfLeaf) {
- yangLeaf.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
- }
- // Add namespace for all leaf list.
- for (YangLeafList yangLeafList : listOfLeafList) {
- yangLeafList.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
- }
- }
-
- public void cloneAugmentInfo() {
- yangAugmentedInfo = new ArrayList<>();
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangIsFilterContentNodes.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangIsFilterContentNodes.java
deleted file mode 100644
index 196305c..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangIsFilterContentNodes.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-/**
- * Represent the YANG nodes which can contain is filter content match.
- */
-public interface YangIsFilterContentNodes {
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeaf.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeaf.java
deleted file mode 100644
index 5fc301d..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeaf.java
+++ /dev/null
@@ -1,576 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-
-import java.io.Serializable;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.validateEmptyDataType;
-
-/*
- * Reference:RFC 6020.
- * The "leaf" statement is used to define a leaf node in the schema
- * tree. It takes one argument, which is an identifier, followed by a
- * block of sub-statements that holds detailed leaf information.
- *
- * A leaf node has a value, but no child nodes in the data tree.
- * Conceptually, the value in the data tree is always in the canonical
- * form.
- *
- * A leaf node exists in zero or one instances in the data tree.
- *
- * The "leaf" statement is used to define a scalar variable of a
- * particular built-in or derived type.
- *
- * The leaf's sub-statements
- *
- * +--------------+---------+-------------+------------------+
- * | substatement | section | cardinality |data model mapping|
- * +--------------+---------+-------------+------------------+
- * | config | 7.19.1 | 0..1 | - boolean |
- * | default | 7.6.4 | 0..1 | - string |
- * | description | 7.19.3 | 0..1 | - string |
- * | if-feature | 7.18.2 | 0..n | - YangIfFeature |
- * | mandatory | 7.6.5 | 0..1 | - boolean |
- * | must | 7.5.3 | 0..n | - YangMust |
- * | reference | 7.19.4 | 0..1 | - string |
- * | status | 7.19.2 | 0..1 | - YangStatus |
- * | type | 7.6.3 | 1 | - YangType |
- * | units | 7.3.3 | 0..1 | - String |
- * | when | 7.19.5 | 0..1 | - YangWhen |
- * +--------------+---------+-------------+------------------+
- */
-
-/**
- * Represents leaf data represented in YANG.
- */
-public abstract class YangLeaf extends DefaultLocationInfo
- implements YangCommonInfo, Parsable, Cloneable, Serializable,
- YangMustHolder, YangIfFeatureHolder, YangWhenHolder, YangSchemaNode,
- YangConfig {
-
- private static final long serialVersionUID = 806201635L;
-
- /**
- * YANG schema node identifier.
- */
- private YangSchemaNodeIdentifier yangSchemaNodeIdentifier;
-
- /**
- * If the leaf is a config parameter.
- */
- private boolean isConfig;
-
- /**
- * description of leaf.
- */
- private String description;
-
- /**
- * If mandatory leaf.
- */
- private boolean isMandatory;
-
- /**
- * The textual reference to this leaf.
- */
- private String reference;
-
- /**
- * Status of leaf in YANG definition.
- */
- private YangStatusType status = YangStatusType.CURRENT;
-
- /**
- * Textual units info.
- */
- private String units;
-
- /**
- * Data type of the leaf.
- */
- private YangType<?> dataType;
-
- /**
- * Default value in string, needs to be converted to the target object,
- * based on the type.
- */
- private String defaultValueInString;
-
- /**
- * When data of the leaf.
- */
- private YangWhen when;
-
- /**
- * YANG Node in which the leaf is contained.
- */
- private YangLeavesHolder containedIn;
-
- /**
- * List of must statement constraints.
- */
- private List<YangMust> mustConstraintList;
-
- /**
- * List of if-feature.
- */
- private List<YangIfFeature> ifFeatureList;
-
- /**
- * Referred schema leaf.
- */
- private YangLeaf referredLeaf;
-
- private boolean isKeyLeaf;
- /**
- * Creates a YANG leaf.
- */
- public YangLeaf() {
- mustConstraintList = new LinkedList<>();
- ifFeatureList = new LinkedList<>();
- }
-
- /**
- * Returns the config flag.
- *
- * @return if config flag
- */
- @Override
- public boolean isConfig() {
- return isConfig;
- }
-
- /**
- * Sets the config flag.
- *
- * @param isConfig the flag value to set
- */
- @Override
- public void setConfig(boolean isConfig) {
- this.isConfig = isConfig;
- }
-
- /**
- * Returns the when.
- *
- * @return the when
- */
- @Override
- public YangWhen getWhen() {
- return when;
- }
-
- /**
- * Sets the when.
- *
- * @param when the when to set
- */
- @Override
- public void setWhen(YangWhen when) {
- this.when = when;
- }
-
- /**
- * Returns the description.
- *
- * @return the description
- */
- @Override
- public String getDescription() {
- return description;
- }
-
- /**
- * Sets the description.
- *
- * @param description set the description
- */
- @Override
- public void setDescription(String description) {
- this.description = description;
- }
-
- /**
- * Returns if the leaf is mandatory.
- *
- * @return if leaf is mandatory
- */
- public boolean isMandatory() {
- return isMandatory;
- }
-
- /**
- * Sets if the leaf is mandatory.
- *
- * @param isReq if the leaf is mandatory
- */
- public void setMandatory(boolean isReq) {
- isMandatory = isReq;
- }
-
- /**
- * Returns the textual reference.
- *
- * @return the reference
- */
- @Override
- public String getReference() {
- return reference;
- }
-
- /**
- * Sets the textual reference.
- *
- * @param reference the reference to set
- */
- @Override
- public void setReference(String reference) {
- this.reference = reference;
- }
-
- /**
- * Returns the status.
- *
- * @return the status
- */
- @Override
- public YangStatusType getStatus() {
- return status;
- }
-
- /**
- * Sets the status.
- *
- * @param status the status to set
- */
- @Override
- public void setStatus(YangStatusType status) {
- this.status = status;
- }
-
- /**
- * Returns the units.
- *
- * @return the units
- */
- public String getUnits() {
- return units;
- }
-
- /**
- * Sets the units.
- *
- * @param units the units to set
- */
- public void setUnits(String units) {
- this.units = units;
- }
-
- /**
- * Returns the default value.
- *
- * @return the default value
- */
- public String getDefaultValueInString() {
- return defaultValueInString;
- }
-
- /**
- * Sets the default value.
- *
- * @param defaultValueInString the default value
- */
- public void setDefaultValueInString(String defaultValueInString) {
- this.defaultValueInString = defaultValueInString;
- }
-
- /**
- * Returns the data type.
- *
- * @return the data type
- */
- public YangType<?> getDataType() {
- return dataType;
- }
-
- @Override
- public boolean isEmptyDataType() {
- return validateEmptyDataType(dataType);
- }
-
- /**
- * Sets the data type.
- *
- * @param dataType the data type to set
- */
- public void setDataType(YangType<?> dataType) {
- this.dataType = dataType;
- }
-
- /**
- * Retrieves the YANG node in which the leaf is defined.
- *
- * @return the YANG node in which the leaf is defined
- */
- public YangLeavesHolder getContainedIn() {
- return containedIn;
- }
-
- /**
- * Assigns the YANG node in which the leaf is defined.
- *
- * @param containedIn the YANG node in which the leaf is defined
- */
- public void setContainedIn(YangLeavesHolder containedIn) {
- this.containedIn = containedIn;
- }
-
- @Override
- public YangLeaf clone()
- throws CloneNotSupportedException {
- YangLeaf cl = (YangLeaf) super.clone();
- cl.yangSchemaNodeIdentifier = yangSchemaNodeIdentifier.clone();
- return cl;
- }
-
- /**
- * Returns the type of the parsed data.
- *
- * @return returns LEAF_DATA
- */
- @Override
- public YangConstructType getYangConstructType() {
- return YangConstructType.LEAF_DATA;
- }
-
- /**
- * Validates the data on entering the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnEntry()
- throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
-
- }
-
- /**
- * Validates the data on exiting the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnExit()
- throws DataModelException {
- if (defaultValueInString != null && !defaultValueInString.isEmpty()
- && dataType != null) {
- dataType.isValidValue(defaultValueInString);
- }
- }
-
- @Override
- public List<YangMust> getListOfMust() {
- return mustConstraintList;
- }
-
- @Override
- public void setListOfMust(List<YangMust> mustConstraintList) {
- this.mustConstraintList = mustConstraintList;
- }
-
- @Override
- public void addMust(YangMust must) {
- if (getListOfMust() == null) {
- setListOfMust(new LinkedList<>());
- }
- getListOfMust().add(must);
- }
-
- @Override
- public List<YangIfFeature> getIfFeatureList() {
- return ifFeatureList;
- }
-
- @Override
- public void addIfFeatureList(YangIfFeature ifFeature) {
- if (getIfFeatureList() == null) {
- setIfFeatureList(new LinkedList<>());
- }
- getIfFeatureList().add(ifFeature);
- }
-
- @Override
- public void setIfFeatureList(List<YangIfFeature> ifFeatureList) {
- this.ifFeatureList = ifFeatureList;
- }
-
- @Override
- public YangSchemaNodeContextInfo getChildSchema(
- YangSchemaNodeIdentifier dataNodeIdentifier)
- throws DataModelException {
- throw new DataModelException("leaf cannot have any child schema nodes " +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition() +
- " in " + getFileName() + "\"");
- }
-
- @Override
- public void isValueValid(String value)
- throws DataModelException {
- getDataType().isValidValue(value);
- }
-
- @Override
- public int getMandatoryChildCount()
- throws DataModelException {
- throw new DataModelException("Leaf can't have child. " +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition() +
- " in " + getFileName() + "\"");
- }
-
- @Override
- public Map<YangSchemaNodeIdentifier, YangSchemaNode> getDefaultChild(YangSchemaNodeIdentifier dataNodeIdentifier) {
- // Returns null as there is no child to leaf.
- return null;
- }
-
- @Override
- public boolean isNotificationPresent() throws DataModelException {
- throw new DataModelException("Method is called for node other than module/sub-module.");
- }
-
- @Override
- public YangSchemaNodeType getYangSchemaNodeType() {
- return YangSchemaNodeType.YANG_SINGLE_INSTANCE_LEAF_NODE;
- }
-
- /**
- * Sets leaf namespace and add itself to parent child schema map.
- *
- * @param nameSpace namespace
- */
- public void setLeafNameSpaceAndAddToParentSchemaMap(YangNamespace nameSpace) {
- setNameSpace(nameSpace);
- // Process addition of leaf to schema node map.
- ((YangNode) getContainedIn()).processAdditionOfSchemaNodeToCurNodeMap(getName(), getNameSpace(), this);
- }
-
- @Override
- public YangSchemaNodeIdentifier getYangSchemaNodeIdentifier() {
- return yangSchemaNodeIdentifier;
- }
-
- /**
- * Sets YANG schema node identifier.
- *
- * @param yangSchemaNodeIdentifier YANG schema node identifier
- */
- public void setYangSchemaNodeIdentifier(YangSchemaNodeIdentifier
- yangSchemaNodeIdentifier) {
- if (this.yangSchemaNodeIdentifier == null) {
- this.yangSchemaNodeIdentifier = new YangSchemaNodeIdentifier();
- }
- this.yangSchemaNodeIdentifier = yangSchemaNodeIdentifier;
- }
-
- /**
- * Retrieve the name of leaf.
- *
- * @return leaf name
- */
- public String getName() {
- return yangSchemaNodeIdentifier.getName();
- }
-
- /**
- * Sets name of node.
- *
- * @param name name of the node
- */
- public void setName(String name) {
- if (yangSchemaNodeIdentifier == null) {
- yangSchemaNodeIdentifier = new YangSchemaNodeIdentifier();
- }
- yangSchemaNodeIdentifier.setName(name);
- }
-
- @Override
- public YangNamespace getNameSpace() {
- return yangSchemaNodeIdentifier.getNameSpace();
- }
-
- /**
- * Sets namespace of node.
- *
- * @param namespace namespace of the node
- */
- public void setNameSpace(YangNamespace namespace) {
- if (yangSchemaNodeIdentifier == null) {
- yangSchemaNodeIdentifier = new YangSchemaNodeIdentifier();
- }
- yangSchemaNodeIdentifier.setNameSpace(namespace);
- }
-
- @Override
- public YangSchemaNode getNotificationSchemaNode(String notificationNameInEnum)
- throws DataModelException {
- throw new DataModelException("Method called for schema node other " +
- "then module/sub-module");
- }
-
- @Override
- public YangLeaf getReferredSchema() {
- return referredLeaf;
- }
-
- /**
- * Sets referred schema leaf. This is only applicable for grouping.
- *
- * @param leaf referred schema leaf
- */
- public void setReferredLeaf(YangLeaf leaf) {
- referredLeaf = leaf;
- }
- /**
- * Returns true if its a key leaf.
- *
- * @return true if its a key leaf
- */
- public boolean isKeyLeaf() {
- return isKeyLeaf;
- }
-
- /**
- * Sets true if its a key leaf.
- *
- * @param keyLeaf true if its a key leaf
- */
- public void setKeyLeaf(boolean keyLeaf) {
- isKeyLeaf = keyLeaf;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeafList.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeafList.java
deleted file mode 100644
index ab1b468..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeafList.java
+++ /dev/null
@@ -1,573 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-
-import java.io.Serializable;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.validateEmptyDataType;
-
-/*
- * Reference:RFC 6020.
- * Where the "leaf" statement is used to define a simple scalar variable
- * of a particular type, the "leaf-list" statement is used to define an
- * array of a particular type. The "leaf-list" statement takes one
- * argument, which is an identifier, followed by a block of
- * sub-statements that holds detailed leaf-list information.
- *
- * The values in a leaf-list MUST be unique.
- *
- * The leaf-list's sub-statements
- *
- * +--------------+---------+-------------+------------------+
- * | substatement | section | cardinality |data model mapping|
- * +--------------+---------+-------------+------------------+
- * | config | 7.19.1 | 0..1 | -boolean |
- * | description | 7.19.3 | 0..1 | -string |
- * | if-feature | 7.18.2 | 0..n | -YangIfFeature |
- * | max-elements | 7.7.4 | 0..1 | -int |
- * | min-elements | 7.7.3 | 0..1 | -int |
- * | must | 7.5.3 | 0..n | -YangMust |
- * | ordered-by | 7.7.5 | 0..1 | -TODO |
- * | reference | 7.19.4 | 0..1 | -string |
- * | status | 7.19.2 | 0..1 | -YangStatus |
- * | type | 7.4 | 1 | -YangType |
- * | units | 7.3.3 | 0..1 | -string |
- * | when | 7.19.5 | 0..1 | -YangWhen |
- * +--------------+---------+-------------+------------------+
- */
-
-/**
- * Represents leaf-list data represented in YANG.
- */
-public abstract class YangLeafList extends DefaultLocationInfo
- implements YangCommonInfo, Parsable, Cloneable, Serializable,
- YangMustHolder, YangWhenHolder, YangIfFeatureHolder, YangSchemaNode,
- YangConfig {
-
- private static final long serialVersionUID = 806201637L;
-
- /**
- * Name of leaf-list.
- */
- private YangSchemaNodeIdentifier yangSchemaNodeIdentifier;
-
- /**
- * If the leaf-list is a config parameter.
- */
- private boolean isConfig;
-
- /**
- * Description of leaf-list.
- */
- private String description;
-
- /**
- * Reference:RFC 6020.
- *
- * The "max-elements" statement, which is optional, takes as an argument a
- * positive integer or the string "unbounded", which puts a constraint on
- * valid list entries. A valid leaf-list or list always has at most
- * max-elements entries.
- *
- * If no "max-elements" statement is present, it defaults to "unbounded".
- */
- private YangMaxElement maxElement;
-
- /**
- * Reference:RFC 6020.
- *
- * The "min-elements" statement, which is optional, takes as an argument a
- * non-negative integer that puts a constraint on valid list entries. A
- * valid leaf-list or list MUST have at least min-elements entries.
- *
- * If no "min-elements" statement is present, it defaults to zero.
- *
- * The behavior of the constraint depends on the type of the leaf-list's or
- * list's closest ancestor node in the schema tree that is not a non-
- * presence container:
- *
- * o If this ancestor is a case node, the constraint is enforced if any
- * other node from the case exists.
- *
- * o Otherwise, it is enforced if the ancestor node exists.
- */
- private YangMinElement minElements;
-
- /**
- * The textual reference to this leaf-list.
- */
- private String reference;
-
- /**
- * Status of the leaf-list in the YANG definition.
- */
- private YangStatusType status = YangStatusType.CURRENT;
-
- /**
- * Textual units.
- */
- private String units;
-
- /**
- * Data type of leaf-list.
- */
- private YangType<?> dataType;
-
- /**
- * YANG Node in which the leaf is contained.
- */
- private YangLeavesHolder containedIn;
-
- /**
- * List of must statement constraints.
- */
- private List<YangMust> mustConstraintList;
-
- /**
- * When data of the leaf.
- */
- private YangWhen when;
-
- /**
- * List of if-feature.
- */
- private List<YangIfFeature> ifFeatureList;
-
- /**
- * Referred schema leaf list.
- */
- private YangLeafList referredLeafList;
-
- /**
- * Creates a YANG leaf-list.
- */
- public YangLeafList() {
- mustConstraintList = new LinkedList<>();
- ifFeatureList = new LinkedList<>();
- setMinElements(new YangMinElement());
- setMaxElements(new YangMaxElement());
- }
-
- /**
- * Returns the config flag.
- *
- * @return the config flag
- */
- @Override
- public boolean isConfig() {
- return isConfig;
- }
-
- /**
- * Sets the config flag.
- *
- * @param isConfig the config flag
- */
- @Override
- public void setConfig(boolean isConfig) {
- this.isConfig = isConfig;
- }
-
- /**
- * Returns the when.
- *
- * @return the when
- */
- @Override
- public YangWhen getWhen() {
- return when;
- }
-
- /**
- * Sets the when.
- *
- * @param when the when to set
- */
- @Override
- public void setWhen(YangWhen when) {
- this.when = when;
- }
-
- /**
- * Returns the description.
- *
- * @return the description
- */
- @Override
- public String getDescription() {
- return description;
- }
-
- /**
- * Sets the description.
- *
- * @param description set the description
- */
- @Override
- public void setDescription(String description) {
- this.description = description;
- }
-
- /**
- * Returns the maximum elements number.
- *
- * @return the maximum elements number
- */
- public YangMaxElement getMaxElements() {
- return maxElement;
- }
-
- /**
- * Sets the maximum elements number.
- *
- * @param maxElement maximum elements number
- */
- public void setMaxElements(YangMaxElement maxElement) {
- this.maxElement = maxElement;
- }
-
- /**
- * Returns the minimum elements number.
- *
- * @return the minimum elements number
- */
- public YangMinElement getMinElements() {
- return minElements;
- }
-
- /**
- * Sets the minimum elements number.
- *
- * @param minElements the minimum elements number
- */
- public void setMinElements(YangMinElement minElements) {
- this.minElements = minElements;
- }
-
- /**
- * Returns the textual reference.
- *
- * @return the reference
- */
- @Override
- public String getReference() {
- return reference;
- }
-
- /**
- * Sets the textual reference.
- *
- * @param reference the reference to set
- */
- @Override
- public void setReference(String reference) {
- this.reference = reference;
- }
-
- /**
- * Returns the status.
- *
- * @return the status
- */
- @Override
- public YangStatusType getStatus() {
- return status;
- }
-
- /**
- * Sets the status.
- *
- * @param status the status to set
- */
- @Override
- public void setStatus(YangStatusType status) {
- this.status = status;
- }
-
- /**
- * Returns the units.
- *
- * @return the units
- */
- public String getUnits() {
- return units;
- }
-
- /**
- * Sets the units.
- *
- * @param units the units to set
- */
- public void setUnits(String units) {
- this.units = units;
- }
-
- /**
- * Returns the data type.
- *
- * @return the data type
- */
- public YangType<?> getDataType() {
- return dataType;
- }
-
- @Override
- public boolean isEmptyDataType() {
- return validateEmptyDataType(dataType);
- }
-
- /**
- * Sets the data type.
- *
- * @param dataType the data type to set
- */
- public void setDataType(YangType<?> dataType) {
- this.dataType = dataType;
- }
-
- /**
- * Retrieves the YANG node in which the leaf is defined.
- *
- * @return the YANG node in which the leaf is defined
- */
- public YangLeavesHolder getContainedIn() {
- return containedIn;
- }
-
- /**
- * Assigns the YANG node in which the leaf is defined.
- *
- * @param containedIn the YANG node in which the leaf is defined
- */
- public void setContainedIn(YangLeavesHolder containedIn) {
- this.containedIn = containedIn;
- }
-
- @Override
- public YangLeafList clone()
- throws CloneNotSupportedException {
- YangLeafList cll = (YangLeafList) super.clone();
- cll.yangSchemaNodeIdentifier = yangSchemaNodeIdentifier.clone();
- return cll;
- }
-
- /**
- * Returns the type of the parsed data.
- *
- * @return returns LEAF_LIST_DATA
- */
- @Override
- public YangConstructType getYangConstructType() {
- return YangConstructType.LEAF_LIST_DATA;
- }
-
- /**
- * Validates the data on entering the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnEntry()
- throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
-
- }
-
- /**
- * Validates the data on exiting the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnExit()
- throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
-
- }
-
- @Override
- public List<YangIfFeature> getIfFeatureList() {
- return ifFeatureList;
- }
-
- @Override
- public void addIfFeatureList(YangIfFeature ifFeature) {
- if (getIfFeatureList() == null) {
- setIfFeatureList(new LinkedList<>());
- }
- getIfFeatureList().add(ifFeature);
- }
-
- @Override
- public void setIfFeatureList(List<YangIfFeature> ifFeatureList) {
- this.ifFeatureList = ifFeatureList;
- }
-
- @Override
- public List<YangMust> getListOfMust() {
- return mustConstraintList;
- }
-
- @Override
- public void setListOfMust(List<YangMust> mustConstraintList) {
- this.mustConstraintList = mustConstraintList;
- }
-
- @Override
- public void addMust(YangMust must) {
- if (getListOfMust() == null) {
- setListOfMust(new LinkedList<>());
- }
- getListOfMust().add(must);
- }
-
- @Override
- public YangSchemaNodeContextInfo getChildSchema(
- YangSchemaNodeIdentifier dataNodeIdentifier)
- throws DataModelException {
- throw new DataModelException("leaf cannot have any child schema nodes" +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition() +
- " in " + getFileName() + "\"");
- }
-
- @Override
- public void isValueValid(String value)
- throws DataModelException {
- getDataType().isValidValue(value);
- }
-
- @Override
- public int getMandatoryChildCount()
- throws DataModelException {
- throw new DataModelException("leaf list can't have child " + getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition() +
- " in " + getFileName() + "\"");
- }
-
- @Override
- public Map<YangSchemaNodeIdentifier, YangSchemaNode> getDefaultChild(YangSchemaNodeIdentifier dataNodeIdentifier) {
- // Returns null as there is no child to leaf list.
- return null;
- }
-
- @Override
- public boolean isNotificationPresent() throws DataModelException {
- throw new DataModelException("Method is called for node other than module/sub-module.");
- }
-
- @Override
- public YangSchemaNodeType getYangSchemaNodeType() {
- return YangSchemaNodeType.YANG_MULTI_INSTANCE_LEAF_NODE;
- }
-
- /**
- * Sets leaf namespace and add itself to parent child schema map.
- *
- * @param nameSpace namespace
- */
- public void setLeafNameSpaceAndAddToParentSchemaMap(YangNamespace nameSpace) {
- setNameSpace(nameSpace);
- // Process addition of leaf to schema node map.
- ((YangNode) getContainedIn()).processAdditionOfSchemaNodeToCurNodeMap(getName(), getNameSpace(), this);
- }
-
- @Override
- public YangSchemaNodeIdentifier getYangSchemaNodeIdentifier() {
- return yangSchemaNodeIdentifier;
- }
-
- /**
- * Sets YANG schema node identifier.
- *
- * @param yangSchemaNodeIdentifier YANG schema node identifier
- */
- public void setYangSchemaNodeIdentifier(YangSchemaNodeIdentifier
- yangSchemaNodeIdentifier) {
- if (this.yangSchemaNodeIdentifier == null) {
- this.yangSchemaNodeIdentifier = new YangSchemaNodeIdentifier();
- }
- this.yangSchemaNodeIdentifier = yangSchemaNodeIdentifier;
- }
-
- /**
- * Retrieve the name of leaf list
- *
- * @return leaf list name
- */
- public String getName() {
- return yangSchemaNodeIdentifier.getName();
- }
-
- /**
- * Sets name of node.
- *
- * @param name name of the node
- */
- public void setName(String name) {
- if (yangSchemaNodeIdentifier == null) {
- yangSchemaNodeIdentifier = new YangSchemaNodeIdentifier();
- }
- yangSchemaNodeIdentifier.setName(name);
- }
-
- @Override
- public YangNamespace getNameSpace() {
- return yangSchemaNodeIdentifier.getNameSpace();
- }
-
- /**
- * Sets namespace of node.
- *
- * @param namespace namespace of the node
- */
- public void setNameSpace(YangNamespace namespace) {
- if (yangSchemaNodeIdentifier == null) {
- yangSchemaNodeIdentifier = new YangSchemaNodeIdentifier();
- }
- yangSchemaNodeIdentifier.setNameSpace(namespace);
- }
-
- @Override
- public YangSchemaNode getNotificationSchemaNode(String notificationNameInEnum)
- throws DataModelException {
- throw new DataModelException("Method called for schema node other then module/sub-module");
- }
-
- @Override
- public YangLeafList getReferredSchema() {
- return referredLeafList;
- }
-
- /**
- * Sets referred schema leaf-list. This is only applicable for grouping.
- *
- * @param leafList referred schema leaf-list
- */
- public void setReferredSchemaLeafList(YangLeafList leafList) {
- referredLeafList = leafList;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeafRef.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeafRef.java
deleted file mode 100644
index eefb208..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeafRef.java
+++ /dev/null
@@ -1,553 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.ResolvableStatus;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import static java.util.Collections.unmodifiableList;
-import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.INTRA_FILE_RESOLVED;
-import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.RESOLVED;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.LEAFREF_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangErrMsgConstants.DATA_MISSING_ERROR_TAG;
-import static org.onosproject.yangutils.datamodel.utils.YangErrMsgConstants.ERROR_PATH_LEAFREF_LEAF;
-import static org.onosproject.yangutils.datamodel.utils.YangErrMsgConstants.INSTANCE_REQUIRED_ERROR_APP_TAG;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.LEAFREF;
-
-/*
- * Reference:RFC 6020.
- * The leafref type is used to reference a particular leaf instance in
- * the data tree. The "path" substatement (Section 9.9.2) selects a set
- * of leaf instances, and the leafref value space is the set of values
- * of these leaf instances.
- */
-
-/**
- * Represents the leafref information.
- *
- * @param <T> YANG leafref info
- */
-public class YangLeafRef<T> extends DefaultLocationInfo
- implements Cloneable, Parsable, Resolvable, Serializable, YangIfFeatureHolder,
- YangXPathResolver, YangAppErrorHolder {
-
- private static final long serialVersionUID = 286201644L;
-
- /**
- * YANG data type.
- */
- private YangType effectiveDataType;
-
- /**
- * Referred leaf/leaf-list for the path specified in the leafref type.
- */
- private T referredLeafOrLeafList;
-
- /**
- * Path of the leafref.
- */
- private String path;
-
- /**
- * Leafref path type. Either absolute or relative path.
- */
- private YangPathArgType pathType;
-
- /**
- * List of atomic paths in absolute Path.
- */
- private List<YangAtomicPath> atomicPath;
-
- /**
- * YANG relative path.
- */
- private YangRelativePath relativePath;
-
- /**
- * Status of resolution. If completely resolved enum value is "RESOLVED",
- * if not enum value is "UNRESOLVED", in case reference of grouping/typedef/leafref
- * is added to uses/type/leafref but it's not resolved value of enum should be
- * "INTRA_FILE_RESOLVED".
- */
- private ResolvableStatus resolvableStatus;
-
- /**
- * Require instance status in leafref type.
- */
- private boolean requireInstance;
-
- /**
- * List of if-feature.
- */
- private List<YangIfFeature> ifFeatureList;
-
- /**
- * Parent node of the leafref's leaf.
- */
- private YangNode parentNode;
-
- /**
- * Prefix in the nodes of the leafref path and its imported node name.
- */
- private Map<String, String> prefixAndNode;
-
- /**
- * Flag to indicate whether the leaf ref is inside grouping.
- */
- private boolean inGrouping;
-
- /**
- * Returns the prefix in the leafref path and its imported node name.
- *
- * @return map of prefix with node
- */
- public Map<String, String> getPrefixAndNode() {
- return prefixAndNode;
- }
-
- /**
- * Sets the prefix in the leaf-ref path and its imported node name.
- *
- * @param prefixAndNode prefix with node map
- */
- public void setPrefixAndNode(Map<String, String> prefixAndNode) {
- this.prefixAndNode = prefixAndNode;
- }
-
- /**
- * Returns the parent node from the leafref's leaf.
- *
- * @return parent node of the leafref
- */
- public YangNode getParentNode() {
- return parentNode;
- }
-
- /**
- * Sets the parent node from the leafref's leaf.
- *
- * @param parentNode parent node
- */
- public void setParentNode(YangNode parentNode) {
- this.parentNode = parentNode;
- }
-
- /**
- * YANG application error information.
- */
- private YangAppErrorInfo yangAppErrorInfo;
-
- /**
- * Creates a YANG leaf ref.
- */
- public YangLeafRef() {
- yangAppErrorInfo = new YangAppErrorInfo();
- prefixAndNode = new HashMap<>();
- atomicPath = new ArrayList<>();
- ifFeatureList = new ArrayList<>();
- yangAppErrorInfo.setErrorTag(DATA_MISSING_ERROR_TAG);
- yangAppErrorInfo.setErrorAppTag(INSTANCE_REQUIRED_ERROR_APP_TAG);
- yangAppErrorInfo.setErrorAppPath(ERROR_PATH_LEAFREF_LEAF);
- }
-
- /**
- * Returns the status of the require instance in leafref.
- *
- * @return status of the require instance
- */
- public boolean getRequireInstance() {
- return requireInstance;
- }
-
- /**
- * Sets the status of the require instance in leafref.
- *
- * @param requireInstance status of the require instance
- */
- public void setRequireInstance(boolean requireInstance) {
- this.requireInstance = requireInstance;
- }
-
- /**
- * Returns the type of data.
- *
- * @return the data type
- */
- public YangType getEffectiveDataType() {
- return effectiveDataType;
- }
-
- /**
- * Sets the type of data.
- *
- * @param effectiveDataType data type
- */
- public void setEffectiveDataType(YangType effectiveDataType) {
- this.effectiveDataType = effectiveDataType;
- }
-
- /**
- * Returns the path of the leafref.
- *
- * @return path of the leafref
- */
- public String getPath() {
- return path;
- }
-
- /**
- * Sets the path of the leafref.
- *
- * @param path leafref path
- */
- public void setPath(String path) {
- this.path = path;
- }
-
- /**
- * Returns the type of path in the leafref.
- *
- * @return type of path
- */
- public YangPathArgType getPathType() {
- return pathType;
- }
-
- /**
- * Sets the type of path in the leafref. It can be either absolute or relative type.
- *
- * @param pathType type of path
- */
- public void setPathType(YangPathArgType pathType) {
- this.pathType = pathType;
- }
-
- /**
- * Returns the list of atomic path.
- *
- * @return list of atomic path
- */
- public List<YangAtomicPath> getAtomicPath() {
- return unmodifiableList(atomicPath);
- }
-
- /**
- * Sets the list of atomic path.
- *
- * @param atomicPath list of atomic path.
- */
- public void setAtomicPath(List<YangAtomicPath> atomicPath) {
- this.atomicPath = atomicPath;
- }
-
- /**
- * Returns the object of relative path.
- *
- * @return object of relative path
- */
- public YangRelativePath getRelativePath() {
- return relativePath;
- }
-
- /**
- * Sets the object of relative path.
- *
- * @param relativePath object of relative path.
- */
- public void setRelativePath(YangRelativePath relativePath) {
- this.relativePath = relativePath;
- }
-
- /**
- * Returns the object of referred leaf/leaf-list.
- *
- * @return object of referred leaf/leaf-list
- */
- public T getReferredLeafOrLeafList() {
- return referredLeafOrLeafList;
- }
-
- /**
- * Sets the object of referred leaf/leaf-list.
- *
- * @param targetExtendedInfo object of referred leaf/leaf-list
- */
- public void setReferredLeafOrLeafList(T targetExtendedInfo) {
- this.referredLeafOrLeafList = targetExtendedInfo;
- }
-
- @Override
- public List<YangIfFeature> getIfFeatureList() {
- return unmodifiableList(ifFeatureList);
- }
-
- @Override
- public void addIfFeatureList(YangIfFeature ifFeature) {
- ifFeatureList.add(ifFeature);
- }
-
- @Override
- public void setIfFeatureList(List<YangIfFeature> ifFeatureList) {
- this.ifFeatureList = ifFeatureList;
- }
-
- @Override
- public YangConstructType getYangConstructType() {
- return LEAFREF_DATA;
- }
-
- @Override
- public void validateDataOnEntry()
- throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
- }
-
- @Override
- public void validateDataOnExit()
- throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
- }
-
- @Override
- public ResolvableStatus getResolvableStatus() {
- return resolvableStatus;
- }
-
- @Override
- public void setResolvableStatus(ResolvableStatus resolvableStatus) {
- this.resolvableStatus = resolvableStatus;
- }
-
- @Override
- public void setAppErrorInfo(YangAppErrorInfo yangAppErrorInfo) {
- this.yangAppErrorInfo = yangAppErrorInfo;
- }
-
- @Override
- public YangAppErrorInfo getAppErrorInfo() {
- return yangAppErrorInfo;
- }
-
- @Override
- public Object resolve()
- throws DataModelException {
-
- if (getReferredLeafOrLeafList() == null) {
- throw new DataModelException("Linker Error: The leafref does not refer to any leaf/leaf-list." +
- " in " +
- getLineNumber() + " at " +
- getCharPosition() +
- " in " + getFileName() + "\"");
- }
-
- // Initiate the resolution
- try {
- setResolvableStatus(getResolution());
- } catch (DataModelException e) {
- throw new DataModelException(e.getMessage());
- }
- return null;
- }
-
- /**
- * Returns the resolution status by getting the effective built-in type.
- *
- * @return status of resolution
- * @throws DataModelException a violation of data model rules
- */
- private ResolvableStatus getResolution()
- throws DataModelException {
-
- if (getReferredLeafOrLeafList() instanceof YangLeaf) {
- YangLeaf yangLeaf = ((YangLeaf) getReferredLeafOrLeafList());
- YangType baseType = yangLeaf.getDataType();
-
- if (baseType.getDataType() == LEAFREF) {
- YangLeafRef referredLeafRefInfo = (YangLeafRef) (yangLeaf.getDataType().getDataTypeExtendedInfo());
-
- //Check whether the referred typedef is resolved.
- if (referredLeafRefInfo.getResolvableStatus() != INTRA_FILE_RESOLVED
- && referredLeafRefInfo.getResolvableStatus() != RESOLVED) {
- throw new DataModelException("Linker Error: Referred typedef is not resolved for type." +
- " in " +
- getLineNumber() + " at " +
- getCharPosition() +
- " in " + getFileName() + "\"");
- }
-
- /*
- * Check if the referred typedef is intra file resolved, if yes
- * sets current status also to intra file resolved .
- */
- if ((referredLeafRefInfo.getResolvableStatus() == INTRA_FILE_RESOLVED)) {
- return INTRA_FILE_RESOLVED;
- }
-
- // Add the if-feature list from referred leafref to current leafref.
- List<YangIfFeature> referredLeafIfFeatureListFromLeafref = referredLeafRefInfo.getIfFeatureList();
- if (referredLeafIfFeatureListFromLeafref != null && !referredLeafIfFeatureListFromLeafref.isEmpty()) {
- Iterator<YangIfFeature> referredLeafIfFeature = referredLeafIfFeatureListFromLeafref.iterator();
- while (referredLeafIfFeature.hasNext()) {
- YangIfFeature ifFeature = referredLeafIfFeature.next();
- addIfFeatureList(ifFeature);
- }
- }
- setEffectiveDataType(referredLeafRefInfo.getEffectiveDataType());
- } else if (baseType.getDataType() == YangDataTypes.DERIVED) {
-
- // Check whether the referred typedef is resolved.
- if (baseType.getResolvableStatus() != INTRA_FILE_RESOLVED
- && baseType.getResolvableStatus() != RESOLVED) {
- throw new DataModelException("Linker Error: Referred typedef is not resolved for type." +
- " in " +
- getLineNumber() + " at " +
- getCharPosition() +
- " in " + getFileName() + "\"");
- }
- /*
- * Check if the referred typedef is intra file resolved, if yes
- * sets current status also to intra file resolved .
- */
- if ((baseType.getResolvableStatus() == INTRA_FILE_RESOLVED)) {
- return INTRA_FILE_RESOLVED;
- }
- setEffectiveDataType(baseType);
- } else {
- setEffectiveDataType(baseType);
- }
-
- // Add the if-feature list from referred leaf to current leafref.
- List<YangIfFeature> referredLeafIfFeatureList = yangLeaf.getIfFeatureList();
- if (referredLeafIfFeatureList != null && !referredLeafIfFeatureList.isEmpty()) {
- Iterator<YangIfFeature> referredLeafIfFeature = referredLeafIfFeatureList.iterator();
- while (referredLeafIfFeature.hasNext()) {
- YangIfFeature ifFeature = referredLeafIfFeature.next();
- addIfFeatureList(ifFeature);
- }
- }
- return RESOLVED;
- } else if (getReferredLeafOrLeafList() instanceof YangLeafList) {
- YangLeafList yangLeafList = ((YangLeafList) getReferredLeafOrLeafList());
- YangType baseType = yangLeafList.getDataType();
-
- if (baseType.getDataType() == LEAFREF) {
- YangLeafRef referredLeafRefInfo = (YangLeafRef) yangLeafList.getDataType().getDataTypeExtendedInfo();
-
- //Check whether the referred typedef is resolved.
- if (referredLeafRefInfo.getResolvableStatus() != INTRA_FILE_RESOLVED
- && referredLeafRefInfo.getResolvableStatus() != RESOLVED) {
- throw new DataModelException("Linker Error: Referred typedef is not resolved for type." +
- " in " +
- getLineNumber() + " at " +
- getCharPosition() +
- " in " + getFileName() + "\"");
- }
- /*
- * Check if the referred typedef is intra file resolved, if yes
- * sets current status also to intra file resolved .
- */
- if ((referredLeafRefInfo.getResolvableStatus() == INTRA_FILE_RESOLVED)) {
- return INTRA_FILE_RESOLVED;
- }
- // Add the if-feature list from referred leafref to current leafref.
- List<YangIfFeature> referredLeafListIfFeatureListFromLeafref = referredLeafRefInfo.getIfFeatureList();
- if (referredLeafListIfFeatureListFromLeafref != null
- && !referredLeafListIfFeatureListFromLeafref.isEmpty()) {
- Iterator<YangIfFeature> referredLeafListIfFeature = referredLeafListIfFeatureListFromLeafref
- .iterator();
- while (referredLeafListIfFeature.hasNext()) {
- YangIfFeature ifFeature = referredLeafListIfFeature.next();
- addIfFeatureList(ifFeature);
- }
- }
- setEffectiveDataType(referredLeafRefInfo.getEffectiveDataType());
- } else if (baseType.getDataType() == YangDataTypes.DERIVED) {
-
- //Check whether the referred typedef is resolved.
- if (baseType.getResolvableStatus() != INTRA_FILE_RESOLVED
- && baseType.getResolvableStatus() != RESOLVED) {
- throw new DataModelException("Linker Error: Referred typedef is not resolved for type." +
- " in " +
- getLineNumber() + " at " +
- getCharPosition() +
- " in " + getFileName() + "\"");
- }
- /*
- * Check if the referred typedef is intra file resolved, if yes
- * sets current status also to intra file resolved .
- */
- if ((baseType.getResolvableStatus() == INTRA_FILE_RESOLVED)) {
- return INTRA_FILE_RESOLVED;
- }
- setEffectiveDataType(baseType);
- } else {
- setEffectiveDataType(baseType);
- }
- // Add the if-feature list from referred leaf-list to current leafref.
- List<YangIfFeature> referredLeafListIfFeatureList = yangLeafList.getIfFeatureList();
- if (referredLeafListIfFeatureList != null && !referredLeafListIfFeatureList.isEmpty()) {
- Iterator<YangIfFeature> referredLeafListIfFeature = referredLeafListIfFeatureList.iterator();
- while (referredLeafListIfFeature.hasNext()) {
- YangIfFeature ifFeature = referredLeafListIfFeature.next();
- addIfFeatureList(ifFeature);
- }
- }
- return RESOLVED;
- } else {
- throw new DataModelException("Linker Error: The leafref must refer only to leaf/leaf-list." +
- " in " +
- getLineNumber() + " at " +
- getCharPosition() +
- " in " + getFileName() + "\"");
- }
- }
-
- @Override
- public YangLeafRef<T> clone()
- throws CloneNotSupportedException {
- YangLeafRef<T> clonedLeafRef = (YangLeafRef<T>) super.clone();
- return clonedLeafRef;
- }
-
- /**
- * Returns flag value indicating whether leafref is inside grouping.
- *
- * @return true if leafref is in grouping, false otherwise
- */
- public boolean isInGrouping() {
- return inGrouping;
- }
-
- /**
- * Sets in grouping flag.
- *
- * @param inGrouping flag
- */
- public void setInGrouping(boolean inGrouping) {
- this.inGrouping = inGrouping;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeavesHolder.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeavesHolder.java
deleted file mode 100644
index 9d5aa82..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLeavesHolder.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import java.util.List;
-
-/**
- * Abstraction of atomic configurable/status entity. It is used to abstract the
- * data holders of leaf or leaf list. Used in leaves parsing or attribute code
- * generation.
- */
-public interface YangLeavesHolder extends LocationInfo {
-
- /**
- * Returns the list of leaves from data holder like container / list.
- *
- * @return the list of leaves
- */
- List<YangLeaf> getListOfLeaf();
-
- /**
- * Sets the list of leaves.
- *
- * @param leafsList the list of leaf to set
- */
- void setListOfLeaf(List<YangLeaf> leafsList);
-
- /**
- * Adds leaf in data holder like container / list.
- *
- * @param leaf the leaf to be added
- */
- void addLeaf(YangLeaf leaf);
-
- /**
- * Returns the list of leaf-list from data holder like container / list.
- *
- * @return the list of leaf-list
- */
- List<YangLeafList> getListOfLeafList();
-
- /**
- * Sets the list of leaf-list.
- *
- * @param listOfLeafList the list of leaf-list to set
- */
- void setListOfLeafList(List<YangLeafList> listOfLeafList);
-
- /**
- * Adds leaf-list in data holder like container / list.
- *
- * @param leafList the leaf-list to be added
- */
- void addLeafList(YangLeafList leafList);
-
- /**
- * Adds namespace for leafs and leaf-list, this is used in case of
- * submodule.
- *
- */
- void setLeafNameSpaceAndAddToParentSchemaMap();
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLengthRestriction.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLengthRestriction.java
deleted file mode 100644
index ce8fb4f..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangLengthRestriction.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangUint64;
-
-import java.io.Serializable;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.PATTERN_DATA;
-
-/*-
- * Reference RFC 6020.
- *
- * Binary can be restricted with "length" statements alone.
- *
- */
-
-/**
- * Represents the restriction for length data type.
- */
-public class YangLengthRestriction extends DefaultLocationInfo
- implements YangDesc, YangReference, Parsable, Serializable, YangAppErrorHolder {
-
- /*-
- * Reference RFC 6020.
- * The length Statement
- *
- * The "length" statement, which is an optional sub-statement to the
- * "type" statement, takes as an argument a length expression string.
- * It is used to restrict the built-in type "string", or types derived
- * from "string".
- * A "length" statement restricts the number of unicode characters in
- * the string.
- * A length range consists of an explicit value, or a lower bound, two
- * consecutive dots "..", and an upper bound. Multiple values or ranges
- * can be given, separated by "|". Length-restricting values MUST NOT
- * be negative. If multiple values or ranges are given, they all MUST
- * be disjoint and MUST be in ascending order. If a length restriction
- * is applied to an already length-restricted type, the new restriction
- * MUST be equal or more limiting, that is, raising the lower bounds,
- * reducing the upper bounds, removing explicit length values or ranges,
- * or splitting ranges into multiple ranges with intermediate gaps. A
- * length value is a non-negative integer, or one of the special values
- * "min" or "max". "min" and "max" mean the minimum and maximum length
- * accepted for the type being restricted, respectively. An
- * implementation is not required to support a length value larger than
- * 18446744073709551615.
- * The length's sub-statements
- *
- * +---------------+---------+-------------+-----------------+
- * | substatement | section | cardinality | mapped data type|
- * +---------------+---------+-------------+-----------------+
- * | description | 7.19.3 | 0..1 | string |
- * | error-app-tag | 7.5.4.2 | 0..1 | string |
- * | error-message | 7.5.4.1 | 0..1 | string |
- * | reference | 7.19.4 | 0..1 | string |
- * +---------------+---------+-------------+-----------------+
- */
-
- private static final long serialVersionUID = 806201645L;
-
- /**
- * Length restriction information.
- */
- private YangRangeRestriction<YangUint64> lengthRestriction;
-
- /**
- * Textual reference.
- */
- private String reference;
-
- /**
- * Textual description.
- */
- private String description;
-
- /**
- * YANG application error information.
- */
- private YangAppErrorInfo yangAppErrorInfo;
-
- /**
- * Creates a YANG length restriction object.
- */
- public YangLengthRestriction() {
- setLengthRestriction(new YangRangeRestriction<>());
- yangAppErrorInfo = new YangAppErrorInfo();
- }
-
- /**
- * Returns the length restriction on the string data.
- *
- * @return length restriction on the string data
- */
- public YangRangeRestriction<YangUint64> getLengthRestriction() {
- return lengthRestriction;
- }
-
- /**
- * Sets the length restriction on the string data.
- *
- * @param lengthRestriction length restriction on the string data
- */
- public void setLengthRestriction(YangRangeRestriction<YangUint64> lengthRestriction) {
- this.lengthRestriction = lengthRestriction;
- }
-
- /**
- * Returns the textual reference of the length restriction.
- *
- * @return textual reference of the length restriction
- */
- @Override
- public String getReference() {
- return reference;
- }
-
- /**
- * Sets the textual reference of the length restriction.
- *
- * @param ref textual reference of the length restriction
- */
- @Override
- public void setReference(String ref) {
- reference = ref;
- }
-
- /**
- * Returns the description of the length restriction.
- *
- * @return description of the length restriction
- */
- @Override
- public String getDescription() {
- return description;
- }
-
- /**
- * Sets the description of the length restriction.
- *
- * @param desc description of the length restriction
- */
- @Override
- public void setDescription(String desc) {
- description = desc;
-
- }
-
- @Override
- public YangConstructType getYangConstructType() {
- return PATTERN_DATA;
- }
-
- @Override
- public void validateDataOnEntry() throws DataModelException {
- // TODO: implement the method.
- }
-
- @Override
- public void validateDataOnExit() throws DataModelException {
- // TODO: implement the method.
- }
-
- /**
- * Sets the application's error information.
- *
- * @param yangAppErrorInfo the application's error information
- */
- @Override
- public void setAppErrorInfo(YangAppErrorInfo yangAppErrorInfo) {
- this.yangAppErrorInfo = yangAppErrorInfo;
- }
-
- /**
- * Returns application's error information.
- *
- * @return application's error information
- */
- @Override
- public YangAppErrorInfo getAppErrorInfo() {
- return yangAppErrorInfo;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangList.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangList.java
deleted file mode 100644
index c350e8f..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangList.java
+++ /dev/null
@@ -1,800 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
-
-/*
- * The "list" statement is used to define an interior data node in the
- * schema tree. A list node may exist in multiple instances in the data
- * tree. Each such instance is known as a list entry. The "list"
- * statement takes one argument, which is an identifier, followed by a
- * block of sub-statements that holds detailed list information.
- *
- * A list entry is uniquely identified by the values of the list's keys,
- * if defined.
- *
- * The list's sub-statements
- *
- * +--------------+---------+-------------+------------------+
- * | substatement | section | cardinality |data model mapping|
- * +--------------+---------+-------------+------------------+
- * | anyxml | 7.10 | 0..n |-not supported |
- * | choice | 7.9 | 0..n |-child nodes |
- * | config | 7.19.1 | 0..1 |-boolean |
- * | container | 7.5 | 0..n |-child nodes |
- * | description | 7.19.3 | 0..1 |-string |
- * | grouping | 7.11 | 0..n |-child nodes |
- * | if-feature | 7.18.2 | 0..n |-YangIfFeature |
- * | key | 7.8.2 | 0..1 |-String list |
- * | leaf | 7.6 | 0..n |-YangLeaf |
- * | leaf-list | 7.7 | 0..n |-YangLeafList |
- * | list | 7.8 | 0..n |-child nodes |
- * | max-elements | 7.7.4 | 0..1 |-int |
- * | min-elements | 7.7.3 | 0..1 |-int |
- * | must | 7.5.3 | 0..n |-YangMust |
- * | ordered-by | 7.7.5 | 0..1 |-TODO |
- * | reference | 7.19.4 | 0..1 |-string |
- * | status | 7.19.2 | 0..1 |-YangStatus |
- * | typedef | 7.3 | 0..n |-child nodes |
- * | unique | 7.8.3 | 0..n |-TODO |
- * | uses | 7.12 | 0..n |-child nodes |
- * | when | 7.19.5 | 0..1 |-YangWhen |
- * +--------------+---------+-------------+------------------+
- */
-
-/**
- * Represents list data represented in YANG.
- */
-public abstract class YangList
- extends YangNode
- implements YangLeavesHolder, YangCommonInfo, Parsable, CollisionDetector,
- YangAugmentableNode, YangMustHolder, YangWhenHolder, YangIfFeatureHolder, YangSchemaNode,
- YangIsFilterContentNodes, YangConfig {
-
- private static final long serialVersionUID = 806201609L;
-
- /**
- * If list maintains config data.
- */
- private boolean isConfig;
-
- /**
- * Description of list.
- */
- private String description;
-
- /**
- * Reference RFC 6020.
- * <p>
- * The "key" statement, which MUST be present if the list represents
- * configuration, and MAY be present otherwise, takes as an argument a
- * string that specifies a space-separated list of leaf identifiers of this
- * list. A leaf identifier MUST NOT appear more than once in the key. Each
- * such leaf identifier MUST refer to a child leaf of the list. The leafs
- * can be defined directly in sub-statements to the list, or in groupings
- * used in the list.
- * <p>
- * The combined values of all the leafs specified in the key are used to
- * uniquely identify a list entry. All key leafs MUST be given values when a
- * list entry is created. Thus, any default values in the key leafs or their
- * types are ignored. It also implies that any mandatory statement in the
- * key leafs are ignored.
- * <p>
- * A leaf that is part of the key can be of any built-in or derived type,
- * except it MUST NOT be the built-in type "empty".
- * <p>
- * All key leafs in a list MUST have the same value for their "config" as
- * the list itself.
- * <p>
- * List of key leaf names.
- */
- private List<String> keyList;
-
- /**
- * Reference RFC 6020.
- * <p>
- * The "unique" statement is used to put constraints on valid list
- * entries. It takes as an argument a string that contains a space-
- * separated list of schema node identifiers, which MUST be given in the
- * descendant form. Each such schema node identifier MUST refer to a leaf.
- * <p>
- * If one of the referenced leafs represents configuration data, then
- * all of the referenced leafs MUST represent configuration data.
- * <p>
- * The "unique" constraint specifies that the combined values of all the
- * leaf instances specified in the argument string, including leafs with
- * default values, MUST be unique within all list entry instances in
- * which all referenced leafs exist.
- * <p>
- * List of unique leaf/leaf-list names
- */
- private List<String> uniqueList;
-
- /**
- * List of leaves.
- */
- private List<YangLeaf> listOfLeaf;
-
- /**
- * List of leaf-lists.
- */
- private List<YangLeafList> listOfLeafList;
-
- private List<YangAugment> yangAugmentedInfo = new ArrayList<>();
-
- /**
- * Reference RFC 6020.
- * <p>
- * The "max-elements" statement, which is optional, takes as an argument a
- * positive integer or the string "unbounded", which puts a constraint on
- * valid list entries. A valid leaf-list or list always has at most
- * max-elements entries.
- * <p>
- * If no "max-elements" statement is present, it defaults to "unbounded".
- */
- private YangMaxElement maxElements;
-
- /**
- * Reference RFC 6020.
- * <p>
- * The "min-elements" statement, which is optional, takes as an argument a
- * non-negative integer that puts a constraint on valid list entries. A
- * valid leaf-list or list MUST have at least min-elements entries.
- * <p>
- * If no "min-elements" statement is present, it defaults to zero.
- * <p>
- * The behavior of the constraint depends on the type of the leaf-list's or
- * list's closest ancestor node in the schema tree that is not a non-
- * presence container:
- * <p>
- * o If this ancestor is a case node, the constraint is enforced if any
- * other node from the case exists.
- * <p>
- * o Otherwise, it is enforced if the ancestor node exists.
- */
- private YangMinElement minElements;
-
- /**
- * reference.
- */
- private String reference;
-
- /**
- * Status of the node.
- */
- private YangStatusType status = YangStatusType.CURRENT;
-
- /**
- * List of must statement constraints.
- */
- private List<YangMust> mustConstraintList;
-
- /**
- * When data of the node.
- */
- private YangWhen when;
-
- /**
- * List of if-feature.
- */
- private List<YangIfFeature> ifFeatureList;
-
- /**
- * Compiler Annotation.
- */
- private transient YangCompilerAnnotation compilerAnnotation;
-
- /**
- * Creates a YANG list object.
- */
- public YangList() {
- super(YangNodeType.LIST_NODE, new HashMap<>());
- listOfLeaf = new LinkedList<>();
- listOfLeafList = new LinkedList<>();
- mustConstraintList = new LinkedList<>();
- ifFeatureList = new LinkedList<>();
- uniqueList = new LinkedList<>();
- keyList = new LinkedList<>();
- }
-
- @Override
- public void addToChildSchemaMap(YangSchemaNodeIdentifier schemaNodeIdentifier,
- YangSchemaNodeContextInfo yangSchemaNodeContextInfo) {
- getYsnContextInfoMap().put(schemaNodeIdentifier, yangSchemaNodeContextInfo);
- }
-
- @Override
- public void incrementMandatoryChildCount() {
- // TODO
- }
-
- @Override
- public void addToDefaultChildMap(YangSchemaNodeIdentifier yangSchemaNodeIdentifier, YangSchemaNode yangSchemaNode) {
- // TODO
- }
-
- @Override
- public YangSchemaNodeType getYangSchemaNodeType() {
- return YangSchemaNodeType.YANG_MULTI_INSTANCE_NODE;
- }
-
- /**
- * Returns the compiler annotation.
- *
- * @return the compiler annotation
- */
- public YangCompilerAnnotation getCompilerAnnotation() {
- return compilerAnnotation;
- }
-
- /**
- * Sets the compiler annotation.
- *
- * @param compilerAnnotation the compiler annotation to set
- */
- public void setCompilerAnnotation(YangCompilerAnnotation compilerAnnotation) {
- this.compilerAnnotation = compilerAnnotation;
- }
-
- /**
- * Returns the when.
- *
- * @return the when
- */
- @Override
- public YangWhen getWhen() {
- return when;
- }
-
- /**
- * Sets the when.
- *
- * @param when the when to set
- */
- @Override
- public void setWhen(YangWhen when) {
- this.when = when;
- }
-
- /**
- * Returns the config flag.
- *
- * @return the isConfig
- */
- @Override
- public boolean isConfig() {
- return isConfig;
- }
-
- /**
- * Sets the config flag.
- *
- * @param isConfig the config flag
- */
- @Override
- public void setConfig(boolean isConfig) {
- this.isConfig = isConfig;
- }
-
- /**
- * Returns the description.
- *
- * @return the description
- */
- @Override
- public String getDescription() {
- return description;
- }
-
- /**
- * Sets the description.
- *
- * @param description set the description
- */
- @Override
- public void setDescription(String description) {
- this.description = description;
- }
-
- /**
- * Returns the list of unique field names.
- *
- * @return the list of unique field names
- */
- public List<String> getUniqueList() {
- return uniqueList;
- }
-
- /**
- * Sets the list of unique field names.
- *
- * @param uniqueList the list of unique field names
- */
- private void setUniqueList(List<String> uniqueList) {
- this.uniqueList = uniqueList;
- }
-
- /**
- * Returns the list of key field names.
- *
- * @return the list of key field names
- */
- public List<String> getKeyList() {
- return keyList;
- }
-
- /**
- * Sets the list of key field names.
- *
- * @param keyList the list of key field names
- */
- private void setKeyList(List<String> keyList) {
- this.keyList = keyList;
- }
-
- /**
- * Adds a key field name.
- *
- * @param key key field name.
- * @throws DataModelException a violation of data model rules
- */
- public void addKey(String key)
- throws DataModelException {
- if (getKeyList() == null) {
- setKeyList(new LinkedList<>());
- }
-
- if (getKeyList().contains(key)) {
- throw new DataModelException("A leaf identifier must not appear more than once in the\n" +
- " key" +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition() +
- " in " + getFileName() + "\"");
- }
-
- getKeyList().add(key);
- }
-
- /**
- * Adds a unique field name.
- *
- * @param unique unique field name.
- * @throws DataModelException a violation of data model rules
- */
- public void addUnique(String unique)
- throws DataModelException {
- if (getUniqueList() == null) {
- setUniqueList(new LinkedList<>());
- }
- if (getUniqueList().contains(unique)) {
- throw new DataModelException("A leaf identifier must not appear more than once in the\n" +
- " unique" +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition() +
- " in " + getFileName() + "\"");
- }
- getUniqueList().add(unique);
- }
-
- /**
- * Returns the list of leaves.
- *
- * @return the list of leaves
- */
- @Override
- public List<YangLeaf> getListOfLeaf() {
- return listOfLeaf;
- }
-
- /**
- * Sets the list of leaves.
- *
- * @param leafsList the list of leaf to set
- */
- @Override
- public void setListOfLeaf(List<YangLeaf> leafsList) {
- listOfLeaf = leafsList;
- }
-
- /**
- * Adds a leaf.
- *
- * @param leaf the leaf to be added
- */
- @Override
- public void addLeaf(YangLeaf leaf) {
- getListOfLeaf().add(leaf);
- }
-
- /**
- * Returns the list of leaf-list.
- *
- * @return the list of leaf-list
- */
- @Override
- public List<YangLeafList> getListOfLeafList() {
- return listOfLeafList;
- }
-
- /**
- * Sets the list of leaf-list.
- *
- * @param listOfLeafList the list of leaf-list to set
- */
- @Override
- public void setListOfLeafList(List<YangLeafList> listOfLeafList) {
- this.listOfLeafList = listOfLeafList;
- }
-
- /**
- * Adds a leaf-list.
- *
- * @param leafList the leaf-list to be added
- */
- @Override
- public void addLeafList(YangLeafList leafList) {
- getListOfLeafList().add(leafList);
- }
-
- /**
- * Returns the max elements.
- *
- * @return the max elements
- */
- public YangMaxElement getMaxElements() {
- return maxElements;
- }
-
- /**
- * Sets the max elements.
- *
- * @param max the max elements
- */
- public void setMaxElements(YangMaxElement max) {
- this.maxElements = max;
- }
-
- /**
- * Returns the minimum elements.
- *
- * @return the minimum elements
- */
- public YangMinElement getMinElements() {
- return minElements;
- }
-
- /**
- * Sets the minimum elements.
- *
- * @param minElements the minimum elements
- */
- public void setMinElements(YangMinElement minElements) {
- this.minElements = minElements;
- }
-
- /**
- * Returns the textual reference.
- *
- * @return the reference
- */
- @Override
- public String getReference() {
- return reference;
- }
-
- /**
- * Sets the textual reference.
- *
- * @param reference the reference to set
- */
- @Override
- public void setReference(String reference) {
- this.reference = reference;
- }
-
- /**
- * Returns the status.
- *
- * @return the status
- */
- @Override
- public YangStatusType getStatus() {
- return status;
- }
-
- /**
- * Sets the status.
- *
- * @param status the status to set
- */
- @Override
- public void setStatus(YangStatusType status) {
- this.status = status;
- }
-
- /**
- * Returns the type of the parsed data.
- *
- * @return returns LIST_DATA
- */
- @Override
- public YangConstructType getYangConstructType() {
- return YangConstructType.LIST_DATA;
- }
-
- /**
- * Validates the data on entering the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnEntry()
- throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
- }
-
- /**
- * Validates the data on exiting the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnExit()
- throws DataModelException {
- List<String> keys = getKeyList();
- List<YangLeaf> leaves = getListOfLeaf();
- List<YangLeafList> leafLists = getListOfLeafList();
-
- validateConfig(leaves, leafLists);
-
- //A list must have atleast one key leaf if config is true
- if (isConfig && (keys.isEmpty() || leaves.isEmpty()) && !isUsesPresentInList()
- && !isListPresentInGrouping()) {
- throw new DataModelException("A list must have atleast one key leaf if config is true; " +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition() +
- " in " + getFileName() + "\"");
- } else if (keys != null) {
- validateKey(leaves, keys);
- }
- }
-
- /**
- * Validates config statement of YANG list.
- *
- * @param leaves list of leaf attributes of YANG list
- * @param leafLists list of leaf-list attributes of YANG list
- * @throws DataModelException a violation of data model rules
- */
- private void validateConfig(List<YangLeaf> leaves, List<YangLeafList> leafLists)
- throws DataModelException {
-
- /*
- * If a node has "config" set to "false", no node underneath it can have
- * "config" set to "true".
- */
- if (!isConfig && leaves != null) {
- for (YangLeaf leaf : leaves) {
- if (leaf.isConfig()) {
- throw new DataModelException("If a list has \"config\" set to \"false\", no node underneath " +
- "it can have \"config\" set to \"true\"." +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition() +
- " in " + getFileName() + "\"");
- }
- }
- }
-
- if (!isConfig && leafLists != null) {
- for (YangLeafList leafList : leafLists) {
- if (leafList.isConfig()) {
- throw new DataModelException("If a list has \"config\" set to \"false\", no node underneath " +
- "it can have \"config\" set to \"true\"." + getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition() +
- " in " + getFileName() + "\"");
- }
- }
- }
- }
-
- /**
- * Validates key statement of list.
- *
- * @param leaves list of leaf attributes of list
- * @param keys list of key attributes of list
- * @throws DataModelException a violation of data model rules
- */
- private void validateKey(List<YangLeaf> leaves, List<String> keys)
- throws DataModelException {
- boolean leafFound = false;
- List<YangLeaf> keyLeaves = new LinkedList<>();
-
- /*
- * 1. Leaf identifier must refer to a child leaf of the list 2. A leaf
- * that is part of the key must not be the built-in type "empty".
- */
- for (String key : keys) {
- if (leaves != null && !leaves.isEmpty()) {
- for (YangLeaf leaf : leaves) {
- if (key.equals(leaf.getName())) {
- if (leaf.getDataType().getDataType() == YangDataTypes.EMPTY) {
- throw new DataModelException(" A leaf that is part of the key must not be the built-in " +
- "type \"empty\"." +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition() +
- " in " + getFileName() + "\"");
- }
- leafFound = true;
- keyLeaves.add(leaf);
- break;
- }
- }
- }
-
- if (!leafFound && !isUsesPresentInList() && !isListPresentInGrouping()) {
- throw new DataModelException("An identifier, in key, must refer to a child leaf of the list" +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition() +
- " in " + getFileName() + "\"");
- }
- leafFound = false;
- }
-
- /*
- * All key leafs in a list MUST have the same value for their "config"
- * as the list itself.
- */
- for (YangLeaf keyLeaf : keyLeaves) {
- if (isConfig != keyLeaf.isConfig()) {
- throw new DataModelException("All key leafs in a list must have the same value for their" +
- " \"config\" as the list itself." +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition() +
- " in " + getFileName() + "\"");
- }
- }
- }
-
- @Override
- public void detectCollidingChild(String identifierName, YangConstructType dataType)
- throws DataModelException {
- // Asks helper to detect colliding child.
- detectCollidingChildUtil(identifierName, dataType, this);
- }
-
- @Override
- public void detectSelfCollision(String identifierName, YangConstructType dataType)
- throws DataModelException {
- if (getName().equals(identifierName)) {
- throw new DataModelException("YANG file error: Duplicate input identifier detected, same as list \"" +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition() +
- " in " + getFileName() + "\"");
- }
- }
-
- private boolean isUsesPresentInList() {
- YangNode node = getChild();
- while (node != null) {
- if (node instanceof YangUses) {
- return true;
- }
- node = node.getNextSibling();
- }
- return false;
- // TODO When grouping linking is done this method has to be modified.
- }
-
- private boolean isListPresentInGrouping() {
- YangNode node = getParent();
- while (node != null) {
- if (node instanceof YangGrouping) {
- return true;
- }
- node = node.getParent();
- }
- return false;
- // TODO When grouping linking is done this method has to be modified.
- }
-
- @Override
- public List<YangIfFeature> getIfFeatureList() {
- return ifFeatureList;
- }
-
- @Override
- public void addIfFeatureList(YangIfFeature ifFeature) {
- if (getIfFeatureList() == null) {
- setIfFeatureList(new LinkedList<>());
- }
- getIfFeatureList().add(ifFeature);
- }
-
- @Override
- public void setIfFeatureList(List<YangIfFeature> ifFeatureList) {
- this.ifFeatureList = ifFeatureList;
- }
-
- @Override
- public List<YangMust> getListOfMust() {
- return mustConstraintList;
- }
-
- @Override
- public void setListOfMust(List<YangMust> mustConstraintList) {
- this.mustConstraintList = mustConstraintList;
- }
-
- @Override
- public void addMust(YangMust must) {
- if (getListOfMust() == null) {
- setListOfMust(new LinkedList<>());
- }
- getListOfMust().add(must);
- }
-
- @Override
- public void addAugmentation(YangAugment augmentInfo) {
- yangAugmentedInfo.add(augmentInfo);
- }
-
- @Override
- public void removeAugmentation(YangAugment augmentInfo) {
- yangAugmentedInfo.remove(augmentInfo);
- }
-
- @Override
- public List<YangAugment> getAugmentedInfoList() {
- return yangAugmentedInfo;
- }
-
- @Override
- public void setLeafNameSpaceAndAddToParentSchemaMap() {
- // Add namespace for all leafs.
- for (YangLeaf yangLeaf : getListOfLeaf()) {
- yangLeaf.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
- }
- // Add namespace for all leaf list.
- for (YangLeafList yangLeafList : getListOfLeafList()) {
- yangLeafList.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
- }
- }
-
- public void cloneAugmentInfo() {
- yangAugmentedInfo = new ArrayList<>();
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangMaxElement.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangMaxElement.java
deleted file mode 100644
index 507f70e..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangMaxElement.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import java.io.Serializable;
-
-import static java.lang.Integer.MAX_VALUE;
-import static org.onosproject.yangutils.datamodel.utils.YangErrMsgConstants.OPERATION_FAILED_ERROR_TAG;
-import static org.onosproject.yangutils.datamodel.utils.YangErrMsgConstants.TOO_MANY_ELEMENTS_ERROR_APP_TAG;
-
-/**
- * Represents max element data represented in YANG.
- */
-public class YangMaxElement extends DefaultLocationInfo
- implements YangAppErrorHolder, Serializable {
-
- private static final long serialVersionUID = 807201694L;
-
- /**
- * YANG application error information.
- */
- private YangAppErrorInfo yangAppErrorInfo;
-
- /**
- * Reference:RFC 6020.
- * <p>
- * The "max-elements" statement, which is optional, takes as an argument a
- * positive integer or the string "unbounded", which puts a constraint on
- * valid list entries. A valid leaf-list or list always has at most
- * max-elements entries.
- * <p>
- * If no "max-elements" statement is present, it defaults to "unbounded".
- */
- private int maxElement = MAX_VALUE;
-
- /**
- * Creates a YANG maximum element.
- */
- public YangMaxElement() {
- yangAppErrorInfo = new YangAppErrorInfo();
- yangAppErrorInfo.setErrorTag(OPERATION_FAILED_ERROR_TAG);
- yangAppErrorInfo.setErrorAppTag(TOO_MANY_ELEMENTS_ERROR_APP_TAG);
- }
-
- /**
- * Returns the maximum element value.
- *
- * @return the maximum element value
- */
- public int getMaxElement() {
- return maxElement;
- }
-
- /**
- * Sets the maximum element value.
- *
- * @param maxElement the maximum element value
- */
- public void setMaxElement(int maxElement) {
- this.maxElement = maxElement;
- }
-
- @Override
- public void setAppErrorInfo(YangAppErrorInfo yangAppErrorInfo) {
- this.yangAppErrorInfo = yangAppErrorInfo;
- }
-
- @Override
- public YangAppErrorInfo getAppErrorInfo() {
- return yangAppErrorInfo;
- }
-}
\ No newline at end of file
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangMinElement.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangMinElement.java
deleted file mode 100644
index 21b95d0..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangMinElement.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import java.io.Serializable;
-
-import static org.onosproject.yangutils.datamodel.utils.YangErrMsgConstants.OPERATION_FAILED_ERROR_TAG;
-import static org.onosproject.yangutils.datamodel.utils.YangErrMsgConstants.TOO_FEW_ELEMENTS_ERROR_APP_TAG;
-
-/**
- * Represents minimum element data represented in YANG.
- */
-public class YangMinElement extends DefaultLocationInfo
- implements YangAppErrorHolder, Serializable {
-
- private static final long serialVersionUID = 807201695L;
-
- /**
- * YANG application error information.
- */
- private YangAppErrorInfo yangAppErrorInfo;
-
- /**
- * Reference:RFC 6020.
- * <p>
- * The "min-elements" statement, which is optional, takes as an argument a
- * non-negative integer that puts a constraint on valid list entries. A
- * valid leaf-list or list MUST have at least min-elements entries.
- * <p>
- * If no "min-elements" statement is present, it defaults to zero.
- * <p>
- * The behavior of the constraint depends on the type of the leaf-list's or
- * list's closest ancestor node in the schema tree that is not a non-
- * presence container:
- * <p>
- * If this ancestor is a case node, the constraint is enforced if any
- * other node from the case exists.
- * <p>
- * Otherwise, it is enforced if the ancestor node exists.
- */
- private int minElement;
-
- /**
- * Creates a YANG minimum element.
- */
- public YangMinElement() {
- yangAppErrorInfo = new YangAppErrorInfo();
- yangAppErrorInfo.setErrorTag(OPERATION_FAILED_ERROR_TAG);
- yangAppErrorInfo.setErrorAppTag(TOO_FEW_ELEMENTS_ERROR_APP_TAG);
- }
-
- /**
- * Returns the minimum element value.
- *
- * @return the minimum element value
- */
- public int getMinElement() {
- return minElement;
- }
-
- /**
- * Sets the minimum element value.
- *
- * @param minElement the minimum element value
- */
- public void setMinElement(int minElement) {
- this.minElement = minElement;
- }
-
- @Override
- public void setAppErrorInfo(YangAppErrorInfo yangAppErrorInfo) {
- this.yangAppErrorInfo = yangAppErrorInfo;
- }
-
- @Override
- public YangAppErrorInfo getAppErrorInfo() {
- return yangAppErrorInfo;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangModule.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangModule.java
deleted file mode 100644
index 9c4f01b..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangModule.java
+++ /dev/null
@@ -1,820 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import static java.util.Collections.unmodifiableList;
-import static org.onosproject.yangutils.datamodel.ResolvableType.YANG_AUGMENT;
-import static org.onosproject.yangutils.datamodel.ResolvableType.YANG_BASE;
-import static org.onosproject.yangutils.datamodel.ResolvableType.YANG_COMPILER_ANNOTATION;
-import static org.onosproject.yangutils.datamodel.ResolvableType.YANG_DERIVED_DATA_TYPE;
-import static org.onosproject.yangutils.datamodel.ResolvableType.YANG_IDENTITYREF;
-import static org.onosproject.yangutils.datamodel.ResolvableType.YANG_IF_FEATURE;
-import static org.onosproject.yangutils.datamodel.ResolvableType.YANG_LEAFREF;
-import static org.onosproject.yangutils.datamodel.ResolvableType.YANG_USES;
-import static org.onosproject.yangutils.datamodel.YangSchemaNodeType.YANG_SINGLE_INSTANCE_NODE;
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.linkInterFileReferences;
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.resolveLinkingForResolutionList;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.MODULE_DATA;
-
-/*-
- * Reference:RFC 6020.
- * The "module" statement defines the module's name,
- * and groups all statements that belong to the module together. The "module"
- * statement's argument is the name of the module, followed by a block of
- * sub statements that hold detailed module information.
- * The module's sub statements
- *
- * +--------------+---------+-------------+-----------------------+
- * |sub statement | section | cardinality | data model mapping |
- * +--------------+---------+-------------+-----------------------+
- * | anyxml | 7.10 | 0..n | not supported |
- * | augment | 7.15 | 0..n | child nodes |
- * | choice | 7.9 | 0..n | child nodes |
- * | contact | 7.1.8 | 0..1 | string |
- * | container | 7.5 | 0..n | child nodes |
- * | description | 7.19.3 | 0..1 | string |
- * | deviation | 7.18.3 | 0..n | TODO |
- * | extension | 7.17 | 0..n | TODO |
- * | feature | 7.18.1 | 0..n | TODO |
- * | grouping | 7.11 | 0..n | child nodes |
- * | identity | 7.16 | 0..n | TODO |
- * | import | 7.1.5 | 0..n | list of import info |
- * | include | 7.1.6 | 0..n | list of include info |
- * | leaf | 7.6 | 0..n | list of leaf info |
- * | leaf-list | 7.7 | 0..n | list of leaf-list info|
- * | list | 7.8 | 0..n | child nodes |
- * | namespace | 7.1.3 | 1 | string/uri |
- * | notification | 7.14 | 0..n | TODO |
- * | organization | 7.1.7 | 0..1 | string |
- * | prefix | 7.1.4 | 1 | string |
- * | reference | 7.19.4 | 0..1 | string |
- * | revision | 7.1.9 | 0..n | revision |
- * | rpc | 7.13 | 0..n | TODO |
- * | typedef | 7.3 | 0..n | child nodes |
- * | uses | 7.12 | 0..n | child nodes |
- * | YANG-version | 7.1.2 | 0..1 | int |
- * +--------------+---------+-------------+-----------------------+
- */
-
-/**
- * Represents data model node to maintain information defined in YANG module.
- */
-public abstract class YangModule
- extends YangNode
- implements YangLeavesHolder, YangDesc, YangReference, Parsable,
- CollisionDetector, YangReferenceResolver, RpcNotificationContainer,
- YangFeatureHolder, YangIsFilterContentNodes, YangNamespace {
-
- private static final long serialVersionUID = 806201610L;
-
- /**
- * Reference:RFC 6020.
- * <p>
- * The "contact" statement provides contact information for the module. The
- * argument is a string that is used to specify contact information for the
- * person or persons to whom technical queries concerning this module should
- * be sent, such as their name, postal address, telephone number, and
- * electronic mail address.
- */
- private String contact;
-
- /**
- * Reference:RFC 6020.
- * <p>
- * The "description" statement takes as an argument a string that contains a
- * human-readable textual description of this definition. The text is
- * provided in a language (or languages) chosen by the module developer; for
- * the sake of interoperability.
- */
- private String description;
-
- /**
- * List of YANG modules imported.
- */
- private List<YangImport> importList;
-
- /**
- * List of YANG sub-modules included.
- */
- private List<YangInclude> includeList;
-
- /**
- * List of leaves at root level in the module.
- */
- private List<YangLeaf> listOfLeaf;
-
- /**
- * List of leaf-lists at root level in the module.
- */
- private List<YangLeafList> listOfLeafList;
-
- /**
- * List of feature at root level in the module.
- */
- private List<YangFeature> listOfFeature;
-
- /**
- * Reference:RFC 6020.
- * <p>
- * The "organization" statement defines the party responsible for this
- * module. The argument is a string that is used to specify a textual
- * description of the organization(s) under whose auspices this module was
- * developed.
- */
- private String organization;
-
- /**
- * Prefix to refer to the objects in module.
- */
- private String prefix;
-
- /**
- * Reference of the module.
- */
- private String reference;
-
- /**
- * Revision info of the module.
- */
- private YangRevision revision;
-
- /**
- * YANG version.
- */
- private byte version;
-
- /*-
- * Reference RFC 6020.
- *
- * Nested typedefs and groupings.
- * Typedefs and groupings may appear nested under many YANG statements,
- * allowing these to be lexically scoped by the hierarchy under which
- * they appear. This allows types and groupings to be defined near
- * where they are used, rather than placing them at the top level of the
- * hierarchy. The close proximity increases readability.
- *
- * Scoping also allows types to be defined without concern for naming
- * conflicts between types in different submodules. Type names can be
- * specified without adding leading strings designed to prevent name
- * collisions within large modules.
- *
- * Finally, scoping allows the module author to keep types and groupings
- * private to their module or submodule, preventing their reuse. Since
- * only top-level types and groupings (i.e., those appearing as
- * sub-statements to a module or submodule statement) can be used outside
- * the module or submodule, the developer has more control over what
- * pieces of their module are presented to the outside world, supporting
- * the need to hide internal information and maintaining a boundary
- * between what is shared with the outside world and what is kept
- * private.
- *
- * Scoped definitions MUST NOT shadow definitions at a higher scope. A
- * type or grouping cannot be defined if a higher level in the schema
- * hierarchy has a definition with a matching identifier.
- *
- * A reference to an un-prefixed type or grouping, or one which uses the
- * prefix of the current module, is resolved by locating the closest
- * matching "typedef" or "grouping" statement among the immediate
- * sub-statements of each ancestor statement.
- */
- private List<YangResolutionInfo> derivedTypeResolutionList;
-
- /**
- * Uses resolution list.
- */
- private List<YangResolutionInfo> usesResolutionList;
-
- /**
- * If-feature resolution list.
- */
- private List<YangResolutionInfo> ifFeatureResolutionList;
-
- /**
- * LeafRef resolution list.
- */
- private List<YangResolutionInfo> leafRefResolutionList;
-
- /**
- * Base resolution list.
- */
- private List<YangResolutionInfo> baseResolutionList;
-
- /**
- * IdentityRef resolution list.
- */
- private List<YangResolutionInfo> identityRefResolutionList;
-
- /**
- * Augment resolution list.
- */
- private List<YangResolutionInfo> augmentResolutionList;
-
- /**
- * Compiler annotation list.
- */
- private List<YangResolutionInfo> compilerAnnotationList;
-
- /**
- * Extension list.
- */
- private List<YangExtension> extensionList;
-
- /**
- * Flag to indicate the presence of notification.
- */
- private boolean isNotificationPresent;
-
- /**
- * Map of notification enum.
- */
- private final Map<String, YangSchemaNode> notificationEnumMap;
-
- /**
- * List of augments which augmenting to an input in rpc.
- */
- private final List<YangAugment> augments;
-
- /**
- * YANG defined namespace.
- */
- private String namespace;
-
- /**
- * Creates a YANG node of module type.
- */
- public YangModule() {
-
- super(YangNodeType.MODULE_NODE, new HashMap<>());
- derivedTypeResolutionList = new LinkedList<>();
- augmentResolutionList = new LinkedList<>();
- usesResolutionList = new LinkedList<>();
- ifFeatureResolutionList = new LinkedList<>();
- leafRefResolutionList = new LinkedList<>();
- baseResolutionList = new LinkedList<>();
- identityRefResolutionList = new LinkedList<>();
- compilerAnnotationList = new LinkedList<>();
- importList = new LinkedList<>();
- includeList = new LinkedList<>();
- listOfLeaf = new LinkedList<>();
- listOfLeafList = new LinkedList<>();
- extensionList = new LinkedList<>();
- listOfFeature = new LinkedList<>();
- notificationEnumMap = new HashMap<>();
- augments = new LinkedList<>();
- }
-
- @Override
- public void addToChildSchemaMap(YangSchemaNodeIdentifier id,
- YangSchemaNodeContextInfo context) {
- getYsnContextInfoMap().put(id, context);
- }
-
- @Override
- public void incrementMandatoryChildCount() {
- // TODO
- }
-
- @Override
- public void addToDefaultChildMap(YangSchemaNodeIdentifier id,
- YangSchemaNode node) {
- // TODO
- }
-
- @Override
- public YangSchemaNodeType getYangSchemaNodeType() {
- return YANG_SINGLE_INSTANCE_NODE;
- }
-
- /**
- * Returns the contact details of the module owner.
- *
- * @return the contact details of YANG owner
- */
- public String getContact() {
- return contact;
- }
-
- /**
- * Sets the contact details of the module owner.
- *
- * @param contact the contact details of YANG owner
- */
- public void setContact(String contact) {
- this.contact = contact;
- }
-
- /**
- * Returns the description of module.
- *
- * @return the description of YANG module
- */
- @Override
- public String getDescription() {
- return description;
- }
-
- /**
- * Sets the description of module.
- *
- * @param description set the description of YANG module
- */
- @Override
- public void setDescription(String description) {
- this.description = description;
- }
-
- /**
- * Returns the list of imported modules.
- *
- * @return the list of imported modules
- */
- @Override
- public List<YangImport> getImportList() {
- return unmodifiableList(importList);
- }
-
- /**
- * Adds the imported module information to the import list.
- *
- * @param importedModule module being imported
- */
- @Override
- public void addToImportList(YangImport importedModule) {
- importList.add(importedModule);
- }
-
- @Override
- public void setImportList(List<YangImport> importList) {
- this.importList = importList;
- }
-
- /**
- * Returns the list of included sub modules.
- *
- * @return the included list of sub modules
- */
- @Override
- public List<YangInclude> getIncludeList() {
- return unmodifiableList(includeList);
- }
-
- /**
- * Adds the included sub module information to the include list.
- *
- * @param includeModule submodule being included
- */
- @Override
- public void addToIncludeList(YangInclude includeModule) {
- includeList.add(includeModule);
- }
-
- @Override
- public void setIncludeList(List<YangInclude> includeList) {
- this.includeList = includeList;
- }
-
- /**
- * Returns the list of leaves in module.
- *
- * @return the list of leaves
- */
- @Override
- public List<YangLeaf> getListOfLeaf() {
- return unmodifiableList(listOfLeaf);
- }
-
- @Override
- public void setListOfLeaf(List<YangLeaf> leafsList) {
- listOfLeaf = leafsList;
- }
-
- /**
- * Adds a leaf in module.
- *
- * @param leaf the leaf to be added
- */
- @Override
- public void addLeaf(YangLeaf leaf) {
- listOfLeaf.add(leaf);
- }
-
- /**
- * Returns the list of leaf-list from module.
- *
- * @return the list of leaf-list
- */
- @Override
- public List<YangLeafList> getListOfLeafList() {
- return unmodifiableList(listOfLeafList);
- }
-
- @Override
- public void setListOfLeafList(List<YangLeafList> listOfLeafList) {
- this.listOfLeafList = listOfLeafList;
- }
-
-
- /**
- * Adds a leaf-list in module.
- *
- * @param leafList the leaf-list to be added
- */
- @Override
- public void addLeafList(YangLeafList leafList) {
- listOfLeafList.add(leafList);
- }
-
- @Override
- public List<YangFeature> getFeatureList() {
- return unmodifiableList(listOfFeature);
- }
-
- @Override
- public void addFeatureList(YangFeature feature) {
- listOfFeature.add(feature);
- }
-
- @Override
- public void setListOfFeature(List<YangFeature> listOfFeature) {
- this.listOfFeature = listOfFeature;
- }
-
- /**
- * Returns the modules organization.
- *
- * @return the organization
- */
- public String getOrganization() {
- return organization;
- }
-
- /**
- * Sets the modules organization.
- *
- * @param org the organization to set
- */
- public void setOrganization(String org) {
- organization = org;
- }
-
- /**
- * Returns the prefix.
- *
- * @return the prefix
- */
- @Override
- public String getPrefix() {
- return prefix;
- }
-
- /**
- * Sets the prefix.
- *
- * @param prefix the prefix to set
- */
- @Override
- public void setPrefix(String prefix) {
- this.prefix = prefix;
- }
-
- @Override
- public void resolveSelfFileLinking(ResolvableType type)
- throws DataModelException {
- // Get the list to be resolved.
- List<YangResolutionInfo> resolutionList = getUnresolvedResolutionList(type);
- // Resolve linking for a resolution list.
- resolveLinkingForResolutionList(resolutionList, this);
- }
-
- @Override
- public void resolveInterFileLinking(ResolvableType type)
- throws DataModelException {
- // Get the list to be resolved.
- List<YangResolutionInfo> resolutionList = getUnresolvedResolutionList(type);
- // Resolve linking for a resolution list.
- linkInterFileReferences(resolutionList, this);
- }
-
- /**
- * Returns the textual reference.
- *
- * @return the reference
- */
- @Override
- public String getReference() {
- return reference;
- }
-
- /**
- * Sets the textual reference.
- *
- * @param reference the reference to set
- */
- @Override
- public void setReference(String reference) {
- this.reference = reference;
- }
-
- /**
- * Returns the revision.
- *
- * @return the revision
- */
- public YangRevision getRevision() {
- return revision;
- }
-
- /**
- * Sets the revision.
- *
- * @param revision the revision to set
- */
- public void setRevision(YangRevision revision) {
- this.revision = revision;
- }
-
- /**
- * Returns the version.
- *
- * @return the version
- */
- public byte getVersion() {
- return version;
- }
-
- /**
- * Sets the version.
- *
- * @param version the version to set
- */
- public void setVersion(byte version) {
- this.version = version;
- }
-
- /**
- * Adds extension in extension list.
- *
- * @param extension the extension to be added
- */
- public void addExtension(YangExtension extension) {
- extensionList.add(extension);
- }
-
- /**
- * Returns the extension list.
- *
- * @return the extension list
- */
- public List<YangExtension> getExtensionList() {
- return unmodifiableList(extensionList);
- }
-
- /**
- * Sets the extension list.
- *
- * @param extensionList the list of extension
- */
- protected void setExtensionList(List<YangExtension> extensionList) {
- this.extensionList = extensionList;
- }
-
- /**
- * Adds to extension list.
- *
- * @param extension YANG extension
- */
- public void addToExtensionList(YangExtension extension) {
- extensionList.add(extension);
- }
-
- /**
- * Returns the type of the parsed data.
- *
- * @return returns MODULE_DATA
- */
- @Override
- public YangConstructType getYangConstructType() {
- return MODULE_DATA;
- }
-
- /**
- * Validates the data on entering the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnEntry()
- throws DataModelException {
- /*
- * Module is root in the data model tree, hence there is no entry
- * validation
- */
- }
-
- /**
- * Validates the data on exiting the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnExit()
- throws DataModelException {
- /*
- * TODO: perform symbol linking for the imported or included YANG info.
- * TODO: perform symbol resolution for referred YANG entities.
- */
- }
-
- @Override
- public void detectCollidingChild(String identifierName,
- YangConstructType dataType)
- throws DataModelException {
- // Asks helper to detect colliding child.
- detectCollidingChildUtil(identifierName, dataType, this);
- }
-
- @Override
- public void detectSelfCollision(String identifierName,
- YangConstructType dataType)
- throws DataModelException {
- // Not required as module doesn't have any parent.
- }
-
- @Override
- public List<YangResolutionInfo> getUnresolvedResolutionList(ResolvableType type) {
- if (type == YANG_DERIVED_DATA_TYPE) {
- return unmodifiableList(derivedTypeResolutionList);
- } else if (type == YANG_USES) {
- return unmodifiableList(usesResolutionList);
- } else if (type == YANG_AUGMENT) {
- return unmodifiableList(augmentResolutionList);
- } else if (type == YANG_IF_FEATURE) {
- return unmodifiableList(ifFeatureResolutionList);
- } else if (type == YANG_LEAFREF) {
- return unmodifiableList(leafRefResolutionList);
- } else if (type == YANG_BASE) {
- return unmodifiableList(baseResolutionList);
- } else if (type == YANG_IDENTITYREF) {
- return unmodifiableList(identityRefResolutionList);
- } else {
- return unmodifiableList(compilerAnnotationList);
- }
- }
-
- @Override
- public void addToResolutionList(YangResolutionInfo info,
- ResolvableType type) {
- if (type == YANG_DERIVED_DATA_TYPE) {
- derivedTypeResolutionList.add(info);
- } else if (type == YANG_USES) {
- usesResolutionList.add(info);
- } else if (type == YANG_IF_FEATURE) {
- ifFeatureResolutionList.add(info);
- } else if (type == YANG_LEAFREF) {
- leafRefResolutionList.add(info);
- } else if (type == YANG_BASE) {
- baseResolutionList.add(info);
- } else if (type == YANG_AUGMENT) {
- augmentResolutionList.add(info);
- } else if (type == YANG_IDENTITYREF) {
- identityRefResolutionList.add(info);
- } else if (type == YANG_COMPILER_ANNOTATION) {
- compilerAnnotationList.add(info);
- }
- }
-
- @Override
- public void setResolutionList(List<YangResolutionInfo> resolutionList,
- ResolvableType type) {
- if (type == YANG_DERIVED_DATA_TYPE) {
- derivedTypeResolutionList = resolutionList;
- } else if (type == YANG_USES) {
- usesResolutionList = resolutionList;
- } else if (type == YANG_IF_FEATURE) {
- ifFeatureResolutionList.add((YangResolutionInfo) resolutionList);
- } else if (type == YANG_LEAFREF) {
- leafRefResolutionList = resolutionList;
- } else if (type == YANG_BASE) {
- baseResolutionList = resolutionList;
- } else if (type == YANG_AUGMENT) {
- augmentResolutionList = resolutionList;
- } else if (type == YANG_IDENTITYREF) {
- identityRefResolutionList = resolutionList;
- } else if (type == YANG_COMPILER_ANNOTATION) {
- compilerAnnotationList = resolutionList;
- }
- }
-
- @Override
- public void addReferencesToImportList(Set<YangNode> yangNodeSet)
- throws DataModelException {
- // Run through the imported list to add references.
- for (YangImport yangImport : getImportList()) {
- yangImport.addReferenceToImport(yangNodeSet);
- }
- }
-
- @Override
- public void addReferencesToIncludeList(Set<YangNode> yangNodeSet)
- throws DataModelException {
- // Run through the included list to add references.
- for (YangInclude yangInclude : getIncludeList()) {
- YangSubModule subModule = yangInclude
- .addReferenceToInclude(yangNodeSet);
-
- // Check if the referred sub-modules parent is self
- if (!subModule.getBelongsTo().getModuleNode().equals(this)) {
- yangInclude.reportIncludeError();
- }
- }
- }
-
- @Override
- public void setLeafNameSpaceAndAddToParentSchemaMap() {
- // Add namespace for all leafs.
- for (YangLeaf yangLeaf : getListOfLeaf()) {
- yangLeaf.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
- }
- // Add namespace for all leaf list.
- for (YangLeafList yangLeafList : getListOfLeafList()) {
- yangLeafList.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
- }
- }
-
- @Override
- public boolean isNotificationPresent() {
- return isNotificationPresent;
- }
-
- @Override
- public void setNotificationPresenceFlag(boolean notificationPresent) {
- isNotificationPresent = notificationPresent;
- }
-
- @Override
- public void addToNotificationEnumMap(String enumName,
- YangSchemaNode notification) {
- notificationEnumMap.put(enumName, notification);
- }
-
- @Override
- public YangSchemaNode getNotificationSchemaNode(String enumName) {
- return notificationEnumMap.get(enumName);
- }
-
- /**
- * Adds to augment list.
- *
- * @param augment augment which is augmenting input
- */
- public void addToAugmentList(YangAugment augment) {
- augments.add(augment);
- }
-
- /**
- * Returns augmented list.
- *
- * @return augmented list
- */
- public List<YangAugment> getAugmentList() {
- return unmodifiableList(augments);
- }
-
- @Override
- public String getModuleNamespace() {
- return namespace;
- }
-
- @Override
- public String getModuleName() {
- return getName();
- }
-
- public void setModuleNamespace(String namespace) {
- this.namespace = namespace;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangMust.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangMust.java
deleted file mode 100644
index 5e0346b..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangMust.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel;
-
-import java.io.Serializable;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-import static org.onosproject.yangutils.datamodel.utils.YangErrMsgConstants.OPERATION_FAILED_ERROR_TAG;
-import static org.onosproject.yangutils.datamodel.utils.YangErrMsgConstants.MUST_VIOLATION_ERROR_APP_TAG;
-
-/*-
- * The "must" statement, which is optional, takes as an argument a string that
- * contains an XPath expression. It is used to formally declare a constraint
- * on valid data.
- *
- * When a datastore is validated, all "must" constraints are conceptually
- * evaluated once for each data node in the data tree, and for all leafs with
- * default values in use. If a data node does not exist in the data tree, and
- * it does not have a default value, its "must" statements are not evaluated.
- *
- * All such constraints MUST evaluate to true for the data to be valid.
- *
- * The must's sub-statements
- *
- * +---------------+---------+-------------+------------------+
- * | substatement | section | cardinality |data model mapping|
- * +---------------+---------+-------------+------------------+
- * | description | 7.19.3 | 0..1 | -string |
- * | error-app-tag | 7.5.4.2 | 0..1 | -not supported |
- * | error-message | 7.5.4.1 | 0..1 | -not supported |
- * | reference | 7.19.4 | 0..1 | -string |
- * +---------------+---------+-------------+------------------+
- */
-
-/**
- * Represents information defined in YANG must.
- */
-public class YangMust extends DefaultLocationInfo
- implements YangDesc, YangReference, Parsable, Serializable, YangAppErrorHolder {
-
- private static final long serialVersionUID = 806201646L;
-
- /**
- * Constraint info.
- */
- private String constraint;
-
- /**
- * Description string.
- */
- private String description;
-
- /**
- * Reference string.
- */
- private String reference;
-
- /**
- * YANG application error information.
- */
- private YangAppErrorInfo yangAppErrorInfo;
-
- /**
- * Creates a YANG must restriction.
- */
- public YangMust() {
- yangAppErrorInfo = new YangAppErrorInfo();
- yangAppErrorInfo.setErrorTag(OPERATION_FAILED_ERROR_TAG);
- yangAppErrorInfo.setErrorAppTag(MUST_VIOLATION_ERROR_APP_TAG);
- }
-
- /**
- * Returns the constraint.
- *
- * @return the constraint
- */
- public String getConstraint() {
- return constraint;
- }
-
- /**
- * Sets the constraint.
- *
- * @param constraint the constraint to set
- */
- public void setConstraint(String constraint) {
- this.constraint = constraint;
- }
-
- /**
- * Returns the description.
- *
- * @return the description
- */
- @Override
- public String getDescription() {
- return description;
- }
-
- /**
- * Sets the description.
- *
- * @param description set the description
- */
- @Override
- public void setDescription(String description) {
- this.description = description;
- }
-
- /**
- * Returns the textual reference.
- *
- * @return the reference
- */
- @Override
- public String getReference() {
- return reference;
- }
-
- /**
- * Sets the textual reference.
- *
- * @param reference the reference to set
- */
- @Override
- public void setReference(String reference) {
- this.reference = reference;
- }
-
- /**
- * Returns the type of the parsed data.
- *
- * @return returns MUST_DATA
- */
- @Override
- public YangConstructType getYangConstructType() {
- return YangConstructType.MUST_DATA;
- }
-
- /**
- * Validates the data on entering the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnEntry() throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
- }
-
- /**
- * Validates the data on exiting the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnExit() throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
- }
-
- @Override
- public void setAppErrorInfo(YangAppErrorInfo yangAppErrorInfo) {
- this.yangAppErrorInfo = yangAppErrorInfo;
- }
-
- @Override
- public YangAppErrorInfo getAppErrorInfo() {
- return yangAppErrorInfo;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangMustHolder.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangMustHolder.java
deleted file mode 100644
index badd3d9..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangMustHolder.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import java.util.List;
-
-/**
- * Abstraction of must entity. It is used to abstract the data holders of must.
- */
-public interface YangMustHolder {
-
- /**
- * Returns the list of must from data holder like container / list.
- *
- * @return the list of must
- */
- List<YangMust> getListOfMust();
-
- /**
- * Sets the list of must.
- *
- * @param mustConstraintList the list of must to set
- */
- void setListOfMust(List<YangMust> mustConstraintList);
-
- /**
- * Adds must in data holder like container / list.
- *
- * @param must the must to be added
- */
- void addMust(YangMust must);
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNamespace.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNamespace.java
deleted file mode 100644
index 0abf944..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNamespace.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-/**
- * Representation of YANG namespace.
- */
-public interface YangNamespace {
-
- /**
- * Returns module's namespace.
- *
- * @return module namespace
- */
- String getModuleNamespace();
-
- /**
- * Returns module name.
- *
- * @return module name
- */
- String getModuleName();
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNode.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNode.java
deleted file mode 100644
index 9aab675..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNode.java
+++ /dev/null
@@ -1,930 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-
-import java.io.Serializable;
-import java.util.HashMap;
-import java.util.Map;
-
-import static org.onosproject.yangutils.datamodel.TraversalType.CHILD;
-import static org.onosproject.yangutils.datamodel.TraversalType.PARENT;
-import static org.onosproject.yangutils.datamodel.TraversalType.SIBILING;
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.cloneListOfLeaf;
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.cloneListOfLeafList;
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.updateClonedLeavesUnionEnumRef;
-
-/**
- * Represents base class of a node in data model tree.
- */
-public abstract class YangNode
- implements Cloneable, Serializable, YangSchemaNode,
- Comparable<YangNode> {
-
- private static final long serialVersionUID = 806201601L;
-
- /**
- * YANG schema node identifier.
- */
- private YangSchemaNodeIdentifier yangSchemaNodeIdentifier;
-
- /**
- * Type of node.
- */
- private YangNodeType nodeType;
-
- /**
- * Parent reference.
- */
- private YangNode parent;
-
- /**
- * First child reference.
- */
- private YangNode child;
-
- /**
- * Next sibling reference.
- */
- private YangNode nextSibling;
-
- /**
- * Previous sibling reference.
- */
- private YangNode previousSibling;
-
- /**
- * Priority of the node.
- */
- private int priority;
-
- /**
- * Flag if the node is for translation.
- */
- private boolean isToTranslate = true;
-
- private transient int lineNumber;
- private transient int charPosition;
- private String fileName;
-
- /**
- * Map of YANG context information. It is to be consumed by YMS.
- */
- private Map<YangSchemaNodeIdentifier, YangSchemaNodeContextInfo> ysnContextInfoMap;
-
- /**
- * Count of mandatory YANG schema nodes.
- */
- private int mandatoryChildCount;
-
- /**
- * Yang revision.
- */
- private YangRevision revision;
-
- /**
- * Map of default schema nodes.
- */
- private Map<YangSchemaNodeIdentifier, YangSchemaNode> defaultChildMap;
-
- /**
- * Flag to check whether any descendant node is augmented.
- */
- private boolean isDescendantNodeAugmented;
-
- /**
- * Referred schema node, only applicable during grouping.
- */
- private YangNode referredSchemaNode;
-
- /**
- * Returns the priority of the node.
- *
- * @return priority of the node
- */
- public int getPriority() {
- return priority;
- }
-
- /**
- * Sets the priority of the node.
- *
- * @param priority of the node
- */
- public void setPriority(int priority) {
- this.priority = priority;
- }
-
- /**
- * Creates a YANG node object.
- */
- @SuppressWarnings("unused")
- private YangNode() {
- }
-
- /**
- * Creates a specific type of node.
- *
- * @param type of YANG node
- * @param ysnContextInfoMap YSN context info map
- */
- protected YangNode(YangNodeType type,
- Map<YangSchemaNodeIdentifier, YangSchemaNodeContextInfo> ysnContextInfoMap) {
- nodeType = type;
- this.ysnContextInfoMap = ysnContextInfoMap;
- }
-
- /**
- * Returns true if descendant node is augmented.
- *
- * @return true if descendant node is augmented
- */
- public boolean isDescendantNodeAugmented() {
- return isDescendantNodeAugmented;
- }
-
- /**
- * Sets true if descendant node is augmented.
- *
- * @param descendantNodeAugmented true if descendant node is augmented.
- */
- public void setDescendantNodeAugmented(boolean descendantNodeAugmented) {
- isDescendantNodeAugmented = descendantNodeAugmented;
- }
-
- /**
- * Returns the node type.
- *
- * @return node type
- */
- public YangNodeType getNodeType() {
- return nodeType;
- }
-
- /**
- * Sets the node type.
- *
- * @param nodeType type of node
- */
- private void setNodeType(YangNodeType nodeType) {
- this.nodeType = nodeType;
- }
-
- /**
- * Returns the parent of node.
- *
- * @return parent of node
- */
- public YangNode getParent() {
- return parent;
- }
-
- /**
- * Sets the parent of node.
- *
- * @param parent node
- */
- public void setParent(YangNode parent) {
- this.parent = parent;
- }
-
- /**
- * Returns the first child of node.
- *
- * @return first child of node
- */
- public YangNode getChild() {
- return child;
- }
-
- /**
- * Sets the first instance of a child node.
- *
- * @param child is only child to be set
- */
- public void setChild(YangNode child) {
- this.child = child;
- }
-
- /**
- * Returns the next sibling of node.
- *
- * @return next sibling of node
- */
- public YangNode getNextSibling() {
- return nextSibling;
- }
-
- /**
- * Sets the next sibling of node.
- *
- * @param sibling YANG node
- */
- public void setNextSibling(YangNode sibling) {
- nextSibling = sibling;
- }
-
- /**
- * Returns the previous sibling.
- *
- * @return previous sibling node
- */
- public YangNode getPreviousSibling() {
- return previousSibling;
- }
-
- /**
- * Sets the previous sibling.
- *
- * @param previousSibling points to predecessor sibling
- */
- public void setPreviousSibling(YangNode previousSibling) {
- this.previousSibling = previousSibling;
- }
-
- /**
- * Adds a child node, the children sibling list will be sorted based on node
- * type.
- *
- * @param newChild refers to a child to be added
- * @throws DataModelException due to violation in data model rules
- */
- public void addChild(YangNode newChild)
- throws DataModelException {
- if (newChild.getNodeType() == null) {
- throw new DataModelException("Abstract node cannot be inserted " +
- "into a tree " + getName() +
- " in " + getLineNumber() +
- " at " + getCharPosition() +
- " in " + getFileName() + "\"");
- }
-
- if (newChild.getParent() == null) {
- newChild.setParent(this);
- } else if (newChild.getParent() != this) {
- throw new DataModelException("Node is already part of a tree " +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition() + " in " +
- getFileName() + "\"");
- }
-
- if (newChild.getChild() != null) {
- throw new DataModelException("Child to be added is not atomic, " +
- "it already has a child " +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition() + " in " +
- getFileName() + "\"");
- }
-
- if (newChild.getNextSibling() != null) {
- throw new DataModelException("Child to be added is not atomic, " +
- "it already has a next " +
- "sibling " + getName() +
- " in " + getLineNumber() +
- " at " + getCharPosition() +
- " in " + getFileName() + "\"");
- }
-
- if (newChild.getPreviousSibling() != null) {
- throw new DataModelException("Child to be added is not atomic, " +
- "it already has a previous " +
- "sibling " + getName() +
- " in " + getLineNumber() +
- " at " + getCharPosition() +
- " in " + getFileName() + "\"");
- }
-
- /* First child to be added */
- if (getChild() == null) {
- setChild(newChild);
- } else {
-
- YangNode curNode;
- curNode = getChild();
-
- // Get the predecessor child of new child
- while (curNode.getNextSibling() != null) {
- curNode = curNode.getNextSibling();
- }
-
- // If the new node needs to be the last child
- if (curNode.getNextSibling() == null) {
- curNode.setNextSibling(newChild);
- newChild.setPreviousSibling(curNode);
- }
- }
- }
-
- /**
- * Processes addition of schema node child to parent map.
- *
- * @param name name of the node
- * @param namespace namespace of the node
- */
- protected void processAdditionOfSchemaNodeToParentMap(String name,
- YangNamespace namespace) {
- processAdditionOfSchemaNodeToMap(name, namespace, this, getParent());
- }
-
- /**
- * Processes addition of schema node child to parent map.
- *
- * @param name name of the node
- * @param namespace namespace of the node
- * @param yangSchemaNode YANG schema node
- */
- public void processAdditionOfSchemaNodeToCurNodeMap(String name,
- YangNamespace namespace,
- YangSchemaNode yangSchemaNode) {
- processAdditionOfSchemaNodeToMap(name, namespace, yangSchemaNode, this);
- }
-
- /**
- * Processes addition of schema node child to map.
- *
- * @param name name of the node
- * @param namespace namespace of the node
- * @param yangSchemaNode YANG schema node
- * @param childSchemaMapHolder child schema map holder
- */
- private void processAdditionOfSchemaNodeToMap(String name,
- YangNamespace namespace,
- YangSchemaNode yangSchemaNode,
- YangNode childSchemaMapHolder) {
- // Addition of node to schema node map.
- // Create YANG schema node identifier with child node name.
- YangSchemaNodeIdentifier yangSchemaNodeIdentifier = new YangSchemaNodeIdentifier();
- yangSchemaNodeIdentifier.setName(name);
- yangSchemaNodeIdentifier.setNameSpace(namespace);
- // Create YANG schema node context info and set child node.
- YangSchemaNodeContextInfo yangSchemaNodeContextInfo = new YangSchemaNodeContextInfo();
- yangSchemaNodeContextInfo.setSchemaNode(yangSchemaNode);
- // Invoke parent method to add the created entry.
- try {
- childSchemaMapHolder.addToChildSchemaMap(yangSchemaNodeIdentifier,
- yangSchemaNodeContextInfo);
- } catch (DataModelException e) {
- //TODO
- }
- }
-
- @Override
- public int compareTo(YangNode otherNode) {
- if (priority == otherNode.getPriority()) {
- return 0;
- }
- return ((Integer) otherNode.getPriority()).compareTo(priority);
- }
-
- /**
- * Clones the current node contents and create a new node.
- *
- * @param yangUses YANG uses
- * @return cloned node
- * @throws CloneNotSupportedException clone is not supported by the referred
- * node
- */
- public YangNode clone(YangUses yangUses)
- throws CloneNotSupportedException {
- YangNode clonedNode = (YangNode) super.clone();
- clonedNode.referredSchemaNode = this;
- if (clonedNode instanceof YangLeavesHolder) {
- try {
- cloneListOfLeaf((YangLeavesHolder) clonedNode, yangUses);
- cloneListOfLeafList((YangLeavesHolder) clonedNode, yangUses);
- } catch (DataModelException e) {
- throw new CloneNotSupportedException(e.getMessage());
- }
- }
-
- clonedNode.setParent(null);
- clonedNode.setChild(null);
- clonedNode.setNextSibling(null);
- clonedNode.setPreviousSibling(null);
- clonedNode.yangSchemaNodeIdentifier =
- clonedNode.yangSchemaNodeIdentifier.clone();
- clonedNode.ysnContextInfoMap = new HashMap<>();
- if (clonedNode instanceof YangAugmentableNode) {
- ((YangAugmentableNode) clonedNode).cloneAugmentInfo();
- }
- return clonedNode;
- }
-
- /**
- * Clones the subtree from the specified source node to the mentioned target
- * node. The source and target root node cloning is carried out by the
- * caller.
- *
- * @param srcRootNode source node for sub tree cloning
- * @param dstRootNode destination node where the sub tree needs to be cloned
- * @param yangUses YANG uses
- * @throws DataModelException data model error
- */
- public static void cloneSubTree(YangNode srcRootNode, YangNode dstRootNode,
- YangUses yangUses)
- throws DataModelException {
-
- YangNode nextNodeToClone = srcRootNode;
- TraversalType curTraversal;
-
- YangNode clonedTreeCurNode = dstRootNode;
- YangNode newNode = null;
-
- nextNodeToClone = nextNodeToClone.getChild();
- if (nextNodeToClone == null) {
- return;
- } else {
- /*
- * Root level cloning is taken care in the caller.
- */
- curTraversal = CHILD;
- }
-
- /*
- * Caller ensures the cloning of the root nodes
- */
- try {
- while (nextNodeToClone != srcRootNode) {
- if (nextNodeToClone == null) {
- throw new DataModelException("Internal error: Cloning " +
- "failed, source " +
- "tree null pointer " +
- "reached " +
- nextNodeToClone.getName() +
- " in " + nextNodeToClone.getLineNumber() +
- " at " + nextNodeToClone.getCharPosition() +
- " in " + nextNodeToClone.getFileName() + "\"");
- }
- if (curTraversal != PARENT) {
- newNode = nextNodeToClone.clone(yangUses);
- detectCollisionWhileCloning(clonedTreeCurNode, newNode,
- curTraversal);
- }
-
- if (curTraversal == CHILD) {
-
- /*
- * add the new node to the cloned tree.
- */
- clonedTreeCurNode.addChild(newNode);
-
- /*
- * update the cloned tree's traversal current node as the
- * new node.
- */
- clonedTreeCurNode = newNode;
- } else if (curTraversal == SIBILING) {
-
- clonedTreeCurNode.addNextSibling(newNode);
- clonedTreeCurNode = newNode;
- } else {
- if (clonedTreeCurNode instanceof YangLeavesHolder) {
- updateClonedLeavesUnionEnumRef((YangLeavesHolder) clonedTreeCurNode);
- }
- clonedTreeCurNode = clonedTreeCurNode.getParent();
- }
-
- if (curTraversal != PARENT && nextNodeToClone.getChild() != null) {
- curTraversal = CHILD;
-
- /*
- * update the traversal's current node.
- */
- nextNodeToClone = nextNodeToClone.getChild();
- } else if (nextNodeToClone.getNextSibling() != null) {
-
- curTraversal = SIBILING;
-
- nextNodeToClone = nextNodeToClone.getNextSibling();
- } else {
- curTraversal = PARENT;
- nextNodeToClone = nextNodeToClone.getParent();
- }
- }
- } catch (CloneNotSupportedException e) {
- throw new DataModelException("Failed to clone the tree " +
- nextNodeToClone.getName() +
- " in " + nextNodeToClone.getLineNumber() +
- " at " + nextNodeToClone.getCharPosition() +
- " in " + nextNodeToClone.getFileName() + "\"");
- }
- }
-
- /**
- * Detects collision when the grouping is deep copied to the uses's parent.
- *
- * @param currentNode parent/previous sibling node for the new node
- * @param newNode node which has to be added
- * @param addAs traversal type of the node
- * @throws DataModelException data model error
- */
- private static void detectCollisionWhileCloning(YangNode currentNode,
- YangNode newNode,
- TraversalType addAs)
- throws DataModelException {
- if (!(currentNode instanceof CollisionDetector)
- || !(newNode instanceof Parsable)) {
- throw new DataModelException("Node in data model tree does not " +
- "support collision detection " +
- newNode.getName() + " in " +
- newNode.getLineNumber() + " at " +
- newNode.getCharPosition() +
- " in " + newNode.getFileName() + "\"");
- }
-
- CollisionDetector collisionDetector = (CollisionDetector) currentNode;
- Parsable parsable = (Parsable) newNode;
- if (addAs == TraversalType.CHILD) {
- collisionDetector.detectCollidingChild(newNode.getName(),
- parsable.getYangConstructType());
- } else if (addAs == TraversalType.SIBILING) {
- currentNode = currentNode.getParent();
- if (!(currentNode instanceof CollisionDetector)) {
- throw new DataModelException("Node in data model tree does " +
- "not support collision " +
- "detection" + currentNode.getName() +
- " in " + currentNode.getLineNumber() +
- " at " + currentNode.getCharPosition() +
- " in " + currentNode.getFileName() + "\"");
- }
- collisionDetector = (CollisionDetector) currentNode;
- collisionDetector.detectCollidingChild(newNode.getName(),
- parsable.getYangConstructType());
- } else {
- throw new DataModelException("Error tree cloning " +
- currentNode.getName() + " in" +
- " " + currentNode.getLineNumber() +
- " at " + currentNode.getCharPosition() +
- " in " + currentNode.getFileName() + "\"");
- }
- }
-
- /**
- * /** Returns true if translation required.
- *
- * @return true if translation required
- */
- public boolean isToTranslate() {
- return isToTranslate;
- }
-
- /**
- * Sest true if translation required.
- *
- * @param toTranslate true if translation required.
- */
- public void setToTranslate(boolean toTranslate) {
- isToTranslate = toTranslate;
- }
-
- /**
- * Adds a new next sibling.
- *
- * @param newSibling new sibling to be added
- * @throws DataModelException data model error
- */
- private void addNextSibling(YangNode newSibling)
- throws DataModelException {
-
- if (newSibling.getNodeType() == null) {
- throw new DataModelException("Cloned abstract node cannot be " +
- "inserted into a tree "
- + getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition()
- + " in " + getFileName() + "\"");
- }
-
- if (newSibling.getParent() == null) {
- /**
- * Since the siblings needs to have a common parent, set the parent
- * as the current node's parent
- */
- newSibling.setParent(getParent());
- } else {
- throw new DataModelException("Node is already part of a tree, " +
- "and cannot be added as a " +
- "sibling " + getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition() + " in " +
- getFileName() + "\"");
- }
-
- if (newSibling.getPreviousSibling() == null) {
- newSibling.setPreviousSibling(this);
- setNextSibling(newSibling);
- } else {
- throw new DataModelException("New sibling to be added is not " +
- "atomic, it already has a " +
- "previous sibling " +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition() + " in " +
- getFileName() + "\"");
- }
-
- if (newSibling.getChild() != null) {
- throw new DataModelException("Sibling to be added is not atomic, " +
- "it already has a child " +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition() + " in " +
- getFileName() + "\"");
- }
-
- if (newSibling.getNextSibling() != null) {
- throw new DataModelException("Sibling to be added is not atomic, " +
- "it already has a next " +
- "sibling " + getName() +
- " in " + getLineNumber() +
- " at " + getCharPosition() +
- " in " + getFileName() + "\"");
- }
- }
-
- @Override
- public YangSchemaNodeContextInfo getChildSchema(YangSchemaNodeIdentifier dataNodeIdentifier)
- throws DataModelException {
- YangSchemaNodeContextInfo childSchemaContext =
- ysnContextInfoMap.get(dataNodeIdentifier);
- if (childSchemaContext == null) {
- throw new DataModelException("Requested " +
- dataNodeIdentifier.getName() +
- " is not child in " +
- getName());
- }
- return childSchemaContext;
- }
-
- @Override
- public int getMandatoryChildCount()
- throws DataModelException {
- return mandatoryChildCount;
- }
-
- @Override
- public Map<YangSchemaNodeIdentifier, YangSchemaNode> getDefaultChild(YangSchemaNodeIdentifier dataNodeIdentifier) {
- return defaultChildMap;
- }
-
- @Override
- public boolean isNotificationPresent() throws DataModelException {
- throw new DataModelException("Method is called for node other than module/sub-module.");
- }
-
- @Override
- public boolean isEmptyDataType() throws DataModelException {
- throw new DataModelException("Method is called for node other than " +
- "leaf/leaf-list.");
- }
-
- /**
- * Adds child schema in child schema map, this is used to add the schema
- * to the map in case of leaf as a child.
- *
- * @param schemaNodeIdentifier YANG schema node identifier
- * @param yangSchemaNodeContextInfo YANG data node context information
- * @throws DataModelException a violation in data model rule
- */
- public abstract void addToChildSchemaMap(YangSchemaNodeIdentifier schemaNodeIdentifier,
- YangSchemaNodeContextInfo yangSchemaNodeContextInfo)
- throws DataModelException;
-
- /**
- * Increments mandatory child count.
- */
- public abstract void incrementMandatoryChildCount();
-
- /**
- * Sets mandatory child count.
- *
- * @param mandatoryChildCount value of mandatory child count
- */
- public void setMandatoryChildCount(int mandatoryChildCount) {
- this.mandatoryChildCount = mandatoryChildCount;
- }
-
- /**
- * Adds default child information to map.
- *
- * @param yangSchemaNodeIdentifier YANG schema node identifier
- * @param yangSchemaNode YANG schema node
- */
- public abstract void addToDefaultChildMap(YangSchemaNodeIdentifier yangSchemaNodeIdentifier,
- YangSchemaNode yangSchemaNode);
-
- /**
- * Returns default child map.
- *
- * @return default child map
- */
- public Map<YangSchemaNodeIdentifier, YangSchemaNode> getDefaultChildMap() {
- return defaultChildMap;
- }
-
- /**
- * Returns YANG schema node context info map.
- *
- * @return YANG schema node context info map
- */
- public Map<YangSchemaNodeIdentifier,
- YangSchemaNodeContextInfo> getYsnContextInfoMap() {
- return ysnContextInfoMap;
- }
-
- /**
- * Adds namespace for self, next sibling and first child. This is used
- * after obtaining namespace in case of submodule after performing
- * linking.
- */
- public void setNameSpaceAndAddToParentSchemaMap() {
- // Get parent namespace.
- if (getParent() != null) {
- // Get parent namespace and set namespace for self node.
- setNameSpace(getParent().getNameSpace());
- // Process addition of leaf to the child schema map of parent.
- processAdditionOfSchemaNodeToParentMap(getName(), getNameSpace());
- } else {
- // Module/Sub-module
- setNameSpace((YangNamespace) this);
- }
- /*
- * Check if node contains leaf/leaf-list, if yes add namespace for leaf
- * and leaf list.
- */
- if (this instanceof YangLeavesHolder) {
- ((YangLeavesHolder) this).setLeafNameSpaceAndAddToParentSchemaMap();
- }
- }
-
- /**
- * Sets YSN context info map.
- *
- * @param ysnContextInfoMap YSN context info map
- */
- public void setYsnContextInfoMap(Map<YangSchemaNodeIdentifier,
- YangSchemaNodeContextInfo> ysnContextInfoMap) {
- this.ysnContextInfoMap = ysnContextInfoMap;
- }
-
- /**
- * Adds to YSN context info map.
- *
- * @param yangSchemaNodeIdentifier YANG schema node identifier
- * @param yangSchemaNodeContextInfo YANG schema node context info
- */
- public void addToYsnContextInfoMap(YangSchemaNodeIdentifier
- yangSchemaNodeIdentifier, YangSchemaNodeContextInfo
- yangSchemaNodeContextInfo) {
- getYsnContextInfoMap().put(yangSchemaNodeIdentifier, yangSchemaNodeContextInfo);
- }
-
- @Override
- public void isValueValid(String value)
- throws DataModelException {
- throw new DataModelException("Value validation asked for YANG node. "
- + getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition()
- + " in " + getFileName() + "\"");
- }
-
- @Override
- public YangSchemaNodeIdentifier getYangSchemaNodeIdentifier() {
- return yangSchemaNodeIdentifier;
- }
-
- /**
- * Sets YANG schema node identifier.
- *
- * @param yangSchemaNodeIdentifier YANG schema node identifier
- */
- public void setYangSchemaNodeIdentifier(YangSchemaNodeIdentifier yangSchemaNodeIdentifier) {
- if (this.yangSchemaNodeIdentifier == null) {
- this.yangSchemaNodeIdentifier = new YangSchemaNodeIdentifier();
- }
- this.yangSchemaNodeIdentifier = yangSchemaNodeIdentifier;
- }
-
- @Override
- public String getName() {
- return yangSchemaNodeIdentifier.getName();
- }
-
- /**
- * Sets name of node.
- *
- * @param name name of the node
- */
- public void setName(String name) {
- if (yangSchemaNodeIdentifier == null) {
- yangSchemaNodeIdentifier = new YangSchemaNodeIdentifier();
- }
- yangSchemaNodeIdentifier.setName(name);
- }
-
- @Override
- public YangNamespace getNameSpace() {
- return yangSchemaNodeIdentifier.getNameSpace();
- }
-
- /**
- * Sets namespace of node.
- *
- * @param namespace namespace of the node
- */
- public void setNameSpace(YangNamespace namespace) {
- if (yangSchemaNodeIdentifier == null) {
- yangSchemaNodeIdentifier = new YangSchemaNodeIdentifier();
- }
- yangSchemaNodeIdentifier.setNameSpace(namespace);
- }
-
- /**
- * Returns YANG revision.
- *
- * @return YANG revision
- */
- public YangRevision getRevision() {
- return revision;
- }
-
- /**
- * Sets YANG revision.
- *
- * @param revision YANG revision
- */
- public void setRevision(YangRevision revision) {
- this.revision = revision;
- }
-
- @Override
- public YangSchemaNode getNotificationSchemaNode(String notificationNameInEnum)
- throws DataModelException {
- throw new DataModelException("Method called for schema node other " +
- "then module/sub-module");
- }
-
- @Override
- public YangSchemaNode getReferredSchema() {
- return referredSchemaNode;
- }
-
- /**
- * Returns true if op type info required for node.
- *
- * @return true if op type info required for node
- */
- public boolean isOpTypeReq() {
- return this instanceof RpcNotificationContainer ||
- !(this instanceof InvalidOpTypeHolder) &&
- getParent().isOpTypeReq();
- }
-
- @Override
- public int getLineNumber() {
- return lineNumber;
- }
-
- @Override
- public int getCharPosition() {
- return charPosition;
- }
-
- @Override
- public void setLineNumber(int lineNumber) {
- this.lineNumber = lineNumber;
- }
-
- @Override
- public void setCharPosition(int charPositionInLine) {
- charPosition = charPositionInLine;
- }
-
- @Override
- public String getFileName() {
- return fileName;
- }
-
- @Override
- public void setFileName(String name) {
- fileName = name;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNodeIdentifier.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNodeIdentifier.java
deleted file mode 100644
index 42f0aa9..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNodeIdentifier.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import java.io.Serializable;
-
-/**
- * Represents YANG node identifier which is a combination of prefix and name.
- */
-public class YangNodeIdentifier extends DefaultLocationInfo
- implements Serializable {
-
- private static final long serialVersionUID = 806201648L;
-
- // Name of the node.
- private String name;
-
- // Prefix of the node.
- private String prefix;
-
- /**
- * Creates an instance of YANG node identifier.
- */
- public YangNodeIdentifier() {
- }
-
- /**
- * Returns name of the node identifier.
- *
- * @return name of the node identifier
- */
- public String getName() {
- return name;
- }
-
- /**
- * Sets name of the node identifier.
- *
- * @param name name of the node identifier
- */
- public void setName(String name) {
- this.name = name;
- }
-
- /**
- * Returns prefix of the node identifier.
- *
- * @return name of the node identifier
- */
- public String getPrefix() {
- return prefix;
- }
-
- /**
- * Sets prefix of the node identifier.
- *
- * @param prefix prefix of the node identifier
- */
- public void setPrefix(String prefix) {
- this.prefix = prefix;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNodeType.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNodeType.java
deleted file mode 100644
index c6108c7..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNodeType.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel;
-
-/**
- * Represents node type in data model tree corresponding to YANG schema.
- */
-public enum YangNodeType {
- /**
- * Node contains module information.
- */
- MODULE_NODE,
-
- /**
- * Node contains sub module information.
- */
- SUB_MODULE_NODE,
-
- /**
- * Node contains "YANG's typedef" information.
- */
- TYPEDEF_NODE,
-
- /**
- * Node contains "YANG's type" information.
- */
- TYPE_NODE,
-
- /**
- * Node contains "YANG's choice" information.
- */
- CHOICE_NODE,
-
- /**
- * Node contains "YANG's case" information.
- */
- CASE_NODE,
-
- /**
- * Node contains "YANG's enumeration" information.
- */
- ENUMERATION_NODE,
-
- /**
- * Node contains grouping information.
- */
- GROUPING_NODE,
-
- /**
- * Node contains "YANG's uses" information.
- */
- USES_NODE,
-
- /**
- * Node contains augmentation information.
- */
- AUGMENT_NODE,
-
- /**
- * Node contains "YANG's container" information.
- */
- CONTAINER_NODE,
-
- /**
- * Node contains "YANG's notification" information.
- */
- NOTIFICATION_NODE,
-
- /**
- * Node contains "YANG's input" information.
- */
- INPUT_NODE,
-
- /**
- * Node contains "YANG's output" information.
- */
- OUTPUT_NODE,
-
- /**
- * Node contains "YANG's rpc" information.
- */
- RPC_NODE,
-
- /**
- * Node contains "YANG's union" information.
- */
- UNION_NODE,
-
- /**
- * Node contains "YANG's list" information.
- */
- LIST_NODE,
-
- /**
- * Identity node.
- */
- IDENTITY_NODE,
-
- /**
- * Identityref node.
- */
- IDENTITYREF_NODE
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNotification.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNotification.java
deleted file mode 100644
index 982aee2..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangNotification.java
+++ /dev/null
@@ -1,299 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-
-import static java.util.Collections.unmodifiableList;
-import static org.onosproject.yangutils.datamodel.YangNodeType.NOTIFICATION_NODE;
-import static org.onosproject.yangutils.datamodel.YangSchemaNodeType.YANG_SINGLE_INSTANCE_NODE;
-import static org.onosproject.yangutils.datamodel.YangStatusType.CURRENT;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.COLLISION_DETECTION;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.NOTIFICATION;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.getErrorMsgCollision;
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.NOTIFICATION_DATA;
-
-/*
- * Reference RFC 6020.
- *
- * YANG allows the definition of notifications suitable for NETCONF.
- * YANG data definition statements are used to model the content of the
- * notification.
- *
- * The "notification" statement is used to define a NETCONF
- * notification. It takes one argument, which is an identifier,
- * followed by a block of substatements that holds detailed notification
- * information. The "notification" statement defines a notification
- * node in the schema tree.
- *
- * If a leaf in the notification tree has a "mandatory" statement with
- * the value "true", the leaf MUST be present in a NETCONF notification.
- *
- * If a leaf in the notification tree has a default value, the NETCONF
- * client MUST use this value in the same cases as described in
- * Section 7.6.1. In these cases, the client MUST operationally behave
- * as if the leaf was present in the NETCONF notification with the
- * default value as its value.
- *
- * If a "config" statement is present for any node in the notification
- * tree, the "config" statement is ignored.
- *
- * The notification's substatements
- *
- * +--------------+---------+-------------+------------------+
- * | substatement | section | cardinality |data model mapping|
- * +--------------+---------+-------------+------------------+
- * | anyxml | 7.10 | 0..n | -not supported |
- * | choice | 7.9 | 0..n | -child nodes |
- * | container | 7.5 | 0..n | -child nodes |
- * | description | 7.19.3 | 0..1 | -string |
- * | grouping | 7.11 | 0..n | -child nodes |
- * | if-feature | 7.18.2 | 0..n | -YangIfFeature |
- * | leaf | 7.6 | 0..n | -YangLeaf |
- * | leaf-list | 7.7 | 0..n | -YangLeafList |
- * | list | 7.8 | 0..n | -child nodes |
- * | reference | 7.19.4 | 0..1 | -string |
- * | status | 7.19.2 | 0..1 | -YangStatus |
- * | typedef | 7.3 | 0..n | -child nodes |
- * | uses | 7.12 | 0..n | -child nodes |
- * +--------------+---------+-------------+------------------+
- */
-
-/**
- * Represents data model node to maintain information defined in YANG notification.
- */
-public abstract class YangNotification
- extends YangNode
- implements YangLeavesHolder, YangCommonInfo, Parsable, CollisionDetector,
- YangAugmentableNode, YangIfFeatureHolder, InvalidOpTypeHolder {
-
- private static final long serialVersionUID = 806201611L;
-
- /**
- * Description of notification.
- */
- private String description;
-
- /**
- * List of leaves contained.
- */
- private List<YangLeaf> listOfLeaf;
-
- /**
- * List of leaf-lists contained.
- */
- private List<YangLeafList> listOfLeafList;
-
- /**
- * Reference of the module.
- */
- private String reference;
-
- /**
- * Status of the node.
- */
- private YangStatusType status = CURRENT;
-
- /**
- * List of if-feature.
- */
- private List<YangIfFeature> ifFeatureList;
-
- private List<YangAugment> yangAugmentedInfo;
-
- /**
- * Create a notification node.
- */
- public YangNotification() {
- super(NOTIFICATION_NODE, new HashMap<>());
- listOfLeaf = new LinkedList<>();
- listOfLeafList = new LinkedList<>();
- ifFeatureList = new LinkedList<>();
- yangAugmentedInfo = new LinkedList<>();
- }
-
- @Override
- public void addToChildSchemaMap(YangSchemaNodeIdentifier id,
- YangSchemaNodeContextInfo context)
- throws DataModelException {
- getYsnContextInfoMap().put(id, context);
- }
-
- @Override
- public void incrementMandatoryChildCount() {
- // TODO
- }
-
- @Override
- public void addToDefaultChildMap(YangSchemaNodeIdentifier id,
- YangSchemaNode yangSchemaNode) {
- // TODO
- }
-
- @Override
- public YangSchemaNodeType getYangSchemaNodeType() {
- return YANG_SINGLE_INSTANCE_NODE;
- }
-
- @Override
- public void detectCollidingChild(String identifierName, YangConstructType dataType)
- throws DataModelException {
- // Detect colliding child.
- detectCollidingChildUtil(identifierName, dataType, this);
- }
-
- @Override
- public void detectSelfCollision(String identifierName, YangConstructType dataType)
- throws DataModelException {
- if (getName().equals(identifierName)) {
- throw new DataModelException(getErrorMsgCollision(
- COLLISION_DETECTION, getName(), getLineNumber(),
- getCharPosition(), NOTIFICATION, getFileName()));
- }
- }
-
- @Override
- public YangConstructType getYangConstructType() {
- return NOTIFICATION_DATA;
- }
-
- @Override
- public void validateDataOnEntry()
- throws DataModelException {
- //TODO: implement the method.
- }
-
- @Override
- public void validateDataOnExit()
- throws DataModelException {
- //TODO: implement the method.
- }
-
- @Override
- public String getDescription() {
- return description;
- }
-
- @Override
- public void setDescription(String description) {
- this.description = description;
- }
-
- @Override
- public List<YangLeaf> getListOfLeaf() {
- return unmodifiableList(listOfLeaf);
- }
-
- @Override
- public void setListOfLeaf(List<YangLeaf> leafsList) {
- listOfLeaf = leafsList;
- }
-
- @Override
- public void addLeaf(YangLeaf leaf) {
- listOfLeaf.add(leaf);
- }
-
- @Override
- public List<YangLeafList> getListOfLeafList() {
- return unmodifiableList(listOfLeafList);
- }
-
- @Override
- public void setListOfLeafList(List<YangLeafList> listOfLeafList) {
- this.listOfLeafList = listOfLeafList;
- }
-
- @Override
- public void addLeafList(YangLeafList leafList) {
- listOfLeafList.add(leafList);
- }
-
- @Override
- public String getReference() {
- return reference;
- }
-
- @Override
- public void setReference(String reference) {
- this.reference = reference;
- }
-
- @Override
- public YangStatusType getStatus() {
- return status;
- }
-
- @Override
- public void setStatus(YangStatusType status) {
- this.status = status;
- }
-
- @Override
- public List<YangIfFeature> getIfFeatureList() {
- return unmodifiableList(ifFeatureList);
- }
-
- @Override
- public void addIfFeatureList(YangIfFeature ifFeature) {
- ifFeatureList.add(ifFeature);
- }
-
- @Override
- public void setIfFeatureList(List<YangIfFeature> ifFeatureList) {
- this.ifFeatureList = ifFeatureList;
- }
-
- @Override
- public void addAugmentation(YangAugment augmentInfo) {
- yangAugmentedInfo.add(augmentInfo);
- }
-
- @Override
- public void removeAugmentation(YangAugment augmentInfo) {
- yangAugmentedInfo.remove(augmentInfo);
- }
-
- @Override
- public List<YangAugment> getAugmentedInfoList() {
- return unmodifiableList(yangAugmentedInfo);
- }
-
- @Override
- public void setLeafNameSpaceAndAddToParentSchemaMap() {
- // Add namespace for all leafs.
- for (YangLeaf yangLeaf : listOfLeaf) {
- yangLeaf.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
- }
- // Add namespace for all leaf list.
- for (YangLeafList yangLeafList : listOfLeafList) {
- yangLeafList.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
- }
- }
-
- public void cloneAugmentInfo() {
- yangAugmentedInfo = new ArrayList<>();
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangOutput.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangOutput.java
deleted file mode 100644
index ffd2920..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangOutput.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-
-import static java.util.Collections.unmodifiableList;
-import static org.onosproject.yangutils.datamodel.YangSchemaNodeType.YANG_SINGLE_INSTANCE_NODE;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.COLLISION_DETECTION;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.OUTPUT;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.getErrorMsgCollision;
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.OUTPUT_DATA;
-
-/*
- * Reference RFC 6020.
- *
- * The "output" statement, which is optional, is used to define output
- * parameters to the RPC operation. It does not take an argument. The
- * substatements to "output" define nodes under the RPC's output node.
- *
- * If a leaf in the output tree has a "mandatory" statement with the
- * value "true", the leaf MUST be present in a NETCONF RPC reply.
- *
- * If a leaf in the output tree has a default value, the NETCONF client
- * MUST use this value in the same cases as described in Section 7.6.1.
- * In these cases, the client MUST operationally behave as if the leaf
- * was present in the NETCONF RPC reply with the default value as its
- * value.
- *
- * If a "config" statement is present for any node in the output tree,
- * the "config" statement is ignored.
- *
- * If any node has a "when" statement that would evaluate to false, then
- * this node MUST NOT be present in the output tree.
- *
- * The output substatements
- *
- * +--------------+---------+-------------+------------------+
- * | substatement | section | cardinality |data model mapping|
- * +--------------+---------+-------------+------------------+
- * | anyxml | 7.10 | 0..n | -not supported |
- * | choice | 7.9 | 0..n | -child nodes |
- * | container | 7.5 | 0..n | -child nodes |
- * | grouping | 7.11 | 0..n | -child nodes |
- * | leaf | 7.6 | 0..n | -YangLeaf |
- * | leaf-list | 7.7 | 0..n | -YangLeafList |
- * | list | 7.8 | 0..n | -child nodes |
- * | typedef | 7.3 | 0..n | -child nodes |
- * | uses | 7.12 | 0..n | -child nodes |
- * +--------------+---------+-------------+------------------+
- */
-
-/**
- * Represents data model node to maintain information defined in YANG output.
- */
-public abstract class YangOutput
- extends YangNode
- implements YangLeavesHolder, Parsable, CollisionDetector,
- YangAugmentableNode, YangIsFilterContentNodes, InvalidOpTypeHolder {
-
- private static final long serialVersionUID = 806201612L;
-
- /**
- * List of leaves contained.
- */
- private List<YangLeaf> listOfLeaf;
-
- /**
- * List of leaf-lists contained.
- */
- private List<YangLeafList> listOfLeafList;
-
- private List<YangAugment> yangAugmentedInfo;
-
- /**
- * Create a rpc output node.
- */
- public YangOutput() {
- super(YangNodeType.OUTPUT_NODE, new HashMap<>());
- listOfLeaf = new LinkedList<>();
- listOfLeafList = new LinkedList<>();
- yangAugmentedInfo = new ArrayList<>();
- }
-
- @Override
- public void addToChildSchemaMap(YangSchemaNodeIdentifier id,
- YangSchemaNodeContextInfo context)
- throws DataModelException {
- getYsnContextInfoMap().put(id, context);
- }
-
- @Override
- public void incrementMandatoryChildCount() {
- // For non data nodes, mandatory child to be added to parent node.
- // TODO
- }
-
- @Override
- public void addToDefaultChildMap(YangSchemaNodeIdentifier id,
- YangSchemaNode yangSchemaNode) {
- // For non data nodes, default child to be added to parent node.
- // TODO
- }
-
- @Override
- public YangSchemaNodeType getYangSchemaNodeType() {
- return YANG_SINGLE_INSTANCE_NODE;
- }
-
- @Override
- public void detectCollidingChild(String idName, YangConstructType dataType)
- throws DataModelException {
- // Detect colliding child.
- detectCollidingChildUtil(idName, dataType, this);
- }
-
- @Override
- public void detectSelfCollision(String identifierName,
- YangConstructType dataType)
- throws DataModelException {
- if (getName().equals(identifierName)) {
- getErrorMsgCollision(COLLISION_DETECTION, getName(),
- getLineNumber(), getCharPosition(),
- OUTPUT, getFileName());
- }
- }
-
- @Override
- public YangConstructType getYangConstructType() {
- return OUTPUT_DATA;
- }
-
- @Override
- public void validateDataOnEntry()
- throws DataModelException {
- //TODO: implement the method.
- }
-
- @Override
- public void validateDataOnExit()
- throws DataModelException {
- //TODO: implement the method.
- }
-
- @Override
- public List<YangLeaf> getListOfLeaf() {
- return unmodifiableList(listOfLeaf);
- }
-
- @Override
- public void addLeaf(YangLeaf leaf) {
- listOfLeaf.add(leaf);
- }
-
- @Override
- public void setListOfLeaf(List<YangLeaf> leafsList) {
- listOfLeaf = leafsList;
- }
-
- @Override
- public List<YangLeafList> getListOfLeafList() {
- return unmodifiableList(listOfLeafList);
- }
-
- @Override
- public void setListOfLeafList(List<YangLeafList> listOfLeafList) {
- this.listOfLeafList = listOfLeafList;
- }
-
- @Override
- public void addLeafList(YangLeafList leafList) {
- listOfLeafList.add(leafList);
- }
-
- @Override
- public void addAugmentation(YangAugment augmentInfo) {
- yangAugmentedInfo.add(augmentInfo);
- }
-
- @Override
- public void removeAugmentation(YangAugment augmentInfo) {
- yangAugmentedInfo.remove(augmentInfo);
- }
-
- @Override
- public List<YangAugment> getAugmentedInfoList() {
- return unmodifiableList(yangAugmentedInfo);
- }
-
- @Override
- public void setLeafNameSpaceAndAddToParentSchemaMap() {
- // Add namespace for all leafs.
- for (YangLeaf yangLeaf : listOfLeaf) {
- yangLeaf.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
- }
- // Add namespace for all leaf list.
- for (YangLeafList yangLeafList : listOfLeafList) {
- yangLeafList.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
- }
- }
-
- public void cloneAugmentInfo() {
- yangAugmentedInfo = new ArrayList<>();
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangPathArgType.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangPathArgType.java
deleted file mode 100644
index 26e1fb2..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangPathArgType.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel;
-
-/**
- * Represents path argument type in data model tree.
- */
-public enum YangPathArgType {
-
- /**
- * Absolute path.
- */
- ABSOLUTE_PATH,
-
- /**
- * Relative path.
- */
- RELATIVE_PATH
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangPathOperator.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangPathOperator.java
deleted file mode 100644
index 0594af8..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangPathOperator.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel;
-
-/**
- * Represents path-expr in data model tree.
- */
-public enum YangPathOperator {
-
- /**
- * Path expression contains equal-to.
- */
- EQUALTO
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangPathPredicate.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangPathPredicate.java
deleted file mode 100644
index da38acd..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangPathPredicate.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel;
-
-import java.io.Serializable;
-
-/**
- * Representation of data model node to maintain path predicate in YANG
- * absolute-path or relative-path.
- */
-public class YangPathPredicate extends DefaultLocationInfo
- implements Serializable {
-
- private static final long serialVersionUID = 806201689L;
-
- /**
- * YANG node id.
- */
- private YangNodeIdentifier nodeId;
-
- /**
- * Left axis represents node-id before equality sign.
- */
- private Object leftAxisNode;
-
- /**
- * YANG path operator.
- */
- private YangPathOperator pathOp;
-
- /**
- * YANG right relative path in path-predicate.
- */
- private YangRelativePath relPath;
-
- /**
- * Right axis node represents the node-id after the equality sign.
- */
- private Object rightAxisNode;
-
- /**
- * Returns the path expression operator.
- *
- * @return path operator
- */
- public YangPathOperator getPathOp() {
- return pathOp;
- }
-
- /**
- * Sets the path expression operator.
- *
- * @param pathOp path operator
- */
- public void setPathOp(YangPathOperator pathOp) {
- this.pathOp = pathOp;
- }
-
- /**
- * Returns the right relative path expression.
- *
- * @return relative path
- */
- public YangRelativePath getRelPath() {
- return relPath;
- }
-
- /**
- * Sets the right relative path expression.
- *
- * @param relPath relative path
- */
- public void setRelPath(YangRelativePath relPath) {
- this.relPath = relPath;
- }
-
- /**
- * Returns the node identifier.
- *
- * @return node id
- */
- public YangNodeIdentifier getNodeId() {
- return nodeId;
- }
-
- /**
- * Sets the YANG node identifier.
- *
- * @param nodeId node id
- */
- public void setNodeId(YangNodeIdentifier nodeId) {
- this.nodeId = nodeId;
- }
-
- /**
- * Returns the left axis node.
- *
- * @return left axis node
- */
- public Object getLeftAxisNode() {
- return leftAxisNode;
- }
-
- /**
- * Sets the left axis node.
- *
- * @param leftAxisNode left axis node
- */
- public void setLeftAxisNode(Object leftAxisNode) {
- this.leftAxisNode = leftAxisNode;
- }
-
- /**
- * Returns the right axis node.
- *
- * @return right axis node
- */
- public Object getRightAxisNode() {
- return rightAxisNode;
- }
-
- /**
- * Sets the right axis node.
- *
- * @param rightAxisNode right axis node
- */
- public void setRightAxisNode(Object rightAxisNode) {
- this.rightAxisNode = rightAxisNode;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangPatternRestriction.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangPatternRestriction.java
deleted file mode 100644
index 693461b..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangPatternRestriction.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import java.io.Serializable;
-import java.util.LinkedList;
-import java.util.List;
-
-import static java.util.Collections.unmodifiableList;
-
-/*-
- * Reference RFC 6020.
- *
- * The pattern Statement
- *
- * The "pattern" statement, which is an optional sub-statement to the
- * "type" statement, takes as an argument a regular expression string.
- * It is used to restrict the built-in type "string", or types derived
- * from "string", to values that match the pattern.
- *
- * If the type has multiple "pattern" statements, the expressions are
- * ANDed together, i.e., all such expressions have to match.
- *
- * If a pattern restriction is applied to an already pattern-restricted
- * type, values must match all patterns in the base type, in addition to
- * the new patterns.
- * The pattern's sub-statements
- *
- * +---------------+---------+-------------+
- * | substatement | section | cardinality |
- * +---------------+---------+-------------+
- * | description | 7.19.3 | 0..1 |
- * | error-app-tag | 7.5.4.2 | 0..1 |
- * | error-message | 7.5.4.1 | 0..1 |
- * | reference | 7.19.4 | 0..1 |
- * +---------------+---------+-------------+
- */
-
-/**
- * Represents pattern restriction information. The regular expression restriction on string
- * data type.
- */
-public class YangPatternRestriction extends DefaultLocationInfo
- implements Serializable, YangAppErrorHolder {
-
- private static final long serialVersionUID = 806201649L;
-
- /**
- * Pattern restriction defined for the current type.
- */
- private final List<String> patternList;
-
- /**
- * YANG application error information.
- */
- private YangAppErrorInfo yangAppErrorInfo;
-
- /**
- * Creates a YANG pattern restriction object.
- */
- public YangPatternRestriction() {
- patternList = new LinkedList<>();
- yangAppErrorInfo = new YangAppErrorInfo();
- }
-
- /**
- * Returns the pattern restriction defined for the current type.
- *
- * @return pattern restriction defined for the current type.
- */
- public List<String> getPatternList() {
- return unmodifiableList(patternList);
- }
-
- /**
- * Adds a new pattern to the list of pattern restriction.
- *
- * @param newPattern pattern restriction.
- */
- public void addPattern(String newPattern) {
- patternList.add(newPattern);
- }
-
- @Override
- public void setAppErrorInfo(YangAppErrorInfo yangAppErrorInfo) {
- this.yangAppErrorInfo = yangAppErrorInfo;
- }
-
- @Override
- public YangAppErrorInfo getAppErrorInfo() {
- return yangAppErrorInfo;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRangeInterval.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRangeInterval.java
deleted file mode 100644
index 58f893a..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRangeInterval.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*Copyright 2016.year Open Networking Laboratory
-
-Licensed 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
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License 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.*/
-package org.onosproject.yangutils.datamodel;
-
-import java.io.Serializable;
-
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangBuiltInDataTypeInfo;
-
-/**
- * Represents single interval information of a range.
- *
- * @param <T> range type based on the data type
- */
-public class YangRangeInterval<T extends YangBuiltInDataTypeInfo<T>> extends DefaultLocationInfo
- implements Serializable {
-
- private static final long serialVersionUID = 806201650L;
-
- /**
- * Starting value of the range interval.
- */
- private T startValue;
-
- /**
- * Last value of the range interval.
- */
- private T endValue;
-
- /**
- * Creates YANG range interval object.
- */
- public YangRangeInterval() {
- }
-
- /**
- * Returns the starting value of the range interval.
- *
- * @return the starting value of the range interval
- */
- public T getStartValue() {
- return startValue;
- }
-
- /**
- * Sets the starting value of the range interval.
- *
- * @param startValue the starting value of the range interval
- */
- public void setStartValue(T startValue) {
- this.startValue = startValue;
- }
-
- /**
- * Returns the last value of the range interval.
- *
- * @return last value of the range interval
- */
- public T getEndValue() {
- return endValue;
- }
-
- /**
- * Sets the last value of the range interval.
- *
- * @param endValue last value of the range interval
- */
- public void setEndValue(T endValue) {
- this.endValue = endValue;
- }
-
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRangeRestriction.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRangeRestriction.java
deleted file mode 100644
index 316c09c..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRangeRestriction.java
+++ /dev/null
@@ -1,308 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangBuiltInDataTypeInfo;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-
-import java.io.Serializable;
-import java.util.LinkedList;
-import java.util.List;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static org.onosproject.yangutils.datamodel.BuiltInTypeObjectFactory.getDataObjectFromString;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.getErrorMsg;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.RANGE_DATA;
-
-/*-
- * Reference RFC 6020.
- *
- * The range Statement
- *
- * The "range" statement, which is an optional sub-statement to the
- * "type" statement, takes as an argument a range expression string. It
- * is used to restrict integer and decimal built-in types, or types
- * derived from those.
- *
- * A range consists of an explicit value, or a lower-inclusive bound,
- * two consecutive dots "..", and an upper-inclusive bound. Multiple
- * values or ranges can be given, separated by "|". If multiple values
- * or ranges are given, they all MUST be disjoint and MUST be in
- * ascending order. If a range restriction is applied to an already
- * range-restricted type, the new restriction MUST be equal or more
- * limiting, that is raising the lower bounds, reducing the upper
- * bounds, removing explicit values or ranges, or splitting ranges into
- * multiple ranges with intermediate gaps. Each explicit value and
- * range boundary value given in the range expression MUST match the
- * type being restricted, or be one of the special values "min" or
- * "max". "min" and "max" mean the minimum and maximum value accepted
- * for the type being restricted, respectively.
- */
-
-/**
- * Represents ascending range restriction information.
- *
- * @param <T> range type (data type)
- */
-public class YangRangeRestriction<T extends YangBuiltInDataTypeInfo<T>>
- extends DefaultLocationInfo
- implements YangDesc, YangReference, Parsable, Serializable, YangAppErrorHolder {
-
- private static final long serialVersionUID = 8062016051L;
-
- /**
- * Ascending list of range interval restriction. If the restriction is a
- * single value, the start and end length of the range is same.
- */
- private List<YangRangeInterval<T>> ascendingRangeIntervals;
-
- /**
- * Textual reference.
- */
- private String reference;
-
- /**
- * Textual description.
- */
- private String description;
-
- /**
- * YANG application error information.
- */
- private YangAppErrorInfo yangAppErrorInfo;
-
- /**
- * Creates YANG range restriction object.
- */
- public YangRangeRestriction() {
- yangAppErrorInfo = new YangAppErrorInfo();
- }
-
- /**
- * Returns the list of range interval restriction in ascending order.
- *
- * @return list of range interval restriction in ascending order
- */
- public List<YangRangeInterval<T>> getAscendingRangeIntervals() {
- return ascendingRangeIntervals;
- }
-
- /**
- * Returns the minimum valid value as per the restriction.
- *
- * @return minimum restricted value
- * @throws DataModelException data model exception for minimum restriction
- */
- public T getMinRestrictedValue() throws DataModelException {
- if (getAscendingRangeIntervals() == null) {
- throw new DataModelException(getErrorMsg(
- "No range restriction info ",
- "", getLineNumber(), getCharPosition(), getFileName() + "\""));
- }
- if (getAscendingRangeIntervals().isEmpty()) {
- throw new DataModelException(getErrorMsg(
- "No range interval info ",
- "", getLineNumber(), getCharPosition(), getFileName() + "\""));
- }
- return getAscendingRangeIntervals().get(0).getStartValue();
- }
-
- /**
- * Returns the maximum valid value as per the restriction.
- *
- * @return minimum maximum value
- * @throws DataModelException data model exception for maximum restriction
- */
- public T getMaxRestrictedValue() throws DataModelException {
- if (getAscendingRangeIntervals() == null) {
- throw new DataModelException(getErrorMsg(
- "No range restriction info ",
- "", getLineNumber(), getCharPosition(), getFileName() + "\""));
- }
- if (getAscendingRangeIntervals().isEmpty()) {
- throw new DataModelException(getErrorMsg(
- "No range interval info ",
- "", getLineNumber(), getCharPosition(), getFileName() + "\""));
- }
- return getAscendingRangeIntervals()
- .get(getAscendingRangeIntervals().size() - 1).getEndValue();
- }
-
- /**
- * Adds new interval to extend its range in the last. i.e. newly added
- * interval needs to be bigger than the biggest interval in the list.
- *
- * @param newInterval restricted length interval
- * @throws DataModelException data model exception for range restriction
- */
- public void addRangeRestrictionInterval(YangRangeInterval<T> newInterval)
- throws DataModelException {
- checkNotNull(newInterval);
- checkNotNull(newInterval.getStartValue());
- if (ascendingRangeIntervals == null) {
- /*
- * First interval that is being added, and it must be the smallest
- * interval.
- */
- ascendingRangeIntervals = new LinkedList<>();
- ascendingRangeIntervals.add(newInterval);
- return;
- }
-
- T curMaxvalue = getMaxRestrictedValue();
- if (newInterval.getStartValue().compareTo(curMaxvalue) < 1) {
- throw new DataModelException(getErrorMsg(
- "New added range interval is lesser than the old interval(s) ",
- "", getLineNumber(), getCharPosition(), getFileName() + "\""));
- }
- getAscendingRangeIntervals().add(getAscendingRangeIntervals().size(), newInterval);
- }
-
- /**
- * Validates if the given value is correct as per the restriction.
- *
- * @param valueInString value
- * @return true, if the value is confirming to restriction, false otherwise
- * @throws DataModelException data model error
- */
- boolean isValidValueString(String valueInString) throws DataModelException {
-
- if (getAscendingRangeIntervals() == null
- || getAscendingRangeIntervals().isEmpty()) {
- // Throw exception, At least one default range needs to be set in
- // constructor or in linker.
- throw new DataModelException(getErrorMsg(
- "Range interval missing in range restriction. ",
- "", getLineNumber(), getCharPosition(), getFileName() + "\""));
- }
-
- YangDataTypes type = getAscendingRangeIntervals().get(0).getStartValue().getYangType();
- YangBuiltInDataTypeInfo<?> value = getDataObjectFromString(valueInString, type);
-
- for (YangRangeInterval<T> interval : getAscendingRangeIntervals()) {
- int rangeStartCompareRes = interval.getStartValue().compareTo((T) value);
- int rangeEndCompareRes = interval.getEndValue().compareTo((T) value);
-
- if (rangeStartCompareRes <= 0 && rangeEndCompareRes >= 0) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Validates if the given interval is correct as per the restriction.
- *
- * @param rangeInterval range interval
- * @param fileName file name
- * @return true, if the interval is confirming to restriction, false otherwise
- * @throws DataModelException data model error
- */
- boolean isValidInterval(YangRangeInterval rangeInterval, String fileName)
- throws DataModelException {
-
- if (getAscendingRangeIntervals() == null
- || getAscendingRangeIntervals().isEmpty()) {
- // Throw exception, At least one default range needs to be set in
- // constructor or in linker.
- throw new DataModelException(getErrorMsg(
- "Range interval missing in range restriction. ",
- "restriction ranges.", getLineNumber(), getCharPosition(), fileName + "\""));
- }
-
- for (YangRangeInterval<T> interval : getAscendingRangeIntervals()) {
- int rangeStartCompareRes = interval.getStartValue().compareTo((T) rangeInterval.getStartValue());
- int rangeEndCompareRes = interval.getEndValue().compareTo((T) rangeInterval.getEndValue());
-
- if (rangeStartCompareRes <= 0 && rangeEndCompareRes >= 0) {
- return true;
- }
- }
- throw new DataModelException(getErrorMsg(
- "Range interval doesn't fall within the referred restriction ranges ",
- "restriction ranges.", getLineNumber(), getCharPosition(), fileName + "\""));
- }
-
- /**
- * Returns the textual reference of the length restriction.
- *
- * @return textual reference of the length restriction
- */
- @Override
- public String getReference() {
- return reference;
- }
-
- /**
- * Sets the textual reference of the length restriction.
- *
- * @param ref textual reference of the length restriction
- */
- @Override
- public void setReference(String ref) {
- reference = ref;
- }
-
- /**
- * Returns the description of the length restriction.
- *
- * @return description of the length restriction
- */
- @Override
- public String getDescription() {
- return description;
- }
-
- /**
- * Sets the description of the length restriction.
- *
- * @param desc description of the length restriction
- */
- @Override
- public void setDescription(String desc) {
- description = desc;
-
- }
-
- @Override
- public YangConstructType getYangConstructType() {
- return RANGE_DATA;
- }
-
- @Override
- public void validateDataOnEntry() throws DataModelException {
- // TODO: implement the method.
- }
-
- @Override
- public void validateDataOnExit() throws DataModelException {
- // TODO: implement the method.
- }
-
- @Override
- public void setAppErrorInfo(YangAppErrorInfo yangAppErrorInfo) {
- this.yangAppErrorInfo = yangAppErrorInfo;
- }
-
- @Override
- public YangAppErrorInfo getAppErrorInfo() {
- return yangAppErrorInfo;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangReference.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangReference.java
deleted file mode 100644
index 44397a3..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangReference.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel;
-
-/**
- * Abstraction of textual reference for a YANG entity. Abstracted to unify the
- * parsing and translator processing of reference.
- */
-public interface YangReference {
-
- /**
- * Returns the textual reference.
- *
- * @return the reference
- */
- String getReference();
-
- /**
- * Sets the textual reference.
- *
- * @param reference the reference to set
- */
- void setReference(String reference);
-
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangReferenceResolver.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangReferenceResolver.java
deleted file mode 100644
index 3a29ac4..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangReferenceResolver.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-
-import java.util.List;
-import java.util.Set;
-
-/**
- * Abstraction of YANG dependency resolution information. Abstracted to obtain the
- * resolution information.
- */
-public interface YangReferenceResolver {
-
- /**
- * Returns unresolved resolution list.
- *
- * @param type resolvable type
- * @return list of resolution information objects
- */
- List<YangResolutionInfo> getUnresolvedResolutionList(ResolvableType type);
-
- /**
- * Adds to the resolution list.
- *
- * @param resolutionInfo resolution information
- * @param type resolvable type
- */
- void addToResolutionList(YangResolutionInfo resolutionInfo,
- ResolvableType type);
-
- /**
- * Creates resolution list.
- *
- * @param resolutionList resolution list
- * @param type resolvable type
- */
- void setResolutionList(List<YangResolutionInfo> resolutionList,
- ResolvableType type);
-
- /**
- * Returns unresolved imported list.
- *
- * @return unresolved imported list
- */
- List<YangImport> getImportList();
-
- /**
- * Adds to the import list.
- *
- * @param yangImport import to be added
- */
- void addToImportList(YangImport yangImport);
-
- /**
- * Create import list.
- *
- * @param importList import list
- */
- void setImportList(List<YangImport> importList);
-
- /**
- * Returns unresolved include list.
- *
- * @return unresolved include list
- */
- List<YangInclude> getIncludeList();
-
- /**
- * Adds to the include list.
- *
- * @param yangInclude include to be added
- */
- void addToIncludeList(YangInclude yangInclude);
-
- /**
- * Creates include list.
- *
- * @param includeList include list
- */
- void setIncludeList(List<YangInclude> includeList);
-
- /**
- * Returns prefix of resolution root node.
- *
- * @return prefix resolution root node prefix
- */
- String getPrefix();
-
- /**
- * Sets prefix of resolution list root node.
- *
- * @param prefix resolution root node prefix
- */
- void setPrefix(String prefix);
-
- /**
- * Resolves self file linking.
- *
- * @param type resolvable type
- * @throws DataModelException a violation in data model rule
- */
- void resolveSelfFileLinking(ResolvableType type)
- throws DataModelException;
-
- /**
- * Resolves inter file linking.
- *
- * @param type resolvable type
- * @throws DataModelException a violation in data model rule
- */
- void resolveInterFileLinking(ResolvableType type)
- throws DataModelException;
-
- /**
- * Adds references to include.
- *
- * @param yangNodeSet YANG node info set
- * @throws DataModelException a violation of data model rules
- */
- void addReferencesToIncludeList(Set<YangNode> yangNodeSet)
- throws DataModelException;
-
- /**
- * Adds references to import.
- *
- * @param yangNodeSet YANG node info set
- * @throws DataModelException a violation of data model rules
- */
- void addReferencesToImportList(Set<YangNode> yangNodeSet)
- throws DataModelException;
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRelativePath.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRelativePath.java
deleted file mode 100644
index 0dee381..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRelativePath.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel;
-
-import java.io.Serializable;
-import java.util.List;
-
-/**
- * Representation of data model node to maintain relative path defined in YANG path-arg.
- */
-public class YangRelativePath extends DefaultLocationInfo
- implements Serializable {
-
- private static final long serialVersionUID = 806201690L;
-
- // Relative path ancestor node count the number of node exist between current node to parent node.
- private int ancestorNodeCount;
-
- // Absolute path expression.
- private List<YangAtomicPath> atomicPathList;
-
- /**
- * Returns the absolute path.
- *
- * @return the absolute path
- */
- public List<YangAtomicPath> getAtomicPathList() {
- return atomicPathList;
- }
-
- /**
- * Sets the absolute path.
- *
- * @param atomicPathList Sets the absolute path
- */
- public void setAtomicPathList(List<YangAtomicPath> atomicPathList) {
- this.atomicPathList = atomicPathList;
- }
-
- /**
- * Returns the relative path ancestor count.
- *
- * @return the relative path ancestor count
- */
- public int getAncestorNodeCount() {
- return ancestorNodeCount;
- }
-
- /**
- * Sets the relative path ancestor count.
- *
- * @param ancestorNodeCount Sets the relative path ancestor count
- */
- public void setAncestorNodeCount(int ancestorNodeCount) {
- this.ancestorNodeCount = ancestorNodeCount;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangResolutionInfo.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangResolutionInfo.java
deleted file mode 100644
index 9876815..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangResolutionInfo.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-
-/**
- * Abstraction of resolution object which will be resolved by linker.
- *
- * @param <T> type of resolution entity uses / type
- */
-public interface YangResolutionInfo<T> {
-
- /**
- * Resolves linking with all the ancestors node for a resolution info.
- *
- * @param dataModelRootNode module/sub-module node
- * @throws DataModelException DataModelException a violation of data model
- * rules
- */
- void resolveLinkingForResolutionInfo(YangReferenceResolver dataModelRootNode)
- throws DataModelException;
-
- /**
- * Retrieves information about the entity that needs to be resolved.
- *
- * @return information about the entity that needs to be resolved
- */
- YangEntityToResolveInfo<T> getEntityToResolveInfo();
-
- /**
- * Performs inter file linking of uses/type referring to typedef/grouping
- * of other YANG file.
- *
- * @param dataModelRootNode module/sub-module node
- * @throws DataModelException a violation in data model rule
- */
- void linkInterFile(YangReferenceResolver dataModelRootNode)
- throws DataModelException;
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRevision.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRevision.java
deleted file mode 100644
index 469a5d5..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRevision.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel;
-
-import java.io.Serializable;
-import java.util.Date;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-
-/*
- * Reference:RFC 6020.
- * The "revision" statement specifies the editorial revision history of
- * the module, including the initial revision. A series of revision
- * statements detail the changes in the module's definition. The
- * argument is a date string in the format "YYYY-MM-DD", followed by a
- * block of sub-statements that holds detailed revision information. A
- * module SHOULD have at least one initial "revision" statement. For
- * every published editorial change, a new one SHOULD be added in front
- * of the revisions sequence, so that all revisions are in reverse
- * chronological order.
- * The revision's sub-statement
- *
- * +--------------+---------+-------------+------------------+
- * | substatement | section | cardinality |data model mapping|
- * +--------------+---------+-------------+------------------+
- * | description | 7.19.3 | 0..1 |string |
- * | reference | 7.19.4 | 0..1 |sring |
- * +--------------+---------+-------------+------------------+
- */
-
-/**
- * Represents the information about the revision.
- */
-public class YangRevision
- extends DefaultLocationInfo
- implements YangDesc, YangReference, Parsable, Serializable, Comparable<YangRevision> {
-
- private static final long serialVersionUID = 8062016052L;
-
- /**
- * Revision date. Date string in the format "YYYY-MM-DD"
- */
- private Date revDate;
-
- /**
- * Description of revision.
- */
- private String description;
-
- /**
- * Textual reference for revision.
- */
- private String reference;
-
- /**
- * Creates a YANG revision object.
- */
- public YangRevision() {
- }
-
- /**
- * Returns the revision date.
- *
- * @return the revision date
- */
- public Date getRevDate() {
- return revDate;
- }
-
- /**
- * Sets the revision date.
- *
- * @param revDate the revision date to set
- */
- public void setRevDate(Date revDate) {
- this.revDate = revDate;
- }
-
- /**
- * Returns the description.
- *
- * @return the description
- */
- @Override
- public String getDescription() {
- return description;
- }
-
- /**
- * Sets the description.
- *
- * @param description set the description
- */
- @Override
- public void setDescription(String description) {
- this.description = description;
- }
-
- /**
- * Returns the textual reference.
- *
- * @return the reference
- */
- @Override
- public String getReference() {
- return reference;
- }
-
- /**
- * Sets the textual reference.
- *
- * @param reference the reference to set
- */
- @Override
- public void setReference(String reference) {
- this.reference = reference;
- }
-
- /**
- * Returns the type of the parsed data.
- *
- * @return returns REVISION_DATA
- */
- @Override
- public YangConstructType getYangConstructType() {
- return YangConstructType.REVISION_DATA;
- }
-
- /**
- * Validates the data on entering the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnEntry()
- throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
-
- }
-
- /**
- * Validates the data on exiting the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnExit()
- throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
-
- }
-
- @Override
- public int compareTo(YangRevision obj) {
- if (this == obj) {
- return 0;
- }
- return getRevDate().compareTo(obj.getRevDate());
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRpc.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRpc.java
deleted file mode 100644
index 9470cf2..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangRpc.java
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-
-import static java.util.Collections.unmodifiableList;
-import static org.onosproject.yangutils.datamodel.YangNodeType.RPC_NODE;
-import static org.onosproject.yangutils.datamodel.YangSchemaNodeType.YANG_SINGLE_INSTANCE_NODE;
-import static org.onosproject.yangutils.datamodel.YangStatusType.CURRENT;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.COLLISION_DETECTION;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.RPC;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.getErrorMsgCollision;
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.RPC_DATA;
-
-/*
- * Reference RFC 6020.
- *
- * The "rpc" statement is used to define a NETCONF RPC operation. It
- * takes one argument, which is an identifier, followed by a block of
- * substatements that holds detailed rpc information. This argument is
- * the name of the RPC, and is used as the element name directly under
- * the <rpc> element, as designated by the substitution group
- * "rpcOperation" in [RFC4741].
- *
- * The "rpc" statement defines an rpc node in the schema tree. Under
- * the rpc node, a schema node with the name "input", and a schema node
- * with the name "output" are also defined. The nodes "input" and
- * "output" are defined in the module's namespace.
- *
- * The rpc substatements
- *
- * +--------------+---------+-------------+------------------+
- * | substatement | section | cardinality |data model mapping|
- * +--------------+---------+-------------+------------------+
- * | description | 7.19.3 | 0..1 | -string |
- * | grouping | 7.11 | 0..n | -child nodes |
- * | if-feature | 7.18.2 | 0..n | -YangIfFeature |
- * | input | 7.13.2 | 0..1 | -child nodes |
- * | output | 7.13.3 | 0..1 | -child nodes |
- * | reference | 7.19.4 | 0..1 | -string |
- * | status | 7.19.2 | 0..1 | -YangStatus |
- * | typedef | 7.3 | 0..n | -child nodes |
- * +--------------+---------+-------------+------------------+
- */
-
-/**
- * Represents data model node to maintain information defined in YANG rpc.
- */
-public abstract class YangRpc
- extends YangNode
- implements YangCommonInfo, Parsable,
- CollisionDetector, YangIfFeatureHolder, InvalidOpTypeHolder {
-
- private static final long serialVersionUID = 806201613L;
-
- /**
- * Description of rpc.
- */
- private String description;
-
- /**
- * Reference of the module.
- */
- private String reference;
-
- /**
- * Status of the node.
- */
- private YangStatusType status = CURRENT;
-
- /**
- * List of if-feature.
- */
- private List<YangIfFeature> ifFeatureList;
-
- /**
- * Creates a rpc node.
- */
- public YangRpc() {
- super(RPC_NODE, new HashMap<>());
- ifFeatureList = new LinkedList<>();
- }
-
- @Override
- public void addToChildSchemaMap(YangSchemaNodeIdentifier id,
- YangSchemaNodeContextInfo context)
- throws DataModelException {
- getYsnContextInfoMap().put(id, context);
- }
-
- @Override
- public void incrementMandatoryChildCount() {
- /*
- * This will maintain all mandatory child which are there inside
- * input and
- * output as input/output is non data node.
- */
- // TODO
- }
-
- @Override
- public void addToDefaultChildMap(YangSchemaNodeIdentifier id,
- YangSchemaNode yangSchemaNode) {
- /*
- * This will maintain all default child which are there inside input and
- * output as input/output is non data node.
- */
- // TODO
- }
-
- @Override
- public YangSchemaNodeType getYangSchemaNodeType() {
- return YANG_SINGLE_INSTANCE_NODE;
- }
-
- @Override
- public void detectCollidingChild(String identifierName,
- YangConstructType dataType)
- throws DataModelException {
- // Detect colliding child.
- detectCollidingChildUtil(identifierName, dataType, this);
- }
-
- @Override
- public void detectSelfCollision(String identifierName,
- YangConstructType dataType)
- throws DataModelException {
- if (getName().equals(identifierName)) {
- throw new DataModelException(getErrorMsgCollision(
- COLLISION_DETECTION, getName(), getLineNumber(),
- getCharPosition(), RPC, getFileName()));
- }
- }
-
- @Override
- public YangConstructType getYangConstructType() {
- return RPC_DATA;
- }
-
- @Override
- public void validateDataOnEntry()
- throws DataModelException {
- //TODO: implement the method.
- }
-
- @Override
- public void validateDataOnExit()
- throws DataModelException {
- //TODO: implement the method.
- }
-
- @Override
- public String getDescription() {
- return description;
- }
-
- @Override
- public void setDescription(String description) {
- this.description = description;
- }
-
- @Override
- public String getReference() {
- return reference;
- }
-
- @Override
- public void setReference(String reference) {
- this.reference = reference;
- }
-
- @Override
- public YangStatusType getStatus() {
- return status;
- }
-
- @Override
- public void setStatus(YangStatusType status) {
- this.status = status;
- }
-
- @Override
- public List<YangIfFeature> getIfFeatureList() {
- return unmodifiableList(ifFeatureList);
- }
-
- @Override
- public void addIfFeatureList(YangIfFeature ifFeature) {
- ifFeatureList.add(ifFeature);
- }
-
- @Override
- public void setIfFeatureList(List<YangIfFeature> ifFeatureList) {
- this.ifFeatureList = ifFeatureList;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNode.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNode.java
deleted file mode 100644
index f2ff214..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNode.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-
-import java.util.Map;
-
-/**
- * Abstraction of YANG data node, used by YMS to abstractly refer the data
- * nodes in YANG data tree.
- */
-public interface YangSchemaNode extends LocationInfo {
-
- /**
- * Returns type of YANG schema node.
- *
- * @return type of YANG schema node
- */
- YangSchemaNodeType getYangSchemaNodeType();
-
- /**
- * Returns child schema information. It is used by YMS to obtain the child
- * schema corresponding to data node identifier.
- *
- * @param dataNodeIdentifier YANG data node identifier
- * @return YANG data node context information
- * @throws DataModelException data model exception in searching the child
- */
- YangSchemaNodeContextInfo getChildSchema(YangSchemaNodeIdentifier dataNodeIdentifier)
- throws DataModelException;
-
- /**
- * Validates whether the leaf/leaf-list value is valid as per YANG. It is
- * used by YMS to validate input value.
- *
- * @param value value of leaf/leaf-list
- * @throws DataModelException a violation in data model rule
- */
- void isValueValid(String value)
- throws DataModelException;
-
- /**
- * Returns count of mandatory child nodes, this is used by YMS to identify
- * whether in request all mandatory child nodes are available.
- *
- * @return count of YANG schema nodes
- * @throws DataModelException a violation in data model rule
- */
- int getMandatoryChildCount()
- throws DataModelException;
-
- /**
- * Returns map of default child nodes, this is used by YMS to identify
- * whether
- * in request all default child nodes are available.
- *
- * @param dataNodeIdentifier YANG data node identifier
- * @return map of default child nodes
- */
- Map<YangSchemaNodeIdentifier, YangSchemaNode> getDefaultChild(
- YangSchemaNodeIdentifier dataNodeIdentifier);
-
- /**
- * Get Java class's package corresponding to the schema node.
- *
- * @return java package, it is null, if the Java type is a built in data
- * type
- */
- String getJavaPackage();
-
- /**
- * Get Java class or built in data type corresponding to the schema node.
- *
- * @return Java class or built in data type corresponding to the schema node
- */
- String getJavaClassNameOrBuiltInType();
-
- /**
- * Returns schema node identifier.
- *
- * @return schema node identifier
- */
- YangSchemaNodeIdentifier getYangSchemaNodeIdentifier();
-
- /**
- * Returns name of the node.
- *
- * @return name of the node
- */
- String getName();
-
- /**
- * Returns Java attribute name.
- *
- * @return Java attribute name
- */
- String getJavaAttributeName();
-
- /**
- * Returns namespace of the node.
- *
- * @return namespace of the node
- */
- YangNamespace getNameSpace();
-
- /**
- * Checks for the presence of notification in module/sub-module. Exception
- * will be thrown if this is called for any other node type.
- *
- * @return true if notification is present, false otherwise
- * @throws DataModelException a violation in data model rule
- */
- boolean isNotificationPresent()
- throws DataModelException;
-
- /**
- * Returns notification schema node corresponding to the name of
- * notification as per the generated code enumeration. This is to be used
- * for notification processing in YMS.
- *
- * @param notificationNameInEnum notification name in enum
- * @return notification schema node
- * @throws DataModelException a violation in data model rule
- */
- YangSchemaNode getNotificationSchemaNode(String notificationNameInEnum)
- throws DataModelException;
-
- /**
- * Returns referred schema node in case of grouping.
- *
- * @return referred schema node
- */
- YangSchemaNode getReferredSchema();
-
- /**
- * Checks for the presence of empty data-type in requested schema node.
- * Exception will be thrown if this is called for other then leaf/leaf-list
- * node type.
- *
- * @return true if empty data-type is present, false otherwise
- * @throws DataModelException when fails to do data model operations
- */
- boolean isEmptyDataType() throws DataModelException;
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNodeContextInfo.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNodeContextInfo.java
deleted file mode 100644
index 2397c41..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNodeContextInfo.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import java.io.Serializable;
-
-/**
- * Abstraction of YANG data node context information, used by YMS to abstractly
- * refer the YANG data nodes schema context information.
- */
-public class YangSchemaNodeContextInfo extends DefaultLocationInfo
- implements Serializable {
-
- private static final long serialVersionUID = 806201613L;
-
- // Current schema node
- private YangSchemaNode schemaNode;
-
- /*
- * Context switched schema node, it will be non null only for the scenarios
- * in which context switch is there like augment, choice etc, in this case
- * this node will point to context switched node like YangAugmentInfo.
- */
- private YangSchemaNode contextSwitchedNode;
-
- // Default instance of YangSchemaNodeContextInfo.
- public YangSchemaNodeContextInfo() {
- }
-
- /**
- * Returns the YANG schema node.
- *
- * @return YANG schema node
- */
- public YangSchemaNode getSchemaNode() {
- return schemaNode;
- }
-
- /**
- * Sets YANG schema node.
- *
- * @param schemaNode YANG schema node
- */
- void setSchemaNode(YangSchemaNode schemaNode) {
- this.schemaNode = schemaNode;
- }
-
- /**
- * Returns context switched node.
- *
- * @return context switched node
- */
- public YangSchemaNode getContextSwitchedNode() {
- return contextSwitchedNode;
- }
-
- /**
- * Set context switched node.
- *
- * @param contextSwitchedNode context switched node
- */
- void setContextSwitchedNode(YangSchemaNode contextSwitchedNode) {
- this.contextSwitchedNode = contextSwitchedNode;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNodeIdentifier.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNodeIdentifier.java
deleted file mode 100644
index 59dcc62..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNodeIdentifier.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import java.io.Serializable;
-import java.util.Objects;
-
-/**
- * Represents YANG data node identifier which is a combination of name and namespace.
- * Namespace will be present only if node is module/sub-module or augmented node.
- */
-public class YangSchemaNodeIdentifier extends DefaultLocationInfo
- implements Serializable, Cloneable {
-
- private static final long serialVersionUID = 806201648L;
-
- // Name of YANG data node.
- private String name;
-
- // Namespace of YANG data node.
- private YangNamespace namespace;
-
- /**
- * Creates an instance of YANG data node identifier.
- */
- public YangSchemaNodeIdentifier() {
- }
-
- /**
- * Returns the name of the node.
- *
- * @return name of the node
- */
- public String getName() {
- return name;
- }
-
- /**
- * Sets name of the node.
- *
- * @param name name of the node
- */
- public void setName(String name) {
- this.name = name;
- }
-
- /**
- * Returns namespace of the node.
- *
- * @return namespace of the node
- */
- public YangNamespace getNameSpace() {
- return namespace;
- }
-
- /**
- * Sets namespace of the node.
- *
- * @param namespace namespace of the node
- */
- public void setNameSpace(YangNamespace namespace) {
- this.namespace = namespace;
- }
-
- @Override
- public boolean equals(Object obj) {
-
- if (this == obj) {
- return true;
- }
- if (obj instanceof YangSchemaNodeIdentifier) {
- YangSchemaNodeIdentifier other = (YangSchemaNodeIdentifier) obj;
-
- if (!Objects.equals(name, other.name)) {
- return false;
- }
- String name = namespace.getModuleName();
- String otherName = other.getNameSpace().getModuleName();
- if (name != null && otherName != null) {
- if (namespace.getModuleName()
- .equals(other.getNameSpace().getModuleName())) {
- return true;
- }
-
- }
- String nSpace = namespace.getModuleNamespace();
- String otherNspace = other.getNameSpace().getModuleNamespace();
- if (nSpace != null && otherNspace != null) {
- if (nSpace.equals(otherNspace)) {
- return true;
- }
- }
- }
- return false;
- }
-
- @Override
- public YangSchemaNodeIdentifier clone() throws CloneNotSupportedException {
- return (YangSchemaNodeIdentifier) super.clone();
- }
-
- @Override
- public int hashCode() {
- return 0;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNodeType.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNodeType.java
deleted file mode 100644
index 89a8c10..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSchemaNodeType.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-/**
- * Represents the nature of YANG node, it is used by YMS to abstractly
- * understand the nature of node without knowing details of the YANG
- * construct.
- */
-public enum YangSchemaNodeType {
-
- /**
- * Represents single instance of YANG node like YANG container, YANG module,
- * YANG sub-module. This is used by YMS to abstractly understand the nature
- * of node.
- */
- YANG_SINGLE_INSTANCE_NODE,
-
- /**
- * Represents multi instance of YANG node i.e. YANG list.
- * This is used by YMS to abstractly understand the nature of node.
- */
- YANG_MULTI_INSTANCE_NODE,
-
- /**
- * Represents single instance of YANG leaf node i.e. YANG leaf
- * This is used by YMS to abstractly understand the nature of node.
- */
- YANG_SINGLE_INSTANCE_LEAF_NODE,
-
- /**
- * Represents multi instance of YANG leaf node i.e. YANG leaflist
- * This is used by YMS to abstractly understand the nature of node.
- */
- YANG_MULTI_INSTANCE_LEAF_NODE,
-
- /**
- * Represents node which is not a data node.
- */
- YANG_NON_DATA_NODE,
-
- /**
- * Represents node which cannot be instantiated.
- */
- YANG_CHOICE_NODE,
-
- /**
- * Represents the Augmented Node.
- */
- YANG_AUGMENT_NODE
-
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangStatus.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangStatus.java
deleted file mode 100644
index 2b3c626..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangStatus.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*Copyright 2016.year Open Networking Laboratory
-
-Licensed 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
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License 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.*/
-package org.onosproject.yangutils.datamodel;
-
-/**
- * Abstraction for status on a YANG entity. Abstracted to unify the parsing and
- * translator processing of status.
- */
-public interface YangStatus {
-
- /**
- * Returns the status.
- *
- * @return the status
- */
- YangStatusType getStatus();
-
- /**
- * Sets the status.
- *
- * @param status the status to set
- */
- void setStatus(YangStatusType status);
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangStatusType.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangStatusType.java
deleted file mode 100644
index d5ac982..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangStatusType.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel;
-
-/*
- * Reference:RFC 6020.
- * The "status" statement takes as an argument one of the strings
- * "current", "deprecated", or "obsolete". If no status is specified,
- * the default is "current".
- */
-
-/**
- * Represents the status of YANG entities.
- */
-public enum YangStatusType {
- /**
- * Reference:RFC 6020.
- *
- * "current" means that the definition is current and valid.
- */
- CURRENT,
-
- /**
- * Reference:RFC 6020.
- *
- * "deprecated" indicates an obsolete definition, but it
- * permits new/ continued implementation in order to foster interoperability
- * with older/existing implementations.
- */
- DEPRECATED,
-
- /**
- * Reference:RFC 6020.
- *
- * "obsolete" means the definition is obsolete and
- * SHOULD NOT be implemented and/or can be removed from implementations.
- */
- OBSOLETE
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangStringRestriction.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangStringRestriction.java
deleted file mode 100644
index 329d2b1..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangStringRestriction.java
+++ /dev/null
@@ -1,268 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangUint64;
-
-import java.io.Serializable;
-import java.math.BigInteger;
-import java.util.ListIterator;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.PATTERN_DATA;
-
-/*-
- * Reference RFC 6020.
- *
- * A string can be restricted with the "length" and "pattern" statements.
- *
- */
-
-/**
- * Represents the restriction for string data type.
- */
-public class YangStringRestriction extends DefaultLocationInfo
- implements YangDesc, YangReference, Parsable, Serializable {
-
- /*-
- * Reference RFC 6020.
- * The length Statement
- *
- * The "length" statement, which is an optional sub-statement to the
- * "type" statement, takes as an argument a length expression string.
- * It is used to restrict the built-in type "string", or types derived
- * from "string".
- * A "length" statement restricts the number of unicode characters in
- * the string.
- * A length range consists of an explicit value, or a lower bound, two
- * consecutive dots "..", and an upper bound. Multiple values or ranges
- * can be given, separated by "|". Length-restricting values MUST NOT
- * be negative. If multiple values or ranges are given, they all MUST
- * be disjoint and MUST be in ascending order. If a length restriction
- * is applied to an already length-restricted type, the new restriction
- * MUST be equal or more limiting, that is, raising the lower bounds,
- * reducing the upper bounds, removing explicit length values or ranges,
- * or splitting ranges into multiple ranges with intermediate gaps. A
- * length value is a non-negative integer, or one of the special values
- * "min" or "max". "min" and "max" mean the minimum and maximum length
- * accepted for the type being restricted, respectively. An
- * implementation is not required to support a length value larger than
- * 18446744073709551615.
- * The length's sub-statements
- *
- * +---------------+---------+-------------+-----------------+
- * | substatement | section | cardinality | mapped data type|
- * +---------------+---------+-------------+-----------------+
- * | description | 7.19.3 | 0..1 | string |
- * | error-app-tag | 7.5.4.2 | 0..1 | string |
- * | error-message | 7.5.4.1 | 0..1 | string |
- * | reference | 7.19.4 | 0..1 | string |
- * +---------------+---------+-------------+-----------------+
- */
-
- private static final long serialVersionUID = 8062016053L;
-
- /**
- * Length restriction information.
- */
- private YangRangeRestriction<YangUint64> lengthRestriction;
-
- /**
- * Effective pattern restriction for the type.
- */
- private YangPatternRestriction patternRestriction;
-
- /**
- * Textual reference.
- */
- private String reference;
-
- /**
- * Textual description.
- */
- private String description;
-
- /**
- * Creates a YANG string restriction object.
- */
- public YangStringRestriction() {
- }
-
- /**
- * Returns the length restriction on the string data.
- *
- * @return length restriction on the string data
- */
- public YangRangeRestriction<YangUint64> getLengthRestriction() {
- return lengthRestriction;
- }
-
- /**
- * Sets the length restriction on the string data.
- *
- * @param rest length restriction on the string data
- */
- public void setLengthRestriction(YangRangeRestriction<YangUint64> rest) {
- lengthRestriction = rest;
- }
-
- /**
- * Returns the pattern restriction for the type.
- *
- * @return pattern restriction for the type
- */
- public YangPatternRestriction getPatternRestriction() {
- return patternRestriction;
- }
-
- /**
- * Sets the pattern restriction for the type.
- *
- * @param rest pattern restriction for the type
- */
- void setPatternRestriction(YangPatternRestriction rest) {
- patternRestriction = rest;
- }
-
- /**
- * Adds a new pattern restriction for the type.
- *
- * @param newPattern new pattern restriction for the type
- */
- public void addPattern(String newPattern) {
- if (patternRestriction == null) {
- patternRestriction = new YangPatternRestriction();
- }
- patternRestriction.addPattern(newPattern);
- }
-
- /**
- * Returns the textual reference of the string restriction.
- *
- * @return textual reference of the string restriction
- */
- @Override
- public String getReference() {
- return reference;
- }
-
- /**
- * Sets the textual reference of the string restriction.
- *
- * @param ref textual reference of the string restriction
- */
- @Override
- public void setReference(String ref) {
- reference = ref;
- }
-
- /**
- * Returns the description of the string restriction.
- *
- * @return description of the string restriction
- */
- @Override
- public String getDescription() {
- return description;
- }
-
- /**
- * Sets the description of the string restriction.
- *
- * @param desc description of the string restriction
- */
- @Override
- public void setDescription(String desc) {
- description = desc;
-
- }
-
- @Override
- public YangConstructType getYangConstructType() {
- return PATTERN_DATA;
- }
-
- /**
- * Validates if the given value is correct as per the length restriction.
- *
- * @param valueInString value
- * @return true, if the value is confirming to length restriction, false otherwise
- */
- boolean isValidStringOnLengthRestriction(String valueInString) {
- if (lengthRestriction == null || lengthRestriction.getAscendingRangeIntervals() == null
- || lengthRestriction.getAscendingRangeIntervals().isEmpty()) {
- // Length restriction is optional
- return true;
- }
-
- ListIterator<YangRangeInterval<YangUint64>> rangeListIterator =
- lengthRestriction.getAscendingRangeIntervals().listIterator();
- boolean isMatched = false;
- while (rangeListIterator.hasNext()) {
- YangRangeInterval rangeInterval = rangeListIterator.next();
- rangeInterval.setCharPosition(getCharPosition());
- rangeInterval.setLineNumber(getLineNumber());
- rangeInterval.setFileName(getFileName());
- BigInteger startValue = ((YangUint64) rangeInterval.getStartValue()).getValue();
- BigInteger endValue = ((YangUint64) rangeInterval.getEndValue()).getValue();
- if (valueInString.length() >= startValue.intValue() &&
- valueInString.length() <= endValue.intValue()) {
- isMatched = true;
- break;
- }
- }
-
- return isMatched;
- }
-
- /**
- * Validates if the given value is correct as per the pattern restriction.
- *
- * @param valueInString value
- * @return true, if the value is confirming to pattern restriction, false otherwise
- */
- boolean isValidStringOnPatternRestriction(String valueInString) {
- if (patternRestriction == null
- || patternRestriction.getPatternList().isEmpty()) {
- // Pattern restriction is optional
- return true;
- }
-
- ListIterator<String> patternListIterator =
- patternRestriction.getPatternList().listIterator();
- boolean isMatched = false;
- while (patternListIterator.hasNext()) {
- if (valueInString.matches(patternListIterator.next())) {
- isMatched = true;
- break;
- }
- }
- return isMatched;
- }
-
- @Override
- public void validateDataOnEntry() throws DataModelException {
- // TODO: implement the method.
- }
-
- @Override
- public void validateDataOnExit() throws DataModelException {
- // TODO: implement the method.
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSubModule.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSubModule.java
deleted file mode 100644
index 5481381..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangSubModule.java
+++ /dev/null
@@ -1,827 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
-
-import static java.util.Collections.unmodifiableList;
-import static org.onosproject.yangutils.datamodel.ResolvableType.YANG_AUGMENT;
-import static org.onosproject.yangutils.datamodel.ResolvableType.YANG_BASE;
-import static org.onosproject.yangutils.datamodel.ResolvableType.YANG_COMPILER_ANNOTATION;
-import static org.onosproject.yangutils.datamodel.ResolvableType.YANG_DERIVED_DATA_TYPE;
-import static org.onosproject.yangutils.datamodel.ResolvableType.YANG_IDENTITYREF;
-import static org.onosproject.yangutils.datamodel.ResolvableType.YANG_IF_FEATURE;
-import static org.onosproject.yangutils.datamodel.ResolvableType.YANG_LEAFREF;
-import static org.onosproject.yangutils.datamodel.ResolvableType.YANG_USES;
-import static org.onosproject.yangutils.datamodel.YangSchemaNodeType.YANG_SINGLE_INSTANCE_NODE;
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.linkInterFileReferences;
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.resolveLinkingForResolutionList;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.SUB_MODULE_DATA;
-
-/*
- * Reference RFC 6020.
- *
- * While the primary unit in YANG is a module, a YANG module can itself
- * be constructed out of several submodules. Submodules allow a module
- * designer to split a complex model into several pieces where all the
- * submodules contribute to a single namespace, which is defined by the
- * module that includes the submodules.
- *
- * The "submodule" statement defines the submodule's name, and groups
- * all statements that belong to the submodule together. The
- * "submodule" statement's argument is the name of the submodule,
- * followed by a block of sub-statements that hold detailed submodule
- * information.
- *
- * The submodule's sub-statements
- *
- * +--------------+---------+-------------+------------------+
- * | substatement | section | cardinality |data model mapping|
- * +--------------+---------+-------------+------------------+
- * | anyxml | 7.10 | 0..n | - not supported |
- * | augment | 7.15 | 0..n | - child nodes |
- * | belongs-to | 7.2.2 | 1 | - YangBelongsTo |
- * | choice | 7.9 | 0..n | - child nodes |
- * | contact | 7.1.8 | 0..1 | - string |
- * | container | 7.5 | 0..n | - child nodes |
- * | description | 7.19.3 | 0..1 | - string |
- * | deviation | 7.18.3 | 0..n | - TODO |
- * | extension | 7.17 | 0..n | - TODO |
- * | feature | 7.18.1 | 0..n | - YangFeature |
- * | grouping | 7.11 | 0..n | - child nodes |
- * | identity | 7.16 | 0..n | - TODO |
- * | import | 7.1.5 | 0..n | - YangImport |
- * | include | 7.1.6 | 0..n | - YangInclude |
- * | leaf | 7.6 | 0..n | - YangLeaf |
- * | leaf-list | 7.7 | 0..n | - YangLeafList |
- * | list | 7.8 | 0..n | - child nodes |
- * | notification | 7.14 | 0..n | - TODO |
- * | organization | 7.1.7 | 0..1 | - string |
- * | reference | 7.19.4 | 0..1 | - string |
- * | revision | 7.1.9 | 0..n | - string |
- * | rpc | 7.13 | 0..n | - TODO |
- * | typedef | 7.3 | 0..n | - child nodes |
- * | uses | 7.12 | 0..n | - child nodes |
- * | YANG-version | 7.1.2 | 0..1 | - int |
- * +--------------+---------+-------------+------------------+
- */
-
-/**
- * Represents data model node to maintain information defined in YANG sub-module.
- */
-public abstract class YangSubModule
- extends YangNode
- implements YangLeavesHolder, YangDesc, YangReference, Parsable,
- CollisionDetector, YangReferenceResolver, RpcNotificationContainer,
- YangFeatureHolder, YangIsFilterContentNodes, YangNamespace {
-
- private static final long serialVersionUID = 806201614L;
-
- /**
- * Module to which it belongs to.
- */
- private YangBelongsTo belongsTo;
-
- /**
- * Reference RFC 6020.
- * <p>
- * The "contact" statement provides contact information for the module. The
- * argument is a string that is used to specify contact information for the
- * person or persons to whom technical queries concerning this module should
- * be sent, such as their name, postal address, telephone number, and
- * electronic mail address.
- */
- private String contact;
-
- /**
- * Description.
- */
- private String description;
-
- /**
- * List of YANG modules imported.
- */
- private List<YangImport> importList;
-
- /**
- * List of YANG sub-modules included.
- */
- private List<YangInclude> includeList;
-
- /**
- * List of leaves at root level in the sub-module.
- */
- private List<YangLeaf> listOfLeaf;
-
- /**
- * List of leaf-lists at root level in the sub-module.
- */
- private List<YangLeafList> listOfLeafList;
-
- /**
- * List of feature at root level in the module.
- */
- private List<YangFeature> listOfFeature;
-
- /**
- * Organization owner of the sub-module.
- */
- private String organization;
-
- /**
- * Reference of the sub-module.
- */
- private String reference;
-
- /**
- * Revision info of the sub-module.
- */
- private YangRevision revision;
-
- /**
- * YANG version.
- */
- private byte version;
-
- /**
- * Prefix of parent module.
- */
- private String prefix;
-
- /*-
- * Reference RFC 6020.
- *
- * Nested typedefs and groupings.
- * Typedefs and groupings may appear nested under many YANG statements,
- * allowing these to be lexically scoped by the hierarchy under which
- * they appear. This allows types and groupings to be defined near
- * where they are used, rather than placing them at the top level of the
- * hierarchy. The close proximity increases readability.
- *
- * Scoping also allows types to be defined without concern for naming
- * conflicts between types in different submodules. Type names can be
- * specified without adding leading strings designed to prevent name
- * collisions within large modules.
- *
- * Finally, scoping allows the module author to keep types and groupings
- * private to their module or submodule, preventing their reuse. Since
- * only top-level types and groupings (i.e., those appearing as
- * sub-statements to a module or submodule statement) can be used outside
- * the module or submodule, the developer has more control over what
- * pieces of their module are presented to the outside world, supporting
- * the need to hide internal information and maintaining a boundary
- * between what is shared with the outside world and what is kept
- * private.
- *
- * Scoped definitions MUST NOT shadow definitions at a higher scope. A
- * type or grouping cannot be defined if a higher level in the schema
- * hierarchy has a definition with a matching identifier.
- *
- * A reference to an un-prefixed type or grouping, or one which uses the
- * prefix of the current module, is resolved by locating the closest
- * matching "typedef" or "grouping" statement among the immediate
- * sub-statements of each ancestor statement.
- */
- private List<YangResolutionInfo> derivedTypeResolutionList;
-
- /**
- * Uses resolution list.
- */
- private List<YangResolutionInfo> usesResolutionList;
-
- /**
- * If-feature resolution list.
- */
- private List<YangResolutionInfo> ifFeatureResolutionList;
-
- /**
- * LeafRef resolution list.
- */
- private List<YangResolutionInfo> leafRefResolutionList;
-
- /**
- * Base resolution list.
- */
- private List<YangResolutionInfo> baseResolutionList;
-
- /**
- * IdentityRef resolution list.
- */
- private List<YangResolutionInfo> identityRefResolutionList;
-
- /**
- * Compiler annotation list.
- */
- private List<YangResolutionInfo> compilerAnnotationList;
-
- /**
- * extension list.
- */
- private List<YangExtension> extensionList;
-
- /**
- * Augment resolution list.
- */
- private List<YangResolutionInfo> augmentResolutionList;
-
- /**
- * Flag to indicate the presence of notification.
- */
- private boolean isNotificationPresent;
-
- /**
- * Map of notification enum.
- */
- private final Map<String, YangSchemaNode> notificationEnumMap;
-
- /**
- * List of augments which are augmenting input.
- */
- private final List<YangAugment> augments;
-
- /**
- * YANG defined namespace.
- */
- private String namespace;
-
- /**
- * Creates a sub module node.
- */
- public YangSubModule() {
- super(YangNodeType.SUB_MODULE_NODE, new HashMap<>());
- derivedTypeResolutionList = new LinkedList<>();
- augmentResolutionList = new LinkedList<>();
- usesResolutionList = new LinkedList<>();
- ifFeatureResolutionList = new LinkedList<>();
- leafRefResolutionList = new LinkedList<>();
- baseResolutionList = new LinkedList<>();
- identityRefResolutionList = new LinkedList<>();
- compilerAnnotationList = new LinkedList<>();
- importList = new LinkedList<>();
- includeList = new LinkedList<>();
- listOfLeaf = new LinkedList<>();
- listOfLeafList = new LinkedList<>();
- extensionList = new LinkedList<>();
- compilerAnnotationList = new LinkedList<>();
- listOfFeature = new LinkedList<>();
- notificationEnumMap = new HashMap<>();
- augments = new LinkedList<>();
- }
-
- @Override
- public void addToChildSchemaMap(YangSchemaNodeIdentifier id,
- YangSchemaNodeContextInfo context) {
- getYsnContextInfoMap().put(id, context);
- }
-
- @Override
- public void incrementMandatoryChildCount() {
- // TODO
- }
-
- @Override
- public void addToDefaultChildMap(YangSchemaNodeIdentifier id,
- YangSchemaNode yangSchemaNode) {
- // TODO
- }
-
- @Override
- public YangSchemaNodeType getYangSchemaNodeType() {
- return YANG_SINGLE_INSTANCE_NODE;
- }
-
- /**
- * Returns the module info.
- *
- * @return the belongs to info
- */
- public YangBelongsTo getBelongsTo() {
- return belongsTo;
- }
-
- /**
- * Sets the module info.
- *
- * @param belongsTo module info to set
- */
- public void setBelongsTo(YangBelongsTo belongsTo) {
- this.belongsTo = belongsTo;
- }
-
- /**
- * Returns the contact.
- *
- * @return the contact
- */
- public String getContact() {
- return contact;
- }
-
- /**
- * Sets the contact.
- *
- * @param contact the contact to set
- */
- public void setContact(String contact) {
- this.contact = contact;
- }
-
- /**
- * Returns the description.
- *
- * @return the description
- */
- @Override
- public String getDescription() {
- return description;
- }
-
- /**
- * Sets the description.
- *
- * @param description set the description
- */
- @Override
- public void setDescription(String description) {
- this.description = description;
- }
-
- /**
- * Returns the list of imported modules.
- *
- * @return the list of imported modules
- */
- @Override
- public List<YangImport> getImportList() {
- return unmodifiableList(importList);
- }
-
- /**
- * Adds the imported module information to the import list.
- *
- * @param importedModule module being imported
- */
- @Override
- public void addToImportList(YangImport importedModule) {
- importList.add(importedModule);
- }
-
- @Override
- public void setImportList(List<YangImport> importList) {
- this.importList = importList;
- }
-
- /**
- * Returns the list of included sub modules.
- *
- * @return the included list of sub modules
- */
- @Override
- public List<YangInclude> getIncludeList() {
- return unmodifiableList(includeList);
- }
-
- /**
- * Returns the included sub module information to the include list.
- *
- * @param includeModule submodule being included
- */
- @Override
- public void addToIncludeList(YangInclude includeModule) {
- includeList.add(includeModule);
- }
-
- @Override
- public void setIncludeList(List<YangInclude> includeList) {
- this.includeList = includeList;
- }
-
- @Override
- public String getPrefix() {
- return prefix;
- }
-
- @Override
- public void setPrefix(String prefix) {
- this.prefix = prefix;
- }
-
- @Override
- public void resolveSelfFileLinking(ResolvableType type)
- throws DataModelException {
- // Get the list to be resolved.
- List<YangResolutionInfo> resolutionList = getUnresolvedResolutionList(type);
- // Resolve linking for a resolution list.
- resolveLinkingForResolutionList(resolutionList, this);
- }
-
- @Override
- public void resolveInterFileLinking(ResolvableType type)
- throws DataModelException {
- // Get the list to be resolved.
- List<YangResolutionInfo> resolutionList = getUnresolvedResolutionList(type);
- // Resolve linking for a resolution list.
- linkInterFileReferences(resolutionList, this);
- }
-
- /**
- * Returns the list of leaves.
- *
- * @return the list of leaves
- */
- @Override
- public List<YangLeaf> getListOfLeaf() {
- return unmodifiableList(listOfLeaf);
- }
-
- @Override
- public void setListOfLeaf(List<YangLeaf> leafsList) {
- listOfLeaf = leafsList;
- }
-
- /**
- * Adds a leaf.
- *
- * @param leaf the leaf to be added
- */
- @Override
- public void addLeaf(YangLeaf leaf) {
- listOfLeaf.add(leaf);
- }
-
- /**
- * Returns the list of leaf-list.
- *
- * @return the list of leaf-list
- */
- @Override
- public List<YangLeafList> getListOfLeafList() {
- return unmodifiableList(listOfLeafList);
- }
-
- @Override
- public void setListOfLeafList(List<YangLeafList> listOfLeafList) {
- this.listOfLeafList = listOfLeafList;
- }
-
- /**
- * Adds a leaf-list.
- *
- * @param leafList the leaf-list to be added
- */
- @Override
- public void addLeafList(YangLeafList leafList) {
- listOfLeafList.add(leafList);
- }
-
- /**
- * Returns the sub-modules organization.
- *
- * @return the organization
- */
- public String getOrganization() {
- return organization;
- }
-
- /**
- * Sets the sub-modules organization.
- *
- * @param org the organization to set
- */
- public void setOrganization(String org) {
- organization = org;
- }
-
- /**
- * Returns the textual reference.
- *
- * @return the reference
- */
- @Override
- public String getReference() {
- return reference;
- }
-
- /**
- * Sets the textual reference.
- *
- * @param reference the reference to set
- */
- @Override
- public void setReference(String reference) {
- this.reference = reference;
- }
-
- /**
- * Returns the revision.
- *
- * @return the revision
- */
- public YangRevision getRevision() {
- return revision;
- }
-
- /**
- * Sets the revision.
- *
- * @param revision the revision to set
- */
- public void setRevision(YangRevision revision) {
- this.revision = revision;
- }
-
- /**
- * Returns the version.
- *
- * @return the version
- */
- public byte getVersion() {
- return version;
- }
-
- /**
- * Sets the version.
- *
- * @param version the version to set
- */
- public void setVersion(byte version) {
- this.version = version;
- }
-
- /**
- * Returns the type of the parsed data.
- *
- * @return returns SUB_MODULE_DATA
- */
- @Override
- public YangConstructType getYangConstructType() {
- return SUB_MODULE_DATA;
- }
-
- /**
- * Validates the data on entering the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnEntry()
- throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
- }
-
- /**
- * Validates the data on exiting the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnExit()
- throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
- }
-
- @Override
- public void detectCollidingChild(String id, YangConstructType dataType)
- throws DataModelException {
- // Asks helper to detect colliding child.
- detectCollidingChildUtil(id, dataType, this);
- }
-
- @Override
- public void detectSelfCollision(String id, YangConstructType dataType)
- throws DataModelException {
- // Not required as module doesn't have any parent.
- }
-
- @Override
- public List<YangResolutionInfo> getUnresolvedResolutionList(ResolvableType type) {
- if (type == YANG_DERIVED_DATA_TYPE) {
- return unmodifiableList(derivedTypeResolutionList);
- } else if (type == YANG_USES) {
- return unmodifiableList(usesResolutionList);
- } else if (type == YANG_AUGMENT) {
- return unmodifiableList(augmentResolutionList);
- } else if (type == YANG_IF_FEATURE) {
- return unmodifiableList(ifFeatureResolutionList);
- } else if (type == YANG_LEAFREF) {
- return unmodifiableList(leafRefResolutionList);
- } else if (type == YANG_BASE) {
- return unmodifiableList(baseResolutionList);
- } else if (type == YANG_IDENTITYREF) {
- return unmodifiableList(identityRefResolutionList);
- } else {
- return unmodifiableList(compilerAnnotationList);
- }
- }
-
- @Override
- public void addToResolutionList(YangResolutionInfo resolutionInfo,
- ResolvableType type) {
- if (type == YANG_DERIVED_DATA_TYPE) {
- derivedTypeResolutionList.add(resolutionInfo);
- } else if (type == YANG_USES) {
- usesResolutionList.add(resolutionInfo);
- } else if (type == YANG_IF_FEATURE) {
- ifFeatureResolutionList.add(resolutionInfo);
- } else if (type == YANG_LEAFREF) {
- leafRefResolutionList.add(resolutionInfo);
- } else if (type == YANG_BASE) {
- baseResolutionList.add(resolutionInfo);
- } else if (type == YANG_AUGMENT) {
- augmentResolutionList.add(resolutionInfo);
- } else if (type == YANG_IDENTITYREF) {
- identityRefResolutionList.add(resolutionInfo);
- } else if (type == YANG_COMPILER_ANNOTATION) {
- compilerAnnotationList.add(resolutionInfo);
- }
- }
-
- @Override
- public void setResolutionList(List<YangResolutionInfo> resolutionList,
- ResolvableType type) {
- if (type == YANG_DERIVED_DATA_TYPE) {
- derivedTypeResolutionList = resolutionList;
- } else if (type == YANG_USES) {
- usesResolutionList = resolutionList;
- } else if (type == YANG_IF_FEATURE) {
- ifFeatureResolutionList.add((YangResolutionInfo) resolutionList);
- } else if (type == YANG_LEAFREF) {
- leafRefResolutionList = resolutionList;
- } else if (type == YANG_BASE) {
- baseResolutionList = resolutionList;
- } else if (type == YANG_AUGMENT) {
- augmentResolutionList = resolutionList;
- } else if (type == YANG_IDENTITYREF) {
- identityRefResolutionList = resolutionList;
- } else if (type == YANG_COMPILER_ANNOTATION) {
- compilerAnnotationList = resolutionList;
- }
- }
-
- /**
- * Links the sub-module with module.
- *
- * @param yangNodeSet YANG file information set
- * @throws DataModelException a violation in data model rule
- */
- public void linkWithModule(Set<YangNode> yangNodeSet)
- throws DataModelException {
- belongsTo.linkWithModule(yangNodeSet);
- namespace = ((YangNamespace) belongsTo.getModuleNode())
- .getModuleNamespace();
- }
-
- @Override
- public void addReferencesToIncludeList(Set<YangNode> yangNodeSet)
- throws DataModelException {
- // Run through the included list to add references.
- for (YangInclude yangInclude : getIncludeList()) {
- YangSubModule subModule = yangInclude.addReferenceToInclude(yangNodeSet);
- // Check if the referred sub-modules parent is self
- if (!Objects.equals(subModule.getBelongsTo().getModuleNode(), getBelongsTo()
- .getModuleNode())) {
- yangInclude.reportIncludeError();
- }
- }
- }
-
- @Override
- public void addReferencesToImportList(Set<YangNode> yangNodeSet)
- throws DataModelException {
- // Run through the imported list to add references.
- for (YangImport yangImport : getImportList()) {
- yangImport.addReferenceToImport(yangNodeSet);
- }
- }
-
- @Override
- public List<YangFeature> getFeatureList() {
- return unmodifiableList(listOfFeature);
- }
-
- @Override
- public void addFeatureList(YangFeature feature) {
- listOfFeature.add(feature);
- }
-
- @Override
- public void setListOfFeature(List<YangFeature> listOfFeature) {
- this.listOfFeature = listOfFeature;
- }
-
- /**
- * Adds extension in extension list.
- *
- * @param extension the extension to be added
- */
- public void addExtension(YangExtension extension) {
- extensionList.add(extension);
- }
-
- /**
- * Returns the extension list.
- *
- * @return the extension list
- */
- public List<YangExtension> getExtensionList() {
- return unmodifiableList(extensionList);
- }
-
- /**
- * Sets the extension list.
- *
- * @param extensionList the list of extension
- */
- public void setExtensionList(List<YangExtension> extensionList) {
- this.extensionList = extensionList;
- }
-
- @Override
- public void setLeafNameSpaceAndAddToParentSchemaMap() {
- // Add namespace for all leafs.
- for (YangLeaf yangLeaf : getListOfLeaf()) {
- yangLeaf.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
- }
- // Add namespace for all leaf list.
- for (YangLeafList yangLeafList : getListOfLeafList()) {
- yangLeafList.setLeafNameSpaceAndAddToParentSchemaMap(getNameSpace());
- }
- }
-
-
- @Override
- public boolean isNotificationPresent() {
- return isNotificationPresent;
- }
-
- @Override
- public void setNotificationPresenceFlag(boolean notificationPresent) {
- isNotificationPresent = notificationPresent;
- }
-
- @Override
- public void addToNotificationEnumMap(String enumName,
- YangSchemaNode notification) {
- notificationEnumMap.put(enumName, notification);
- }
-
- @Override
- public YangSchemaNode getNotificationSchemaNode(String enumName) {
- return notificationEnumMap.get(enumName);
- }
-
- /**
- * Adds to augment list.
- *
- * @param augment augment which is augmenting input
- */
- public void addToAugmentList(YangAugment augment) {
- augments.add(augment);
- }
-
- /**
- * Returns augmented list.
- *
- * @return augmented list
- */
- public List<YangAugment> getAugmentList() {
- return unmodifiableList(augments);
- }
-
- @Override
- public String getModuleNamespace() {
- return namespace;
- }
-
- @Override
- public String getModuleName() {
- return getName();
- }
-
- public void setModuleNamespace(String namespace) {
- this.namespace = namespace;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangTranslatorOperatorNode.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangTranslatorOperatorNode.java
deleted file mode 100644
index 1c96c68..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangTranslatorOperatorNode.java
+++ /dev/null
@@ -1,25 +0,0 @@
-
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-/**
- * Abstraction of an entity which provides info about whether to translate module/submodule in manager and service
- * classes.
- */
-public interface YangTranslatorOperatorNode {
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangType.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangType.java
deleted file mode 100644
index ad9c4f5..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangType.java
+++ /dev/null
@@ -1,559 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.DataModelUtils;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.ResolvableStatus;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.DataTypeException;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangUint64;
-
-import java.io.Serializable;
-import java.math.BigInteger;
-import java.util.Iterator;
-import java.util.ListIterator;
-
-import static org.onosproject.yangutils.datamodel.BuiltInTypeObjectFactory.getDataObjectFromString;
-import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.UNRESOLVED;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.TYPE_DATA;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypeUtils.isOfRangeRestrictedType;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
-
-/*
- * Reference:RFC 6020.
- * The "type" statement takes as an argument a string that is the name
- * of a YANG built-in type or a derived type, followed by an optional
- * block of sub-statements that are used to put further restrictions
- * on the type.
- *
- * The restrictions that can be applied depend on the type being restricted.
- * The type's sub-statements
- *
- * +------------------+---------+-------------+------------------------------------+
- * | substatement | section | cardinality | mapped data type |
- * +------------------+---------+-------------+------------------------------------+
- * | bit | 9.7.4 | 0..n | - YangBit used in YangBits |
- * | enum | 9.6.4 | 0..n | - YangEnum used in YangEnumeration |
- * | length | 9.4.4 | 0..1 | - used for string |
- * | path | 9.9.2 | 0..1 | - path for referred leaf/leaf-list |
- * | pattern | 9.4.6 | 0..n | - used for string |
- * | range | 9.2.4 | 0..1 | - used for integer data type |
- * | require-instance | 9.13.2 | 0..1 | - TODO instance-identifier |
- * | type | 7.4 | 0..n | - TODO union |
- * +------------------+---------+-------------+------------------------------------+
- */
-
-/**
- * Represents the data type information.
- *
- * @param <T> YANG data type info
- */
-public class YangType<T> extends DefaultLocationInfo
- implements Cloneable, Parsable, Resolvable, Serializable {
-
- private static final long serialVersionUID = 8062016054L;
-
- /**
- * YANG node identifier.
- */
- private YangNodeIdentifier nodeId;
-
- /**
- * YANG data type.
- */
- private YangDataTypes dataType;
-
- /**
- * Additional information about data type, example restriction info, named
- * values, etc. The extra information is based on the data type. Based on
- * the data type, the extended info can vary.
- */
- private T dataTypeExtendedInfo;
-
- /**
- * Status of resolution. If completely resolved enum value is "RESOLVED",
- * if not enum value is "UNRESOLVED", in case reference of grouping/typedef
- * is added to uses/type but it's not resolved value of enum should be
- * "INTRA_FILE_RESOLVED".
- */
- private ResolvableStatus resolvableStatus;
-
-
- /**
- * Resolution for interfile grouping.
- */
- private boolean isTypeForInterFileGroupingResolution;
-
- /**
- * Resolved within the grouping where the type is used.
- */
- private boolean isTypeNotResolvedTillRootNode;
-
- /**
- * Creates a YANG type object.
- */
- public YangType() {
-
- nodeId = new YangNodeIdentifier();
- resolvableStatus = UNRESOLVED;
- }
-
- /**
- * Returns prefix associated with data type name.
- *
- * @return prefix associated with data type name
- */
- public String getPrefix() {
- return nodeId.getPrefix();
- }
-
- /**
- * Sets prefix associated with data type name.
- *
- * @param prefix prefix associated with data type name
- */
- public void setPrefix(String prefix) {
- nodeId.setPrefix(prefix);
- }
-
- /**
- * Returns the name of data type.
- *
- * @return the name of data type
- */
- public String getDataTypeName() {
- return nodeId.getName();
- }
-
- /**
- * Sets the name of the data type.
- *
- * @param typeName the name to set
- */
- public void setDataTypeName(String typeName) {
- nodeId.setName(typeName);
- }
-
- /**
- * Returns the type of data.
- *
- * @return the data type
- */
- public YangDataTypes getDataType() {
- return dataType;
- }
-
- /**
- * Sets the type of data.
- *
- * @param dataType data type
- */
- public void setDataType(YangDataTypes dataType) {
- this.dataType = dataType;
- }
-
- /**
- * Returns the data type meta data.
- *
- * @return the data type meta data
- */
- public T getDataTypeExtendedInfo() {
- return dataTypeExtendedInfo;
- }
-
- /**
- * Sets the data type meta data.
- *
- * @param dataTypeInfo the meta data to set
- */
- public void setDataTypeExtendedInfo(T dataTypeInfo) {
- this.dataTypeExtendedInfo = dataTypeInfo;
- }
-
- /**
- * Returns node identifier.
- *
- * @return node identifier
- */
- public YangNodeIdentifier getNodeId() {
- return nodeId;
- }
-
- /**
- * Sets node identifier.
- *
- * @param nodeId the node identifier
- */
- public void setNodeId(YangNodeIdentifier nodeId) {
- this.nodeId = nodeId;
- }
-
- /**
- * Resets the class attributes to its default value.
- */
- public void resetYangType() {
- nodeId = new YangNodeIdentifier();
- resolvableStatus = UNRESOLVED;
- dataType = null;
- dataTypeExtendedInfo = null;
- }
-
- /**
- * Returns the type of the parsed data.
- *
- * @return returns TYPE_DATA
- */
- @Override
- public YangConstructType getYangConstructType() {
- return TYPE_DATA;
- }
-
- /**
- * Validates the data on entering the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnEntry()
- throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
- }
-
- /**
- * Validates the data on exiting the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnExit()
- throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
- }
-
- @Override
- public ResolvableStatus getResolvableStatus() {
- return resolvableStatus;
- }
-
- @Override
- public void setResolvableStatus(ResolvableStatus resolvableStatus) {
- this.resolvableStatus = resolvableStatus;
- }
-
- @Override
- public Object resolve()
- throws DataModelException {
- /*
- * Check whether the data type is derived.
- */
- if (getDataType() != DERIVED) {
- throw new DataModelException("Linker Error: Resolve should only be called for derived data types. "
- + " in " +
- getLineNumber() + " at " +
- getCharPosition()
- + " in " + getFileName() + "\"");
- }
-
- // Check if the derived info is present.
- YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) getDataTypeExtendedInfo();
- if (derivedInfo == null) {
- throw new DataModelException("Linker Error: Derived information is missing. " + " in " +
- getLineNumber() + " at " +
- getCharPosition()
- + " in " + getFileName() + "\"");
-
- }
-
- // Initiate the resolution
- try {
- setResolvableStatus(derivedInfo.resolve());
- } catch (DataModelException e) {
- throw new DataModelException(e.getMessage());
- }
- return null;
- }
-
- /**
- * Validates the input data value against the permissible value for the
- * type as per the YANG file.
- *
- * @param value input data value
- * @throws DataModelException a violation of data model rules
- */
- void isValidValue(String value)
- throws DataModelException {
- switch (getDataType()) {
- case INT8:
- case INT16:
- case INT32:
- case INT64:
- case UINT8:
- case UINT16:
- case UINT32:
- case UINT64: {
- if (getDataTypeExtendedInfo() == null) {
- getDataObjectFromString(value, getDataType());
- } else {
- if (!((YangRangeRestriction) getDataTypeExtendedInfo()).isValidValueString(value)) {
- throw new DataTypeException("YANG file error : Input value \"" + value + "\" is not a valid " +
- getDataType());
- }
- }
- break;
- }
- case DECIMAL64: {
- // Fraction-Digits and range needs to get it from yang
- YangDecimal64<YangRangeRestriction> decimal64 =
- (YangDecimal64<YangRangeRestriction>) getDataTypeExtendedInfo();
- validateDecimal64(value, decimal64.getFractionDigit(),
- decimal64.getRangeRestrictedExtendedInfo());
- break;
- }
- case STRING: {
- if (getDataTypeExtendedInfo() == null) {
- break;
- } else if (!(((YangStringRestriction) getDataTypeExtendedInfo()).isValidStringOnLengthRestriction(value)
- && ((YangStringRestriction) getDataTypeExtendedInfo())
- .isValidStringOnPatternRestriction(value))) {
- throw new DataTypeException("YANG file error : Input value \"" + value + "\" is not a valid " +
- getDataType());
- }
- break;
- }
- case BOOLEAN:
- if (!(value.equals(DataModelUtils.TRUE) || value.equals(DataModelUtils.FALSE))) {
- throw new DataTypeException("YANG file error : Input value \"" + value + "\" is not a valid " +
- getDataType());
- }
- break;
- case ENUMERATION: {
- Iterator<YangEnum> iterator = ((YangEnumeration) getDataTypeExtendedInfo()).getEnumSet().iterator();
- boolean isValidated = false;
- while (iterator.hasNext()) {
- YangEnum enumTemp = iterator.next();
- if (enumTemp.getNamedValue().equals(value)) {
- isValidated = true;
- break;
- }
- }
-
- if (!isValidated) {
- throw new DataTypeException("YANG file error : Input value \"" + value + "\" is not a valid " +
- getDataType());
- }
- break;
- }
- case BITS: {
- YangBits bits = (YangBits) getDataTypeExtendedInfo();
- if (bits.fromString(value) == null) {
- throw new DataTypeException("YANG file error : Input value \"" + value + "\" is not a valid " +
- getDataType());
- }
- break;
- }
- case BINARY: {
- if (!isValidBinary(value, (YangRangeRestriction) getDataTypeExtendedInfo())) {
- throw new DataTypeException("YANG file error : Input value \"" + value + "\" is not a valid " +
- getDataType());
- }
- break;
- }
- case LEAFREF: {
- YangLeafRef<?> leafRef = (YangLeafRef<?>) getDataTypeExtendedInfo();
- leafRef.validateDataOnExit();
- break;
- }
- case IDENTITYREF: {
- // TODO TBD
- break;
- }
- case EMPTY: {
- if (value.length() > 0) {
- throw new DataTypeException("YANG file error : Input value \"" + value
- + "\" is not allowed for a data type " + getDataType());
- }
- break;
- }
- case UNION: {
- ListIterator<YangType<?>> listIterator = ((YangUnion) getDataTypeExtendedInfo()).getTypeList()
- .listIterator();
- boolean isValidated = false;
- while (listIterator.hasNext()) {
- YangType<?> type = (YangType<?>) listIterator.next();
- try {
- type.isValidValue(value);
- // If it is not thrown exception then validation is success
- isValidated = true;
- break;
- } catch (Exception e) {
- }
- }
-
- if (!isValidated) {
- throw new DataTypeException("YANG file error : Input value \"" + value + "\" is not a valid " +
- getDataType());
- }
- break;
- }
- case INSTANCE_IDENTIFIER: {
- // TODO TBD
- break;
- }
- case DERIVED: {
- YangDataTypes dataType = ((YangDerivedInfo) getDataTypeExtendedInfo()).getEffectiveBuiltInType();
- if (isOfRangeRestrictedType(dataType)) {
- if (((YangDerivedInfo) getDataTypeExtendedInfo()).getResolvedExtendedInfo() == null) {
- getDataObjectFromString(value,
- ((YangDerivedInfo) getDataTypeExtendedInfo())
- .getEffectiveBuiltInType());
- } else {
- if (!((YangRangeRestriction) ((YangDerivedInfo) getDataTypeExtendedInfo())
- .getResolvedExtendedInfo()).isValidValueString(value)) {
- throw new DataTypeException("YANG file error : Input value \"" + value
- + "\" is not a valid " + dataType);
- }
- }
- } else if (dataType == YangDataTypes.STRING) {
- Object info = ((YangDerivedInfo) getDataTypeExtendedInfo())
- .getResolvedExtendedInfo();
- if (info != null) {
- if (info instanceof YangStringRestriction) {
- YangStringRestriction stringRestriction =
- (YangStringRestriction) info;
- if (!(stringRestriction.isValidStringOnLengthRestriction(value) &&
- stringRestriction.isValidStringOnPatternRestriction(value))) {
- throw new DataTypeException("YANG file error : Input value \"" + value
- + "\" is not a valid " + dataType);
- }
- }
- }
- } else if (dataType == YangDataTypes.BITS) {
- YangTypeDef prevTypedef = ((YangDerivedInfo) getDataTypeExtendedInfo())
- .getReferredTypeDef();
- YangType type = prevTypedef.getTypeList().iterator().next();
- YangBits bits = (YangBits) type.getDataTypeExtendedInfo();
- if (bits.fromString(value) == null) {
- throw new DataTypeException("YANG file error : Input value \"" + value + "\" is not a valid " +
- dataType);
- }
- } else if (dataType == YangDataTypes.BINARY) {
- if (!isValidBinary(value, (YangRangeRestriction) ((YangDerivedInfo)
- getDataTypeExtendedInfo()).getResolvedExtendedInfo())) {
- throw new DataTypeException("YANG file error : Input value \"" + value + "\" is not a valid " +
- dataType);
- }
- } else if (dataType == YangDataTypes.DECIMAL64) {
- YangDerivedInfo derivedInfo = (YangDerivedInfo) getDataTypeExtendedInfo();
- YangTypeDef typedef = (YangTypeDef) derivedInfo.getReferredTypeDef();
- YangType<YangDecimal64> decimal64Type =
- (YangType<YangDecimal64>) typedef.getTypeList().iterator().next();
- YangDecimal64<YangRangeRestriction> decimal64 = decimal64Type.getDataTypeExtendedInfo();
- // Fraction-Digits and range needs to get it from yang
- validateDecimal64(value, decimal64.getFractionDigit(),
- decimal64.getRangeRestrictedExtendedInfo());
- }
- break;
- }
- default: {
- throw new DataTypeException("YANG file error : Input value \"" + value + "\" received for " +
- "unsupported data type " + getDataType());
- }
- }
- }
-
-
- /**
- * Checks whether specific string is valid decimal64 value.
- *
- * @param value decimal64 value
- */
- private void validateDecimal64(String value, int fractionDigit, YangRangeRestriction rangeRestriction)
- throws DataModelException {
- YangDecimal64<YangRangeRestriction> decimal64 = YangDecimal64.fromString(value);
- decimal64.setFractionDigit(fractionDigit);
- decimal64.setRangeRestrictedExtendedInfo(rangeRestriction);
- decimal64.validateDecimal64();
- }
-
- /**
- * Checks whether specific string is valid binary.
- *
- * @param value binary value
- * @return true if validation success otherwise false
- */
- private boolean isValidBinary(String value, YangRangeRestriction lengthRestriction) {
- YangBinary binary = new YangBinary(value);
-
- // After decoding binary, its length should not be zero
- if (binary.getBinaryData().length == 0) {
- return false;
- }
-
- if (lengthRestriction == null || lengthRestriction.getAscendingRangeIntervals() == null
- || lengthRestriction.getAscendingRangeIntervals().isEmpty()) {
- // Length restriction is optional
- return true;
- }
-
- ListIterator<YangRangeInterval<YangUint64>> rangeListIterator = lengthRestriction.getAscendingRangeIntervals()
- .listIterator();
- boolean isMatched = false;
- while (rangeListIterator.hasNext()) {
- YangRangeInterval rangeInterval = rangeListIterator.next();
- rangeInterval.setFileName(getFileName());
- rangeInterval.setLineNumber(getLineNumber());
- rangeInterval.setCharPosition(getCharPosition());
- BigInteger startValue = ((YangUint64) rangeInterval.getStartValue()).getValue();
- BigInteger endValue = ((YangUint64) rangeInterval.getEndValue()).getValue();
- // convert (encode) back and check length
- if ((binary.toString().length() >= startValue.intValue()) &&
- (binary.toString().length() <= endValue.intValue())) {
- isMatched = true;
- break;
- }
- }
-
- return isMatched;
- }
-
- public boolean isTypeForInterFileGroupingResolution() {
- return isTypeForInterFileGroupingResolution;
- }
-
- public void setTypeForInterFileGroupingResolution(boolean typeForInterFileGroupingResolution) {
- isTypeForInterFileGroupingResolution = typeForInterFileGroupingResolution;
- }
-
- public boolean isTypeNotResolvedTillRootNode() {
- return isTypeNotResolvedTillRootNode;
- }
-
- public void setTypeNotResolvedTillRootNode(boolean typeNotResolvedTillRootNode) {
- isTypeNotResolvedTillRootNode = typeNotResolvedTillRootNode;
- }
-
- @Override
- public YangType<T> clone()
- throws CloneNotSupportedException {
- YangType<T> clonedNode = (YangType<T>) super.clone();
- return clonedNode;
- }
-
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangTypeDef.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangTypeDef.java
deleted file mode 100644
index 3411201..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangTypeDef.java
+++ /dev/null
@@ -1,313 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-
-import java.util.LinkedList;
-import java.util.List;
-
-import static java.util.Collections.unmodifiableList;
-import static org.onosproject.yangutils.datamodel.YangNodeType.TYPEDEF_NODE;
-import static org.onosproject.yangutils.datamodel.YangSchemaNodeType.YANG_NON_DATA_NODE;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.COLLISION_DETECTION;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.TYPEDEF;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.getErrorMsgCollision;
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.TYPEDEF_DATA;
-
-/*-
- * Reference RFC 6020.
- *
- * The "typedef" statement defines a new type that may be used locally in the
- * module, in modules or submodules which include it, and by other modules that
- * import from it. The new type is called the "derived type", and the type from
- * which it was derived is called the "base type". All derived types can be
- * traced back to a YANG built-in type.
- *
- * The "typedef" statement's argument is an identifier that is the name of the
- * type to be defined, and MUST be followed by a block of sub-statements that
- * holds detailed typedef information.
- *
- * The name of the type MUST NOT be one of the YANG built-in types. If the
- * typedef is defined at the top level of a YANG module or submodule, the name
- * of the type to be defined MUST be unique within the module.
- * The typedef's sub-statements
- *
- * +--------------+---------+-------------+------------------+
- * | substatement | section | cardinality |data model mapping|
- * +--------------+---------+-------------+------------------+
- * | default | 7.3.4 | 0..1 |-string |
- * | description | 7.19.3 | 0..1 |-string |
- * | reference | 7.19.4 | 0..1 |-string |
- * | status | 7.19.2 | 0..1 |-YangStatus |
- * | type | 7.3.2 | 1 |-yangType |
- * | units | 7.3.3 | 0..1 |-string |
- * +--------------+---------+-------------+------------------+
- */
-
-/**
- * Represents data model node to maintain information defined in YANG typedef.
- */
-public abstract class YangTypeDef
- extends YangNode
- implements YangCommonInfo, Parsable, YangTypeHolder, CollisionDetector,
- YangTranslatorOperatorNode {
-
- private static final long serialVersionUID = 806201615L;
-
- /**
- * Default value in string, needs to be converted to the target object,
- * based on the type.
- */
- private String defaultValueInString;
-
- /**
- * Description of new type.
- */
- private String description;
-
- /**
- * reference string.
- */
- private String reference;
-
- /**
- * Status of the data type.
- */
- private YangStatusType status;
-
- /**
- * Units of the data type.
- */
- private String units;
-
- /**
- * List of YANG type, for typedef it will have single type.
- * This is done to unify the code with union.
- */
- private final List<YangType<?>> typeList;
-
- /**
- * Creates a typedef node.
- */
- public YangTypeDef() {
- super(TYPEDEF_NODE, null);
- typeList = new LinkedList<>();
- }
-
- @Override
- public void addToChildSchemaMap(YangSchemaNodeIdentifier id,
- YangSchemaNodeContextInfo yangSchemaNodeContextInfo)
- throws DataModelException {
- // Do nothing.
- }
-
- @Override
- public void incrementMandatoryChildCount() {
- // Do nothing, to be handled during linking.
- // TODO
- }
-
- @Override
- public void addToDefaultChildMap(YangSchemaNodeIdentifier id,
- YangSchemaNode node) {
- // Do nothing, to be handled during linking.
- // TODO
- }
-
- @Override
- public YangSchemaNodeType getYangSchemaNodeType() {
- return YANG_NON_DATA_NODE;
- }
-
- /**
- * Returns the default value.
- *
- * @return the default value
- */
- public String getDefaultValueInString() {
- return defaultValueInString;
- }
-
- /**
- * Sets the default value.
- *
- * @param defaultValueInString the default value
- */
- public void setDefaultValueInString(String defaultValueInString) {
- this.defaultValueInString = defaultValueInString;
- }
-
- /**
- * Returns the description.
- *
- * @return the description
- */
- @Override
- public String getDescription() {
- return description;
- }
-
- /**
- * Sets the description.
- *
- * @param description set the description
- */
- @Override
- public void setDescription(String description) {
- this.description = description;
- }
-
- /**
- * Returns the textual reference.
- *
- * @return the reference
- */
- @Override
- public String getReference() {
- return reference;
- }
-
- /**
- * Sets the textual reference.
- *
- * @param reference the reference to set
- */
- @Override
- public void setReference(String reference) {
- this.reference = reference;
- }
-
- /**
- * Returns the status.
- *
- * @return the status
- */
- @Override
- public YangStatusType getStatus() {
- return status;
- }
-
- /**
- * Sets the status.
- *
- * @param status the status to set
- */
- @Override
- public void setStatus(YangStatusType status) {
- this.status = status;
- }
-
- /**
- * Returns the data type.
- *
- * @return the data type
- */
- public YangType<?> getTypeDefBaseType() {
- if (!typeList.isEmpty()) {
- return typeList.get(0);
- }
- return null;
- }
-
- /**
- * Sets the data type.
- *
- * @param dataType the data type
- */
- public void setDataType(YangType<?> dataType) {
- typeList.add(0, dataType);
- }
-
- /**
- * Returns the unit.
- *
- * @return the units
- */
- public String getUnits() {
- return units;
- }
-
- /**
- * Sets the unit.
- *
- * @param units the units to set
- */
- public void setUnits(String units) {
- this.units = units;
- }
-
- /**
- * Returns the type of the data.
- *
- * @return returns TYPEDEF_DATA
- */
- @Override
- public YangConstructType getYangConstructType() {
- return TYPEDEF_DATA;
- }
-
- /**
- * Validates the data on entering the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnEntry()
- throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
- }
-
- /**
- * Validates the data on exiting the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnExit()
- throws DataModelException {
- if (defaultValueInString != null && !defaultValueInString.isEmpty() &&
- getTypeDefBaseType() != null) {
- getTypeDefBaseType().isValidValue(defaultValueInString);
- }
- }
-
- @Override
- public List<YangType<?>> getTypeList() {
- return unmodifiableList(typeList);
- }
-
- @Override
- public void detectCollidingChild(String identifierName, YangConstructType dataType)
- throws DataModelException {
- // Asks helper to detect colliding child.
- detectCollidingChildUtil(identifierName, dataType, this);
- }
-
- @Override
- public void detectSelfCollision(String identifierName, YangConstructType dataType)
- throws DataModelException {
- if (getName().equals(identifierName)) {
- throw new DataModelException(
- getErrorMsgCollision(COLLISION_DETECTION, getName(),
- getLineNumber(), getCharPosition(),
- TYPEDEF, getFileName()));
- }
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangTypeHolder.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangTypeHolder.java
deleted file mode 100644
index 284f86a..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangTypeHolder.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import java.util.List;
-
-/**
- * Represents the holder with type(s).
- */
-public interface YangTypeHolder {
-
- /**
- * Returns type list.
- *
- * @return type list
- */
- List<YangType<?>> getTypeList();
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangUnion.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangUnion.java
deleted file mode 100644
index eb38fb7..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangUnion.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-
-import java.util.LinkedList;
-import java.util.List;
-
-import static org.onosproject.yangutils.datamodel.YangSchemaNodeType.YANG_NON_DATA_NODE;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.getErrorMsg;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.UNION_DATA;
-
-/*
- * Reference RFC 6020.
- *
- * The union built-in type represents a value that corresponds to one of
- * its member types.
- *
- * When the type is "union", the "type" statement (Section 7.4) MUST be
- * present. It is used to repeatedly specify each member type of the
- * union. It takes as an argument a string that is the name of a member
- * type.
- *
- * A member type can be of any built-in or derived type, except it MUST
- * NOT be one of the built-in types "empty" or "leafref".
- *
- * When a string representing a union data type is validated, the string
- * is validated against each member type, in the order they are
- * specified in the "type" statement, until a match is found.
- *
- * Any default value or "units" property defined in the member types is
- * not inherited by the union type.
- */
-
-/**
- * Represents data model node to maintain information defined in YANG union.
- */
-public abstract class YangUnion
- extends YangNode
- implements Parsable, YangTypeHolder, CollisionDetector {
-
- private static final long serialVersionUID = 806201616L;
-
- // List of YANG type.
- private List<YangType<?>> typeList;
-
- // Current child union number.
- private transient int childUnionNumber;
-
- /**
- * Creates a YANG union node.
- */
- public YangUnion() {
- super(YangNodeType.UNION_NODE, null);
- typeList = new LinkedList<>();
- childUnionNumber = 1;
- }
-
- @Override
- public void addToChildSchemaMap(YangSchemaNodeIdentifier schemaNodeIdentifier,
- YangSchemaNodeContextInfo yangSchemaNodeContextInfo)
- throws DataModelException {
- // Do nothing.
- }
-
- @Override
- public void incrementMandatoryChildCount() {
- // Do nothing, as leaf can't come directly or indirectly below this construct.
- // TODO
- }
-
- @Override
- public void addToDefaultChildMap(YangSchemaNodeIdentifier yangSchemaNodeIdentifier, YangSchemaNode yangSchemaNode) {
- // Do nothing, as leaf can't come directly or indirectly below this construct.
- // TODO
- }
-
- @Override
- public YangSchemaNodeType getYangSchemaNodeType() {
- return YANG_NON_DATA_NODE;
- }
-
- @Override
- public List<YangType<?>> getTypeList() {
- return typeList;
- }
-
-
- /**
- * Returns running child union number.
- *
- * @return running child union number
- */
- public int getChildUnionNumber() {
- return childUnionNumber;
- }
-
- /**
- * Sets the running child union number.
- *
- * @param childUnionNumber running child union number
- */
- public void setChildUnionNumber(int childUnionNumber) {
- this.childUnionNumber = childUnionNumber;
- }
-
- /**
- * Adds YANG type to type list.
- *
- * @param yangType YANG type to be added to list
- * @throws DataModelException union member type must not be one of the
- * built-in types "empty" or "leafref"
- */
- public void addType(YangType<?> yangType)
- throws DataModelException {
- YangDataTypes type = yangType.getDataType();
- String msg = "Union member type must not be one of the built-in types" +
- " \"empty\" or \"leafref\"";
- switch (type) {
- case EMPTY:
- case LEAFREF:
- throw new DataModelException(getErrorMsg(
- msg, getName(), getLineNumber(), getCharPosition(),
- getFileName()));
-
- default:
- typeList.add(yangType);
- }
- }
-
- @Override
- public YangConstructType getYangConstructType() {
- return UNION_DATA;
- }
-
- /**
- * Validates the data on entering the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnEntry()
- throws DataModelException {
- //TODO: implement the method.
- }
-
- /**
- * Validates the data on exiting the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnExit()
- throws DataModelException {
- //TODO: implement the method.
- }
-
- @Override
- public void detectCollidingChild(String identifierName, YangConstructType dataType)
- throws DataModelException {
- // Do nothing
- }
-
- @Override
- public void detectSelfCollision(String identifierName, YangConstructType dataType)
- throws DataModelException {
- // Do nothing
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangUses.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangUses.java
deleted file mode 100644
index 04f579f..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangUses.java
+++ /dev/null
@@ -1,562 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.ResolvableStatus;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-
-import java.util.LinkedList;
-import java.util.List;
-
-import static java.util.Collections.unmodifiableList;
-import static org.onosproject.yangutils.datamodel.TraversalType.CHILD;
-import static org.onosproject.yangutils.datamodel.TraversalType.PARENT;
-import static org.onosproject.yangutils.datamodel.TraversalType.ROOT;
-import static org.onosproject.yangutils.datamodel.TraversalType.SIBILING;
-import static org.onosproject.yangutils.datamodel.YangNodeType.USES_NODE;
-import static org.onosproject.yangutils.datamodel.YangSchemaNodeType.YANG_NON_DATA_NODE;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.COLLISION_DETECTION;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.USES;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.getErrorMsgCollision;
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.addUnresolvedType;
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCollidingChildUtil;
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.getParentNodeInGenCode;
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.updateClonedLeavesUnionEnumRef;
-import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.INTRA_FILE_RESOLVED;
-import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.RESOLVED;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.LEAF_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.LEAF_LIST_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.USES_DATA;
-
-/*-
- * Reference RFC 6020.
- *
- * The "uses" statement is used to reference a "grouping" definition. It takes
- * one argument, which is the name of the grouping.
- *
- * The effect of a "uses" reference to a grouping is that the nodes defined by
- * the grouping are copied into the current schema tree, and then updated
- * according to the "refine" and "augment" statements.
- *
- * The identifiers defined in the grouping are not bound to a namespace until
- * the contents of the grouping are added to the schema tree via a "uses"
- * statement that does not appear inside a "grouping" statement, at which point
- * they are bound to the namespace of the current module.
- *
- * The uses's sub-statements
- *
- * +--------------+---------+-------------+------------------+
- * | substatement | section | cardinality |data model mapping|
- * +--------------+---------+-------------+------------------+
- * | augment | 7.15 | 0..1 | -child nodes |
- * | description | 7.19.3 | 0..1 | -string |
- * | if-feature | 7.18.2 | 0..n | -YangIfFeature |
- * | refine | 7.12.2 | 0..1 | -TODO |
- * | reference | 7.19.4 | 0..1 | -string |
- * | status | 7.19.2 | 0..1 | -YangStatus |
- * | when | 7.19.5 | 0..1 | -YangWhen |
- * +--------------+---------+-------------+------------------+
- */
-
-/**
- * Represents data model node to maintain information defined in YANG uses.
- */
-public abstract class YangUses
- extends YangNode
- implements YangCommonInfo, Parsable, Resolvable, CollisionDetector,
- YangWhenHolder, YangIfFeatureHolder, YangTranslatorOperatorNode,
- LeafRefInvalidHolder {
-
- private static final long serialVersionUID = 806201617L;
-
- /**
- * YANG node identifier.
- */
- private YangNodeIdentifier nodeIdentifier;
-
- /**
- * Referred group.
- */
- private YangGrouping refGroup;
-
- /**
- * Description of YANG uses.
- */
- private String description;
-
- /**
- * YANG reference.
- */
- private String reference;
-
- /**
- * Status of YANG uses.
- */
- private YangStatusType status;
-
- /**
- * When data of the node.
- */
- private YangWhen when;
-
- /**
- * List of if-feature.
- */
- private List<YangIfFeature> ifFeatureList;
-
- /**
- * Status of resolution. If completely resolved enum value is "RESOLVED",
- * if not enum value is "UNRESOLVED", in case reference of grouping/typedef
- * is added to uses/type but it's not resolved value of enum should be
- * "INTRA_FILE_RESOLVED".
- */
- private ResolvableStatus resolvableStatus;
-
- /**
- * Effective list of leaf lists of grouping that needs to replicated at YANG uses.
- */
- private List<YangEntityToResolveInfoImpl> entityToResolveInfoList;
-
- /**
- * Current grouping depth for uses.
- */
- private int currentGroupingDepth;
-
- /**
- * Creates an YANG uses node.
- */
- public YangUses() {
- super(USES_NODE, null);
- nodeIdentifier = new YangNodeIdentifier();
- resolvableStatus = ResolvableStatus.UNRESOLVED;
- ifFeatureList = new LinkedList<>();
- entityToResolveInfoList = new LinkedList<>();
- }
-
- @Override
- public void addToChildSchemaMap(YangSchemaNodeIdentifier id,
- YangSchemaNodeContextInfo context)
- throws DataModelException {
- // Do nothing.
- }
-
- @Override
- public void incrementMandatoryChildCount() {
- // Do nothing.
- // TODO
- }
-
- @Override
- public void addToDefaultChildMap(YangSchemaNodeIdentifier id,
- YangSchemaNode yangSchemaNode) {
- // Do nothing.
- // TODO
- }
-
- @Override
- public YangSchemaNodeType getYangSchemaNodeType() {
- return YANG_NON_DATA_NODE;
- }
-
- /**
- * Adds an entity to resolve in list.
- *
- * @param entityToResolve entity to resolved
- * @throws DataModelException a violation of data model rules
- */
- public void addEntityToResolve(
- List<YangEntityToResolveInfoImpl> entityToResolve)
- throws DataModelException {
- if (entityToResolveInfoList == null) {
- entityToResolveInfoList = new
- LinkedList<>();
- }
- entityToResolveInfoList.addAll(entityToResolve);
- }
-
- /**
- * Returns the referred group.
- *
- * @return the referred group
- */
- public YangGrouping getRefGroup() {
- return refGroup;
- }
-
- /**
- * Sets the referred group.
- *
- * @param refGroup the referred group
- */
- public void setRefGroup(YangGrouping refGroup) {
- this.refGroup = refGroup;
- }
-
- /**
- * Returns the when.
- *
- * @return the when
- */
- @Override
- public YangWhen getWhen() {
- return when;
- }
-
- /**
- * Sets the when.
- *
- * @param when the when to set
- */
- @Override
- public void setWhen(YangWhen when) {
- this.when = when;
- }
-
- /**
- * Returns the description.
- *
- * @return the description
- */
- @Override
- public String getDescription() {
- return description;
- }
-
- /**
- * Sets the description.
- *
- * @param description set the description
- */
- @Override
- public void setDescription(String description) {
- this.description = description;
- }
-
- /**
- * Returns the textual reference.
- *
- * @return the reference
- */
- @Override
- public String getReference() {
- return reference;
- }
-
- /**
- * Sets the textual reference.
- *
- * @param reference the reference to set
- */
- @Override
- public void setReference(String reference) {
- this.reference = reference;
- }
-
- /**
- * Returns the status.
- *
- * @return the status
- */
- @Override
- public YangStatusType getStatus() {
- return status;
- }
-
- /**
- * Sets the status.
- *
- * @param status the status to set
- */
- @Override
- public void setStatus(YangStatusType status) {
- this.status = status;
- }
-
- /**
- * Returns the type of the data.
- *
- * @return returns USES_DATA
- */
- @Override
- public YangConstructType getYangConstructType() {
- return USES_DATA;
- }
-
- /**
- * Validates the data on entering the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnEntry()
- throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
- }
-
- /**
- * Validates the data on exiting the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnExit()
- throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
- }
-
- /**
- * Returns node identifier.
- *
- * @return node identifier
- */
- public YangNodeIdentifier getNodeIdentifier() {
- return nodeIdentifier;
- }
-
- /**
- * Sets node identifier.
- *
- * @param nodeIdentifier the node identifier
- */
- public void setNodeIdentifier(YangNodeIdentifier nodeIdentifier) {
- this.nodeIdentifier = nodeIdentifier;
- }
-
- /**
- * Returns prefix associated with uses.
- *
- * @return prefix associated with uses
- */
- public String getPrefix() {
- return nodeIdentifier.getPrefix();
- }
-
- /**
- * Get prefix associated with uses.
- *
- * @param prefix prefix associated with uses
- */
- public void setPrefix(String prefix) {
- nodeIdentifier.setPrefix(prefix);
- }
-
- @Override
- public Object resolve()
- throws DataModelException {
-
- YangGrouping referredGrouping = getRefGroup();
-
- if (referredGrouping == null) {
- throw new DataModelException("YANG uses linker error, cannot resolve" +
- " uses " + getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition() + " in " +
- getFileName() + "\"");
-
- } else {
- /*
- * if referredGrouping has uses which is not resolved then set the status
- * as Intra file resolved and return
- */
- if (checkIsUnresolvedRecursiveUsesInGrouping(referredGrouping)) {
- return null;
- }
- }
-
- YangNode usesParentNode = getParentNodeInGenCode(this);
- if (!(usesParentNode instanceof YangLeavesHolder)
- || !(usesParentNode instanceof CollisionDetector)) {
- throw new DataModelException(
- "YANG uses holder construct is wrong " + getName() + " in " +
- getLineNumber() + " at " + getCharPosition() +
- " in " + getFileName() + "\"");
- }
-
- YangLeavesHolder usesParent = (YangLeavesHolder) usesParentNode;
- if (referredGrouping.getListOfLeaf() != null) {
- for (YangLeaf leaf : referredGrouping.getListOfLeaf()) {
- YangLeaf clonedLeaf;
- try {
- ((CollisionDetector) usesParent)
- .detectCollidingChild(leaf.getName(), LEAF_DATA);
- clonedLeaf = leaf.clone();
- clonedLeaf.setReferredLeaf(leaf);
- addUnresolvedType(this, clonedLeaf, (YangNode) usesParent);
- } catch (CloneNotSupportedException | DataModelException e) {
- throw new DataModelException(e.getMessage());
- }
-
- clonedLeaf.setContainedIn(usesParent);
- usesParent.addLeaf(clonedLeaf);
- }
- }
- if (referredGrouping.getListOfLeafList() != null) {
- for (YangLeafList leafList : referredGrouping.getListOfLeafList()) {
- YangLeafList clonedLeafList;
- try {
- ((CollisionDetector) usesParent)
- .detectCollidingChild(leafList.getName(), LEAF_LIST_DATA);
- clonedLeafList = leafList.clone();
- clonedLeafList.setReferredSchemaLeafList(leafList);
- addUnresolvedType(this, clonedLeafList,
- (YangNode) usesParent);
- } catch (CloneNotSupportedException | DataModelException e) {
- throw new DataModelException(e.getMessage());
- }
- clonedLeafList.setContainedIn(usesParent);
- usesParent.addLeafList(clonedLeafList);
- }
- }
-
- try {
- YangNode.cloneSubTree(referredGrouping, usesParentNode, this);
- } catch (DataModelException e) {
- throw new DataModelException(e.getMessage());
- }
- updateClonedLeavesUnionEnumRef(usesParent);
- return unmodifiableList(entityToResolveInfoList);
- }
-
- /**
- * Checks if referred grouping has uses which is not resolved then it set the
- * status of current uses as intra file resolved and returns true.
- *
- * @param referredGrouping referred grouping node of uses
- * @return true if referred grouping has unresolved uses
- */
- private boolean checkIsUnresolvedRecursiveUsesInGrouping(YangGrouping referredGrouping) {
-
- /*
- * Search the grouping node's children for presence of uses node.
- */
- TraversalType curTraversal = ROOT;
- YangNode curNode = referredGrouping.getChild();
- while (curNode != null) {
- if (curNode == referredGrouping || (curNode instanceof YangUses &&
- curNode.getName().equals(referredGrouping.getName()))) {
- // if we have traversed all the child nodes, then exit from loop
- return false;
- }
-
- // if child nodes has uses, then add it to resolution stack
- if (curNode instanceof YangUses) {
- if (((YangUses) curNode).getResolvableStatus() != RESOLVED) {
- setResolvableStatus(INTRA_FILE_RESOLVED);
- return true;
- }
- }
-
- // Traversing all the child nodes of grouping
- if (curTraversal != PARENT && curNode.getChild() != null) {
- curTraversal = CHILD;
- curNode = curNode.getChild();
- } else if (curNode.getNextSibling() != null) {
- curTraversal = SIBILING;
- curNode = curNode.getNextSibling();
- } else {
- curTraversal = PARENT;
- curNode = curNode.getParent();
- }
- }
- return false;
- }
-
- @Override
- public ResolvableStatus getResolvableStatus() {
- return resolvableStatus;
- }
-
- @Override
- public void setResolvableStatus(ResolvableStatus resolvableStatus) {
- this.resolvableStatus = resolvableStatus;
- }
-
- @Override
- public void detectCollidingChild(String identifierName, YangConstructType dataType)
- throws DataModelException {
- detectCollidingChildUtil(identifierName, dataType, this);
- }
-
- @Override
- public void detectSelfCollision(String identifierName, YangConstructType dataType)
- throws DataModelException {
-
- if (getName().equals(identifierName)) {
- throw new DataModelException(
- getErrorMsgCollision(COLLISION_DETECTION, getName(),
- getLineNumber(), getCharPosition(),
- USES, getFileName()));
- }
- }
-
- @Override
- public List<YangIfFeature> getIfFeatureList() {
- return unmodifiableList(ifFeatureList);
- }
-
- @Override
- public void addIfFeatureList(YangIfFeature ifFeature) {
- if (ifFeatureList == null) {
- ifFeatureList = new LinkedList<>();
- }
- ifFeatureList.add(ifFeature);
- }
-
- @Override
- public void setIfFeatureList(List<YangIfFeature> ifFeatureList) {
- this.ifFeatureList = ifFeatureList;
- }
-
- /**
- * Sets the current grouping depth.
- *
- * @param currentGroupingDepth current grouping depth
- */
- public void setCurrentGroupingDepth(int currentGroupingDepth) {
- this.currentGroupingDepth = currentGroupingDepth;
- }
-
- /**
- * Returns the current grouping depth.
- *
- * @return current grouping depth
- */
- public int getCurrentGroupingDepth() {
- return currentGroupingDepth;
- }
-
- @Override
- public String getName() {
- return nodeIdentifier.getName();
- }
-
- @Override
- public void setName(String name) {
- nodeIdentifier.setName(name);
- }
-
- @Override
- public YangNode clone(YangUses node) throws CloneNotSupportedException {
- YangNode clnNode = (YangNode) super.clone();
- clnNode.setParent(null);
- clnNode.setChild(null);
- clnNode.setNextSibling(null);
- clnNode.setPreviousSibling(null);
- return clnNode;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangWhen.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangWhen.java
deleted file mode 100644
index 1982d5a..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangWhen.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel;
-
-import java.io.Serializable;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-
-/*
- * Reference RFC 6020.
- *
- * The "when" statement makes its parent data definition statement
- * conditional. The node defined by the parent data definition
- * statement is only valid when the condition specified by the "when"
- * statement is satisfied.
- *
- * The statement's argument is an XPath expression, which is used to formally
- * specify this condition. If the XPath expression conceptually evaluates to
- * "true" for a particular instance, then the node defined by the parent data
- * definition statement is valid; otherwise, it is not.
- *
- * The when's sub-statements
- *
- * +---------------+---------+-------------+------------------+
- * | substatement | section | cardinality |data model mapping|
- * +---------------+---------+-------------+------------------+
- * | description | 7.19.3 | 0..1 | -string |
- * | reference | 7.19.4 | 0..1 | -string |
- * +---------------+---------+-------------+------------------+
- */
-
-/**
- * Represents information defined in YANG when.
- */
-public class YangWhen extends DefaultLocationInfo
- implements YangDesc, YangReference, Parsable, Serializable {
-
- private static final long serialVersionUID = 806201646L;
-
- /**
- * When condition info.
- */
- private String condition;
-
- /**
- * Description string.
- */
- private String description;
-
- /**
- * Reference string.
- */
- private String reference;
-
- /**
- * Creates a YANG when restriction.
- */
- public YangWhen() {
- }
-
- /**
- * Returns the condition.
- *
- * @return the condition
- */
- public String getCondition() {
- return condition;
- }
-
- /**
- * Sets the condition.
- *
- * @param condition the condition to set
- */
- public void setCondition(String condition) {
- this.condition = condition;
- }
-
- /**
- * Returns the description.
- *
- * @return the description
- */
- @Override
- public String getDescription() {
- return description;
- }
-
- /**
- * Sets the description.
- *
- * @param description set the description
- */
- @Override
- public void setDescription(String description) {
- this.description = description;
- }
-
- /**
- * Returns the textual reference.
- *
- * @return the reference
- */
- @Override
- public String getReference() {
- return reference;
- }
-
- /**
- * Sets the textual reference.
- *
- * @param reference the reference to set
- */
- @Override
- public void setReference(String reference) {
- this.reference = reference;
- }
-
- /**
- * Returns the type of the parsed data.
- *
- * @return returns WHEN_DATA
- */
- @Override
- public YangConstructType getYangConstructType() {
- return YangConstructType.WHEN_DATA;
- }
-
- /**
- * Validates the data on entering the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnEntry() throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
- }
-
- /**
- * Validates the data on exiting the corresponding parse tree node.
- *
- * @throws DataModelException a violation of data model rules
- */
- @Override
- public void validateDataOnExit() throws DataModelException {
- // TODO auto-generated method stub, to be implemented by parser
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangWhenHolder.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangWhenHolder.java
deleted file mode 100644
index 1c7df4d..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangWhenHolder.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-/**
- * Abstraction of when entity. It is used to abstract the data holders of when.
- */
-public interface YangWhenHolder {
-
- /**
- * Returns the when.
- *
- * @return the when
- */
- YangWhen getWhen();
-
- /**
- * Sets the when.
- *
- * @param when the when to set
- */
- void setWhen(YangWhen when);
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangXPathResolver.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangXPathResolver.java
deleted file mode 100644
index db94660..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/YangXPathResolver.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel;
-
-/**
- * Abstraction of an entity which can be resolved with x-path linker.
- */
-public interface YangXPathResolver {
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/exceptions/DataModelException.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/exceptions/DataModelException.java
deleted file mode 100644
index 5728b30..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/exceptions/DataModelException.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel.exceptions;
-
-/**
- * Represents base class for exceptions in data model operations.
- */
-public class DataModelException extends Exception {
-
- private static final long serialVersionUID = 201601270658L;
- private transient int lineNumber;
- private transient int charPositionInLine;
- private transient String fileName;
-
- /**
- * Creates a data model exception with message.
- *
- * @param message the detail of exception in string
- */
- public DataModelException(String message) {
- super(message);
- }
-
- /**
- * Creates exception from message and cause.
- *
- * @param message the detail of exception in string
- * @param cause underlying cause of the error
- */
- public DataModelException(final String message, final Throwable cause) {
- super(message, cause);
- }
-
- /**
- * Creates exception from cause.
- *
- * @param cause underlying cause of the error
- */
- public DataModelException(final Throwable cause) {
- super(cause);
- }
-
- /**
- * Returns line number of the exception.
- *
- * @return line number of the exception
- */
- public int getLineNumber() {
- return this.lineNumber;
- }
-
- /**
- * Returns position of the exception.
- *
- * @return position of the exception
- */
- public int getCharPositionInLine() {
- return this.charPositionInLine;
- }
-
- /**
- * Sets line number of YANG file.
- *
- * @param line line number of YANG file
- */
- public void setLine(int line) {
- this.lineNumber = line;
- }
-
- /**
- * Sets position of exception.
- *
- * @param charPosition position of exception
- */
- public void setCharPosition(int charPosition) {
- this.charPositionInLine = charPosition;
- }
-
- /**
- * Returns YANG file name of the exception.
- *
- * @return YANG file name of the exception
- */
- public String getFileName() {
- return this.fileName;
- }
-
- /**
- * Sets file name in datamodel exception.
- *
- * @param fileName YANG file name
- */
- public void setFileName(String fileName) {
- this.fileName = fileName;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/exceptions/ErrorMessages.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/exceptions/ErrorMessages.java
deleted file mode 100644
index 49ce457..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/exceptions/ErrorMessages.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel.exceptions;
-
-/**
- * Represents error messages thrown by data model exception.
- */
-public final class ErrorMessages {
-
- private ErrorMessages() {
- }
-
- private static final String IN = " in ";
- private static final String AT = " at ";
- private static final String AS = "as ";
- public static final String QUOTES = "\"";
- public static final String CASE = " case ";
- public static final String NOTIFICATION = " notificaiton ";
- public static final String RPC = " rpc ";
- public static final String INPUT = " input ";
- public static final String OUTPUT = " output ";
- public static final String CHOICE = " choice ";
- public static final String GROUPING = " grouping ";
- public static final String TYPEDEF = " typedef ";
- public static final String USES = " uses ";
- public static final String INVALID_CASE_HOLDER
- = "\"Internal Data Model Tree Error: Invalid/Missing \"" +
- " \"holder in case \"";
- public static final String TARGET_NODE_LEAF_INFO = "target node leaf/leaf-list";
- public static final String TARGET_NODE = "target node ";
- public static final String COLLISION_DETECTION = "YANG File Error: " +
- "Identifier collision detected in";
- public static final String FAILED_TO_ADD_CASE = "Failed to add child " +
- "nodes to case node of augment ";
-
- /**
- * Returns error message for datamodel exception for collision detection.
- *
- * @param msg message
- * @param name name of construct
- * @param line line number
- * @param position character position
- * @param fileName file name
- * @return error message for datamodel exception for collision detection
- */
- public static String getErrorMsg(String msg, String name, int line,
- int position, String fileName) {
- StringBuilder builder = new StringBuilder();
- builder.append(msg)
- .append(name)
- .append(IN)
- .append(line)
- .append(AT)
- .append(position)
- .append(IN)
- .append(fileName);
- return builder.toString();
- }
-
- /**
- * Returns error message for datamodel exception for collision detection.
- *
- * @param msg message
- * @param name name of construct
- * @param line line number
- * @param position character position
- * @param construct construct name
- * @param fileName file name
- * @return error message for datamodel exception for collision detection
- */
- public static String getErrorMsgCollision(String msg, String name, int line,
- int position, String construct,
- String fileName) {
- StringBuilder builder = new StringBuilder();
- builder.append(msg)
- .append(construct)
- .append(AS)
- .append(QUOTES)
- .append(name)
- .append(IN)
- .append(line)
- .append(AT)
- .append(position)
- .append(IN)
- .append(fileName)
- .append(QUOTES);
- return builder.toString();
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/exceptions/package-info.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/exceptions/package-info.java
deleted file mode 100644
index ec607f3..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/exceptions/package-info.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-/**
- * Custom data model exceptions.
- */
-package org.onosproject.yangutils.datamodel.exceptions;
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/JavaFileInfo.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/JavaFileInfo.java
deleted file mode 100644
index 8182d8e..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/JavaFileInfo.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.javadatamodel;
-
-import java.io.Serializable;
-
-/**
- * Represents cached java file handle, which supports the addition of member attributes and
- * methods.
- */
-public class JavaFileInfo
- implements Serializable {
-
- private static final long serialVersionUID = 806102633L;
-
- /**
- * Name of the module.
- */
- protected String javaName;
-
- /**
- * Java package of the mapped java class.
- */
- protected String pkg;
-
- /**
- * Java attribute name;
- */
- protected String javaAttributeName;
-
- /**
- * Returns the java name of the node.
- *
- * @return the java name of node
- */
- public String getJavaName() {
- return javaName;
- }
-
- /**
- * Sets the java name of the node.
- *
- * @param name the java name of node
- */
- public void setJavaName(String name) {
- javaName = name;
- }
-
- /**
- * Returns the mapped java package.
- *
- * @return the java package
- */
- public String getPackage() {
- return pkg;
- }
-
- /**
- * Sets the node's package.
- *
- * @param nodePackage node's package
- */
- public void setPackage(String nodePackage) {
- pkg = nodePackage;
- }
-
- /**
- * Retrieve Java attribute name.
- *
- * @return Java attribute name
- */
- public String getJavaAttributeName() {
- return javaAttributeName;
- }
-
- /**
- * Assign the Java attribute Name.
- *
- * @param javaAttributeName Java attribute name
- */
- public void setJavaAttributeName(String javaAttributeName) {
- this.javaAttributeName = javaAttributeName;
- }
-
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/JavaQualifiedTypeInfo.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/JavaQualifiedTypeInfo.java
deleted file mode 100644
index 863821c..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/JavaQualifiedTypeInfo.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.javadatamodel;
-
-import java.io.Serializable;
-
-/**
- * Represents the information about individual imports in the generated file.
- */
-public class JavaQualifiedTypeInfo
- implements Serializable {
-
- private static final long serialVersionUID = 806201634L;
-
- /**
- * Package location where the imported class/interface is defined.
- */
- protected String pkgInfo;
-
- /**
- * Class/interface being referenced.
- */
- protected String classInfo;
-
- /**
- * attribute name being used.
- */
- protected String javaAttributeName;
- /**
- * Returns the imported package info.
- *
- * @return the imported package info
- */
- public String getPkgInfo() {
- return pkgInfo;
- }
-
- /**
- * Sets the imported package info.
- *
- * @param pkgInfo the imported package info
- */
- public void setPkgInfo(String pkgInfo) {
- this.pkgInfo = pkgInfo;
- }
-
- /**
- * Returns the imported class/interface info.
- *
- * @return the imported class/interface info
- */
- public String getClassInfo() {
- return classInfo;
- }
-
- /**
- * Sets the imported class/interface info.
- *
- * @param classInfo the imported class/interface info
- */
- public void setClassInfo(String classInfo) {
- this.classInfo = classInfo;
- }
-
- /**
- * Retrieve Java attribute name.
- *
- * @return Java attribute name
- */
- public String getJavaAttributeName() {
- return javaAttributeName;
- }
-
- /**
- * Assign Java attribute name.
- *
- * @param javaAttributeName Java attribute name
- */
- public void setJavaAttributeName(String javaAttributeName) {
- this.javaAttributeName = javaAttributeName;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/JavaQualifiedTypeInfoContainer.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/JavaQualifiedTypeInfoContainer.java
deleted file mode 100644
index db85d1a..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/JavaQualifiedTypeInfoContainer.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2016 Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel.javadatamodel;
-
-/**
- * Maintain the java qualified access details for an attribute or a class.
- */
-public interface JavaQualifiedTypeInfoContainer {
-
- /**
- * Obtain the java qualified details.
- *
- * @return java qualified type details
- */
- JavaQualifiedTypeInfo getJavaQualifiedInfo();
-
- /**
- * Assign the qualified type info.
- *
- * @param typeInfo qualified type information
- */
- void setJavaQualifiedInfo(JavaQualifiedTypeInfo typeInfo);
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaAugment.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaAugment.java
deleted file mode 100644
index 110817f..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaAugment.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.javadatamodel;
-
-import org.onosproject.yangutils.datamodel.YangAugment;
-
-/**
- * Represents YANG java augment.
- */
-public class YangJavaAugment
- extends YangAugment {
-
- private static final long serialVersionUID = 208201601L;
-
- protected JavaFileInfo javaFileInfo;
-
- /**
- * Returns java file info.
- *
- * @return java file info
- */
- public JavaFileInfo getJavaFileInfo() {
- return javaFileInfo;
- }
-
- @Override
- public String getJavaPackage() {
- return getJavaFileInfo().getPackage();
- }
-
- @Override
- public String getJavaClassNameOrBuiltInType() {
- return getJavaFileInfo().getJavaName();
- }
-
- @Override
- public String getJavaAttributeName() {
- return getJavaFileInfo().getJavaAttributeName();
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaCase.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaCase.java
deleted file mode 100644
index dcb7a12..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaCase.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.javadatamodel;
-
-import org.onosproject.yangutils.datamodel.YangCase;
-import org.onosproject.yangutils.datamodel.YangNode;
-
-/**
- * Represents YANG java case.
- */
-public class YangJavaCase
- extends YangCase {
-
- private static final long serialVersionUID = 208201602L;
-
- protected JavaFileInfo javaFileInfo;
-
- /**
- * Returns java file info.
- *
- * @return java file info
- */
- public JavaFileInfo getJavaFileInfo() {
- return javaFileInfo;
- }
-
- @Override
- public String getJavaPackage() {
- return getJavaFileInfo().getPackage();
- }
-
- @Override
- public String getJavaClassNameOrBuiltInType() {
- return getJavaFileInfo().getJavaName();
- }
-
- @Override
- public String getJavaAttributeName() {
- YangNode parent = getParent();
- if (parent instanceof YangJavaChoice) {
- return ((YangJavaChoice) parent).getJavaFileInfo()
- .getJavaAttributeName();
- }
- throw new RuntimeException("Attribute name is not applicable ");
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaChoice.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaChoice.java
deleted file mode 100644
index 8cdef42..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaChoice.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.javadatamodel;
-
-import org.onosproject.yangutils.datamodel.YangChoice;
-
-/**
- * Represents YANG java choice.
- */
-public class YangJavaChoice
- extends YangChoice {
-
- private static final long serialVersionUID = 208201603L;
-
- protected JavaFileInfo javaFileInfo;
-
- /**
- * Returns java file info.
- *
- * @return java file info
- */
- public JavaFileInfo getJavaFileInfo() {
- return javaFileInfo;
- }
-
- @Override
- public String getJavaPackage() {
- return getJavaFileInfo().getPackage();
- }
-
- @Override
- public String getJavaClassNameOrBuiltInType() {
- return getJavaFileInfo().getJavaName();
- }
-
- @Override
- public String getJavaAttributeName() {
- return getJavaFileInfo().getJavaAttributeName();
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaContainer.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaContainer.java
deleted file mode 100644
index 584728d..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaContainer.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.javadatamodel;
-
-import org.onosproject.yangutils.datamodel.YangContainer;
-
-/**
- * Represents YANG java container.
- */
-public class YangJavaContainer
- extends YangContainer {
-
- private static final long serialVersionUID = 208201604L;
-
- protected JavaFileInfo javaFileInfo;
-
- /**
- * Returns java file info.
- *
- * @return java file info
- */
- public JavaFileInfo getJavaFileInfo() {
- return javaFileInfo;
- }
-
- @Override
- public String getJavaPackage() {
- return getJavaFileInfo().getPackage();
- }
-
- @Override
- public String getJavaClassNameOrBuiltInType() {
- return getJavaFileInfo().getJavaName();
- }
-
- @Override
- public String getJavaAttributeName() {
- return getJavaFileInfo().getJavaAttributeName();
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaEnumeration.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaEnumeration.java
deleted file mode 100644
index 29a2a33..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaEnumeration.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.javadatamodel;
-
-import org.onosproject.yangutils.datamodel.YangEnumeration;
-
-/**
- * Represents YANG java enumeration.
- */
-public class YangJavaEnumeration
- extends YangEnumeration {
-
- private static final long serialVersionUID = 208201605L;
-
- protected JavaFileInfo javaFileInfo;
-
- /**
- * Returns java file info.
- *
- * @return java file info
- */
- public JavaFileInfo getJavaFileInfo() {
- return javaFileInfo;
- }
-
- @Override
- public String getJavaPackage() {
- return getJavaFileInfo().getPackage();
- }
-
- @Override
- public String getJavaClassNameOrBuiltInType() {
- return getJavaFileInfo().getJavaName();
- }
-
- @Override
- public String getJavaAttributeName() {
- throw new RuntimeException("Attribute name is not applicable ");
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaGrouping.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaGrouping.java
deleted file mode 100644
index bf8eb13..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaGrouping.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.javadatamodel;
-
-import org.onosproject.yangutils.datamodel.YangGrouping;
-
-/**
- * Represents YANG java grouping.
- */
-public class YangJavaGrouping
- extends YangGrouping {
-
- private static final long serialVersionUID = 208201606L;
-
- protected JavaFileInfo javaFileInfo;
-
- /**
- * Returns java file info.
- *
- * @return java file info
- */
- public JavaFileInfo getJavaFileInfo() {
- return javaFileInfo;
- }
-
- @Override
- public String getJavaPackage() {
- return getJavaFileInfo().getPackage();
- }
-
- @Override
- public String getJavaClassNameOrBuiltInType() {
- return getJavaFileInfo().getJavaName();
- }
-
- @Override
- public String getJavaAttributeName() {
- throw new RuntimeException("Attribute name is not applicable ");
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaIdentity.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaIdentity.java
deleted file mode 100644
index 69974c1..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaIdentity.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.javadatamodel;
-
-import org.onosproject.yangutils.datamodel.YangIdentity;
-
-/**
- * Represents YANG java identity.
- */
-public class YangJavaIdentity
- extends YangIdentity {
-
- private static final long serialVersionUID = 208201616L;
-
- protected JavaFileInfo javaFileInfo;
-
- /**
- * Returns java file info.
- *
- * @return java file info
- */
- public JavaFileInfo getJavaFileInfo() {
- return javaFileInfo;
- }
-
- @Override
- public String getJavaPackage() {
- return getJavaFileInfo().getPackage();
- }
-
- @Override
- public String getJavaClassNameOrBuiltInType() {
- return getJavaFileInfo().getJavaName();
- }
-
- @Override
- public String getJavaAttributeName() {
- return getJavaFileInfo().getJavaAttributeName();
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaInput.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaInput.java
deleted file mode 100644
index bd3237a..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaInput.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.javadatamodel;
-
-import org.onosproject.yangutils.datamodel.YangInput;
-
-/**
- * Represents YANG java input.
- */
-public class YangJavaInput
- extends YangInput {
-
- private static final long serialVersionUID = 208201607L;
-
- protected JavaFileInfo javaFileInfo;
-
- /**
- * Returns java file info.
- *
- * @return java file info
- */
- public JavaFileInfo getJavaFileInfo() {
- return javaFileInfo;
- }
-
- @Override
- public String getJavaPackage() {
- return getJavaFileInfo().getPackage();
- }
-
- @Override
- public String getJavaClassNameOrBuiltInType() {
- return getJavaFileInfo().getJavaName();
- }
-
- @Override
- public String getJavaAttributeName() {
- return getJavaFileInfo().getJavaAttributeName();
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaLeaf.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaLeaf.java
deleted file mode 100644
index f9b02da..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaLeaf.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.javadatamodel;
-
-import org.onosproject.yangutils.datamodel.YangLeaf;
-
-/**
- * Represent YANG java leaf.
- */
-public class YangJavaLeaf
- extends YangLeaf
- implements JavaQualifiedTypeInfoContainer {
-
- private static final long serialVersionUID = 208201617L;
-
- protected JavaQualifiedTypeInfo javaQualifiedTypeInfo;
-
- /**
- * Sets java qualified type info.
- *
- * @param javaQualifiedTypeInfo java qualified type info
- */
- public void setJavaQualifiedInfo(JavaQualifiedTypeInfo javaQualifiedTypeInfo) {
- this.javaQualifiedTypeInfo = javaQualifiedTypeInfo;
- }
-
- /**
- * Returns java qualified type info.
- *
- * @return java qualified type info
- */
- public JavaQualifiedTypeInfo getJavaQualifiedInfo() {
- return javaQualifiedTypeInfo;
- }
-
- @Override
- public String getJavaPackage() {
- return getJavaQualifiedInfo().getPkgInfo();
- }
-
- @Override
- public String getJavaClassNameOrBuiltInType() {
- return getJavaQualifiedInfo().getClassInfo();
- }
-
- @Override
- public String getJavaAttributeName() {
- return getJavaQualifiedInfo().getJavaAttributeName();
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaLeafList.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaLeafList.java
deleted file mode 100644
index 5ce7cec..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaLeafList.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.javadatamodel;
-
-import org.onosproject.yangutils.datamodel.YangLeafList;
-
-/**
- * Represents YANG java leaf list.
- */
-public class YangJavaLeafList
- extends YangLeafList
- implements JavaQualifiedTypeInfoContainer {
-
- private static final long serialVersionUID = 208201618L;
-
- protected JavaQualifiedTypeInfo javaQualifiedTypeInfo;
-
- /**
- * Returns java qualified type info.
- *
- * @return java qualified type info
- */
- public JavaQualifiedTypeInfo getJavaQualifiedInfo() {
- return javaQualifiedTypeInfo;
- }
-
- /**
- * Sets java qualified type info.
- *
- * @param javaQualifiedTypeInfo java qualified type info
- */
- public void setJavaQualifiedInfo(JavaQualifiedTypeInfo javaQualifiedTypeInfo) {
- this.javaQualifiedTypeInfo = javaQualifiedTypeInfo;
- }
-
- @Override
- public String getJavaPackage() {
- return getJavaQualifiedInfo().getPkgInfo();
- }
-
- @Override
- public String getJavaClassNameOrBuiltInType() {
- return getJavaQualifiedInfo().getClassInfo();
- }
-
- @Override
- public String getJavaAttributeName() {
- return getJavaQualifiedInfo().getJavaAttributeName();
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaList.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaList.java
deleted file mode 100644
index 00a4232..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaList.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.javadatamodel;
-
-import org.onosproject.yangutils.datamodel.YangList;
-
-/**
- * Represent YANG java list.
- */
-public class YangJavaList
- extends YangList {
-
- private static final long serialVersionUID = 208201608L;
-
- /**
- * Contains the information of the java file being generated.
- */
- protected JavaFileInfo javaFileInfo;
-
- /**
- * Returns java file info.
- *
- * @return java file info
- */
- public JavaFileInfo getJavaFileInfo() {
- return javaFileInfo;
- }
-
- @Override
- public String getJavaPackage() {
- return getJavaFileInfo().getPackage();
- }
-
- @Override
- public String getJavaClassNameOrBuiltInType() {
- return getJavaFileInfo().getJavaName();
- }
-
- @Override
- public String getJavaAttributeName() {
- return getJavaFileInfo().getJavaAttributeName();
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaModule.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaModule.java
deleted file mode 100644
index 9a05ff1..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaModule.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.javadatamodel;
-
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-
-import java.util.List;
-
-import static java.util.Collections.unmodifiableList;
-
-/**
- * Represents YANG java module.
- */
-public class YangJavaModule
- extends YangModule {
-
- private static final long serialVersionUID = 208201609L;
-
- protected JavaFileInfo javaFileInfo;
- protected List<YangNode> notificationNodes;
-
- /**
- * Returns java file info.
- *
- * @return java file info
- */
- public JavaFileInfo getJavaFileInfo() {
- return javaFileInfo;
- }
-
- @Override
- public String getJavaPackage() {
- return getJavaFileInfo().getPackage();
- }
-
- @Override
- public String getJavaClassNameOrBuiltInType() {
- return getJavaFileInfo().getJavaName();
- }
-
- @Override
- public String getJavaAttributeName() {
- throw new RuntimeException("Attribute name is not applicable ");
- }
-
- @Override
- public List<YangNode> getNotificationNodes() {
- return unmodifiableList(notificationNodes);
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaNotification.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaNotification.java
deleted file mode 100644
index c926066..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaNotification.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.javadatamodel;
-
-import org.onosproject.yangutils.datamodel.YangNotification;
-
-/**
- * Represents YANG java notification.
- */
-public class YangJavaNotification
- extends YangNotification {
-
- private static final long serialVersionUID = 208201610L;
-
- protected JavaFileInfo javaFileInfo;
-
- /**
- * Returns java file info.
- *
- * @return java file info
- */
- public JavaFileInfo getJavaFileInfo() {
- return javaFileInfo;
- }
-
- @Override
- public String getJavaPackage() {
- return getJavaFileInfo().getPackage();
- }
-
- @Override
- public String getJavaClassNameOrBuiltInType() {
- return getJavaFileInfo().getJavaName();
- }
-
- @Override
- public String getJavaAttributeName() {
- return getJavaFileInfo().getJavaAttributeName();
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaOutput.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaOutput.java
deleted file mode 100644
index 8d1e906..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaOutput.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.javadatamodel;
-
-import org.onosproject.yangutils.datamodel.YangOutput;
-
-/**
- * Represents YANG java output.
- */
-public class YangJavaOutput
- extends YangOutput {
-
- private static final long serialVersionUID = 208201611L;
-
- protected JavaFileInfo javaFileInfo;
-
- /**
- * Returns java file info.
- *
- * @return java file info
- */
- public JavaFileInfo getJavaFileInfo() {
- return javaFileInfo;
- }
-
- @Override
- public String getJavaPackage() {
- return getJavaFileInfo().getPackage();
- }
-
- @Override
- public String getJavaClassNameOrBuiltInType() {
- return getJavaFileInfo().getJavaName();
- }
-
- @Override
- public String getJavaAttributeName() {
- return getJavaFileInfo().getJavaAttributeName();
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaRpc.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaRpc.java
deleted file mode 100644
index 0cd87cc..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaRpc.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.javadatamodel;
-
-import org.onosproject.yangutils.datamodel.YangRpc;
-
-/**
- * Represents YANG java rpc.
- */
-public class YangJavaRpc
- extends YangRpc {
-
- private static final long serialVersionUID = 208201612L;
-
- protected JavaFileInfo javaFileInfo;
-
- /**
- * Returns java file info.
- *
- * @return java file info
- */
- public JavaFileInfo getJavaFileInfo() {
- return javaFileInfo;
- }
-
- @Override
- public String getJavaPackage() {
- return getJavaFileInfo().getPackage();
- }
-
- @Override
- public String getJavaClassNameOrBuiltInType() {
- return getJavaFileInfo().getJavaName();
- }
-
- @Override
- public String getJavaAttributeName() {
- return getJavaFileInfo().getJavaAttributeName();
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaSubModule.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaSubModule.java
deleted file mode 100644
index 03a56f7..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaSubModule.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.javadatamodel;
-
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangSubModule;
-
-import java.util.List;
-
-import static java.util.Collections.unmodifiableList;
-
-/**
- * Represents YANG java submodule.
- */
-public class YangJavaSubModule
- extends YangSubModule {
-
- private static final long serialVersionUID = 208201612L;
-
- protected JavaFileInfo javaFileInfo;
- protected List<YangNode> notificationNodes;
-
- /**
- * Returns java file info.
- *
- * @return java file info
- */
- public JavaFileInfo getJavaFileInfo() {
- return javaFileInfo;
- }
-
- @Override
- public String getJavaPackage() {
- return getJavaFileInfo().getPackage();
- }
-
- @Override
- public String getJavaClassNameOrBuiltInType() {
- return getJavaFileInfo().getJavaName();
- }
-
- @Override
- public String getJavaAttributeName() {
- throw new RuntimeException("Attribute name is not applicable ");
- }
-
- @Override
- public List<YangNode> getNotificationNodes() {
- return unmodifiableList(notificationNodes);
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaType.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaType.java
deleted file mode 100644
index bbd2933..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaType.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.javadatamodel;
-
-import org.onosproject.yangutils.datamodel.YangType;
-
-/**
- * Represents YANG java type.
- */
-public class YangJavaType extends YangType implements JavaQualifiedTypeInfoContainer {
-
- private static final long serialVersionUID = 19082016001L;
- protected JavaQualifiedTypeInfo javaQualifiedTypeInfo;
-
- /**
- * Returns java qualified type info.
- *
- * @return java qualified type info
- */
-
- @Override
- public JavaQualifiedTypeInfo getJavaQualifiedInfo() {
- return javaQualifiedTypeInfo;
- }
-
- @Override
- public void setJavaQualifiedInfo(JavaQualifiedTypeInfo typeInfo) {
- this.javaQualifiedTypeInfo = typeInfo;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaTypeDef.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaTypeDef.java
deleted file mode 100644
index 14cff15..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaTypeDef.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.javadatamodel;
-
-import org.onosproject.yangutils.datamodel.YangTypeDef;
-
-/**
- * Represents YANG java typedef.
- */
-public class YangJavaTypeDef
- extends YangTypeDef {
-
- private static final long serialVersionUID = 208201613L;
-
- protected JavaFileInfo javaFileInfo;
-
- /**
- * Returns java file info.
- *
- * @return java file info
- */
- public JavaFileInfo getJavaFileInfo() {
- return javaFileInfo;
- }
-
- @Override
- public String getJavaPackage() {
- return getJavaFileInfo().getPackage();
- }
-
- @Override
- public String getJavaClassNameOrBuiltInType() {
- return getJavaFileInfo().getJavaName();
- }
-
- @Override
- public String getJavaAttributeName() {
- throw new RuntimeException("Attribute name is not applicable ");
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaUnion.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaUnion.java
deleted file mode 100644
index 5345e9c..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaUnion.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.javadatamodel;
-
-import org.onosproject.yangutils.datamodel.YangUnion;
-
-/**
- * Represent YANG java union.
- */
-public class YangJavaUnion
- extends YangUnion {
-
- private static final long serialVersionUID = 208201614L;
- protected JavaFileInfo javaFileInfo;
-
- /**
- * Returns java file info.
- *
- * @return java file info
- */
- public JavaFileInfo getJavaFileInfo() {
- return javaFileInfo;
- }
-
- @Override
- public String getJavaPackage() {
- return getJavaFileInfo().getPackage();
- }
-
- @Override
- public String getJavaClassNameOrBuiltInType() {
- return getJavaFileInfo().getJavaName();
- }
-
- @Override
- public String getJavaAttributeName() {
- throw new RuntimeException("Attribute name is not applicable ");
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaUses.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaUses.java
deleted file mode 100644
index d136eec..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaUses.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.javadatamodel;
-
-import org.onosproject.yangutils.datamodel.YangUses;
-
-/**
- * Represent YANG java uses.
- */
-public class YangJavaUses
- extends YangUses {
-
- private static final long serialVersionUID = 208201615L;
-
- protected JavaFileInfo javaFileInfo;
-
- /**
- * Returns java file info.
- *
- * @return java file info
- */
- public JavaFileInfo getJavaFileInfo() {
- return javaFileInfo;
- }
-
- @Override
- public String getJavaPackage() {
- return getJavaFileInfo().getPackage();
- }
-
- @Override
- public String getJavaClassNameOrBuiltInType() {
- return getJavaFileInfo().getJavaName();
- }
-
- @Override
- public String getJavaAttributeName() {
- throw new RuntimeException("Attribute name is not applicable ");
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/package-info.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/package-info.java
deleted file mode 100644
index 273febd..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-/**
- * Representation of YANG java data model.
- */
-package org.onosproject.yangutils.datamodel.javadatamodel;
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/package-info.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/package-info.java
deleted file mode 100644
index d8e8901..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-/**
- * Maintains application's schema information.
- */
-package org.onosproject.yangutils.datamodel;
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/DataModelUtils.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/DataModelUtils.java
deleted file mode 100644
index 67e05b7..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/DataModelUtils.java
+++ /dev/null
@@ -1,845 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.utils;
-
-import org.onosproject.yangutils.datamodel.CollisionDetector;
-import org.onosproject.yangutils.datamodel.ResolvableType;
-import org.onosproject.yangutils.datamodel.YangAtomicPath;
-import org.onosproject.yangutils.datamodel.YangAugment;
-import org.onosproject.yangutils.datamodel.YangBase;
-import org.onosproject.yangutils.datamodel.YangCompilerAnnotation;
-import org.onosproject.yangutils.datamodel.YangDerivedInfo;
-import org.onosproject.yangutils.datamodel.YangEntityToResolveInfoImpl;
-import org.onosproject.yangutils.datamodel.YangEnumeration;
-import org.onosproject.yangutils.datamodel.YangIdentityRef;
-import org.onosproject.yangutils.datamodel.YangIfFeature;
-import org.onosproject.yangutils.datamodel.YangImport;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangLeafList;
-import org.onosproject.yangutils.datamodel.YangLeafRef;
-import org.onosproject.yangutils.datamodel.YangLeavesHolder;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangReferenceResolver;
-import org.onosproject.yangutils.datamodel.YangResolutionInfo;
-import org.onosproject.yangutils.datamodel.YangRpc;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.YangUnion;
-import org.onosproject.yangutils.datamodel.YangUses;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.ObjectInputStream;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
-
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.EMPTY;
-
-/**
- * Represents utilities for data model tree.
- */
-public final class DataModelUtils {
- public static final String TRUE = "true";
- public static final String FALSE = "false";
- private static final String SLASH = File.separator;
-
- /**
- * Creates a new data model tree utility.
- */
- private DataModelUtils() {
- }
-
- /**
- * Detects the colliding identifier name in a given YANG node and its child.
- *
- * @param identifierName name for which collision detection is to be checked
- * @param dataType type of YANG node asking for detecting collision
- * @param node instance of calling node
- * @throws DataModelException a violation of data model rules
- */
- public static void detectCollidingChildUtil(String identifierName, YangConstructType dataType, YangNode node)
- throws DataModelException {
- if (dataType == YangConstructType.USES_DATA || dataType == YangConstructType.GROUPING_DATA) {
- detectCollidingForUsesGrouping(identifierName, dataType, node);
- } else {
- if (node instanceof YangLeavesHolder) {
- YangLeavesHolder leavesHolder = (YangLeavesHolder) node;
- detectCollidingLeaf(leavesHolder.getListOfLeaf(), identifierName);
- detectCollidingLeafList(leavesHolder.getListOfLeafList(), identifierName);
- }
- node = node.getChild();
- while (node != null) {
- Parsable parsable = (Parsable) node;
- if (node instanceof CollisionDetector
- && parsable.getYangConstructType() != YangConstructType.USES_DATA
- && parsable.getYangConstructType() != YangConstructType.GROUPING_DATA) {
- ((CollisionDetector) node).detectSelfCollision(identifierName, dataType);
- }
- node = node.getNextSibling();
- }
- }
- }
-
- /**
- * Detects colliding of uses and grouping only with uses and grouping respectively.
- *
- * @param identifierName name for which collision detection is to be checked
- * @param dataType type of YANG node asking for detecting collision
- * @param node node instance of calling node
- * @throws DataModelException a violation of data model rules
- */
- private static void detectCollidingForUsesGrouping(String identifierName, YangConstructType dataType, YangNode node)
- throws DataModelException {
-
- node = node.getChild();
- while (node != null) {
- Parsable parsable = (Parsable) node;
- if (node instanceof CollisionDetector
- && parsable.getYangConstructType() == dataType) {
- ((CollisionDetector) node).detectSelfCollision(identifierName, dataType);
- }
- node = node.getNextSibling();
- }
- }
-
- /**
- * Detects the colliding identifier name in a given leaf node.
- *
- * @param listOfLeaf List of leaves to detect collision
- * @param identifierName name for which collision detection is to be checked
- * @throws DataModelException a violation of data model rules
- */
- private static void detectCollidingLeaf(List<YangLeaf> listOfLeaf, String identifierName)
- throws DataModelException {
-
- if (listOfLeaf == null) {
- return;
- }
- for (YangLeaf leaf : listOfLeaf) {
- if (leaf.getName().equals(identifierName)) {
- throw new DataModelException("YANG file error: Duplicate input identifier detected, same as leaf \"" +
- leaf.getName() + " in " +
- leaf.getLineNumber() + " at " +
- leaf.getCharPosition() +
- " in " + leaf.getFileName() + "\"");
- }
- }
- }
-
- /**
- * Detects the colliding identifier name in a given leaf-list node.
- *
- * @param listOfLeafList list of leaf-lists to detect collision
- * @param identifierName name for which collision detection is to be checked
- * @throws DataModelException a violation of data model rules
- */
- private static void detectCollidingLeafList(List<YangLeafList> listOfLeafList, String identifierName)
- throws DataModelException {
-
- if (listOfLeafList == null) {
- return;
- }
- for (YangLeafList leafList : listOfLeafList) {
- if (leafList.getName().equals(identifierName)) {
- throw new DataModelException("YANG file error: Duplicate input identifier detected, same as leaf " +
- "list \"" + leafList.getName() + " in " +
- leafList.getLineNumber() + " at " +
- leafList.getCharPosition() +
- " in " + leafList.getFileName() + "\"");
- }
- }
- }
-
- /**
- * Add a resolution information.
- *
- * @param resolutionInfo information about the YANG construct which has to be resolved
- * @throws DataModelException a violation of data model rules
- */
- public static void addResolutionInfo(YangResolutionInfo resolutionInfo)
- throws DataModelException {
-
- /* get the module node to add maintain the list of nested reference */
- YangNode curNode = resolutionInfo.getEntityToResolveInfo()
- .getHolderOfEntityToResolve();
- while (!(curNode instanceof YangReferenceResolver)) {
- curNode = curNode.getParent();
- if (curNode == null) {
- throw new DataModelException("Internal datamodel error: Datamodel tree is not correct");
- }
- }
- YangReferenceResolver resolutionNode = (YangReferenceResolver) curNode;
-
- if (resolutionInfo.getEntityToResolveInfo()
- .getEntityToResolve() instanceof YangType) {
- resolutionNode.addToResolutionList(resolutionInfo,
- ResolvableType.YANG_DERIVED_DATA_TYPE);
- } else if (resolutionInfo.getEntityToResolveInfo()
- .getEntityToResolve() instanceof YangUses) {
- resolutionNode.addToResolutionList(resolutionInfo,
- ResolvableType.YANG_USES);
- } else if (resolutionInfo.getEntityToResolveInfo()
- .getEntityToResolve() instanceof YangAugment) {
- resolutionNode.addToResolutionList(resolutionInfo,
- ResolvableType.YANG_AUGMENT);
- } else if (resolutionInfo.getEntityToResolveInfo()
- .getEntityToResolve() instanceof YangIfFeature) {
- resolutionNode.addToResolutionList(resolutionInfo,
- ResolvableType.YANG_IF_FEATURE);
- } else if (resolutionInfo.getEntityToResolveInfo()
- .getEntityToResolve() instanceof YangLeafRef) {
- resolutionNode.addToResolutionList(resolutionInfo,
- ResolvableType.YANG_LEAFREF);
- } else if (resolutionInfo.getEntityToResolveInfo().getEntityToResolve() instanceof YangBase) {
- resolutionNode.addToResolutionList(resolutionInfo, ResolvableType.YANG_BASE);
- } else if (resolutionInfo.getEntityToResolveInfo().getEntityToResolve() instanceof YangIdentityRef) {
- resolutionNode.addToResolutionList(resolutionInfo, ResolvableType.YANG_IDENTITYREF);
- } else if (resolutionInfo.getEntityToResolveInfo()
- .getEntityToResolve() instanceof YangCompilerAnnotation) {
- resolutionNode.addToResolutionList(resolutionInfo,
- ResolvableType.YANG_COMPILER_ANNOTATION);
- }
- }
-
- /**
- * Resolve linking for a resolution list.
- *
- * @param resolutionList resolution list for which linking to be done
- * @param dataModelRootNode module/sub-module node
- * @throws DataModelException a violation of data model rules
- */
- public static void resolveLinkingForResolutionList(List<YangResolutionInfo> resolutionList,
- YangReferenceResolver dataModelRootNode)
- throws DataModelException {
-
- for (YangResolutionInfo resolutionInfo : resolutionList) {
- resolutionInfo.resolveLinkingForResolutionInfo(dataModelRootNode);
- }
- }
-
- /**
- * Links type/uses referring to typedef/uses of inter YANG file.
- *
- * @param resolutionList resolution list for which linking to be done
- * @param dataModelRootNode module/sub-module node
- * @throws DataModelException a violation of data model rules
- */
- public static void linkInterFileReferences(List<YangResolutionInfo> resolutionList,
- YangReferenceResolver dataModelRootNode)
- throws DataModelException {
- /*
- * Run through the resolution list, find type/uses referring to inter
- * file typedef/grouping, ask for linking.
- */
- if (resolutionList != null) {
- for (YangResolutionInfo resolutionInfo : resolutionList) {
- resolutionInfo.linkInterFile(dataModelRootNode);
- }
- }
- }
-
- /**
- * Checks if there is any rpc defined in the module or sub-module.
- *
- * @param rootNode root node of the data model
- * @return status of rpc's existence
- */
- public static boolean isRpcChildNodePresent(YangNode rootNode) {
- YangNode childNode = rootNode.getChild();
- while (childNode != null) {
- if (childNode instanceof YangRpc) {
- return true;
- }
- childNode = childNode.getNextSibling();
- }
- return false;
- }
-
- /**
- * Returns referred node in a given set.
- *
- * @param yangNodeSet YANG node set
- * @param refNodeName name of the node which is referred
- * @return referred node's reference
- */
- public static YangNode findReferredNode(Set<YangNode> yangNodeSet, String refNodeName) {
- /*
- * Run through the YANG files to see which YANG file matches the
- * referred node name.
- */
- for (YangNode yangNode : yangNodeSet) {
- if (yangNode.getName().equals(refNodeName)) {
- return yangNode;
- }
- }
- return null;
- }
-
- /**
- * Returns the contained data model parent node.
- *
- * @param currentNode current node which parent contained node is required
- * @return parent node in which the current node is an attribute
- */
- public static YangNode getParentNodeInGenCode(YangNode currentNode) {
-
- /*
- * TODO: recursive parent lookup to support choice/augment/uses. TODO:
- * need to check if this needs to be updated for
- * choice/case/augment/grouping
- */
- return currentNode.getParent();
- }
-
- /**
- * Returns de-serializes YANG data-model nodes.
- *
- * @param serializedFileInfo serialized File Info
- * @return de-serializes YANG data-model nodes
- * @throws IOException when fails do IO operations
- */
- public static Set<YangNode> deSerializeDataModel(String serializedFileInfo)
- throws IOException {
-
- Set<YangNode> nodes;
- try {
- FileInputStream fileInputStream = new FileInputStream(serializedFileInfo);
- ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
- nodes = (Set<YangNode>) objectInputStream.readObject();
- objectInputStream.close();
- fileInputStream.close();
- } catch (IOException | ClassNotFoundException e) {
- throw new IOException(serializedFileInfo + " not found.");
- }
- return nodes;
- }
-
- /**
- * Adds the list of leaf present under a node to resolution list, after
- * cloning. Under the cloned node, with cloned leaf, attributes are set
- * and added to resolution list.
- *
- * @param clonedNode holder node
- * @param yangUses YANG uses
- * @throws CloneNotSupportedException clone not supported error
- * @throws DataModelException data model error
- */
- public static void cloneListOfLeaf(
- YangLeavesHolder clonedNode, YangUses yangUses)
- throws CloneNotSupportedException, DataModelException {
-
- List<YangLeaf> leaves = clonedNode.getListOfLeaf();
- if (nonEmpty(leaves)) {
- List<YangLeaf> clonedLeaves = new LinkedList<>();
- for (YangLeaf leaf : leaves) {
- YangLeaf clonedLeaf = leaf.clone();
- clonedLeaf.setReferredLeaf(leaf);
- addUnresolvedType(yangUses, clonedLeaf, (YangNode) clonedNode);
- clonedLeaf.setContainedIn(clonedNode);
- clonedLeaves.add(clonedLeaf);
- }
- clonedNode.setListOfLeaf(clonedLeaves);
- }
- }
-
- /**
- * Adds all the unresolved type under leaf/leaf-list to the resolution
- * list, after cloning. This makes the resolution to happen after cloning
- * of the grouping. Adds resolution with cloned node holder under which
- * cloned type is present.
- *
- * @param yangUses YANG uses
- * @param clonedObj cloned type object
- * @param clonedNode holder node
- * @throws DataModelException data model error
- */
- public static void addUnresolvedType(
- YangUses yangUses, Object clonedObj,
- YangNode clonedNode) throws DataModelException {
-
- List<YangEntityToResolveInfoImpl> infoList;
- if (yangUses != null && yangUses.getCurrentGroupingDepth() == 0) {
- infoList = getTypesToBeResolved(clonedObj, clonedNode, yangUses);
- if (nonEmpty(infoList)) {
- yangUses.addEntityToResolve(infoList);
- }
- }
- }
-
- /**
- * Returns true if collection object is non-null and non-empty; false
- * otherwise.
- *
- * @param c collection object
- * @return true if object is non-null and non-empty; false otherwise
- */
- public static boolean nonEmpty(Collection<?> c) {
- return c != null && !c.isEmpty();
- }
-
- /**
- * Adds the list of leaf-list present under a node to resolution list,
- * after cloning. Under the cloned node, with cloned leaf-list,
- * attributes are set and added to resolution list.
- *
- * @param clonedNode cloned holder
- * @param yangUses YANG uses
- * @throws CloneNotSupportedException clone not supported error
- * @throws DataModelException data model error
- */
- public static void cloneListOfLeafList(
- YangLeavesHolder clonedNode, YangUses yangUses)
- throws CloneNotSupportedException, DataModelException {
-
- List<YangLeafList> listOfLeafList = clonedNode.getListOfLeafList();
- if (nonEmpty(listOfLeafList)) {
- List<YangLeafList> clonedList = new LinkedList<>();
- for (YangLeafList leafList : listOfLeafList) {
- YangLeafList clonedLeafList = leafList.clone();
- clonedLeafList.setReferredSchemaLeafList(leafList);
- addUnresolvedType(yangUses, clonedLeafList,
- (YangNode) clonedNode);
- clonedLeafList.setContainedIn(clonedNode);
- clonedList.add(clonedLeafList);
- }
- clonedNode.setListOfLeafList(clonedList);
- }
- }
-
- /**
- * Returns types that has to be resolved for a single leaf/leaf-list.
- * Identifies the object to be leaf/leaf-list and assigns respective
- * parameters to resolve the types under leaf/leaf-list.
- *
- * @param clonedObj leaf/leaf-list object
- * @param holderNode holder node
- * @param yangUses YANG uses
- * @return list of resolvable entities in a leaf/leaf-list
- * @throws DataModelException data model error
- */
- private static List<YangEntityToResolveInfoImpl> getTypesToBeResolved(
- Object clonedObj, YangNode holderNode,
- YangUses yangUses) throws DataModelException {
-
- YangType type;
- if (clonedObj instanceof YangLeaf) {
- YangLeaf clonedLeaf = (YangLeaf) clonedObj;
- type = clonedLeaf.getDataType();
- return getUnresolvedTypeList(type.getDataType(), type, holderNode,
- yangUses, true);
- }
- YangLeafList clonedLeafList = (YangLeafList) clonedObj;
- type = clonedLeafList.getDataType();
- return getUnresolvedTypeList(type.getDataType(), type, holderNode,
- yangUses, false);
- }
-
- /**
- * Returns list of resolvable entities from the type of leaf/leaf-list.
- * If the type is leaf-ref, derived or union with type resolution
- * required, it has to be resolved from the place where it is cloned. So,
- * the resolution list added with these entities. When a type require no
- * resolution then null is returned, so it will never be added to
- * resolution list.
- *
- * @param dataTypes data type of type
- * @param type type of leaf/leaf-list
- * @param holder holder node of type
- * @param yangUses YANG uses
- * @param isLeaf leaf or leaf-list
- * @return list of resolvable entities for a leaf/leaf-list.
- * @throws DataModelException data model error
- */
- private static List<YangEntityToResolveInfoImpl> getUnresolvedTypeList(
- YangDataTypes dataTypes, YangType type, YangNode holder,
- YangUses yangUses, boolean isLeaf) throws DataModelException {
-
- List<YangEntityToResolveInfoImpl> infoList = new ArrayList<>();
- YangEntityToResolveInfoImpl entity = null;
- List<YangEntityToResolveInfoImpl> entityList = null;
-
- switch (dataTypes) {
- case LEAFREF:
- entity = getLeafRefResolvableEntity(type, yangUses, holder);
- break;
-
- case DERIVED:
- entity = getDerivedResolvableEntity(type, holder, isLeaf);
- break;
-
- case UNION:
- entityList = getUnionResolvableEntity(type, isLeaf);
- break;
-
- default:
- return null;
- }
- infoList.add(entity);
- if (nonEmpty(entityList)) {
- infoList.addAll(entityList);
- }
- return infoList;
- }
-
- /**
- * Returns resolvable entity when the type is leaf-ref. It changes the
- * prefixes from grouping to uses, then changes the parent node to the
- * cloned node, sets needed information to entity such as line number,
- * position number and holder.
- *
- * @param type YANG type of leaf-ref
- * @param yangUses YANG uses
- * @param holder cloned holder
- * @return entity to resolve for leaf-ref
- * @throws DataModelException data model error
- */
- private static YangEntityToResolveInfoImpl getLeafRefResolvableEntity(
- YangType type, YangUses yangUses, YangNode holder)
- throws DataModelException {
-
- YangEntityToResolveInfoImpl<YangLeafRef> leafRefInfo =
- new YangEntityToResolveInfoImpl<>();
- YangLeafRef leafRef = (YangLeafRef) type.getDataTypeExtendedInfo();
-
- // Conversion of prefixes in absolute path while cloning them.
- convertThePrefixesDuringChange(leafRef, yangUses);
- leafRef.setParentNode(holder);
- leafRefInfo.setEntityToResolve(leafRef);
-
- return setInformationInEntity(
- leafRefInfo, holder, leafRef.getCharPosition(),
- leafRef.getLineNumber());
- }
-
- /**
- * Returns resolvable entity when the type is derived. It sets needed
- * information to entity such as line number,position number and holder.
- * Returns null when identity is for inter grouping.
- *
- * @param type derived YANG type
- * @param holder holder node
- * @param isLeaf leaf or leaf-list
- * @return entity to resolve for derived type
- */
- private static YangEntityToResolveInfoImpl getDerivedResolvableEntity(
- YangType<?> type, YangNode holder, boolean isLeaf) {
-
- YangEntityToResolveInfoImpl<YangType<?>> derivedInfo =
- new YangEntityToResolveInfoImpl<>();
- if (type.isTypeForInterFileGroupingResolution()) {
- return null;
- }
- if (!isLeaf && type.isTypeNotResolvedTillRootNode()) {
- return null;
- }
-
- derivedInfo.setEntityToResolve(type);
- return setInformationInEntity(
- derivedInfo, holder, type.getCharPosition(),
- type.getLineNumber());
- }
-
- /**
- * Sets the information needed for adding the entity into resolution
- * list, such as line number, position number and cloned holder node.
- *
- * @param entity resolvable entity
- * @param holder cloned holder node
- * @param charPos character position
- * @param lineNum line number
- * @return resolvable entity after setting info
- */
- private static YangEntityToResolveInfoImpl<?> setInformationInEntity(
- YangEntityToResolveInfoImpl<?> entity, YangNode holder,
- int charPos, int lineNum) {
-
- entity.setHolderOfEntityToResolve(holder);
- entity.setCharPosition(charPos);
- entity.setLineNumber(lineNum);
- return entity;
- }
-
- /**
- * Returns resolvable entity under union. When types under union have
- * identity-ref, derived and union, the function call is done recursively
- * to get resolvable entity and adds it to list.
- *
- * @param type union YANG type
- * @param isLeaf leaf or leaf-list
- * @return resolvable entity list after setting info
- * @throws DataModelException data model error
- */
- private static List<YangEntityToResolveInfoImpl> getUnionResolvableEntity(
- YangType type, boolean isLeaf) throws DataModelException {
-
- YangUnion union = (YangUnion) type.getDataTypeExtendedInfo();
- List<YangType<?>> typeList = union.getTypeList();
- List<YangEntityToResolveInfoImpl> unionList = new ArrayList<>();
- List<YangEntityToResolveInfoImpl> entity;
-
- for (YangType unionType : typeList) {
- entity = getUnresolvedTypeList(unionType.getDataType(),
- unionType, union, null, isLeaf);
- if (nonEmpty(entity)) {
- unionList.addAll(entity);
- }
- }
- return unionList;
- }
-
- /**
- * Converts the prefixes in all the nodes of the leafref with respect to the uses node.
- *
- * @param leafrefForCloning leafref that is to be cloned
- * @param yangUses instance of YANG uses where cloning is done
- * @throws DataModelException data model error
- */
- private static void convertThePrefixesDuringChange(YangLeafRef leafrefForCloning, YangUses yangUses)
- throws DataModelException {
- List<YangAtomicPath> atomicPathList = leafrefForCloning.getAtomicPath();
- if (atomicPathList != null && !atomicPathList.isEmpty()) {
- Iterator<YangAtomicPath> atomicPathIterator = atomicPathList.listIterator();
- while (atomicPathIterator.hasNext()) {
- YangAtomicPath atomicPath = atomicPathIterator.next();
- Map<String, String> prefixesAndItsImportNameNode = leafrefForCloning.getPrefixAndNode();
- String prefixInPath = atomicPath.getNodeIdentifier().getPrefix();
- String importedNodeName = prefixesAndItsImportNameNode.get(prefixInPath);
- assignCurrentLeafedWithNewPrefixes(importedNodeName, atomicPath, yangUses);
- }
- }
- }
-
- /**
- * Assigns leafref with new prefixes while cloning.
- *
- * @param importedNodeName imported node name from grouping
- * @param atomicPath atomic path in leafref
- * @param node instance of YANG uses where cloning is done
- * @throws DataModelException data model error
- */
- private static void assignCurrentLeafedWithNewPrefixes(String importedNodeName, YangAtomicPath atomicPath,
- YangNode node)
- throws DataModelException {
- while (!(node instanceof YangReferenceResolver)) {
- node = node.getParent();
- if (node == null) {
- throw new DataModelException("Internal datamodel error: Datamodel tree is not correct");
- }
- }
- if (node instanceof YangModule) {
- List<YangImport> importInUsesList = ((YangModule) node).getImportList();
- if (importInUsesList != null && !importInUsesList.isEmpty()) {
- Iterator<YangImport> importInUsesListIterator = importInUsesList.listIterator();
- while (importInUsesListIterator.hasNext()) {
- YangImport importInUsesNode = importInUsesListIterator.next();
- if (importInUsesNode.getModuleName().equals(importedNodeName)) {
- atomicPath.getNodeIdentifier().setPrefix(importInUsesNode.getPrefixId());
- }
- }
- }
- }
- }
-
- /**
- * Clones the union or enum leaves. If there is any cloned leaves whose type is union/enum then the corresponding
- * type info needs to be updated to the cloned new type node.
- *
- * @param leavesHolder cloned leaves holder, for whom the leaves reference needs to be updated
- * @throws DataModelException when fails to do data model operations
- */
- public static void updateClonedLeavesUnionEnumRef(YangLeavesHolder leavesHolder)
- throws DataModelException {
- List<YangLeaf> currentListOfLeaves = leavesHolder.getListOfLeaf();
- if (currentListOfLeaves != null) {
- for (YangLeaf leaf : currentListOfLeaves) {
- if (leaf.getDataType().getDataType() == YangDataTypes.ENUMERATION
- || leaf.getDataType().getDataType() == YangDataTypes.UNION) {
- try {
- YangType<?> clonedType = leaf.getDataType().clone();
- updateClonedTypeRef(clonedType, leavesHolder);
- leaf.setDataType(clonedType);
- } catch (DataModelException e) {
- throw e;
- } catch (CloneNotSupportedException e) {
- e.printStackTrace();
- throw new DataModelException("Could not clone Type node " +
- leaf.getDataType().getDataTypeName() + " in " +
- leaf.getDataType().getLineNumber() + " at " +
- leaf.getDataType().getCharPosition() +
- " in " + leaf.getDataType().getFileName() + "\"");
- }
- }
- }
-
- }
-
- List<YangLeafList> currentListOfLeafList = leavesHolder.getListOfLeafList();
- if (currentListOfLeafList != null) {
- for (YangLeafList leafList : currentListOfLeafList) {
- if (leafList.getDataType().getDataType() == YangDataTypes.ENUMERATION
- || leafList.getDataType().getDataType() == YangDataTypes.UNION) {
- try {
- YangType<?> clonedType = leafList.getDataType().clone();
- updateClonedTypeRef(clonedType, leavesHolder);
- leafList.setDataType(clonedType);
- } catch (DataModelException e) {
- throw e;
- } catch (CloneNotSupportedException e) {
- e.printStackTrace();
- throw new DataModelException("Could not clone Type node " +
- leafList.getDataType().getDataTypeName() + " in " +
- leafList.getDataType().getLineNumber() + " at " +
- leafList.getDataType().getCharPosition() +
- " in " + leafList.getDataType().getFileName() + "\"");
- }
- }
- }
- }
- }
-
- /**
- * Updates the types extended info pointer to point to the cloned type node.
- *
- * @param dataType data type, whose extended info needs to be pointed to the cloned type
- * @param leavesHolder the leaves holder having the cloned type
- */
- private static void updateClonedTypeRef(YangType dataType, YangLeavesHolder leavesHolder)
- throws DataModelException {
- if (!(leavesHolder instanceof YangNode)) {
- throw new DataModelException("Data model error: cloned leaves holder is not a node " +
- " in " +
- leavesHolder.getLineNumber() + " at " +
- leavesHolder.getCharPosition() +
- " in " + leavesHolder.getFileName() + "\"");
- }
- YangNode potentialTypeNode = ((YangNode) leavesHolder).getChild();
- while (potentialTypeNode != null) {
- String dataTypeName = null;
- if (dataType.getDataType() == YangDataTypes.ENUMERATION) {
- YangEnumeration enumNode = (YangEnumeration) dataType.getDataTypeExtendedInfo();
- dataTypeName = enumNode.getName();
- } else if (dataType.getDataType() == YangDataTypes.UNION) {
- YangUnion unionNode = (YangUnion) dataType.getDataTypeExtendedInfo();
- dataTypeName = unionNode.getName();
- }
- if (potentialTypeNode.getName().contentEquals(dataTypeName)) {
- dataType.setDataTypeExtendedInfo(potentialTypeNode);
- return;
- }
- potentialTypeNode = potentialTypeNode.getNextSibling();
- }
-
- throw new DataModelException("Data model error: cloned leaves type is not found " +
- dataType.getDataTypeName() + " in " +
- dataType.getLineNumber() + " at " +
- dataType.getCharPosition() +
- " in " + dataType.getFileName() + "\"");
-
- }
-
- /**
- * Parses jar file and returns list of serialized file names.
- *
- * @param jarFile jar file to be parsed
- * @param directory directory where to search
- * @return list of serialized files
- * @throws IOException when fails to do IO operations
- */
- public static List<YangNode> parseJarFile(String jarFile, String directory)
- throws IOException {
-
- List<YangNode> nodes = new ArrayList<>();
- JarFile jar = new JarFile(jarFile);
- Enumeration<?> enumEntries = jar.entries();
-
- while (enumEntries.hasMoreElements()) {
- JarEntry file = (JarEntry) enumEntries.nextElement();
- if (file.getName().endsWith(".ser")) {
-
- if (file.getName().contains(SLASH)) {
- String[] strArray = file.getName().split(SLASH);
- String tempPath = "";
- for (int i = 0; i < strArray.length - 1; i++) {
- tempPath = SLASH + tempPath + SLASH + strArray[i];
- }
- File dir = new File(directory + tempPath);
- dir.mkdirs();
- }
- File serializedFile = new File(directory + SLASH + file.getName());
- if (file.isDirectory()) {
- serializedFile.mkdirs();
- continue;
- }
- InputStream inputStream = jar.getInputStream(file);
-
- FileOutputStream fileOutputStream = new FileOutputStream(serializedFile);
- while (inputStream.available() > 0) {
- fileOutputStream.write(inputStream.read());
- }
- fileOutputStream.close();
- inputStream.close();
- nodes.addAll(deSerializeDataModel(serializedFile.toString()));
- }
- }
- jar.close();
- return nodes;
- }
-
- /**
- * Validates the requested data-type resolve type in empty or not.
- *
- * @param dataType the data type
- * @return true, for empty resolved data-type; false otherwise
- */
- public static boolean validateEmptyDataType(YangType dataType) {
- switch (dataType.getDataType()) {
- case DERIVED:
- return ((YangDerivedInfo) dataType.getDataTypeExtendedInfo())
- .getEffectiveBuiltInType().equals(EMPTY);
-
- case LEAFREF:
- YangType type = ((YangLeafRef) dataType
- .getDataTypeExtendedInfo())
- .getEffectiveDataType();
- if (type.getDataType() == YangDataTypes.DERIVED) {
- return ((YangDerivedInfo) type.getDataTypeExtendedInfo())
- .getEffectiveBuiltInType().equals(EMPTY);
- }
- return ((YangLeafRef) dataType.getDataTypeExtendedInfo())
- .getEffectiveDataType().getDataType().equals(EMPTY);
-
- case UNION:
- return ((YangUnion) dataType.getDataTypeExtendedInfo())
- .getTypeList().contains(EMPTY);
- default:
- return dataType.getDataType().equals(EMPTY);
- }
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/FractionDigits.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/FractionDigits.java
deleted file mode 100644
index 536ca10..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/FractionDigits.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.utils;
-
-import java.math.BigDecimal;
-import java.util.ArrayList;
-
-import org.onosproject.yangutils.datamodel.DefaultLocationInfo;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-
-/**
- * The "fraction-digits" statement, which is a substatement to the
- * "type" statement, MUST be present if the type is "decimal64". It
- * takes as an argument an integer between 1 and 18, inclusively. It
- * controls the size of the minimum difference between values of a
- * decimal64 type, by restricting the value space to numbers that are
- * expressible as "i x 10^-n" where n is the fraction-digits argument.
- *
- * +----------------+-----------------------+----------------------+
- * | fraction-digit | min | max |
- * +----------------+-----------------------+----------------------+
- * | 1 | -922337203685477580.8 | 922337203685477580.7 |
- * | 2 | -92233720368547758.08 | 92233720368547758.07 |
- * | 3 | -9223372036854775.808 | 9223372036854775.807 |
- * | 4 | -922337203685477.5808 | 922337203685477.5807 |
- * | 5 | -92233720368547.75808 | 92233720368547.75807 |
- * | 6 | -9223372036854.775808 | 9223372036854.775807 |
- * | 7 | -922337203685.4775808 | 922337203685.4775807 |
- * | 8 | -92233720368.54775808 | 92233720368.54775807 |
- * | 9 | -9223372036.854775808 | 9223372036.854775807 |
- * | 10 | -922337203.6854775808 | 922337203.6854775807 |
- * | 11 | -92233720.36854775808 | 92233720.36854775807 |
- * | 12 | -9223372.036854775808 | 9223372.036854775807 |
- * | 13 | -922337.2036854775808 | 922337.2036854775807 |
- * | 14 | -92233.72036854775808 | 92233.72036854775807 |
- * | 15 | -9223.372036854775808 | 9223.372036854775807 |
- * | 16 | -922.3372036854775808 | 922.3372036854775807 |
- * | 17 | -92.23372036854775808 | 92.23372036854775807 |
- * | 18 | -9.223372036854775808 | 9.223372036854775807 |
- * +----------------+-----------------------+----------------------+
- */
-
-/**
- * Represents the decimal64 value range based on fraction-digits.
- */
-public final class FractionDigits extends DefaultLocationInfo {
-
- public static class Range {
- private double min;
- private double max;
-
- /**
- * Creates an instance of range.
- *
- * @param min minimum value of decimal64
- * @param max maximum value of decimal64
- */
- protected Range(double min, double max) {
- this.min = min;
- this.max = max;
- }
-
- /**
- * Retrieve minimum value range.
- *
- * @return minimum value range
- */
- public double getMin() {
- return min;
- }
-
- /**
- * Retrieve maximum value range.
- *
- * @return maximum value range
- */
- public double getMax() {
- return max;
- }
- }
-
- private static ArrayList<Range> decimal64ValueRange = null;
-
- /**
- * Creates a fraction-digits instance.
- */
- private FractionDigits() {
- }
-
- /**
- * Generates decimal64 value range based on fraction-digits.
- *
- * @return decimal64 value range by fraction-digits as index
- */
- public static ArrayList<Range> getDecimal64ValueRange() {
- if (decimal64ValueRange == null) {
- decimal64ValueRange = new ArrayList<>();
- decimal64ValueRange.add(new Range(-922337203685477580.8, 922337203685477580.7)); // fraction-digit: 1
- decimal64ValueRange.add(new Range(-92233720368547758.08, 92233720368547758.07)); // fraction-digit: 2
- decimal64ValueRange.add(new Range(-9223372036854775.808, 9223372036854775.807)); // fraction-digit: 3
- decimal64ValueRange.add(new Range(-922337203685477.5808, 922337203685477.5807)); // fraction-digit: 4
- decimal64ValueRange.add(new Range(-92233720368547.75808, 92233720368547.75807)); // fraction-digit: 5
- decimal64ValueRange.add(new Range(-9223372036854.775808, 9223372036854.775807)); // fraction-digit: 6
- decimal64ValueRange.add(new Range(-922337203685.4775808, 922337203685.4775807)); // fraction-digit: 7
- decimal64ValueRange.add(new Range(-92233720368.54775808, 92233720368.54775807)); // fraction-digit: 8
- decimal64ValueRange.add(new Range(-9223372036.854775808, 9223372036.854775807)); // fraction-digit: 9
- decimal64ValueRange.add(new Range(-922337203.6854775808, 922337203.6854775807)); // fraction-digit: 10
- decimal64ValueRange.add(new Range(-92233720.36854775808, 92233720.36854775807)); // fraction-digit: 11
- decimal64ValueRange.add(new Range(-9223372.036854775808, 9223372.036854775807)); // fraction-digit: 12
- decimal64ValueRange.add(new Range(-922337.2036854775808, 922337.2036854775807)); // fraction-digit: 13
- decimal64ValueRange.add(new Range(-92233.72036854775808, 92233.72036854775807)); // fraction-digit: 14
- decimal64ValueRange.add(new Range(-9223.372036854775808, 9223.372036854775807)); // fraction-digit: 15
- decimal64ValueRange.add(new Range(-922.3372036854775808, 922.3372036854775807)); // fraction-digit: 16
- decimal64ValueRange.add(new Range(-92.23372036854775808, 92.23372036854775807)); // fraction-digit: 17
- decimal64ValueRange.add(new Range(-9.223372036854775808, 9.223372036854775807)); // fraction-digit: 18
- }
- return decimal64ValueRange;
- }
-
- /**
- * Retrieve range based on fraction-digits.
- *
- * @param fractionDigit fraction-digits
- * @return range
- * @throws DataModelException a violation of data model rules
- */
- public static Range getRange(int fractionDigit) throws DataModelException {
- if (!((fractionDigit >= 1) && (fractionDigit <= 18))) {
- throw new DataModelException("YANG file error : given fraction-digit is not in its range (1..18).");
- }
-
- return getDecimal64ValueRange().get(fractionDigit - 1);
- }
-
- /**
- * Checks whether specific decimal64 value is in correct range based fraction-digit.
- *
- * @param value decimal64 value
- * @param fractionDigit fraction-digits
- * @return true when it is in correct range otherwise false
- */
- public static boolean isValueInDecimal64Range(BigDecimal value, int fractionDigit) {
- // Fraction-digits should be in correct its own range.
- if (!((fractionDigit >= 1) && (fractionDigit <= 18))) {
- return false;
- }
-
- // ArrayList index starts from 0.
- FractionDigits.Range range = FractionDigits.getDecimal64ValueRange().get(fractionDigit - 1);
- if ((value.doubleValue() >= range.getMin()) && (value.doubleValue() <= range.getMax())) {
- return true;
- }
- return false;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/GeneratedLanguage.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/GeneratedLanguage.java
deleted file mode 100644
index 37d2161..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/GeneratedLanguage.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel.utils;
-
-/**
- * Represents the target language in which the YANG information is modeled.
- */
-public enum GeneratedLanguage {
- /**
- * Target language is java.
- */
- JAVA_GENERATION
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/Parsable.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/Parsable.java
deleted file mode 100644
index eb32bc8..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/Parsable.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.utils;
-
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-
-/**
- * Abstraction of an entity which process the data of lexer's parse tree.
- */
-public interface Parsable {
-
- /**
- * Returns the type of YANG construct data.
- *
- * @return the type of YANG construct data.
- */
- YangConstructType getYangConstructType();
-
- /**
- * Checks if the node is valid as per YANG grammar's syntax and semantics.
- * This validation will be performed on entering the node in traversal
- *
- * @throws DataModelException if there is any violation of the YANG rules
- * in parsed data, corresponding exception should be thrown
- */
- void validateDataOnEntry() throws DataModelException;
-
- /**
- * Checks if the node is valid as per YANG grammar's syntax and semantics.
- * This validation will be performed on exiting the node in traversal
- *
- * @throws DataModelException if there is any violation of the YANG rules
- * in parsed data, corresponding exception should be thrown
- */
- void validateDataOnExit() throws DataModelException;
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/ResolvableStatus.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/ResolvableStatus.java
deleted file mode 100644
index d31f67b..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/ResolvableStatus.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.utils;
-
-/**
- * Represents the status of resolvable entity.
- */
-public enum ResolvableStatus {
-
- /**
- * Identifies that resolvable entity is unresolved.
- */
- UNRESOLVED,
-
- /**
- * Identifies that resolvable entity's reference is linked.
- */
- LINKED,
-
- /**
- * Identifies that resolvable entity is IntraFile resolved (i.e. complete
- * linking with in the intra file).
- */
- INTRA_FILE_RESOLVED,
-
- /**
- * Identifies that resolvable entity is resolved.
- */
- RESOLVED,
-
- /**
- * Identifies that resolvable entity is inter file linked (i.e. complete
- * linking with external files).
- */
- INTER_FILE_LINKED,
-
- /**
- * Identifies that resolvable entity is referred node is not defined.
- */
- UNDEFINED
-
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/RestrictionResolver.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/RestrictionResolver.java
deleted file mode 100644
index 8750e82..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/RestrictionResolver.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.utils;
-
-import org.onosproject.yangutils.datamodel.YangRangeInterval;
-import org.onosproject.yangutils.datamodel.YangRangeRestriction;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangBuiltInDataTypeInfo;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-
-import static java.util.regex.Pattern.quote;
-import static org.onosproject.yangutils.datamodel.BuiltInTypeObjectFactory.getDataObjectFromString;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.LENGTH_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.RANGE_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.getYangConstructType;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.UINT64;
-
-/**
- * Represents restriction resolver which provide common utility used by parser
- * and during linking for restriction resolution.
- */
-public final class RestrictionResolver {
-
- private static final String PIPE = "|";
- private static final String ADD = "+";
- private static final String EMPTY_STRING = "";
- private static final String INTERVAL = "..";
- private static final int MAX_RANGE_BOUNDARY = 2;
- private static final int MIN_RANGE_BOUNDARY = 1;
- private static final String MIN_KEYWORD = "min";
- private static final String MAX_KEYWORD = "max";
- private static final String SPACE = " ";
- private static final String QUOTE = "\"";
-
- /**
- * Creates a restriction resolver.
- */
- private RestrictionResolver() {
- }
-
- /**
- * Processes the range restriction for parser and linker.
- *
- * @param refRr range restriction of referred typedef
- * @param line error line number
- * @param position error character position in line
- * @param hasRefR whether has referred restriction
- * @param curRange caller type's range string
- * @param type effective type, when called from linker
- * @param fileName file name
- * @return YANG range restriction
- * @throws DataModelException a violation in data model rule
- */
- public static YangRangeRestriction processRangeRestriction(
- YangRangeRestriction refRr, int line, int position,
- boolean hasRefR, String curRange, YangDataTypes type, String fileName)
- throws DataModelException {
- return getRestriction(refRr, line, position, hasRefR, curRange, fileName,
- type, RANGE_DATA);
- }
-
- /**
- * Processes the length restriction for parser and linker.
- *
- * @param refLr length restriction of referred typedef
- * @param line error line number
- * @param position error character position in line
- * @param hasRefR whether has referred restriction
- * @param curLenStr caller type's length string
- * @param fileName file name
- * @return YANG range restriction
- * @throws DataModelException a violation in data model rule
- */
- public static YangRangeRestriction processLengthRestriction(
- YangRangeRestriction refLr, int line, int position, boolean hasRefR,
- String curLenStr, String fileName) throws DataModelException {
- return getRestriction(refLr, line, position, hasRefR, curLenStr, fileName,
- UINT64, LENGTH_DATA);
- }
-
- /**
- * Processes the range/length restriction for parser and linker.
- *
- * @param refR range/length restriction of referred typedef
- * @param line error line number
- * @param position error character position in line
- * @param hasRefR whether has referred restriction
- * @param curRange caller type's range string
- * @param type effective type, when called from linker
- * @param fileName file name
- * @param conType construct type
- * @return YANG range restriction
- * @throws DataModelException a violation in data model rule
- */
- private static YangRangeRestriction getRestriction(
- YangRangeRestriction refR, int line, int position, boolean hasRefR,
- String curRange, String fileName, YangDataTypes type,
- YangConstructType conType) throws
- DataModelException {
- YangBuiltInDataTypeInfo<?> startValue;
- YangBuiltInDataTypeInfo<?> endValue;
- YangRangeRestriction rr = new YangRangeRestriction();
-
- String rangeArg = removeQuotesAndHandleConcat(curRange);
- String[] rangeArguments = rangeArg.trim().split(quote(PIPE));
-
- for (String rangePart : rangeArguments) {
- String startInterval;
- String endInterval;
- YangRangeInterval rangeInterval = new YangRangeInterval();
- rangeInterval.setCharPosition(position);
- rangeInterval.setLineNumber(line);
- rangeInterval.setFileName(fileName);
- String[] rangeBoundary = rangePart.trim().split(quote(INTERVAL));
-
- if (rangeBoundary.length > MAX_RANGE_BOUNDARY) {
- DataModelException ex = new DataModelException(
- "YANG file error : " + getYangConstructType(conType) +
- SPACE + rangeArg + " is not valid.");
- ex.setLine(line);
- ex.setCharPosition(position);
- ex.setFileName(fileName);
- throw ex;
- }
-
- if (rangeBoundary.length == MIN_RANGE_BOUNDARY) {
- startInterval = rangeBoundary[0].trim();
- endInterval = rangeBoundary[0].trim();
- } else {
- startInterval = rangeBoundary[0].trim();
- endInterval = rangeBoundary[1].trim();
- }
-
- try {
- if (hasRefR && startInterval.equals(MIN_KEYWORD) &&
- refR.getMinRestrictedValue() != null) {
- startValue = refR.getMinRestrictedValue();
- } else if (hasRefR && startInterval.equals(MAX_KEYWORD) &&
- refR.getMaxRestrictedValue() != null) {
- startValue = refR.getMaxRestrictedValue();
- } else {
- startValue = getDataObjectFromString(startInterval, type);
- }
- if (hasRefR && endInterval.equals(MIN_KEYWORD) &&
- refR.getMinRestrictedValue() != null) {
- endValue = refR.getMinRestrictedValue();
- } else if (hasRefR && endInterval.equals(MAX_KEYWORD) &&
- refR.getMaxRestrictedValue() != null) {
- endValue = refR.getMaxRestrictedValue();
- } else {
- endValue = getDataObjectFromString(endInterval, type);
- }
- } catch (Exception e) {
- DataModelException ex = new DataModelException(e.getMessage());
- ex.setLine(line);
- ex.setCharPosition(position);
- ex.setFileName(fileName);
- throw ex;
- }
- rangeInterval.setStartValue(startValue);
- rangeInterval.setEndValue(endValue);
- try {
- rr.addRangeRestrictionInterval(rangeInterval);
- } catch (DataModelException ex) {
- ex.setLine(line);
- ex.setCharPosition(position);
- ex.setFileName(fileName);
- throw ex;
- }
- }
- return rr;
- }
-
- /**
- * Removes doubles quotes and concatenates if string has plus symbol.
- *
- * @param yangStringData string from yang file
- * @return concatenated string after removing double quotes
- */
- private static String removeQuotesAndHandleConcat(String yangStringData) {
- yangStringData = yangStringData.replace(QUOTE, EMPTY_STRING);
- String[] tmpData = yangStringData.split(quote(ADD));
- StringBuilder builder = new StringBuilder();
- for (String yangString : tmpData) {
- builder.append(yangString);
- }
- return builder.toString();
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/YangConstructType.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/YangConstructType.java
deleted file mode 100644
index fc0fbd7..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/YangConstructType.java
+++ /dev/null
@@ -1,574 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel.utils;
-
-/**
- * Represents ENUM to represent the type of data in parse tree.
- */
-public enum YangConstructType {
- /**
- * Identifies the module parsed data.
- */
- MODULE_DATA,
-
- /**
- * Identifies the sub module parsed data.
- */
- SUB_MODULE_DATA,
-
- /**
- * Identifies the typedef parsed data.
- */
- TYPEDEF_DATA,
-
- /**
- * Identifies the type parsed data.
- */
- TYPE_DATA,
-
- /**
- * Identifies the choice parsed data.
- */
- CHOICE_DATA,
-
- /**
- * Identifies the case parsed data.
- */
- CASE_DATA,
-
- /**
- * Identifies the YANG enumeration parsed data.
- */
- ENUMERATION_DATA,
-
- /**
- * Identifies the grouping parsed data.
- */
- GROUPING_DATA,
-
- /**
- * Identifies the uses parsed data.
- */
- USES_DATA,
-
- /**
- * Identifies the augment parsed data.
- */
- AUGMENT_DATA,
-
- /**
- * Identifies the container parsed data.
- */
- CONTAINER_DATA,
-
- /**
- * Identifies the YANG list parsed data.
- */
- LIST_DATA,
-
- /**
- * Identifies the YANG belongs-to parsed data.
- */
- BELONGS_TO_DATA,
-
- /**
- * Identifies the YANG bit parsed data.
- */
- BIT_DATA,
-
- /**
- * Identifies the YANG bits parsed data.
- */
- BITS_DATA,
-
- /**
- * Identifies the YANG decimal64 parsed data.
- */
- DECIMAL64_DATA,
-
- /**
- * Identifies the YANG fraction-digits parsed data.
- */
- FRACTION_DIGITS_DATA,
-
- /**
- * Identifies the YANG enum parsed data.
- */
- ENUM_DATA,
-
- /**
- * Identifies the YANG import parsed data.
- */
- IMPORT_DATA,
-
- /**
- * Identifies the YANG include parsed data.
- */
- INCLUDE_DATA,
-
- /**
- * Identifies the YANG leaf parsed data.
- */
- LEAF_DATA,
-
- /**
- * Identifies the YANG leaf list parsed data.
- */
- LEAF_LIST_DATA,
-
- /**
- * Identifies the YANG must parsed data.
- */
- MUST_DATA,
-
- /**
- * Identifies the YANG revision parsed data.
- */
- REVISION_DATA,
-
- /**
- * Identifies the YANG revision date parsed data.
- */
- REVISION_DATE_DATA,
-
- /**
- * Identifies the YANG namespace parsed data.
- */
- NAMESPACE_DATA,
-
- /**
- * Identifies the YANG contact parsed data.
- */
- CONTACT_DATA,
-
- /**
- * Identifies the YANG config parsed data.
- */
- CONFIG_DATA,
-
- /**
- * Identifies the YANG description parsed data.
- */
- DESCRIPTION_DATA,
-
- /**
- * Identifies the YANG key parsed data.
- */
- KEY_DATA,
-
- /**
- * Identifies the YANG mandatory parsed data.
- */
- MANDATORY_DATA,
-
- /**
- * Identifies the YANG max element parsed data.
- */
- MAX_ELEMENT_DATA,
-
- /**
- * Identifies the YANG min element parsed data.
- */
- MIN_ELEMENT_DATA,
-
- /**
- * Identifies the YANG presence element parsed data.
- */
- PRESENCE_DATA,
-
- /**
- * Identifies the YANG reference element parsed data.
- */
- REFERENCE_DATA,
-
- /**
- * Identifies the YANG status element parsed data.
- */
- STATUS_DATA,
-
- /**
- * Identifies the YANG units element parsed data.
- */
- UNITS_DATA,
-
- /**
- * Identifies the YANG version element parsed data.
- */
- VERSION_DATA,
-
- /**
- * Identifies the YANG base element parsed data.
- */
- YANGBASE_DATA,
-
- /**
- * Identifies the YANG prefix element parsed data.
- */
- PREFIX_DATA,
-
- /**
- * Identifies the YANG default element parsed data.
- */
- DEFAULT_DATA,
-
- /**
- * Identifies the YANG value element parsed data.
- */
- VALUE_DATA,
-
- /**
- * Identifies the YANG organization parsed data.
- */
- ORGANIZATION_DATA,
-
- /**
- * Identifies the YANG position element parsed data.
- */
- POSITION_DATA,
-
- /**
- * Identifies the YANG data definition statements.
- */
- DATA_DEF_DATA,
-
- /**
- * Identifies the YANG union element parsed data.
- */
- UNION_DATA,
-
- /**
- * Identifies the YANG notification element parsed data.
- */
- NOTIFICATION_DATA,
-
- /**
- * Identifies the YANG when element parsed data.
- */
- WHEN_DATA,
-
- /**
- * Identifies the YANG input element parsed data.
- */
- INPUT_DATA,
-
- /**
- * Identifies the YANG output element parsed data.
- */
- OUTPUT_DATA,
-
- /**
- * Identifies the YANG rpc element parsed data.
- */
- RPC_DATA,
-
- /**
- * Identifies the YANG short case element parsed data.
- */
- SHORT_CASE_DATA,
-
- /**
- * Identifies the derived data type.
- */
- DERIVED,
-
- /**
- * Identifies the YANG range element parsed data.
- */
- RANGE_DATA,
-
- /**
- * Identifies the YANG length element parsed data.
- */
- LENGTH_DATA,
-
- /**
- * Identifies the YANG pattern element parsed data.
- */
- PATTERN_DATA,
-
- /**
- * Identifies the YANG extension element parsed data.
- */
- EXTENSION_DATA,
-
- /**
- * Identifies the YANG identity element parsed data.
- */
- IDENTITY_DATA,
-
- /**
- * Identifies the YANG base element parsed data.
- */
- BASE_DATA,
-
- /**
- * Identifies the YANG feature element parsed data.
- */
- FEATURE_DATA,
-
- /**
- * Identifies the YANG if-feature element parsed data.
- */
- IF_FEATURE_DATA,
-
- /**
- * Identifies the YANG path element parsed data.
- */
- PATH_DATA,
-
- /**
- * Identifies the YANG require-instance element parsed data.
- */
- REQUIRE_INSTANCE_DATA,
-
- /**
- * Identifies the YANG ordered-by element parsed data.
- */
- ORDERED_BY_DATA,
-
- /**
- * Identifies the YANG error-message element parsed data.
- */
- ERROR_MESSAGE_DATA,
-
- /**
- * Identifies the YANG error-app-tag element parsed data.
- */
- ERROR_APP_TAG_DATA,
-
- /**
- * Identifies the YANG unique element parsed data.
- */
- UNIQUE_DATA,
-
- /**
- * Identifies the YANG refine element parsed data.
- */
- REFINE_DATA,
-
- /**
- * Identifies the YANG leafref element parsed data.
- */
- LEAFREF_DATA,
-
- /**
- * Identifies the YANG identityref element parsed data.
- */
- IDENTITYREF_DATA,
-
- /**
- * Identifies the YANG instance identifier element parsed data.
- */
- INSTANCE_IDENTIFIER_DATA,
-
- /**
- * Identifies the YANG deviation element parsed data.
- */
- DEVIATION_DATA,
-
- /**
- * Identifies the YANG anyxml element parsed data.
- */
- ANYXML_DATA,
-
- /**
- * Identifies the YANG compiler annotation element parsed data.
- */
- COMPILER_ANNOTATION_DATA,
-
- /**
- * Identifies the YANG app data structure element parsed data.
- */
- APP_DATA_STRUCTURE,
-
- /**
- * Identifies the YANG app extended element parsed data.
- */
- APP_EXTENDED_NAME_DATA,
-
- /**
- * Identifies the YANG argument element parsed data.
- */
- ARGUMENT_DATA;
-
- /**
- * Returns the YANG construct keyword corresponding to enum values.
- *
- * @param yangConstructType enum value for parsable data type.
- * @return YANG construct keyword.
- */
- public static String getYangConstructType(YangConstructType yangConstructType) {
-
- switch (yangConstructType) {
- case MODULE_DATA:
- return "module";
- case SUB_MODULE_DATA:
- return "submodule";
- case TYPEDEF_DATA:
- return "typedef";
- case TYPE_DATA:
- return "type";
- case CHOICE_DATA:
- return "choice";
- case CASE_DATA:
- return "case";
- case ENUMERATION_DATA:
- return "enumeration";
- case GROUPING_DATA:
- return "grouping";
- case USES_DATA:
- return "uses";
- case AUGMENT_DATA:
- return "augment";
- case CONTAINER_DATA:
- return "container";
- case LIST_DATA:
- return "list";
- case BELONGS_TO_DATA:
- return "belongs-to";
- case BIT_DATA:
- return "bit";
- case BITS_DATA:
- return "bits";
- case DECIMAL64_DATA:
- return "decimal64";
- case FRACTION_DIGITS_DATA:
- return "fraction-digits";
- case ENUM_DATA:
- return "enum";
- case IMPORT_DATA:
- return "import";
- case INCLUDE_DATA:
- return "include";
- case LEAF_DATA:
- return "leaf";
- case LEAF_LIST_DATA:
- return "leaf-list";
- case MUST_DATA:
- return "must";
- case REVISION_DATA:
- return "revision";
- case REVISION_DATE_DATA:
- return "revision-date";
- case NAMESPACE_DATA:
- return "namespace";
- case CONTACT_DATA:
- return "contact";
- case CONFIG_DATA:
- return "config";
- case DESCRIPTION_DATA:
- return "description";
- case KEY_DATA:
- return "key";
- case MANDATORY_DATA:
- return "mandatory";
- case MAX_ELEMENT_DATA:
- return "max-elements";
- case MIN_ELEMENT_DATA:
- return "min-elements";
- case PRESENCE_DATA:
- return "presence";
- case REFERENCE_DATA:
- return "reference";
- case STATUS_DATA:
- return "status";
- case UNITS_DATA:
- return "units";
- case VERSION_DATA:
- return "version";
- case YANGBASE_DATA:
- return "yangbase";
- case PREFIX_DATA:
- return "prefix";
- case ORGANIZATION_DATA:
- return "organization";
- case VALUE_DATA:
- return "value";
- case POSITION_DATA:
- return "position";
- case DEFAULT_DATA:
- return "default";
- case DATA_DEF_DATA:
- return "data-def-substatements";
- case WHEN_DATA:
- return "when";
- case INPUT_DATA:
- return "input";
- case OUTPUT_DATA:
- return "ouput";
- case RPC_DATA:
- return "rpc";
- case SHORT_CASE_DATA:
- return "short-case";
- case DERIVED:
- return "derived";
- case NOTIFICATION_DATA:
- return "notification";
- case UNION_DATA:
- return "union";
- case RANGE_DATA:
- return "range";
- case LENGTH_DATA:
- return "length";
- case PATTERN_DATA:
- return "pattern";
- case EXTENSION_DATA:
- return "extension";
- case IDENTITY_DATA:
- return "identity";
- case BASE_DATA:
- return "base";
- case FEATURE_DATA:
- return "feature";
- case IF_FEATURE_DATA:
- return "if-feature";
- case PATH_DATA:
- return "path";
- case REQUIRE_INSTANCE_DATA:
- return "require-instance";
- case ORDERED_BY_DATA:
- return "ordered-by";
- case ERROR_MESSAGE_DATA:
- return "error-message";
- case ERROR_APP_TAG_DATA:
- return "error-app-tag";
- case UNIQUE_DATA:
- return "unique";
- case REFINE_DATA:
- return "refine";
- case LEAFREF_DATA:
- return "leafref";
- case IDENTITYREF_DATA:
- return "identityref";
- case INSTANCE_IDENTIFIER_DATA:
- return "instance-identifier";
- case DEVIATION_DATA:
- return "deviation";
- case ANYXML_DATA:
- return "anyxml";
- case COMPILER_ANNOTATION_DATA:
- return "compiler-annotation";
- case APP_DATA_STRUCTURE:
- return "app-data-structure";
- case APP_EXTENDED_NAME_DATA:
- return "app-extended-name";
- case ARGUMENT_DATA:
- return "argument";
- default:
- return "yang";
- }
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/YangErrMsgConstants.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/YangErrMsgConstants.java
deleted file mode 100644
index 4468d9b..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/YangErrMsgConstants.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.utils;
-
-/**
- * Represents default YANG error message types.
- */
-public final class YangErrMsgConstants {
-
- /**
- * Static attribute for operation failed error tag.
- */
- public static final String OPERATION_FAILED_ERROR_TAG = "operation-failed";
-
- /**
- * Static attribute for data missing error tag.
- */
- public static final String DATA_MISSING_ERROR_TAG = "data-missing";
-
- /**
- * Static attribute for bad attribute error tag.
- */
- public static final String BAD_ATTRIBUTE_ERROR_TAG = "bad-attribute";
-
- /**
- * Static attribute for data not unique error app tag.
- */
- public static final String DATA_NOT_UNIQUE_ERROR_APP_TAG = "data-not-unique";
-
- /**
- * Static attribute for too many elements error app tag.
- */
- public static final String TOO_MANY_ELEMENTS_ERROR_APP_TAG = "too-many-elements";
-
- /**
- * Static attribute for too few elements error app tag.
- */
- public static final String TOO_FEW_ELEMENTS_ERROR_APP_TAG = "too-few-elements";
-
- /**
- * Static attribute for must violation error app tag.
- */
- public static final String MUST_VIOLATION_ERROR_APP_TAG = "must-violation";
-
- /**
- * Static attribute for instance required error app tag.
- */
- public static final String INSTANCE_REQUIRED_ERROR_APP_TAG = "instance-required";
-
- /**
- * Static attribute for missing choice error app tag.
- */
- public static final String MISSING_CHOICE_ERROR_APP_TAG = "missing-choice";
-
- /**
- * Static attribute for missing instance error app tag.
- */
- public static final String MISSING_INSTANCE_ERROR_APP_TAG = "missing-instance";
-
- /**
- * TODO: Static attribute for error path to the instance-identifier leaf.
- */
- public static final String ERROR_PATH_INSTANCE_IDENTIFIER_LEAF = "Path to the instance-identifier leaf.";
-
- /**
- * Static attribute for error path to the missing choice.
- */
- public static final String ERROR_PATH_MISSING_CHOICE = "Path to the element with the missing choice.";
-
- /**
- * Static attribute for error path to the leafref leaf.
- */
- public static final String ERROR_PATH_LEAFREF_LEAF = "Path to the leafref leaf.";
-
- /**
- * Creates an instance of yang error message constants.
- */
- private YangErrMsgConstants() {
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/DataTypeException.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/DataTypeException.java
deleted file mode 100644
index 8c24d6c..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/DataTypeException.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 2016 Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.utils.builtindatatype;
-
-/**
- * Base class for exceptions in data type.
- */
-public class DataTypeException extends RuntimeException {
-
- private static final long serialVersionUID = 20160211L;
-
- /**
- * Create a new data type exception.
- */
- public DataTypeException() {
- super();
- }
-
- /**
- * Creates a new data type exception with given message.
- *
- * @param message the detail of exception in string
- */
- public DataTypeException(String message) {
- super(message);
- }
-
- /**
- * Creates a new data type exception from given message and cause.
- *
- * @param message the detail of exception in string
- * @param cause underlying cause of the error
- */
- public DataTypeException(final String message, final Throwable cause) {
- super(message, cause);
- }
-
- /**
- * Creates a new data type exception from cause.
- *
- * @param cause underlying cause of the error
- */
- public DataTypeException(final Throwable cause) {
- super(cause);
- }
-
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangBuiltInDataTypeInfo.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangBuiltInDataTypeInfo.java
deleted file mode 100644
index 20c3260..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangBuiltInDataTypeInfo.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2016 Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.datamodel.utils.builtindatatype;
-
-/**
- * Represents the list of utility functions to be supported by YANG built in
- * data type implementations.
- *
- * @param <T> The target data type
- */
-public interface YangBuiltInDataTypeInfo<T> extends Comparable<T> {
-
- /**
- * Returns the YANG built in type.
- *
- * @return the YANG built in type
- */
- YangDataTypes getYangType();
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangDataTypeUtils.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangDataTypeUtils.java
deleted file mode 100644
index 738a999..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangDataTypeUtils.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.utils.builtindatatype;
-
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.INT16;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.INT32;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.INT64;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.INT8;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.UINT16;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.UINT32;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.UINT64;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.UINT8;
-
-/**
- * Represents YANG data type utilities.
- */
-public final class YangDataTypeUtils {
-
- /**
- * Restricts creation of YANG data type utils instance.
- */
- private YangDataTypeUtils() {
- }
-
- /**
- * Returns whether the data type is of range restricted type.
- *
- * @param dataType data type to be checked
- * @return true, if data type can have range restrictions, false otherwise
- */
- public static boolean isOfRangeRestrictedType(YangDataTypes dataType) {
- return dataType == INT8
- || dataType == INT16
- || dataType == INT32
- || dataType == INT64
- || dataType == UINT8
- || dataType == UINT16
- || dataType == UINT32
- || dataType == UINT64;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangDataTypes.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangDataTypes.java
deleted file mode 100644
index 4b6e8bf..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangDataTypes.java
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.utils.builtindatatype;
-
-/**
- * Represents ENUM to identify the YANG data type.
- */
-public enum YangDataTypes {
- /**
- * Reference:RFC 6020.
- * <p>
- * int8 represents integer values between -128 and 127, inclusively.
- */
- INT8("int8"),
-
- /**
- * Reference:RFC 6020.
- * <p>
- * int16 represents integer values between -32768 and 32767, inclusively.
- */
- INT16("int16"),
-
- /**
- * Reference:RFC 6020.
- * <p>
- * int32 represents integer values between -2147483648 and 2147483647,
- * inclusively.
- */
- INT32("int32"),
-
- /**
- * Reference:RFC 6020.
- * <p>
- * int64 represents integer values between -9223372036854775808 and
- * 9223372036854775807, inclusively.
- */
- INT64("int64"),
-
- /**
- * Reference:RFC 6020.
- * <p>
- * uint8 represents integer values between 0 and 255, inclusively.
- */
- UINT8("uint8"),
-
- /**
- * Reference:RFC 6020.
- * <p>
- * uint16 represents integer values between 0 and 65535, inclusively.
- */
- UINT16("uint16"),
-
- /**
- * Reference:RFC 6020.
- * <p>
- * uint32 represents integer values between 0 and 4294967295, inclusively.
- */
- UINT32("uint32"),
-
- /**
- * Reference:RFC 6020.
- * <p>
- * uint64 represents integer values between 0 and 18446744073709551615,
- * inclusively.
- */
- UINT64("uint64"),
-
- /**
- * Reference:RFC 6020.
- * <p>
- * The decimal64 type represents a subset of the real numbers, which can be
- * represented by decimal numerals. The value space of decimal64 is the set
- * of numbers that can be obtained by multiplying a 64-bit signed integer by
- * a negative power of ten, i.e., expressible as "i x 10^-n" where i is an
- * integer64 and n is an integer between 1 and 18, inclusively.
- */
- DECIMAL64("decimal64"), // TODO: need to implement in type.
-
- /**
- * Reference:RFC 6020.
- * <p>
- * The string built-in type represents human-readable strings in YANG. Legal
- * characters are tab, carriage return, line feed, and the legal characters
- * of Unicode and ISO/IEC 10646
- */
- STRING("string"),
-
- /**
- * Reference:RFC 6020.
- * <p>
- * The boolean built-in type represents a boolean value.
- */
- BOOLEAN("boolean"),
-
- /**
- * Reference:RFC 6020.
- * <p>
- * The enumeration built-in type represents values from a set of assigned
- * names.
- */
- ENUMERATION("enumeration"),
-
- /**
- * Reference:RFC 6020.
- * <p>
- * The bits built-in type represents a bit set. That is, a bits value is a
- * set of flags identified by small integer position numbers starting at 0.
- * Each bit number has an assigned name.
- */
- BITS("bits"),
-
- /**
- * Reference:RFC 6020.
- * <p>
- * The binary built-in type represents any binary data, i.e., a sequence of
- * octets.
- */
- BINARY("binary"),
-
- /**
- * Reference:RFC 6020.
- * <p>
- * The leafref type is used to reference a particular leaf instance in the
- * data tree. The "path" sub-statement (Section 9.9.2) selects a set of leaf
- * instances, and the leafref value space is the set of values of these leaf
- * instances.
- * <p>
- * If the leaf with the leafref type represents configuration data, the leaf
- * it refers to MUST also represent configuration. Such a leaf puts a
- * constraint on valid data. All leafref nodes MUST reference existing leaf
- * instances or leafs with default values in use for the data to be valid.
- * <p>
- * There MUST NOT be any circular chains of leafrefs.
- * <p>
- * If the leaf that the leafref refers to is conditional based on one or
- * more features, then the leaf with the leafref type MUST also be
- * conditional based on at least the same set of features.
- */
- LEAFREF("leafref"),
-
- /**
- * Reference:RFC 6020.
- * <p>
- * The identityref type is used to reference an existing identity.
- */
- IDENTITYREF("identityref"),
-
- /**
- * Reference:RFC 6020.
- * <p>
- * The empty built-in type represents a leaf that does not have any value,
- * it conveys information by its presence or absence.
- * <p>
- * An empty type cannot have a default value.
- */
- EMPTY("empty"),
-
- /**
- * Reference:RFC 6020.
- * <p>
- * The union built-in type represents a value that corresponds to one of its
- * member types.
- * <p>
- * When the type is "union", the "type" statement MUST be present. It is
- * used to repeatedly specify each member type of the union. It takes as an
- * argument a string that is the name of a member type.
- * <p>
- * A member type can be of any built-in or derived type, except it MUST NOT
- * be one of the built-in types "empty" or "leafref".
- * <p>
- * When a string representing a union data type is validated, the string is
- * validated against each member type, in the order they are specified in
- * the "type" statement, until a match is found.
- * <p>
- * Any default value or "units" property defined in the member types is not
- * inherited by the union type.
- */
- UNION("union"),
-
- /**
- * Reference:RFC 6020.
- * <p>
- * The instance-identifier built-in type is used to uniquely identify a
- * particular instance node in the data tree.
- * <p>
- * The syntax for an instance-identifier is a subset of the XPath
- * abbreviated syntax, formally defined by the rule "instance-identifier".
- * It is used to uniquely identify a node in the data tree. Predicates are
- * used only for specifying the values for the key nodes for list entries, a
- * value of a leaf-list entry, or a positional index for a list without
- * keys. For identifying list entries with keys, each predicate consists of
- * one equality test per key, and each key MUST have a corresponding
- * predicate.
- * <p>
- * If the leaf with the instance-identifier type represents configuration
- * data, and the "require-instance" property is "true", the node it refers
- * to MUST also represent configuration. Such a leaf puts a constraint on
- * valid data. All such leaf nodes MUST reference existing nodes or leaf
- * nodes with their default value in use for the data to be valid.
- */
- INSTANCE_IDENTIFIER("instance-identifier"),
-
- /**
- * Derived data type.
- */
- DERIVED("derived");
-
- /**
- * Defined type from the enum value.
- */
- private final String definedType;
-
- /**
- * Constructs type value from enum.
- *
- * @param definedType value of enum
- */
- YangDataTypes(String definedType) {
- this.definedType = definedType;
- }
-
- /**
- * Returns YANG data type for corresponding type name.
- *
- * @param name type name from YANG file.
- * @return YANG data type for corresponding type name.
- */
- public static YangDataTypes getType(String name) {
- name = name.replace("\"", "");
- for (YangDataTypes yangDataType : values()) {
- if (yangDataType.definedType.toLowerCase().equals(name)) {
- return yangDataType;
- }
- }
- return YangDataTypes.DERIVED;
- }
-
- /**
- * Returns whether the data type is of primitive data type.
- *
- * @return true, if data type can have primitive data type, false otherwise
- */
- public boolean isPrimitiveDataType() {
- return this == INT8 ||
- this == INT16 ||
- this == INT32 ||
- this == INT64 ||
- this == UINT8 ||
- this == UINT16 ||
- this == UINT32 ||
- this == UINT64 ||
- this == DECIMAL64 ||
- this == BOOLEAN ||
- this == EMPTY;
- }
-
- /**
- * Returns whether the data type is of non restricted type.
- *
- * @return true, if data type can't be restricted, false otherwise
- */
- public boolean isNonRestrictedType() {
- return this == BOOLEAN ||
- this == ENUMERATION ||
- this == BITS ||
- this == EMPTY ||
- this == UNION ||
- this == IDENTITYREF ||
- this == LEAFREF;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt16.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt16.java
deleted file mode 100644
index 978463b..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt16.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.utils.builtindatatype;
-
-import java.io.Serializable;
-
-import org.onosproject.yangutils.datamodel.DefaultLocationInfo;
-
-/**
- * Handles the YANG's int16 data type processing.
- *
- * int16 represents integer values between -32768 and 32767, inclusively.
- */
-public class YangInt16 extends DefaultLocationInfo
- implements YangBuiltInDataTypeInfo<YangInt16>, Serializable {
-
- private static final long serialVersionUID = 8006201667L;
-
- /**
- * YANG's min keyword.
- */
- private static final String MIN_KEYWORD = "min";
-
- /**
- * YANG's max keyword.
- */
- private static final String MAX_KEYWORD = "max";
-
- /**
- * Valid minimum value of YANG's int16.
- */
- public static final short MIN_VALUE = -32768;
-
- /**
- * Valid maximum value of YANG's int16.
- */
- public static final short MAX_VALUE = 32767;
-
- /**
- * The value of YANG's int16.
- */
- private final short value;
-
- /**
- * Creates an object with the value initialized with value represented in
- * string.
- *
- * @param valueInString value of the object in string
- */
- public YangInt16(String valueInString) {
-
- if (valueInString.matches(MIN_KEYWORD)) {
- value = MIN_VALUE;
- } else if (valueInString.matches(MAX_KEYWORD)) {
- value = MAX_VALUE;
- } else {
- try {
- value = Short.parseShort(valueInString);
- } catch (Exception e) {
- throw new DataTypeException("YANG file error : Input value \"" + valueInString + "\" is not a valid " +
- "int16.");
- }
- }
- }
-
- /**
- * Returns YANG's int16 value.
- *
- * @return value of YANG's int16
- */
- public short getValue() {
- return value;
- }
-
- @Override
- public int compareTo(YangInt16 anotherYangInt16) {
- return Short.compare(value, anotherYangInt16.value);
- }
-
- @Override
- public YangDataTypes getYangType() {
- return YangDataTypes.INT16;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt32.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt32.java
deleted file mode 100644
index f344ebe..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt32.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.utils.builtindatatype;
-
-import java.io.Serializable;
-
-import org.onosproject.yangutils.datamodel.DefaultLocationInfo;
-
-/**
- * Handles the YANG's int32 data type processing.
- *
- * int32 represents integer values between -2147483648 and 2147483647, inclusively.
- */
-public class YangInt32 extends DefaultLocationInfo
- implements YangBuiltInDataTypeInfo<YangInt32>, Serializable {
-
- private static final long serialVersionUID = 8006201666L;
-
- /**
- * YANG's min keyword.
- */
- private static final String MIN_KEYWORD = "min";
-
- /**
- * YANG's max keyword.
- */
- private static final String MAX_KEYWORD = "max";
-
- /**
- * Valid minimum value of YANG's int32.
- */
- public static final int MIN_VALUE = -2147483648;
-
- /**
- * Valid maximum value of YANG's int32.
- */
- public static final int MAX_VALUE = 2147483647;
-
- /**
- * The value of YANG's int32.
- */
- private final int value;
-
- /**
- * Creates an object with the value initialized with value represented in
- * string.
- *
- * @param valueInString value of the object in string
- */
- public YangInt32(String valueInString) {
-
- if (valueInString.matches(MIN_KEYWORD)) {
- value = MIN_VALUE;
- } else if (valueInString.matches(MAX_KEYWORD)) {
- value = MAX_VALUE;
- } else {
- try {
- value = Integer.parseInt(valueInString);
- } catch (Exception e) {
- throw new DataTypeException("YANG file error : Input value \"" + valueInString + "\" is not a valid " +
- "int32.");
- }
- }
- }
-
- /**
- * Returns YANG's int32 value.
- *
- * @return value of YANG's int32
- */
- public int getValue() {
- return value;
- }
-
- @Override
- public int compareTo(YangInt32 anotherYangInt32) {
- return Integer.compare(value, anotherYangInt32.value);
- }
-
- @Override
- public YangDataTypes getYangType() {
- return YangDataTypes.INT32;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt64.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt64.java
deleted file mode 100644
index 779ce8f..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt64.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.utils.builtindatatype;
-
-import java.io.Serializable;
-
-import org.onosproject.yangutils.datamodel.DefaultLocationInfo;
-
-/**
- * Handles the YANG's int8 data type processing.
- *
- * int8 represents integer values between -9223372036854775808 and 9223372036854775807, inclusively.
- */
-public class YangInt64 extends DefaultLocationInfo
- implements YangBuiltInDataTypeInfo<YangInt64>, Serializable {
-
- private static final long serialVersionUID = 8006201665L;
-
- /**
- * YANG's min keyword.
- */
- private static final String MIN_KEYWORD = "min";
-
- /**
- * YANG's max keyword.
- */
- private static final String MAX_KEYWORD = "max";
-
- /**
- * Valid minimum value of YANG's int64.
- */
- public static final Long MIN_VALUE = 0x8000000000000000L;
-
- /**
- * Valid maximum value of YANG's int64.
- */
- public static final long MAX_VALUE = 0x7fffffffffffffffL;
-
- /**
- * The value of YANG's int64.
- */
- private final long value;
-
- /**
- * Creates an object with the value initialized with value represented in
- * string.
- *
- * @param valueInString value of the object in string
- */
- public YangInt64(String valueInString) {
-
- if (valueInString.matches(MIN_KEYWORD)) {
- value = MIN_VALUE;
- } else if (valueInString.matches(MAX_KEYWORD)) {
- value = MAX_VALUE;
- } else {
- try {
- value = Long.parseLong(valueInString);
- } catch (Exception e) {
- throw new DataTypeException("YANG file error : Input value \"" + valueInString + "\" is not a valid " +
- "int64.");
- }
- }
- }
-
- /**
- * Returns YANG's int64 value.
- *
- * @return value of YANG's int64
- */
- public long getValue() {
- return value;
- }
-
- @Override
- public int compareTo(YangInt64 anotherYangInt64) {
- return Long.compare(value, anotherYangInt64.value);
- }
-
- @Override
- public YangDataTypes getYangType() {
- return YangDataTypes.INT64;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt8.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt8.java
deleted file mode 100644
index cdf94ed..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangInt8.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.utils.builtindatatype;
-
-import java.io.Serializable;
-
-import org.onosproject.yangutils.datamodel.DefaultLocationInfo;
-
-/**
- * Handles the YANG's int8 data type processing.
- *
- * int8 represents integer values between -128 and 127, inclusively.
- */
-public class YangInt8 extends DefaultLocationInfo
- implements YangBuiltInDataTypeInfo<YangInt8>, Serializable {
-
- private static final long serialVersionUID = 8006201664L;
-
- /**
- * YANG's min keyword.
- */
- private static final String MIN_KEYWORD = "min";
-
- /**
- * YANG's max keyword.
- */
- private static final String MAX_KEYWORD = "max";
-
- /**
- * Valid minimum value of YANG's int8.
- */
- public static final byte MIN_VALUE = -128;
-
- /**
- * Valid maximum value of YANG's int8.
- */
- public static final byte MAX_VALUE = 127;
-
- /**
- * The value of YANG's int8.
- */
- private final byte value;
-
- /**
- * Creates an object with the value initialized with value represented in
- * string.
- *
- * @param valueInString value of the object in string
- */
- public YangInt8(String valueInString) {
-
- if (valueInString.matches(MIN_KEYWORD)) {
- value = MIN_VALUE;
- } else if (valueInString.matches(MAX_KEYWORD)) {
- value = MAX_VALUE;
- } else {
- try {
- value = Byte.parseByte(valueInString);
- } catch (Exception e) {
- throw new DataTypeException("YANG file error : Input value \"" + valueInString + "\" is not a valid " +
- "int8.");
- }
- }
- }
-
- /**
- * Returns YANG's int8 value.
- *
- * @return value of YANG's int8
- */
- public byte getValue() {
- return value;
- }
-
- @Override
- public int compareTo(YangInt8 anotherYangInt8) {
- return Byte.compare(value, anotherYangInt8.value);
- }
-
- @Override
- public YangDataTypes getYangType() {
- return YangDataTypes.INT8;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint16.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint16.java
deleted file mode 100644
index 4930414..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint16.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.utils.builtindatatype;
-
-import java.io.Serializable;
-
-import org.onosproject.yangutils.datamodel.DefaultLocationInfo;
-/**
- * Handles the YANG's Uint16 data type processing.
- *
- * Uint16 represents integer values between 0 and 65535, inclusively.
- */
-public class YangUint16 extends DefaultLocationInfo
- implements YangBuiltInDataTypeInfo<YangUint16>, Serializable {
-
- private static final long serialVersionUID = 8006201663L;
-
- /**
- * YANG's min keyword.
- */
- private static final String MIN_KEYWORD = "min";
-
- /**
- * YANG's max keyword.
- */
- private static final String MAX_KEYWORD = "max";
-
- /**
- * Valid minimum value of YANG's Uint16.
- */
- public static final int MIN_VALUE = 0;
-
- /**
- * Valid maximum value of YANG's Uint16.
- */
- public static final int MAX_VALUE = 65535;
-
- /**
- * Value of the object.
- */
- private int value;
-
- /**
- * Creates an object with the value initialized with value represented in
- * string.
- *
- * @param valueInString value of the object in string
- */
- public YangUint16(String valueInString) {
-
- if (valueInString.matches(MIN_KEYWORD)) {
- value = MIN_VALUE;
- } else if (valueInString.matches(MAX_KEYWORD)) {
- value = MAX_VALUE;
- } else {
- try {
- value = Integer.parseInt(valueInString);
- } catch (Exception e) {
- throw new DataTypeException("YANG file error : Input value \"" + valueInString + "\" is not a valid " +
- "uint16.");
- }
- }
-
- if (value < MIN_VALUE) {
- throw new DataTypeException("YANG file error : " + valueInString + " is lesser than minimum value "
- + MIN_VALUE + ".");
- } else if (value > MAX_VALUE) {
- throw new DataTypeException("YANG file error : " + valueInString + " is greater than maximum value "
- + MAX_VALUE + ".");
- }
- }
-
- /**
- * Returns YANG's uint16 value.
- *
- * @return value of YANG's uint16
- */
- public int getValue() {
- return value;
- }
-
- @Override
- public int compareTo(YangUint16 another) {
- return Integer.compare(value, another.value);
- }
-
- @Override
- public YangDataTypes getYangType() {
- return YangDataTypes.UINT16;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint32.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint32.java
deleted file mode 100644
index 0e35027..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint32.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.utils.builtindatatype;
-
-import java.io.Serializable;
-
-import org.onosproject.yangutils.datamodel.DefaultLocationInfo;
-
-/**
- * Handles the YANG's Uint32 data type processing.
- *
- * Uint32 represents integer values between 0 and 4294967295, inclusively.
- */
-public class YangUint32 extends DefaultLocationInfo
- implements YangBuiltInDataTypeInfo<YangUint32>, Serializable {
-
- private static final long serialVersionUID = 8006201662L;
-
- private static final String MIN_KEYWORD = "min";
- private static final String MAX_KEYWORD = "max";
-
- /**
- * Valid minimum value of YANG's Uint32.
- */
- public static final long MIN_VALUE = 0;
-
- /**
- * Valid maximum value of YANG's Uint32.
- */
- public static final long MAX_VALUE = 4294967295L;
-
- /**
- * Value of the object.
- */
- private long value;
-
- /**
- * Creates an object with the value initialized with value represented in
- * string.
- *
- * @param valueInString value of the object in string
- */
- public YangUint32(String valueInString) {
-
- if (valueInString.matches(MIN_KEYWORD)) {
- value = MIN_VALUE;
- } else if (valueInString.matches(MAX_KEYWORD)) {
- value = MAX_VALUE;
- } else {
- try {
- value = Long.parseLong(valueInString);
- } catch (Exception e) {
- throw new DataTypeException("YANG file error : Input value \"" + valueInString + "\" is not a valid " +
- "uint32.");
- }
- }
-
- if (value < MIN_VALUE) {
- throw new DataTypeException("YANG file error : " + valueInString + " is lesser than minimum value "
- + MIN_VALUE + ".");
- } else if (value > MAX_VALUE) {
- throw new DataTypeException("YANG file error : " + valueInString + " is greater than maximum value "
- + MAX_VALUE + ".");
- }
- }
-
- /**
- * Returns YANG's uint32 value.
- *
- * @return value of YANG's uint32
- */
- public long getValue() {
- return value;
- }
-
- @Override
- public int compareTo(YangUint32 another) {
- return Long.compare(value, another.value);
- }
-
- @Override
- public YangDataTypes getYangType() {
- return YangDataTypes.UINT32;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint64.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint64.java
deleted file mode 100644
index ca6a112..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint64.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.utils.builtindatatype;
-
-import java.io.Serializable;
-import java.math.BigInteger;
-
-import org.onosproject.yangutils.datamodel.DefaultLocationInfo;
-
-/**
- * Handles the YANG's Uint16 data type processing.
- *
- * Uint64 represents integer values between 0 and 18446744073709551615, inclusively.
- */
-public class YangUint64 extends DefaultLocationInfo
- implements YangBuiltInDataTypeInfo<YangUint64>, Serializable {
-
- private static final long serialVersionUID = 8006201661L;
-
- /**
- * YANG's min keyword.
- */
- private static final String MIN_KEYWORD = "min";
-
- /**
- * YANG's max keyword.
- */
- private static final String MAX_KEYWORD = "max";
-
- /**
- * Valid minimum value of YANG's Uint64.
- */
- public static final BigInteger MIN_VALUE = BigInteger.valueOf(0);
-
- /**
- * Valid maximum value of YANG's Uint64.
- */
- public static final BigInteger MAX_VALUE = new BigInteger("18446744073709551615");
-
- /**
- * Value of the object.
- */
- private BigInteger value;
-
- /**
- * Creates an object with the value initialized with value represented in
- * string.
- *
- * @param valueInString value of the object in string
- */
- public YangUint64(String valueInString) {
-
- if (valueInString.matches(MIN_KEYWORD)) {
- value = MIN_VALUE;
- } else if (valueInString.matches(MAX_KEYWORD)) {
- value = MAX_VALUE;
- } else {
- try {
- value = new BigInteger(valueInString);
- } catch (Exception e) {
- throw new DataTypeException("YANG file error : Input value \"" + valueInString + "\" is not a valid " +
- "uint64.");
- }
- }
-
- if (value.compareTo(MIN_VALUE) < 0) {
- throw new DataTypeException("YANG file error : " + valueInString + " is lesser than minimum value "
- + MIN_VALUE + ".");
- } else if (value.compareTo(MAX_VALUE) > 0) {
- throw new DataTypeException("YANG file error : " + valueInString + " is greater than maximum value "
- + MAX_VALUE + ".");
- }
- }
-
- /**
- * Returns YANG's uint64 value.
- *
- * @return value of YANG's uint64
- */
- public BigInteger getValue() {
- return value;
- }
-
- @Override
- public int compareTo(YangUint64 another) {
- return value.compareTo(another.value);
- }
-
- @Override
- public YangDataTypes getYangType() {
- return YangDataTypes.UINT64;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint8.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint8.java
deleted file mode 100644
index 3c65d8c..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/YangUint8.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.datamodel.utils.builtindatatype;
-
-import java.io.Serializable;
-
-import org.onosproject.yangutils.datamodel.DefaultLocationInfo;
-
-/**
- * Handles the YANG's Uint8 data type processing.
- *
- * Uint8 represents integer values between 0 and 255, inclusively.
- */
-public class YangUint8 extends DefaultLocationInfo
- implements YangBuiltInDataTypeInfo<YangUint8>, Serializable {
-
- private static final long serialVersionUID = 8006201660L;
-
- /**
- * YANG's min keyword.
- */
- private static final String MIN_KEYWORD = "min";
-
- /**
- * YANG's max keyword.
- */
- private static final String MAX_KEYWORD = "max";
-
- /**
- * Valid minimum value of YANG's Uint8.
- */
- public static final short MIN_VALUE = 0;
-
- /**
- * Valid maximum value of YANG's Uint8.
- */
- public static final short MAX_VALUE = 255;
-
- /**
- * Value of the object.
- */
- private short value;
-
- /**
- * Creates an object with the value initialized with value represented in
- * string.
- *
- * @param valueInString value of the object in string
- */
- public YangUint8(String valueInString) {
-
- if (valueInString.matches(MIN_KEYWORD)) {
- value = MIN_VALUE;
- } else if (valueInString.matches(MAX_KEYWORD)) {
- value = MAX_VALUE;
- } else {
- try {
- value = Short.parseShort(valueInString);
- } catch (Exception e) {
- throw new DataTypeException("YANG file error : Input value \"" + valueInString + "\" is not a valid " +
- "uint8.");
- }
- }
-
- if (value < MIN_VALUE) {
- throw new DataTypeException("YANG file error : " + valueInString + " is lesser than minimum value "
- + MIN_VALUE + ".");
- } else if (value > MAX_VALUE) {
- throw new DataTypeException("YANG file error : " + valueInString + " is greater than maximum value "
- + MAX_VALUE + ".");
- }
- }
-
- /**
- * Returns YANG's uint8 value.
- *
- * @return value of YANG's uint8
- */
- public short getValue() {
- return value;
- }
-
- @Override
- public int compareTo(YangUint8 another) {
- return Short.compare(value, another.value);
- }
-
- @Override
- public YangDataTypes getYangType() {
- return YangDataTypes.UINT8;
- }
-}
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/package-info.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/package-info.java
deleted file mode 100644
index d1ceae5..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/builtindatatype/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*-
- * Copyright 2016 Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-/**
- * Utilities for YANG built in data types.
- */
-package org.onosproject.yangutils.datamodel.utils.builtindatatype;
diff --git a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/package-info.java b/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/package-info.java
deleted file mode 100644
index 5d2a683..0000000
--- a/datamodel/src/main/java/org/onosproject/yangutils/datamodel/utils/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-/**
- * Utilities for checking data model tree collisions.
- */
-package org.onosproject.yangutils.datamodel.utils;
\ No newline at end of file
diff --git a/generator/pom.xml b/generator/pom.xml
deleted file mode 100644
index 869fb26..0000000
--- a/generator/pom.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<!--
- ~ Copyright 2016-present Open Networking Laboratory
- ~
- ~ Licensed 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
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License 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.
- -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-yang-utils</artifactId>
- <version>1.12-SNAPSHOT</version>
- </parent>
-
- <artifactId>onos-yang-utils-generator</artifactId>
- <packaging>jar</packaging>
-
- <dependencies>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-yang-datamodel</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>commons-io</groupId>
- <artifactId>commons-io</artifactId>
- <version>2.4</version>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- <version>1.7.21</version>
- </dependency>
- </dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <version>3.0.2</version>
- <configuration>
- <skipIfEmpty>true</skipIfEmpty>
- </configuration>
- <executions>
- <execution>
- <id>default</id>
- <goals>
- <goal>test-jar</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
-</project>
diff --git a/generator/src/main/java/org/onosproject/yangutils/linker/YangLinker.java b/generator/src/main/java/org/onosproject/yangutils/linker/YangLinker.java
deleted file mode 100644
index 5f029f2..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/linker/YangLinker.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.linker;
-
-import java.util.Set;
-import org.onosproject.yangutils.datamodel.YangNode;
-
-/**
- * Abstraction of entity which provides linking service of YANG files.
- */
-public interface YangLinker {
-
- /**
- * Resolve the import and include dependencies for a given resolution
- * information.
- *
- * @param yangNodeSet set of all dependent YANG nodes
- */
- void resolveDependencies(Set<YangNode> yangNodeSet);
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/linker/YangLinkingPhase.java b/generator/src/main/java/org/onosproject/yangutils/linker/YangLinkingPhase.java
deleted file mode 100644
index 23020df..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/linker/YangLinkingPhase.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.linker;
-
-/**
- * Represents the phase of YANG file reference linking.
- */
-public enum YangLinkingPhase {
-
- /**
- * Linking the reference within the files.
- */
- INTRA_FILE,
-
- /**
- * Linking the reference across the files.
- */
- INTER_FILE
-
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/linker/exceptions/LinkerException.java b/generator/src/main/java/org/onosproject/yangutils/linker/exceptions/LinkerException.java
deleted file mode 100644
index 1a36c74..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/linker/exceptions/LinkerException.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.linker.exceptions;
-
-/**
- * Represents base class for exceptions in linker operations.
- */
-public class LinkerException extends RuntimeException {
-
- private static final long serialVersionUID = 20160211L;
- private transient int lineNumber;
- private transient int charPositionInLine;
- private transient String fileName;
-
- /**
- * Creates a new linker exception.
- */
- public LinkerException() {
- super();
- }
-
- /**
- * Creates a new linker exception with given message.
- *
- * @param message the detail of exception in string
- */
- public LinkerException(String message) {
- super(message);
- }
-
- /**
- * Creates a new linker exception from given message and cause.
- *
- * @param message the detail of exception in string
- * @param cause underlying cause of the error
- */
- public LinkerException(final String message, final Throwable cause) {
- super(message, cause);
- }
-
- /**
- * Creates a new linker exception from cause.
- *
- * @param cause underlying cause of the error
- */
- public LinkerException(final Throwable cause) {
- super(cause);
- }
-
- /**
- * Returns line number of the exception.
- *
- * @return line number of the exception
- */
- public int getLineNumber() {
- return this.lineNumber;
- }
-
- /**
- * Returns YANG file name of the exception.
- *
- * @return YANG file name of the exception
- */
- public String getFileName() {
- return this.fileName;
- }
-
- /**
- * Returns position of the exception.
- *
- * @return position of the exception
- */
- public int getCharPositionInLine() {
- return this.charPositionInLine;
- }
-
- /**
- * Sets line number of YANG file.
- *
- * @param line line number of YANG file
- */
- public void setLine(int line) {
- this.lineNumber = line;
- }
-
- /**
- * Sets position of exception.
- *
- * @param charPosition position of exception
- */
- public void setCharPosition(int charPosition) {
- this.charPositionInLine = charPosition;
- }
-
- /**
- * Sets file name in parser exception.
- *
- * @param fileName YANG file name
- */
- public void setFileName(String fileName) {
- this.fileName = fileName;
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/linker/exceptions/package-info.java b/generator/src/main/java/org/onosproject/yangutils/linker/exceptions/package-info.java
deleted file mode 100644
index 42cf3a2..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/linker/exceptions/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-/**
- * Custom linker exceptions.
- */
-package org.onosproject.yangutils.linker.exceptions;
diff --git a/generator/src/main/java/org/onosproject/yangutils/linker/impl/PrefixResolverType.java b/generator/src/main/java/org/onosproject/yangutils/linker/impl/PrefixResolverType.java
deleted file mode 100644
index 469f8cb..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/linker/impl/PrefixResolverType.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.linker.impl;
-
-/**
- * Enum for prefix resolver type when augment has come in path.
- */
-enum PrefixResolverType {
-
- /**
- * When prefix changes from inter file to intra file.
- */
- INTER_TO_INTRA,
-
- /**
- * When prefix changes from intra file to inter file.
- */
- INTRA_TO_INTER,
-
- /**
- * When prefix changes from one inter file to other inter file.
- */
- INTER_TO_INTER,
-
- /**
- * When no prefix change occurs.
- */
- NO_PREFIX_CHANGE_FOR_INTRA,
-
- /**
- * When no prefix change occurs.
- */
- NO_PREFIX_CHANGE_FOR_INTER
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/linker/impl/XpathLinkingTypes.java b/generator/src/main/java/org/onosproject/yangutils/linker/impl/XpathLinkingTypes.java
deleted file mode 100644
index 87e7fae..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/linker/impl/XpathLinkingTypes.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.linker.impl;
-
-/**
- * Represents x path linking types.
- */
-public enum XpathLinkingTypes {
-
- // Augment path linking.
- AUGMENT_LINKING,
-
- // Leaf ref path linking.
- LEAF_REF_LINKING,
-
- // Compiler annotation linking.
- COMPILER_ANNOTATION_LINKING
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/linker/impl/YangLinkerManager.java b/generator/src/main/java/org/onosproject/yangutils/linker/impl/YangLinkerManager.java
deleted file mode 100644
index daf035e..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/linker/impl/YangLinkerManager.java
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.linker.impl;
-
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-
-import org.onosproject.yangutils.datamodel.ResolvableType;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangReferenceResolver;
-import org.onosproject.yangutils.datamodel.YangSubModule;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.linker.YangLinker;
-import org.onosproject.yangutils.linker.exceptions.LinkerException;
-
-import static org.onosproject.yangutils.linker.impl.YangLinkerUtils.updateFilePriority;
-import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
-
-/**
- * Representation of entity which provides linking service of YANG files.
- */
-public class YangLinkerManager
- implements YangLinker {
-
- /*
- * Set of all the YANG nodes, corresponding to the YANG files parsed by
- * parser.
- */
- private Set<YangNode> yangNodeSet = new HashSet<>();
-
- /**
- * Returns set of YANG node.
- *
- * @return set of YANG node
- */
- public Set<YangNode> getYangNodeSet() {
- return yangNodeSet;
- }
-
- /**
- * Creates YANG nodes set.
- *
- * @param yangNodeSet YANG node information set
- */
- public void createYangNodeSet(Set<YangNode> yangNodeSet) {
- getYangNodeSet().addAll(yangNodeSet);
- }
-
- @Override
- public void resolveDependencies(Set<YangNode> yangNodeSet) {
-
- // Create YANG node set.
- createYangNodeSet(yangNodeSet);
-
- // Carry out linking of sub module with module.
- linkSubModulesToParentModule(yangNodeSet);
-
- // Add references to import list.
- addRefToYangFilesImportList(yangNodeSet);
-
- // Add reference to include list.
- addRefToYangFilesIncludeList(yangNodeSet);
-
- // Update the priority for all the files.
- updateFilePriority(yangNodeSet);
-
- // TODO check for circular import/include.
-
- // Carry out inter-file linking.
- processInterFileLinking(yangNodeSet);
- }
-
- /**
- * Resolves sub-module linking by linking sub module with parent module.
- *
- * @param yangNodeSet set of YANG files info
- * @throws LinkerException fails to link sub-module to parent module
- */
- public void linkSubModulesToParentModule(Set<YangNode> yangNodeSet)
- throws LinkerException {
- for (YangNode yangNode : yangNodeSet) {
- if (yangNode instanceof YangSubModule) {
- try {
- ((YangSubModule) yangNode).linkWithModule(getYangNodeSet());
- } catch (DataModelException e) {
- String errorInfo = "Error in file: " + yangNode.getName() + " in " +
- yangNode.getFileName() + " at " +
- "line: " + e.getLineNumber() + " at position: " + e.getCharPositionInLine() + NEW_LINE
- + e.getLocalizedMessage();
- throw new LinkerException(errorInfo);
- // TODO add file path in exception message in util manager.
- }
- }
- }
- }
-
- /**
- * Adds imported node information to the import list.
- *
- * @param yangNodeSet set of YANG files info
- * @throws LinkerException fails to find imported module
- */
- public void addRefToYangFilesImportList(Set<YangNode> yangNodeSet)
- throws LinkerException {
- for (YangNode yangNode : yangNodeSet) {
- if (yangNode instanceof YangReferenceResolver) {
- try {
- ((YangReferenceResolver) yangNode).addReferencesToImportList(getYangNodeSet());
- } catch (DataModelException e) {
- String errorInfo = "Error in file: " + yangNode.getName() + " in " +
- yangNode.getFileName() + " at " +
- "line: " + e.getLineNumber() + " at position: " + e.getCharPositionInLine() + NEW_LINE
- + e.getLocalizedMessage();
- throw new LinkerException(errorInfo);
- // TODO add file path in exception message in util manager.
- }
- }
- }
- }
-
- /**
- * Adds included node information to the include list.
- *
- * @param yangNodeSet set of YANG files info
- * @throws LinkerException fails to find included sub-module
- */
- public void addRefToYangFilesIncludeList(Set<YangNode> yangNodeSet)
- throws LinkerException {
- for (YangNode yangNode : yangNodeSet) {
- if (yangNode instanceof YangReferenceResolver) {
- try {
- ((YangReferenceResolver) yangNode).addReferencesToIncludeList(getYangNodeSet());
- } catch (DataModelException e) {
- String errorInfo = "Error in file: " + yangNode.getName() + " in " +
- yangNode.getFileName() + " at " +
- "line: " + e.getLineNumber() + " at position: " + e.getCharPositionInLine() + NEW_LINE
- + e.getLocalizedMessage();
- throw new LinkerException(errorInfo);
- // TODO add file path in exception message in util manager.
- }
- }
- }
- }
-
- /**
- * Processes inter file linking for type and uses.
- *
- * @param yangNodeSet set of YANG files info
- * @throws LinkerException a violation in linker execution
- */
- public void processInterFileLinking(Set<YangNode> yangNodeSet)
- throws LinkerException {
- List<YangNode> yangNodeSortedList = new LinkedList<>();
- yangNodeSortedList.addAll(yangNodeSet);
- Collections.sort(yangNodeSortedList);
- for (YangNode yangNode : yangNodeSortedList) {
- try {
- ((YangReferenceResolver) yangNode)
- .resolveInterFileLinking(ResolvableType.YANG_IF_FEATURE);
- ((YangReferenceResolver) yangNode)
- .resolveInterFileLinking(ResolvableType.YANG_USES);
- ((YangReferenceResolver) yangNode)
- .resolveInterFileLinking(ResolvableType.YANG_AUGMENT);
- ((YangReferenceResolver) yangNode)
- .resolveInterFileLinking(ResolvableType.YANG_DERIVED_DATA_TYPE);
- ((YangReferenceResolver) yangNode)
- .resolveInterFileLinking(ResolvableType.YANG_BASE);
- ((YangReferenceResolver) yangNode)
- .resolveInterFileLinking(ResolvableType.YANG_IDENTITYREF);
- ((YangReferenceResolver) yangNode)
- .resolveInterFileLinking(ResolvableType.YANG_LEAFREF);
- ((YangReferenceResolver) yangNode)
- .resolveInterFileLinking(ResolvableType.YANG_COMPILER_ANNOTATION);
- } catch (DataModelException e) {
- String errorInfo = "Error in file: " + yangNode.getName() + " in " +
- yangNode.getFileName() + " at " +
- "line: " + e.getLineNumber() + " at position: " + e.getCharPositionInLine() + NEW_LINE
- + e.getLocalizedMessage();
- throw new LinkerException(errorInfo);
- // TODO add file path in exception message in util manager.
- } catch (LinkerException e) {
- String errorInfo = "Error in file: " + yangNode.getName() + " in " +
- yangNode.getFileName() + " at " +
- "line: " + e.getLineNumber() + " at position: " + e.getCharPositionInLine() + NEW_LINE
- + e.getLocalizedMessage();
- throw new LinkerException(errorInfo);
- // TODO add file path in exception message in util manager.
- }
- }
- }
-
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/linker/impl/YangLinkerUtils.java b/generator/src/main/java/org/onosproject/yangutils/linker/impl/YangLinkerUtils.java
deleted file mode 100644
index b07949e..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/linker/impl/YangLinkerUtils.java
+++ /dev/null
@@ -1,937 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.linker.impl;
-
-import org.onosproject.yangutils.datamodel.TraversalType;
-import org.onosproject.yangutils.datamodel.YangAtomicPath;
-import org.onosproject.yangutils.datamodel.YangAugment;
-import org.onosproject.yangutils.datamodel.YangAugmentableNode;
-import org.onosproject.yangutils.datamodel.YangBase;
-import org.onosproject.yangutils.datamodel.YangCase;
-import org.onosproject.yangutils.datamodel.YangChoice;
-import org.onosproject.yangutils.datamodel.YangGrouping;
-import org.onosproject.yangutils.datamodel.YangIdentityRef;
-import org.onosproject.yangutils.datamodel.YangIfFeature;
-import org.onosproject.yangutils.datamodel.YangImport;
-import org.onosproject.yangutils.datamodel.YangInclude;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangLeafList;
-import org.onosproject.yangutils.datamodel.YangLeafRef;
-import org.onosproject.yangutils.datamodel.YangLeavesHolder;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeIdentifier;
-import org.onosproject.yangutils.datamodel.YangPathPredicate;
-import org.onosproject.yangutils.datamodel.YangReferenceResolver;
-import org.onosproject.yangutils.datamodel.YangRelativePath;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.YangTypeDef;
-import org.onosproject.yangutils.datamodel.YangUses;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.ResolvableStatus;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-import org.onosproject.yangutils.linker.exceptions.LinkerException;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.regex.Pattern;
-
-import static org.onosproject.yangutils.datamodel.TraversalType.CHILD;
-import static org.onosproject.yangutils.datamodel.TraversalType.PARENT;
-import static org.onosproject.yangutils.datamodel.TraversalType.ROOT;
-import static org.onosproject.yangutils.datamodel.TraversalType.SIBILING;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.COLLISION_DETECTION;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.FAILED_TO_ADD_CASE;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.TARGET_NODE;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.TARGET_NODE_LEAF_INFO;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.getErrorMsg;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.getErrorMsgCollision;
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.addResolutionInfo;
-import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.getYangConstructType;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.IDENTITYREF;
-import static org.onosproject.yangutils.translator.tojava.YangDataModelFactory.getYangCaseNode;
-import static org.onosproject.yangutils.utils.UtilConstants.BASE_LINKER_ERROR;
-import static org.onosproject.yangutils.utils.UtilConstants.COLON;
-import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
-import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.FEATURE_LINKER_ERROR;
-import static org.onosproject.yangutils.utils.UtilConstants.GROUPING_LINKER_ERROR;
-import static org.onosproject.yangutils.utils.UtilConstants.IDENTITYREF_LINKER_ERROR;
-import static org.onosproject.yangutils.utils.UtilConstants.INVALID_TREE;
-import static org.onosproject.yangutils.utils.UtilConstants.IS_INVALID;
-import static org.onosproject.yangutils.utils.UtilConstants.LEAFREF_ERROR;
-import static org.onosproject.yangutils.utils.UtilConstants.LEAFREF_LINKER_ERROR;
-import static org.onosproject.yangutils.utils.UtilConstants.TYPEDEF_LINKER_ERROR;
-
-/**
- * Represent utilities for YANG linker.
- */
-public final class YangLinkerUtils {
-
- private static final int IDENTIFIER_LENGTH = 64;
- private static final Pattern IDENTIFIER_PATTERN =
- Pattern.compile("[a-zA-Z_][a-zA-Z0-9_.-]*");
- private static final String XML = "xml";
- private static final String INVALID_PATH_PRE =
- "YANG file error: The path predicate of the leafref has an " +
- "invalid path in ";
- private static final String EMPTY_PATH_LIST_ERR =
- "YANG file error : The atomic path list cannot be empty of the " +
- "leafref in the path ";
- private static final String TGT_LEAF_ERR =
- "YANG file error: There is no leaf/leaf-list in YANG node as " +
- "mentioned in the path predicate of the leafref path ";
- private static final String LEAF_REF_LIST_ERR =
- "YANG file error: Path predicates are only applicable for YANG " +
- "list. The leafref path has path predicate for non-list " +
- "node in the path ";
-
- // No instantiation.
- private YangLinkerUtils() {
- }
-
- /**
- * Detects collision between target nodes leaf/leaf-list or child node with augmented leaf/leaf-list or child node.
- *
- * @param targetNode target node
- * @param augment augment node
- */
- private static void detectCollision(YangNode targetNode, YangAugment augment) {
- YangNode targetNodesChild = targetNode.getChild();
- YangNode augmentsChild = augment.getChild();
- if (targetNode instanceof YangChoice) {
- addCaseNodeToChoiceTarget(augment);
- } else {
- detectCollisionInLeaveHolders(targetNode, augment);
- while (augmentsChild != null) {
- detectCollisionInChildNodes(targetNodesChild, augmentsChild);
- augmentsChild = augmentsChild.getNextSibling();
- }
- }
- }
-
- /*Detects collision between leaves/leaf-lists*/
- private static void detectCollisionInLeaveHolders(YangNode targetNode, YangAugment augment) {
- YangLeavesHolder targetNodesLeavesHolder = (YangLeavesHolder) targetNode;
- if (augment.getListOfLeaf() != null && augment.getListOfLeaf().isEmpty() &&
- targetNodesLeavesHolder.getListOfLeaf() != null) {
- for (YangLeaf leaf : augment.getListOfLeaf()) {
- for (YangLeaf targetLeaf : targetNodesLeavesHolder.getListOfLeaf()) {
- detectCollision(targetLeaf.getName(), leaf.getName(),
- leaf.getLineNumber(),
- leaf.getCharPosition(),
- leaf.getFileName(), TARGET_NODE_LEAF_INFO);
- }
- }
- }
- if (augment.getListOfLeafList() != null &&
- augment.getListOfLeafList().isEmpty() &&
- targetNodesLeavesHolder.getListOfLeafList() != null) {
- for (YangLeafList leafList : augment.getListOfLeafList()) {
- for (YangLeafList targetLeafList : targetNodesLeavesHolder.getListOfLeafList()) {
- detectCollision(targetLeafList.getName(), leafList.getName(),
- leafList.getLineNumber(),
- leafList.getCharPosition(),
- leafList.getFileName(), TARGET_NODE_LEAF_INFO);
- }
- }
- }
- }
-
-
- private static void detectCollision(String first, String second,
- int line, int position, String
- fileName, String type) {
- if (first.equals(second)) {
- throw new LinkerException(getErrorMsgCollision(
- COLLISION_DETECTION, second, line, position, type,
- fileName));
- }
- }
-
- /*Detects collision for child nodes.*/
- private static void detectCollisionInChildNodes(YangNode targetNodesChild,
- YangNode augmentsChild) {
- while (augmentsChild != null) {
- while (targetNodesChild != null) {
- if (targetNodesChild.getName().equals(augmentsChild.getName())) {
- detectCollision(targetNodesChild.getName(), augmentsChild.getName(),
- augmentsChild.getLineNumber(),
- augmentsChild.getCharPosition(),
- augmentsChild.getFileName(), TARGET_NODE);
- }
- targetNodesChild = targetNodesChild.getNextSibling();
- }
- augmentsChild = augmentsChild.getNextSibling();
- }
- }
-
- /**
- * Adds a case node in augment when augmenting a choice node.
- *
- * @param augment augment node
- */
- private static void addCaseNodeToChoiceTarget(YangAugment augment) {
- try {
- YangNode child = augment.getChild();
- List<YangNode> childNodes = new ArrayList<>();
- List<YangNode> caseNodes = new ArrayList<>();
- while (child != null) {
- if (!(child instanceof YangCase)) {
- childNodes.add(child);
- } else {
- caseNodes.add(child);
- }
- child = child.getNextSibling();
- }
- augment.setChild(null);
-
- for (YangNode node : childNodes) {
- Map<YangNode, List<YangNode>> map = new LinkedHashMap<>();
- node.setNextSibling(null);
- node.setPreviousSibling(null);
- node.setParent(null);
- YangCase javaCase = getYangCaseNode(JAVA_GENERATION);
- javaCase.setName(node.getName());
- //Break the tree to from a new tree.
- traverseAndBreak(node, map);
- augment.addChild(javaCase);
- node.setParent(javaCase);
- javaCase.addChild(node);
- //Connect each node to its correct parent again.
- connectTree(map);
- }
-
- for (YangNode node : caseNodes) {
- Map<YangNode, List<YangNode>> map = new LinkedHashMap<>();
- node.setNextSibling(null);
- node.setPreviousSibling(null);
- node.setParent(null);
- //Break the tree to from a new tree.
- traverseAndBreak(node, map);
- augment.addChild(node);
- node.setParent(augment);
- //Connect each node to its correct parent again.
- connectTree(map);
- }
- if (augment.getListOfLeaf() != null) {
- for (YangLeaf leaf : augment.getListOfLeaf()) {
- YangCase javaCase = getYangCaseNode(JAVA_GENERATION);
- javaCase.setName(leaf.getName());
- javaCase.addLeaf(leaf);
- augment.addChild(javaCase);
-
- }
- augment.getListOfLeaf().clear();
- }
- if (augment.getListOfLeafList() != null) {
- for (YangLeafList leafList : augment.getListOfLeafList()) {
- YangCase javaCase = getYangCaseNode(JAVA_GENERATION);
- javaCase.setName(leafList.getName());
- javaCase.addLeafList(leafList);
- augment.addChild(javaCase);
- }
- augment.getListOfLeafList().clear();
- }
-
- } catch (DataModelException e) {
- throw new TranslatorException(
- getErrorMsg(FAILED_TO_ADD_CASE, augment.getName(),
- augment.getLineNumber(), augment.getCharPosition(),
- augment.getFileName()));
- }
- }
-
- private static void connectTree(Map<YangNode, List<YangNode>> map)
- throws DataModelException {
- ArrayList<YangNode> keys = new ArrayList<>(map.keySet());
- int size = keys.size();
- for (int i = size - 1; i >= 0; i--) {
- YangNode curNode = keys.get(i);
- List<YangNode> nodes = map.get(curNode);
- if (nodes != null) {
- for (YangNode node : nodes) {
- curNode.addChild(node);
- }
- }
- }
- map.clear();
- }
-
- private static void processHierarchyChild(YangNode node,
- Map<YangNode, List<YangNode>> map) {
- YangNode child = node.getChild();
- if (child != null) {
- List<YangNode> nodes = new ArrayList<>();
- while (child != null) {
- nodes.add(child);
- child.setParent(null);
- child = child.getNextSibling();
- if (child != null) {
- child.getPreviousSibling().setNextSibling(null);
- child.setPreviousSibling(null);
- }
- }
- map.put(node, nodes);
- }
- node.setChild(null);
- }
-
- private static void traverseAndBreak(YangNode rootNode,
- Map<YangNode, List<YangNode>> map) {
-
- YangNode curNode = rootNode;
- TraversalType curTraversal = ROOT;
- while (curNode != null) {
- if (curTraversal != PARENT && curNode.getChild() != null) {
- curTraversal = CHILD;
- curNode = curNode.getChild();
- } else if (curNode.getNextSibling() != null) {
- curTraversal = SIBILING;
- curNode = curNode.getNextSibling();
- } else {
- curTraversal = PARENT;
- curNode = curNode.getParent();
- if (curNode != null) {
- processHierarchyChild(curNode, map);
- }
- }
- }
- }
-
- /**
- * Returns error messages.
- *
- * @param resolvable resolvable entity
- * @return error message
- */
- static String getErrorInfoForLinker(Object resolvable) {
- if (resolvable instanceof YangType) {
- return TYPEDEF_LINKER_ERROR;
- }
- if (resolvable instanceof YangUses) {
- return GROUPING_LINKER_ERROR;
- }
- if (resolvable instanceof YangIfFeature) {
- return FEATURE_LINKER_ERROR;
- }
- if (resolvable instanceof YangBase) {
- return BASE_LINKER_ERROR;
- }
- if (resolvable instanceof YangIdentityRef) {
- return IDENTITYREF_LINKER_ERROR;
- }
- return LEAFREF_LINKER_ERROR;
- }
-
- /**
- * Returns leafref's error message.
- *
- * @param leafref leaf ref
- * @return error message
- */
- static String getLeafRefErrorInfo(YangLeafRef leafref) {
- return getErrorMsg(
- LEAFREF_ERROR + leafref.getPath() + COMMA + IS_INVALID, EMPTY_STRING,
- leafref.getLineNumber(), leafref.getCharPosition(), leafref
- .getFileName());
- }
-
- /**
- * Detects collision between target nodes and its all leaf/leaf-list or child node with augmented leaf/leaf-list or
- * child node.
- *
- * @param targetNode target node
- * @param augment augment node
- */
- static void detectCollisionForAugmentedNode(YangNode targetNode, YangAugment augment) {
- // Detect collision for target node and augment node.
- detectCollision(targetNode, augment);
- List<YangAugment> yangAugmentedInfo = ((YangAugmentableNode) targetNode).getAugmentedInfoList();
- // Detect collision for target augment node and current augment node.
- for (YangAugment info : yangAugmentedInfo) {
- detectCollision(info, augment);
- }
- }
-
- /**
- * Returns list of path names that are needed from augment.
- *
- * @param augment instance of YANG augment
- * @param remainingAncestors ancestor count to move in augment path
- * @return list of path names needed in leafref
- */
- static List<String> getPathWithAugment(YangAugment augment, int remainingAncestors) {
- List<String> listOfPathName = new ArrayList<>();
- for (YangAtomicPath atomicPath : augment.getTargetNode()) {
- if (atomicPath.getNodeIdentifier().getPrefix() != null &&
- !atomicPath.getNodeIdentifier().getPrefix().equals(EMPTY_STRING)) {
- listOfPathName.add(atomicPath.getNodeIdentifier().getPrefix()
- + COLON + atomicPath.getNodeIdentifier().getName());
- } else {
- listOfPathName.add(atomicPath.getNodeIdentifier().getName());
- }
- }
- for (int countOfAncestor = 0; countOfAncestor < remainingAncestors; countOfAncestor++) {
- listOfPathName.remove(listOfPathName.size() - 1);
- }
- return listOfPathName;
- }
-
- /**
- * Skips the invalid nodes which cannot have data from YANG.
- *
- * @param curParent current parent
- * @param leafRef YANG leaf-ref
- * @return parent node which can hold data
- * @throws LinkerException if linker rules are violated
- */
- public static YangNode skipInvalidDataNodes(YangNode curParent,
- YangLeafRef leafRef)
- throws LinkerException {
-
- YangNode node = curParent;
- while (node instanceof YangChoice ||
- node instanceof YangCase) {
-
- if (node.getParent() == null) {
- throw new LinkerException(getLeafRefErrorInfo(leafRef));
- }
- node = node.getParent();
- }
- return node;
- }
-
- /**
- * Checks and return valid node identifier.
- *
- * @param nodeIdentifierString string from yang file
- * @param yangConstruct yang construct for creating error message
- * @return valid node identifier
- */
- static YangNodeIdentifier getValidNodeIdentifier(String nodeIdentifierString,
- YangConstructType yangConstruct) {
- String[] tmpData = nodeIdentifierString.split(Pattern.quote(COLON));
- if (tmpData.length == 1) {
- YangNodeIdentifier nodeIdentifier = new YangNodeIdentifier();
- nodeIdentifier.setName(getValidIdentifier(tmpData[0], yangConstruct));
- return nodeIdentifier;
- } else if (tmpData.length == 2) {
- YangNodeIdentifier nodeIdentifier = new YangNodeIdentifier();
- nodeIdentifier.setPrefix(getValidIdentifier(tmpData[0], yangConstruct));
- nodeIdentifier.setName(getValidIdentifier(tmpData[1], yangConstruct));
- return nodeIdentifier;
- } else {
- throw new LinkerException("YANG file error : " +
- getYangConstructType(yangConstruct) + " name " + nodeIdentifierString +
- " is not valid.");
- }
- }
-
- /**
- * Validates identifier and returns concatenated string if string contains plus symbol.
- *
- * @param identifier string from yang file
- * @param yangConstruct yang construct for creating error message=
- * @return concatenated string after removing double quotes
- */
- public static String getValidIdentifier(String identifier, YangConstructType yangConstruct) {
-
- if (identifier.length() > IDENTIFIER_LENGTH) {
- throw new LinkerException("YANG file error : " +
- getYangConstructType(yangConstruct) + " name " + identifier + " is " +
- "greater than 64 characters.");
- } else if (!IDENTIFIER_PATTERN.matcher(identifier).matches()) {
- throw new LinkerException("YANG file error : " +
- getYangConstructType(yangConstruct) + " name " + identifier + " is not " +
- "valid.");
- } else if (identifier.toLowerCase().startsWith(XML)) {
- throw new LinkerException("YANG file error : " +
- getYangConstructType(yangConstruct) + " identifier " + identifier +
- " must not start with (('X'|'x') ('M'|'m') ('L'|'l')).");
- } else {
- return identifier;
- }
- }
-
- /**
- * Updates the priority for all the input files.
- *
- * @param yangNodeSet set of YANG files info
- */
- public static void updateFilePriority(Set<YangNode> yangNodeSet) {
- for (YangNode yangNode : yangNodeSet) {
- updateFilePriorityOfNode(yangNode);
- }
- }
-
- /**
- * Updates priority of the node.
- *
- * @param yangNode YANG node information
- */
- private static void updateFilePriorityOfNode(YangNode yangNode) {
- int curNodePriority = yangNode.getPriority();
- if (yangNode instanceof YangReferenceResolver) {
- List<YangImport> yangImportList = ((YangReferenceResolver) yangNode).getImportList();
- Iterator<YangImport> importInfoIterator = yangImportList.iterator();
- // Run through the imported list to update priority.
- while (importInfoIterator.hasNext()) {
- YangImport yangImport = importInfoIterator.next();
- YangNode importedNode = yangImport.getImportedNode();
- if (curNodePriority >= importedNode.getPriority()) {
- importedNode.setPriority(curNodePriority + 1);
- updateFilePriorityOfNode(importedNode);
- }
- }
-
- List<YangInclude> yangIncludeList = ((YangReferenceResolver) yangNode).getIncludeList();
- Iterator<YangInclude> includeInfoIterator = yangIncludeList.iterator();
- // Run through the imported list to update priority.
- while (includeInfoIterator.hasNext()) {
- YangInclude yangInclude = includeInfoIterator.next();
- YangNode includedNode = yangInclude.getIncludedNode();
- if (curNodePriority >= includedNode.getPriority()) {
- includedNode.setPriority(curNodePriority + 1);
- updateFilePriorityOfNode(includedNode);
- }
- }
- }
- }
-
- /**
- * Add the unresolved data under the root leve grouping to be resolved, since it will be used in interfile uses.
- *
- * @param referenceResolver module / sub-module
- */
- public static void resolveGroupingInDefinationScope(YangReferenceResolver referenceResolver) {
- YangNode potentialInterFileGrouping = ((YangNode) referenceResolver).getChild();
-
- while (potentialInterFileGrouping != null) {
- if (potentialInterFileGrouping instanceof YangGrouping) {
- addGroupingResolvableEntitiesToResolutionList((YangGrouping) potentialInterFileGrouping);
- }
-
- potentialInterFileGrouping = potentialInterFileGrouping.getNextSibling();
- }
- }
-
- /**
- * Add the interfile grouping resolvable entities to reesolution list.
- *
- * @param interFileGrouping interfile grouping
- */
- private static void addGroupingResolvableEntitiesToResolutionList(YangGrouping interFileGrouping) {
- YangNode curNode = interFileGrouping;
- TraversalType curTraversal = ROOT;
- addResolvableLeavesToResolutionList((YangLeavesHolder) curNode);
- curTraversal = CHILD;
- curNode = interFileGrouping.getChild();
- if (curNode == null) {
- return;
- }
- while (curNode != interFileGrouping) {
- if (curTraversal != PARENT) {
- if (curNode instanceof YangGrouping || curNode instanceof YangUses) {
- if (curNode.getNextSibling() != null) {
- curTraversal = SIBILING;
- curNode = curNode.getNextSibling();
- } else {
- curTraversal = PARENT;
- curNode = curNode.getParent();
- }
- continue;
- }
-
- if (curNode instanceof YangLeavesHolder) {
- addResolvableLeavesToResolutionList((YangLeavesHolder) curNode);
- } else if (curNode instanceof YangTypeDef) {
- List<YangType<?>> typeList = ((YangTypeDef) curNode).getTypeList();
- if (!typeList.isEmpty()) {
- YangType<?> type = typeList.get(0);
- if (type.getDataType() == DERIVED) {
- if (type.getResolvableStatus() != ResolvableStatus.RESOLVED) {
-
- type.setTypeForInterFileGroupingResolution(true);
-
- // Add resolution information to the list
- YangResolutionInfoImpl resolutionInfo =
- new YangResolutionInfoImpl<YangType>(type, curNode, type.getLineNumber(),
- type.getCharPosition());
- try {
- addResolutionInfo(resolutionInfo);
- } catch (DataModelException e) {
- String errorInfo = "Error in file: " + curNode.getName() + " in " +
- curNode.getFileName() + " at " +
- "line: " + e.getLineNumber() +
- " at position: " + e.getCharPositionInLine()
- + e.getLocalizedMessage();
- throw new LinkerException("Failed to add type info in grouping to resolution "
- + errorInfo);
- }
- }
- }
- }
- }
-
- }
- if (curTraversal != PARENT && curNode.getChild() != null) {
- curTraversal = CHILD;
- curNode = curNode.getChild();
- } else if (curNode.getNextSibling() != null) {
-
- curTraversal = SIBILING;
- curNode = curNode.getNextSibling();
- } else {
- curTraversal = PARENT;
- curNode = curNode.getParent();
- }
- }
- }
-
- /**
- * Add resolvable leaves type info to resolution list.
- *
- * @param leavesHolder leaves holder node
- */
- private static void addResolvableLeavesToResolutionList(YangLeavesHolder leavesHolder) {
- if (leavesHolder.getListOfLeaf() != null && !leavesHolder.getListOfLeaf().isEmpty()) {
- for (YangLeaf leaf : leavesHolder.getListOfLeaf()) {
- YangType type = leaf.getDataType();
- if (type.getDataType() == DERIVED) {
-
- type.setTypeForInterFileGroupingResolution(true);
-
- // Add resolution information to the list
- YangResolutionInfoImpl resolutionInfo =
- new YangResolutionInfoImpl<>(type, (YangNode) leavesHolder,
- type.getLineNumber(), type.getCharPosition());
- try {
- addResolutionInfo(resolutionInfo);
- } catch (DataModelException e) {
- throw new LinkerException("Failed to add leaf type info in grouping, to resolution ");
- }
- } else if (type.getDataType() == IDENTITYREF) {
- YangIdentityRef identityRef = (YangIdentityRef) type.getDataTypeExtendedInfo();
-
- identityRef.setIdentityForInterFileGroupingResolution(true);
-
- // Add resolution information to the list
- YangResolutionInfoImpl resolutionInfo =
- new YangResolutionInfoImpl<YangIdentityRef>(identityRef, (YangNode) leavesHolder,
- identityRef.getLineNumber(), identityRef.getCharPosition());
- try {
- addResolutionInfo(resolutionInfo);
- } catch (DataModelException e) {
- throw new LinkerException("Failed to add leaf identity ref info in grouping, to resolution ");
- }
- }
- }
- }
-
- if (leavesHolder.getListOfLeafList() != null && !leavesHolder.getListOfLeafList().isEmpty()) {
- for (YangLeafList leafList : leavesHolder.getListOfLeafList()) {
- YangType type = leafList.getDataType();
- if (type.getDataType() == DERIVED) {
-
- type.setTypeForInterFileGroupingResolution(true);
-
- // Add resolution information to the list
- YangResolutionInfoImpl resolutionInfo =
- new YangResolutionInfoImpl<YangType>(type, (YangNode) leavesHolder,
- type.getLineNumber(), type.getCharPosition());
- try {
- addResolutionInfo(resolutionInfo);
- } catch (DataModelException e) {
- throw new LinkerException("Failed to add leaf type info in grouping, to resolution ");
- }
- } else if (type.getDataType() == IDENTITYREF) {
- YangIdentityRef identityRef = (YangIdentityRef) type.getDataTypeExtendedInfo();
-
- identityRef.setIdentityForInterFileGroupingResolution(true);
- // Add resolution information to the list
- YangResolutionInfoImpl resolutionInfo =
- new YangResolutionInfoImpl<YangIdentityRef>(identityRef, (YangNode) leavesHolder,
- identityRef.getLineNumber(), identityRef.getCharPosition());
- try {
- addResolutionInfo(resolutionInfo);
- } catch (DataModelException e) {
- throw new LinkerException("Failed to add leaf identity ref info in grouping, to resolution ");
- }
- }
- }
- }
- }
-
- /**
- * Fills the path predicates of the leaf-ref with right axis node and
- * left axis node, after linking the nodes.
- *
- * @param leafRef YANG leaf-ref
- * @throws DataModelException if there is a data model error
- */
- public static void fillPathPredicates(YangLeafRef<?> leafRef)
- throws DataModelException {
-
- List<YangAtomicPath> atomics = leafRef.getAtomicPath();
- if (atomics != null) {
- for (YangAtomicPath atom : atomics) {
- List<YangPathPredicate> predicates =
- atom.getPathPredicatesList();
-
- if (predicates != null) {
- for (YangPathPredicate predicate : predicates) {
- setLeftAxisNode(leafRef, atom, predicate);
- setRightAxisNode(leafRef, predicate);
- }
- }
- }
- }
- }
-
- /**
- * Sets the left axis node in the YANG path predicate after finding it
- * under the YANG list node.
- *
- * @param leafRef YANG leaf-ref
- * @param atom atomic path content
- * @param predicate predicate in the atomic path
- * @throws DataModelException if there is a data model error
- */
- private static void setLeftAxisNode(YangLeafRef<?> leafRef,
- YangAtomicPath atom,
- YangPathPredicate predicate)
- throws DataModelException {
- YangNode resolvedNode = atom.getResolvedNode();
- if (!(resolvedNode instanceof YangList)) {
- throw getDataModelExc(LEAF_REF_LIST_ERR, leafRef);
- }
-
- YangNodeIdentifier leftAxisName = predicate.getNodeId();
- Object target = getTarget(leftAxisName, resolvedNode, leafRef);
- predicate.setLeftAxisNode(target);
- }
-
- /**
- * Returns the target leaf/leaf-list from the provided YANG node.
- *
- * @param leftAxisName name of node
- * @param node node having target
- * @param leafRef YANG leaf-ref
- * @return target leaf/leaf-list
- * @throws DataModelException if there is a data model error
- */
- private static Object getTarget(YangNodeIdentifier leftAxisName,
- YangNode node, YangLeafRef leafRef)
- throws DataModelException {
-
- YangLeaf leaf = getLeaf(leftAxisName, (YangLeavesHolder) node);
- if (leaf != null) {
- return leaf;
- }
- YangLeafList leafList = getLeafList(leftAxisName,
- (YangLeavesHolder) node);
- if (leafList == null) {
- throw getDataModelExc(TGT_LEAF_ERR, leafRef);
- }
- return leafList;
- }
-
- /**
- * Returns the leaf by searching it in the node by the leaf name. Returns
- * null when the name doesn't match.
- *
- * @param name leaf name
- * @param holder holder of leaf
- * @return YANG leaf
- */
- private static YangLeaf getLeaf(YangNodeIdentifier name,
- YangLeavesHolder holder) {
-
- List<YangLeaf> listOfLeaf = holder.getListOfLeaf();
- if (listOfLeaf != null) {
- for (YangLeaf yangLeaf : listOfLeaf) {
- if (yangLeaf.getName().equals(name.getName())) {
- return yangLeaf;
- }
- }
- }
- return null;
- }
-
- /**
- * Returns the leaf-list by searching it in the node by the leaf-list name.
- * Returns null when the name doesn't match.
- *
- * @param name leaf-list name
- * @param holder holder of leaf-list
- * @return YANG leaf-list
- */
- private static YangLeafList getLeafList(YangNodeIdentifier name,
- YangLeavesHolder holder) {
-
- List<YangLeafList> listOfLeafList = holder.getListOfLeafList();
- if (listOfLeafList != null) {
- for (YangLeafList yangLeafList : listOfLeafList) {
- if (yangLeafList.getName().equals(name.getName())) {
- return yangLeafList;
- }
- }
- }
- return null;
- }
-
- /**
- * Returns the root node from which the path with the atomic node names
- * has to be traversed through. With the ancestor count the nodes are
- * moved upward.
- *
- * @param count ancestor count
- * @param node current leaf-ref parent
- * @param leafRef YANG leaf-ref
- * @return root node from ancestor count
- * @throws DataModelException if there is a data model error
- */
- private static YangNode getRootNode(int count, YangNode node,
- YangLeafRef leafRef)
- throws DataModelException {
-
- YangNode curParent = node;
- int curCount = 0;
- while (curCount < count) {
- curCount = curCount + 1;
- if (curCount != 1) {
- if (curParent.getParent() == null) {
- throw getDataModelExc(INVALID_TREE, leafRef);
- }
- curParent = curParent.getParent();
- }
- curParent = skipInvalidDataNodes(curParent, leafRef);
- if (curParent instanceof YangAugment) {
- YangAugment augment = (YangAugment) curParent;
- curParent = augment.getAugmentedNode();
- curCount = curCount + 1;
- }
- }
- return curParent;
- }
-
- /**
- * Returns the last node by traversing through the atomic node id by
- * leaving the last target leaf/leaf-list.
- *
- * @param curNode current node
- * @param relPath relative path
- * @param leafRef YANG leaf-ref
- * @return last YANG node
- * @throws DataModelException if there is a data model error
- */
- private static Object getLastNode(YangNode curNode,
- YangRelativePath relPath,
- YangLeafRef leafRef)
- throws DataModelException {
-
- YangNode node = curNode;
- List<YangAtomicPath> atomics = new ArrayList<>();
- atomics.addAll(relPath.getAtomicPathList());
-
- if (atomics.isEmpty()) {
- throw getDataModelExc(EMPTY_PATH_LIST_ERR, leafRef);
- }
-
- YangAtomicPath pathTgt = atomics.get(atomics.size() - 1);
- if (atomics.size() == 1) {
- return getTarget(pathTgt.getNodeIdentifier(), node, leafRef);
- }
-
- atomics.remove(atomics.size() - 1);
- for (YangAtomicPath atomicPath : atomics) {
- node = getNode(node.getChild(), atomicPath.getNodeIdentifier());
- if (node == null) {
- throw getDataModelExc(INVALID_PATH_PRE, leafRef);
- }
- }
- return getTarget(pathTgt.getNodeIdentifier(), node, leafRef);
- }
-
- /**
- * Returns the node from the parent node by matching it with the atomic
- * name. If no child node matches the name then it returns null.
- *
- * @param curNode current node
- * @param identifier atomic name
- * @return node to be traversed
- */
- private static YangNode getNode(YangNode curNode,
- YangNodeIdentifier identifier) {
- YangNode node = curNode;
- while (node != null) {
- if (node.getName().equals(identifier.getName())) {
- return node;
- }
- node = node.getNextSibling();
- }
- return null;
- }
-
- /**
- * Sets the right axis node in the YANG path predicate after finding it
- * from the relative path.
- *
- * @param leafRef YANG leaf-ref
- * @param predicate YANG path predicate
- * @throws DataModelException if there is a data model error
- */
- private static void setRightAxisNode(YangLeafRef leafRef,
- YangPathPredicate predicate)
- throws DataModelException {
-
- YangNode parentNode = leafRef.getParentNode();
- YangRelativePath relPath = predicate.getRelPath();
- int ancestor = relPath.getAncestorNodeCount();
-
- YangNode rootNode = getRootNode(ancestor, parentNode, leafRef);
- Object target = getLastNode(rootNode, relPath, leafRef);
- if (target == null) {
- throw getDataModelExc(INVALID_PATH_PRE, leafRef);
- }
- predicate.setRightAxisNode(target);
- }
-
- /**
- * Returns data model error messages for leaf-ref with the path.
- *
- * @param msg error message
- * @param leafRef YANG leaf-ref
- * @return data model exception
- */
- private static DataModelException getDataModelExc(String msg,
- YangLeafRef leafRef) {
- DataModelException exc = new DataModelException(
- msg + leafRef.getPath());
- exc.setCharPosition(leafRef.getCharPosition());
- exc.setLine(leafRef.getLineNumber());
- return exc;
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/linker/impl/YangResolutionInfoImpl.java b/generator/src/main/java/org/onosproject/yangutils/linker/impl/YangResolutionInfoImpl.java
deleted file mode 100644
index 7c97805..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/linker/impl/YangResolutionInfoImpl.java
+++ /dev/null
@@ -1,1626 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.linker.impl;
-
-import org.onosproject.yangutils.datamodel.DefaultLocationInfo;
-import org.onosproject.yangutils.datamodel.Resolvable;
-import org.onosproject.yangutils.datamodel.RpcNotificationContainer;
-import org.onosproject.yangutils.datamodel.TraversalType;
-import org.onosproject.yangutils.datamodel.YangAtomicPath;
-import org.onosproject.yangutils.datamodel.YangAugment;
-import org.onosproject.yangutils.datamodel.YangAugmentableNode;
-import org.onosproject.yangutils.datamodel.YangBase;
-import org.onosproject.yangutils.datamodel.YangCompilerAnnotation;
-import org.onosproject.yangutils.datamodel.YangDerivedInfo;
-import org.onosproject.yangutils.datamodel.YangEntityToResolveInfoImpl;
-import org.onosproject.yangutils.datamodel.YangFeature;
-import org.onosproject.yangutils.datamodel.YangFeatureHolder;
-import org.onosproject.yangutils.datamodel.YangGrouping;
-import org.onosproject.yangutils.datamodel.YangIdentity;
-import org.onosproject.yangutils.datamodel.YangIdentityRef;
-import org.onosproject.yangutils.datamodel.YangIfFeature;
-import org.onosproject.yangutils.datamodel.YangImport;
-import org.onosproject.yangutils.datamodel.YangInclude;
-import org.onosproject.yangutils.datamodel.YangInput;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangLeafList;
-import org.onosproject.yangutils.datamodel.YangLeafRef;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeIdentifier;
-import org.onosproject.yangutils.datamodel.YangReferenceResolver;
-import org.onosproject.yangutils.datamodel.YangRelativePath;
-import org.onosproject.yangutils.datamodel.YangResolutionInfo;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.YangTypeDef;
-import org.onosproject.yangutils.datamodel.YangUses;
-import org.onosproject.yangutils.datamodel.YangXPathResolver;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.ResolvableStatus;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.linker.exceptions.LinkerException;
-
-import java.io.Serializable;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Stack;
-
-import static org.onosproject.yangutils.datamodel.ResolvableType.YANG_LEAFREF;
-import static org.onosproject.yangutils.datamodel.TraversalType.CHILD;
-import static org.onosproject.yangutils.datamodel.TraversalType.PARENT;
-import static org.onosproject.yangutils.datamodel.TraversalType.ROOT;
-import static org.onosproject.yangutils.datamodel.TraversalType.SIBILING;
-import static org.onosproject.yangutils.datamodel.YangPathArgType.ABSOLUTE_PATH;
-import static org.onosproject.yangutils.datamodel.YangPathArgType.RELATIVE_PATH;
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.getErrorMsg;
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.addResolutionInfo;
-import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.INTER_FILE_LINKED;
-import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.INTRA_FILE_RESOLVED;
-import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.LINKED;
-import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.RESOLVED;
-import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.UNDEFINED;
-import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.UNRESOLVED;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.PATH_DATA;
-import static org.onosproject.yangutils.linker.impl.XpathLinkingTypes.AUGMENT_LINKING;
-import static org.onosproject.yangutils.linker.impl.XpathLinkingTypes.LEAF_REF_LINKING;
-import static org.onosproject.yangutils.linker.impl.YangLinkerUtils.detectCollisionForAugmentedNode;
-import static org.onosproject.yangutils.linker.impl.YangLinkerUtils.fillPathPredicates;
-import static org.onosproject.yangutils.linker.impl.YangLinkerUtils.getErrorInfoForLinker;
-import static org.onosproject.yangutils.linker.impl.YangLinkerUtils.getLeafRefErrorInfo;
-import static org.onosproject.yangutils.linker.impl.YangLinkerUtils.getPathWithAugment;
-import static org.onosproject.yangutils.linker.impl.YangLinkerUtils.getValidNodeIdentifier;
-import static org.onosproject.yangutils.linker.impl.YangLinkerUtils.skipInvalidDataNodes;
-import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.FAILED_TO_FIND_ANNOTATION;
-import static org.onosproject.yangutils.utils.UtilConstants.FAILED_TO_FIND_LEAD_INFO_HOLDER;
-import static org.onosproject.yangutils.utils.UtilConstants.FAILED_TO_LINK;
-import static org.onosproject.yangutils.utils.UtilConstants.INVALID_ENTITY;
-import static org.onosproject.yangutils.utils.UtilConstants.INVALID_LINKER_STATE;
-import static org.onosproject.yangutils.utils.UtilConstants.INVALID_RESOLVED_ENTITY;
-import static org.onosproject.yangutils.utils.UtilConstants.INVALID_TARGET;
-import static org.onosproject.yangutils.utils.UtilConstants.INVALID_TREE;
-import static org.onosproject.yangutils.utils.UtilConstants.LEAFREF;
-import static org.onosproject.yangutils.utils.UtilConstants.LINKER_ERROR;
-import static org.onosproject.yangutils.utils.UtilConstants.SLASH_FOR_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.UNRESOLVABLE;
-
-/**
- * Represents implementation of resolution object which will be resolved by
- * linker.
- *
- * @param <T> type of resolution entity uses / type
- */
-public class YangResolutionInfoImpl<T> extends DefaultLocationInfo
- implements YangResolutionInfo<T>, Serializable {
-
- private static final long serialVersionUID = 806201658L;
-
- /**
- * Information about the entity that needs to be resolved.
- */
- private YangEntityToResolveInfoImpl<T> entityToResolveInfo;
-
- /**
- * Current module/sub-module reference, will be used in inter-file/
- * inter-jar scenario to get the import/include list.
- */
- private YangReferenceResolver curRefResolver;
-
- /**
- * Stack for type/uses is maintained for hierarchical references, this is
- * used during resolution.
- */
- private Stack<YangEntityToResolveInfoImpl<T>> partialResolvedStack;
-
- /**
- * It is private to ensure the overloaded method be invoked to create an
- * object.
- */
- @SuppressWarnings("unused")
- private YangResolutionInfoImpl() {
- }
-
- /**
- * Creates a resolution information object with all the inputs.
- *
- * @param dataNode current parsable data node
- * @param holderNode parent YANG node
- * @param lineNumber error line number
- * @param charPositionInLine error character position in line
- */
- public YangResolutionInfoImpl(T dataNode, YangNode holderNode, int lineNumber,
- int charPositionInLine) {
- entityToResolveInfo = new YangEntityToResolveInfoImpl<>();
- entityToResolveInfo.setEntityToResolve(dataNode);
- entityToResolveInfo.setHolderOfEntityToResolve(holderNode);
- setLineNumber(lineNumber);
- setCharPosition(charPositionInLine);
- partialResolvedStack = new Stack<>();
- }
-
- @Override
- public void resolveLinkingForResolutionInfo(YangReferenceResolver dataModelRootNode)
- throws DataModelException {
-
- curRefResolver = dataModelRootNode;
- /*
- * Current node to resolve, it can be a YANG type, YANG uses or YANG if-feature or
- * YANG leafref or YANG base or YANG identityref.
- */
- T entityToResolve = entityToResolveInfo.getEntityToResolve();
-
- // Check if linking is already done
- if (entityToResolve instanceof Resolvable) {
- Resolvable resolvable = (Resolvable) entityToResolve;
- if (resolvable.getResolvableStatus() == RESOLVED) {
- /*
- * entity is already resolved, so nothing to do
- */
- return;
- }
- } else {
- throw new DataModelException(LINKER_ERROR);
- }
- // Push the initial entity to resolve in stack.
- addInPartialResolvedStack(entityToResolveInfo);
- linkAndResolvePartialResolvedStack();
- addDerivedRefTypeToRefTypeResolutionList();
- }
-
- /**
- * Resolves linking with ancestors.
- *
- * @throws DataModelException a violation of data model rules
- */
- private void linkAndResolvePartialResolvedStack()
- throws DataModelException {
-
- while (!partialResolvedStack.isEmpty()) {
- /*
- * Current node to resolve, it can be a YANG type or YANG uses or
- * YANG if-feature or YANG leafref or YANG base or YANG identityref.
- */
- T entityToResolve = getCurEntityToResolveFromStack();
- if (!(entityToResolve instanceof Resolvable)) {
- throw new DataModelException(LINKER_ERROR);
- }
- // Check if linking is already done
- Resolvable resolvable = (Resolvable) entityToResolve;
- switch (resolvable.getResolvableStatus()) {
- case RESOLVED:
- /*
- * If the entity is already resolved in the stack, then pop
- * it and continue with the remaining stack elements to
- * resolve
- */
- partialResolvedStack.pop();
- break;
-
- case LINKED:
- /*
- * If the top of the stack is already linked then resolve
- * the references and pop the entity and continue with
- * remaining stack elements to resolve.
- */
- resolveTopOfStack();
- partialResolvedStack.pop();
- break;
-
- case INTRA_FILE_RESOLVED:
- /*
- * Pop the top of the stack.
- */
- partialResolvedStack.pop();
- break;
-
- case UNRESOLVED:
- linkTopOfStackReferenceUpdateStack();
-
- if (resolvable.getResolvableStatus() == UNRESOLVED) {
- // If current entity is still not resolved, then
- // linking/resolution has failed.
- DataModelException ex =
- new DataModelException
- (getErrorInfoForLinker(resolvable));
- ex.setLine(getLineNumber());
- ex.setCharPosition(getCharPosition());
- throw ex;
- }
- break;
-
- default:
- throw new DataModelException(INVALID_LINKER_STATE);
- }
- }
- }
-
- /**
- * Adds leaf-ref to the resolution list, with different context if
- * leaf-ref is defined under derived type. Leaf-ref must be resolved from
- * where the typedef is referenced.
- */
- private void addDerivedRefTypeToRefTypeResolutionList()
- throws DataModelException {
-
- YangNode refNode = entityToResolveInfo.getHolderOfEntityToResolve();
- YangDerivedInfo info = getValidResolvableType();
-
- if (info == null) {
- return;
- }
-
- YangType<T> type =
- (YangType<T>) entityToResolveInfo.getEntityToResolve();
-
- T extType = (T) info.getReferredTypeDef().getTypeDefBaseType()
- .getDataTypeExtendedInfo();
-
- while (extType instanceof YangDerivedInfo) {
- info = (YangDerivedInfo) extType;
- extType = (T) info.getReferredTypeDef().getTypeDefBaseType()
- .getDataTypeExtendedInfo();
- }
- /*
- * Backup the leaf-ref info from derived type and deletes the derived
- * type info. Copies the backed up leaf-ref data to the actual type in
- * replacement of derived type. Adds to the resolution list in this
- * context.
- */
- addRefTypeInfo(extType, type, refNode);
- }
-
- /**
- * Returns the derived info if the holder is typedef, the entity is type
- * and the effective type is leaf-ref; null otherwise.
- *
- * @return derived info
- */
- private YangDerivedInfo<?> getValidResolvableType() {
-
- YangNode refNode = entityToResolveInfo.getHolderOfEntityToResolve();
- T entity = entityToResolveInfo.getEntityToResolve();
-
- if (!(refNode instanceof YangTypeDef) && entity instanceof YangType) {
- YangType<?> type = (YangType) entity;
- YangDerivedInfo<?> info =
- (YangDerivedInfo) type.getDataTypeExtendedInfo();
- YangDataTypes dataType = info.getEffectiveBuiltInType();
- if ((type.getResolvableStatus() == RESOLVED) &&
- (dataType == YangDataTypes.LEAFREF)) {
- return info;
- }
- }
- return null;
- }
-
- /**
- * Adds resolvable type (leaf-ref) info to resolution list.
- *
- * @param extType resolvable type
- * @param type YANG type
- * @param holder holder node
- * @throws DataModelException if there is a data model error
- */
- private void addRefTypeInfo(T extType, YangType<T> type, YangNode holder)
- throws DataModelException {
-
- type.resetYangType();
- type.setResolvableStatus(RESOLVED);
- type.setDataType(YangDataTypes.LEAFREF);
- type.setDataTypeName(LEAFREF);
- type.setDataTypeExtendedInfo(extType);
-
- YangLeafRef leafRef = (YangLeafRef) extType;
- (leafRef).setResolvableStatus(UNRESOLVED);
- leafRef.setParentNode(holder);
-
- YangResolutionInfoImpl info = new YangResolutionInfoImpl<>(
- leafRef, holder, getLineNumber(), getCharPosition());
- curRefResolver.addToResolutionList(info, YANG_LEAFREF);
- curRefResolver.resolveSelfFileLinking(YANG_LEAFREF);
- }
-
- /**
- * Resolves the current entity in the stack.
- */
- private void resolveTopOfStack()
- throws DataModelException {
- T entity = getCurEntityToResolveFromStack();
- List<T> entityToResolve = (List<T>) ((Resolvable) entity).resolve();
- if (entityToResolve != null && !entityToResolve.isEmpty()) {
- for (T anEntityToResolve : entityToResolve) {
- addUnresolvedEntitiesToResolutionList(anEntityToResolve);
- }
- }
- if (((Resolvable) entity).getResolvableStatus() != INTRA_FILE_RESOLVED &&
- ((Resolvable) entity).getResolvableStatus() != UNDEFINED) {
- // Sets the resolution status in inside the type/uses/if-feature/leafref.
- ((Resolvable) entity).setResolvableStatus(RESOLVED);
- }
- }
-
- /**
- * Adds the unresolved entities to the resolution list.
- *
- * @param entityToResolve entity to resolve
- * @throws DataModelException a violation of data model rules
- */
- private void addUnresolvedEntitiesToResolutionList(T entityToResolve)
- throws DataModelException {
- if (entityToResolve instanceof YangEntityToResolveInfoImpl) {
- YangEntityToResolveInfoImpl entityToResolveInfo
- = (YangEntityToResolveInfoImpl) entityToResolve;
- if (entityToResolveInfo.getEntityToResolve() instanceof YangLeafRef) {
- YangLeafRef leafref = (YangLeafRef) entityToResolveInfo
- .getEntityToResolve();
- YangNode parentNodeOfLeafref = entityToResolveInfo
- .getHolderOfEntityToResolve();
- leafref.setParentNode(parentNodeOfLeafref);
- if (leafref.getResolvableStatus() == UNRESOLVED) {
- leafref.setResolvableStatus(INTRA_FILE_RESOLVED);
- }
- }
-
- // Add resolution information to the list.
- YangResolutionInfoImpl resolutionInfoImpl = new YangResolutionInfoImpl<>(
- entityToResolveInfo.getEntityToResolve(),
- entityToResolveInfo.getHolderOfEntityToResolve(),
- entityToResolveInfo.getLineNumber(),
- entityToResolveInfo.getCharPosition());
- addResolutionInfo(resolutionInfoImpl);
- }
- }
-
- /**
- * Resolves linking for a node child and siblings.
- *
- * @throws DataModelException data model error
- */
- private void linkTopOfStackReferenceUpdateStack()
- throws DataModelException {
- T entity = getCurEntityToResolveFromStack();
- if (entity instanceof YangLeafRef) {
- ((Resolvable) entity).setResolvableStatus(INTRA_FILE_RESOLVED);
- return;
- }
- /*
- * Check if self file reference is there, this will not check for the
- * scenario when prefix is not present and type/uses is present in
- * sub-module from include list.
- */
- if (!isCandidateForSelfFileReference()) {
- ((Resolvable) entity).setResolvableStatus(INTRA_FILE_RESOLVED);
- return;
- }
-
- /*
- * Try to resolve the top of the stack and update partial resolved stack
- * if there is recursive references
- */
- YangNode ancestorRefNode = partialResolvedStack.peek()
- .getHolderOfEntityToResolve();
-
- if (entity instanceof YangIfFeature) {
- resolveSelfFileLinkingForIfFeature(ancestorRefNode);
- return;
- }
- if (entity instanceof YangIdentityRef || entity instanceof YangBase) {
- resolveSelfFileLinkingForBaseAndIdentityref();
- return;
- }
- YangType type = null;
- if (entity instanceof YangType) {
- type = (YangType) entity;
- }
- /*
- * Traverse up in the ancestor tree to check if the referred node is
- * defined
- */
- while (ancestorRefNode != null) {
- /*
- * Check for the referred node defined in a ancestor scope
- */
- YangNode curRefNode = ancestorRefNode.getChild();
- if (isReferredNodeInSiblingListProcessed(curRefNode)) {
- return;
- }
- ancestorRefNode = ancestorRefNode.getParent();
- if (type != null && ancestorRefNode != null) {
- if (ancestorRefNode.getParent() == null) {
- type.setTypeNotResolvedTillRootNode(true);
- }
- }
- }
-
- /*
- * In case prefix is not present or it's self prefix it's a candidate for inter-file
- * resolution via include list.
- */
- if (getRefPrefix() == null ||
- getRefPrefix().contentEquals(curRefResolver.getPrefix())) {
- ((Resolvable) entity).setResolvableStatus(INTRA_FILE_RESOLVED);
- }
- }
-
- /**
- * Resolves self file linking for base/identityref.
- *
- * @throws DataModelException a violation of data model rules
- */
- private void resolveSelfFileLinkingForBaseAndIdentityref()
- throws DataModelException {
-
- boolean refIdentity = false;
- String nodeName = null;
- T entity = getCurEntityToResolveFromStack();
- if (entity instanceof YangIdentityRef) {
- nodeName = ((YangIdentityRef) entity).getName();
- } else if (entity instanceof YangBase) {
- nodeName = ((YangBase) entity).getBaseIdentifier().getName();
- }
- if (curRefResolver instanceof RpcNotificationContainer) {
- // Sends list of nodes for finding the target identity.
- refIdentity = isIdentityReferenceFound(nodeName, (YangNode) curRefResolver);
- }
- if (refIdentity) {
- return;
- }
-
- /*
- * In case prefix is not present or it's self prefix it's a candidate for inter-file
- * resolution via include list.
- */
- if (getRefPrefix() == null || getRefPrefix()
- .contentEquals(curRefResolver.getPrefix())) {
- ((Resolvable) entity).setResolvableStatus(INTRA_FILE_RESOLVED);
- }
- }
-
- /**
- * Resolves self file linking for if-feature.
- *
- * @param ancestorRefNode if-feature holder node
- * @throws DataModelException DataModelException a violation of data model
- * rules
- */
- private void resolveSelfFileLinkingForIfFeature(YangNode ancestorRefNode)
- throws DataModelException {
-
- YangFeatureHolder featureHolder = getFeatureHolder(ancestorRefNode);
- YangNode curRefNode = (YangNode) featureHolder;
- if (isReferredNode(curRefNode)) {
-
- // Adds reference link of entity to the node under resolution.
- addReferredEntityLink(curRefNode, LINKED);
-
- /*
- * resolve the reference and update the partial resolution stack
- * with any further recursive references
- */
- addUnresolvedRecursiveReferenceToStack(curRefNode);
- return;
- }
-
- /*
- * In case prefix is not present or it's self prefix it's a candidate for inter-file
- * resolution via include list.
- */
- if (getRefPrefix() == null || getRefPrefix()
- .contentEquals(curRefResolver.getPrefix())) {
- ((Resolvable) getCurEntityToResolveFromStack())
- .setResolvableStatus(INTRA_FILE_RESOLVED);
- }
- }
-
- /**
- * Returns the status of the referred identity found for base/identityref.
- *
- * @param nodeName the name of the base node
- * identifier/identityref node identifier
- * @param ancestorRefNode the parent node of base/identityref
- * @return status of referred base/identityref
- * @throws DataModelException a violation of data model rules
- */
- private boolean isIdentityReferenceFound(String nodeName, YangNode ancestorRefNode)
- throws DataModelException {
-
- // When child is not present return.
- if (ancestorRefNode.getChild() == null) {
- return false;
- }
-
- ancestorRefNode = ancestorRefNode.getChild();
-
- // Checks all the siblings under the node and returns the matched node.
- YangNode nodeFound = isReferredNodeInSiblingProcessedForIdentity(ancestorRefNode,
- nodeName);
-
- if (nodeFound != null) {
- // Adds reference link of entity to the node under resolution.
- addReferredEntityLink(nodeFound, LINKED);
-
- /*
- * resolve the reference and update the partial resolution stack with any further recursive references
- */
- addUnresolvedRecursiveReferenceToStack(nodeFound);
- return true;
- }
-
- return false;
- }
-
- /**
- * Adds the unresolved constructs to stack which has to be resolved for leafref.
- *
- * @param leavesInfo YANG leaf or leaf list which holds the type
- * @param ancestorRefNode holder of the YANG leaf or leaf list
- */
- private void addUnResolvedLeafRefTypeToStack(T leavesInfo, YangNode ancestorRefNode) {
-
- YangType refType;
- T extendedInfo;
- if (leavesInfo instanceof YangLeaf) {
- YangLeaf leaf = (YangLeaf) leavesInfo;
- refType = leaf.getDataType();
- } else {
- YangLeafList leafList = (YangLeafList) leavesInfo;
- refType = leafList.getDataType();
- }
- extendedInfo = (T) refType.getDataTypeExtendedInfo();
- addUnResolvedTypeDataToStack(refType, ancestorRefNode, extendedInfo);
- }
-
- //Adds unresolved type info to stack.
- private void addUnResolvedTypeDataToStack(YangType refType, YangNode
- ancestorRefNode, T extendedInfo) {
- YangEntityToResolveInfoImpl<YangLeafRef<?>> unResolvedLeafRef =
- new YangEntityToResolveInfoImpl<>();
- YangEntityToResolveInfoImpl<YangType<?>> unResolvedTypeDef =
- new YangEntityToResolveInfoImpl<>();
- if (refType.getDataType() == YangDataTypes.LEAFREF) {
- unResolvedLeafRef.setEntityToResolve((YangLeafRef<?>) extendedInfo);
- unResolvedLeafRef.setHolderOfEntityToResolve(ancestorRefNode);
- addInPartialResolvedStack((YangEntityToResolveInfoImpl<T>) unResolvedLeafRef);
- } else if (refType.getDataType() == YangDataTypes.DERIVED) {
- unResolvedTypeDef.setEntityToResolve(refType);
- unResolvedTypeDef.setHolderOfEntityToResolve(ancestorRefNode);
- addInPartialResolvedStack((YangEntityToResolveInfoImpl<T>) unResolvedTypeDef);
- }
- }
-
- /**
- * Returns feature holder(module/sub-module node) .
- *
- * @param ancestorRefNode if-feature holder node
- */
- private YangFeatureHolder getFeatureHolder(YangNode ancestorRefNode) {
- while (ancestorRefNode != null) {
- if (ancestorRefNode instanceof YangFeatureHolder) {
- return (YangFeatureHolder) ancestorRefNode;
- }
- ancestorRefNode = ancestorRefNode.getParent();
- }
- return null;
- }
-
- /**
- * Checks if the reference in self file or in external file.
- *
- * @return true if self file reference, false otherwise
- * @throws DataModelException a violation of data model rules
- */
- private boolean isCandidateForSelfFileReference()
- throws DataModelException {
- String prefix = getRefPrefix();
- return prefix == null || prefix.contentEquals(curRefResolver.getPrefix());
- }
-
- /**
- * Checks for the referred parent node for the base/identity.
- *
- * @param refNode potential referred node
- * @return the referred parent node of base/identity.
- * @throws DataModelException data model errors
- */
- private YangNode isReferredNodeInSiblingProcessedForIdentity(YangNode refNode,
- String refName)
- throws DataModelException {
-
- while (refNode != null) {
- if (refNode instanceof YangIdentity) {
- // Check if the potential referred node is the actual referred node
- if (isReferredNodeForIdentity(refNode, refName)) {
- return refNode;
- }
- }
- refNode = refNode.getNextSibling();
- }
- return null;
- }
-
- /**
- * Checks if the current reference node name and the name in the base/identityref base are equal.
- *
- * @param curRefNode the node where the reference is pointed
- * @param name name of the base in the base/identityref base
- * @return status of the match between the name
- * @throws DataModelException a violation of data model rules
- */
- private boolean isReferredNodeForIdentity(YangNode curRefNode, String name)
- throws DataModelException {
- T entity = getCurEntityToResolveFromStack();
- if (entity instanceof YangIdentityRef || entity instanceof YangBase) {
-
- //Check if name of node name matches with the current reference node.
- return curRefNode.getName().contentEquals(name);
- } else {
- throw new DataModelException(getErrorMsg(
- INVALID_ENTITY, curRefNode.getName(), curRefNode.getLineNumber(),
- curRefNode.getCharPosition(), curRefNode.getFileName()));
- }
- }
-
- /**
- * Checks for the referred node defined in a ancestor scope.
- *
- * @param refNode potential referred node
- * @return status of resolution and updating the partial resolved stack with
- * the any recursive references
- * @throws DataModelException a violation of data model rules
- */
- private boolean isReferredNodeInSiblingListProcessed(YangNode refNode)
- throws DataModelException {
- while (refNode != null) {
-
- // Check if the potential referred node is the actual referred node
- if (isReferredNode(refNode)) {
-
- // Adds reference link of entity to the node under resolution.
- addReferredEntityLink(refNode, LINKED);
-
- /*
- * resolve the reference and update the partial resolution stack
- * with any further recursive references
- */
- addUnresolvedRecursiveReferenceToStack(refNode);
-
- /*
- * return true, since the reference is linked and any recursive
- * unresolved references is added to the stack
- */
- return true;
- }
-
- refNode = refNode.getNextSibling();
- }
- return false;
- }
-
- /**
- * Checks if the potential referred node is the actual referred node.
- *
- * @param refNode typedef/grouping node
- * @return true if node is of resolve type otherwise false
- * @throws DataModelException a violation of data model rules
- */
- private boolean isReferredNode(YangNode refNode)
- throws DataModelException {
- T entity = getCurEntityToResolveFromStack();
- if (entity instanceof YangType) {
- if (refNode instanceof YangTypeDef) {
- return isNodeNameSameAsResolutionInfoName(refNode);
- }
- } else if (entity instanceof YangUses) {
- if (refNode instanceof YangGrouping) {
- return isNodeNameSameAsResolutionInfoName(refNode);
- }
- } else if (entity instanceof YangIfFeature) {
- if (refNode instanceof YangFeatureHolder) {
- return isNodeNameSameAsResolutionInfoName(refNode);
- }
- } else if (entity instanceof YangBase || entity instanceof YangIdentityRef) {
- if (refNode instanceof YangIdentity) {
- return isNodeNameSameAsResolutionInfoName(refNode);
- }
- } else {
- throw new DataModelException(getErrorMsg(
- LINKER_ERROR, refNode.getName(), refNode.getLineNumber(),
- refNode.getCharPosition(), refNode.getFileName()));
- }
- return false;
- }
-
- /**
- * Checks if node name is same as name in resolution info, i.e. name of
- * typedef/grouping is same as name of type/uses.
- *
- * @param node typedef/grouping node
- * @return true if node name is same as name in resolution info, otherwise
- * false
- * @throws DataModelException a violation of data model rules
- */
-
- private boolean isNodeNameSameAsResolutionInfoName(YangNode node)
- throws DataModelException {
- T entity = getCurEntityToResolveFromStack();
- if (entity instanceof YangType) {
- return node.getName().contentEquals(((YangType<?>) entity)
- .getDataTypeName());
- }
- if (entity instanceof YangUses) {
- return node.getName().contentEquals(((YangUses) entity).getName());
- }
- if (entity instanceof YangIfFeature) {
- return isFeatureDefinedInNode(node);
- }
- if (entity instanceof YangBase) {
- return node.getName().contentEquals(((
- YangBase) entity).getBaseIdentifier().getName());
- }
- if (entity instanceof YangIdentityRef) {
- return node.getName().contentEquals(((YangIdentityRef) entity).getName());
- }
- throw new DataModelException(getErrorMsg(
- INVALID_RESOLVED_ENTITY, node.getName(), node.getLineNumber(),
- node.getCharPosition(), node.getFileName()));
- }
-
- private boolean isFeatureDefinedInNode(YangNode node) {
- T entity = getCurEntityToResolveFromStack();
- YangNodeIdentifier ifFeature = ((YangIfFeature) entity).getName();
- List<YangFeature> featureList = ((YangFeatureHolder) node).getFeatureList();
- if (featureList != null && !featureList.isEmpty()) {
- Iterator<YangFeature> iterator = featureList.iterator();
- while (iterator.hasNext()) {
- YangFeature feature = iterator.next();
- if (ifFeature.getName().equals(feature.getName())) {
- ((YangIfFeature) entity).setReferredFeature(feature);
- ((YangIfFeature) entity).setReferredFeatureHolder(node);
- return true;
- }
- }
- }
- return false;
- }
-
- /**
- * Adds reference of grouping/typedef in uses/type.
- *
- * @param refNode grouping/typedef node being referred
- * @param linkedStatus linked status if success.
- * @throws DataModelException a violation of data model rules
- */
- private void addReferredEntityLink(YangNode refNode, ResolvableStatus linkedStatus)
- throws DataModelException {
- T entity = getCurEntityToResolveFromStack();
- if (entity instanceof YangType) {
- YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) ((
- YangType<?>) entity).getDataTypeExtendedInfo();
- derivedInfo.setReferredTypeDef((YangTypeDef) refNode);
- } else if (entity instanceof YangUses) {
- ((YangUses) entity).setRefGroup((YangGrouping) refNode);
- } else if (entity instanceof YangBase) {
- ((YangBase) entity).setReferredIdentity((YangIdentity) refNode);
- } else if (entity instanceof YangIdentityRef) {
- ((YangIdentityRef) entity).setReferredIdentity((YangIdentity) refNode);
- } else if (!(entity instanceof YangIfFeature) &&
- !(entity instanceof YangLeafRef)) {
- throw new DataModelException(getErrorMsg(
- LINKER_ERROR, refNode.getName(), refNode.getLineNumber(),
- refNode.getCharPosition(), refNode.getFileName()));
- }
- // Sets the resolution status in inside the type/uses.
- ((Resolvable) entity).setResolvableStatus(linkedStatus);
- }
-
- /**
- * Checks if type/grouping has further reference to typedef/ unresolved
- * uses. Add it to the partial resolve stack and return the status of
- * addition to stack.
- *
- * @param refNode grouping/typedef node
- * @throws DataModelException a violation of data model rules
- */
- private void addUnresolvedRecursiveReferenceToStack(YangNode refNode)
- throws DataModelException {
- T entity = getCurEntityToResolveFromStack();
- if (entity instanceof YangType) {
-
- //Checks if typedef type is derived
- if (((YangTypeDef) refNode).getTypeDefBaseType()
- .getDataType() == YangDataTypes.DERIVED) {
- addEntityToStack((T) ((YangTypeDef) refNode).getTypeDefBaseType(),
- refNode);
- }
- } else if (entity instanceof YangUses) {
- /*
- * Search if the grouping has any un resolved uses child, if so
- * return true, else return false.
- */
- addUnResolvedUsesToStack(refNode);
- } else if (entity instanceof YangIfFeature) {
- addUnResolvedIfFeatureToStack(refNode);
- } else if (entity instanceof YangLeafRef) {
- // do nothing , referred node is already set
- throw new DataModelException(getErrorMsg(
- INVALID_RESOLVED_ENTITY, refNode.getName(), refNode.getLineNumber(),
- refNode.getCharPosition(), refNode.getFileName()));
- } else if (entity instanceof YangBase || entity instanceof YangIdentityRef) {
-
- //Search if the identity has any un resolved base, if so return true, else return false.
- addUnResolvedBaseToStack(refNode);
- } else {
- throw new DataModelException(getErrorMsg(
- LINKER_ERROR, refNode.getName(), refNode.getLineNumber(),
- refNode.getCharPosition(), refNode.getFileName()));
-
- }
- }
-
- /**
- * Returns if there is any unresolved uses in grouping.
- *
- * @param node grouping/typedef node
- */
- private void addUnResolvedUsesToStack(YangNode node) {
-
- //Search the grouping node's children for presence of uses node.
- TraversalType curTraversal = ROOT;
- YangNode curNode = node.getChild();
- while (curNode != null) {
- if (curNode.getName().equals(node.getName())) {
- // if we have traversed all the child nodes, then exit from loop
- return;
- }
-
- // if child nodes has uses, then add it to resolution stack
- if (curNode instanceof YangUses) {
- addEntityToStack((T) curNode, node);
- }
-
- // Traversing all the child nodes of grouping
- if (curTraversal != PARENT && curNode.getChild() != null) {
- curTraversal = CHILD;
- curNode = curNode.getChild();
- } else if (curNode.getNextSibling() != null) {
- curTraversal = SIBILING;
- curNode = curNode.getNextSibling();
- } else {
- curTraversal = PARENT;
- curNode = curNode.getParent();
- }
- }
- }
-
- /**
- * Returns if there is any unresolved if-feature in feature.
- *
- * @param node module/submodule node
- */
- private void addUnResolvedIfFeatureToStack(YangNode node) {
- YangFeature refFeature = ((YangIfFeature) getCurEntityToResolveFromStack())
- .getReferredFeature();
- List<YangIfFeature> ifFeatureList = refFeature.getIfFeatureList();
- if (ifFeatureList != null && !ifFeatureList.isEmpty()) {
- Iterator<YangIfFeature> ifFeatureIterator = ifFeatureList.iterator();
- while (ifFeatureIterator.hasNext()) {
- addEntityToStack((T) ifFeatureIterator.next(), node);
- }
- }
- }
-
- /**
- * Returns if there is any unresolved base in identity.
- *
- * @param node module/submodule node
- */
- private void addUnResolvedBaseToStack(YangNode node) {
-
- YangIdentity curNode = (YangIdentity) node;
- if (curNode.getBaseNode() != null) {
- if (curNode.getBaseNode().getResolvableStatus() != RESOLVED) {
- addEntityToStack((T) curNode.getBaseNode(), node);
- }
- }
- }
-
- private void addEntityToStack(T entity, YangNode holder) {
- YangEntityToResolveInfoImpl<T> unResolvedEntityInfo =
- new YangEntityToResolveInfoImpl<>();
- unResolvedEntityInfo.setEntityToResolve(entity);
- unResolvedEntityInfo.setHolderOfEntityToResolve(holder);
- addInPartialResolvedStack(unResolvedEntityInfo);
- }
-
- /**
- * Sets stack of YANG type with partially resolved YANG construct hierarchy.
- *
- * @param partialResolvedInfo partial resolved YANG construct stack
- */
- private void addInPartialResolvedStack(YangEntityToResolveInfoImpl<T> partialResolvedInfo) {
- partialResolvedStack.push(partialResolvedInfo);
- }
-
- /**
- * Retrieves the next entity in the stack that needs to be resolved. It is
- * assumed that the caller ensures that the stack is not empty.
- *
- * @return next entity in the stack that needs to be resolved
- */
- private T getCurEntityToResolveFromStack() {
- return partialResolvedStack.peek().getEntityToResolve();
- }
-
- @Override
- public YangEntityToResolveInfoImpl<T> getEntityToResolveInfo() {
- return entityToResolveInfo;
- }
-
- @Override
- public void linkInterFile(YangReferenceResolver dataModelRootNode)
- throws DataModelException {
-
- curRefResolver = dataModelRootNode;
-
- // Current node to resolve, it can be a YANG type or YANG uses.
- T entityToResolve = entityToResolveInfo.getEntityToResolve();
-
- // Check if linking is already done
- if (entityToResolve instanceof Resolvable) {
- Resolvable resolvable = (Resolvable) entityToResolve;
- if (resolvable.getResolvableStatus() == RESOLVED) {
- return;
- }
- } else {
- throw new DataModelException(UNRESOLVABLE);
- }
-
- if (entityToResolve instanceof YangXPathResolver &&
- !(entityToResolve instanceof YangLeafRef)) {
- //Process x-path linking.
- processXPathLinking(entityToResolve, dataModelRootNode);
-
- } else {
- // Push the initial entity to resolve in stack.
- addInPartialResolvedStack(entityToResolveInfo);
- // Inter file linking and resolution.
- linkInterFileAndResolve();
- addDerivedRefTypeToRefTypeResolutionList();
- }
- }
-
- /**
- * Process x-path linking for augment and leaf-ref.
- *
- * @param entityToResolve entity to resolve
- * @param root root node
- * @throws DataModelException if there is a data model error
- */
- private void processXPathLinking(T entityToResolve,
- YangReferenceResolver root)
- throws DataModelException {
-
- YangXpathLinker<T> xPathLinker = new YangXpathLinker<T>();
-
- if (entityToResolve instanceof YangAugment) {
- YangNode targetNode;
- YangAugment augment = (YangAugment) entityToResolve;
- targetNode = xPathLinker
- .processXpathLinking(augment.getTargetNode(), (YangNode)
- root, AUGMENT_LINKING);
- if (targetNode != null) {
- if (targetNode instanceof YangAugmentableNode) {
- detectCollisionForAugmentedNode(targetNode, augment);
- ((YangAugmentableNode) targetNode).addAugmentation(augment);
- augment.setAugmentedNode(targetNode);
- setAugmentedFlagInAncestors(targetNode);
- Resolvable resolvable = (Resolvable) entityToResolve;
- resolvable.setResolvableStatus(RESOLVED);
- if (targetNode instanceof YangInput) {
- xPathLinker.addInModuleIfInput(augment, (YangNode) root);
- }
- } else {
- throw new LinkerException(getErrorMsg(
- INVALID_TARGET + targetNode.getNodeType(),
- augment.getName(), augment.getLineNumber(),
- augment.getCharPosition(), augment.getFileName()));
- }
- } else {
- throw new LinkerException(getErrorMsg(
- FAILED_TO_LINK, augment.getName(), augment
- .getLineNumber(), augment.getCharPosition(),
- augment.getFileName()));
- }
- } else if (entityToResolve instanceof YangCompilerAnnotation) {
- YangNode targetNode;
- YangCompilerAnnotation ca = (YangCompilerAnnotation) entityToResolve;
- targetNode = xPathLinker.processXpathLinking(ca.getAtomicPathList(),
- (YangNode) root,
- AUGMENT_LINKING);
- if (targetNode != null) {
- if (targetNode instanceof YangList) {
- ((YangList) targetNode).setCompilerAnnotation(
- (YangCompilerAnnotation) entityToResolve);
- Resolvable resolvable = (Resolvable) entityToResolve;
- resolvable.setResolvableStatus(RESOLVED);
- } else {
- throw new LinkerException(getErrorMsg(
- INVALID_TARGET + targetNode.getNodeType(), ca.getPath(),
- ca.getLineNumber(), ca.getCharPosition(), ca.getFileName()));
- }
- } else {
- throw new LinkerException(getErrorMsg(
- FAILED_TO_FIND_ANNOTATION, ca.getPath(), ca.getLineNumber(),
- ca.getCharPosition(), ca.getFileName()));
- }
- } else if (entityToResolve instanceof YangLeafRef) {
- YangLeafRef leafRef = (YangLeafRef) entityToResolve;
- Object target = xPathLinker.processLeafRefXpathLinking(
- leafRef.getAtomicPath(), (YangNode) root, leafRef, LEAF_REF_LINKING);
- if (target != null) {
- YangLeaf leaf;
- YangLeafList leafList;
- leafRef.setReferredLeafOrLeafList(target);
- if (target instanceof YangLeaf) {
- leaf = (YangLeaf) target;
- leafRef.setResolvableStatus(INTER_FILE_LINKED);
- addUnResolvedLeafRefTypeToStack((T) leaf, entityToResolveInfo
- .getHolderOfEntityToResolve());
- } else {
- leafList = (YangLeafList) target;
- leafRef.setResolvableStatus(INTER_FILE_LINKED);
- addUnResolvedLeafRefTypeToStack(
- (T) leafList, entityToResolveInfo.getHolderOfEntityToResolve());
- }
- fillPathPredicates(leafRef);
- } else {
- LinkerException ex = new LinkerException(
- FAILED_TO_FIND_LEAD_INFO_HOLDER + leafRef.getPath());
- ex.setCharPosition(leafRef.getCharPosition());
- ex.setLine(leafRef.getLineNumber());
- ex.setFileName(leafRef.getFileName());
- throw ex;
- }
- }
- }
-
- /**
- * Returns the referenced prefix of entity under resolution.
- *
- * @return referenced prefix of entity under resolution
- * @throws DataModelException a violation in data model rule
- */
- private String getRefPrefix()
- throws DataModelException {
- T entity = getCurEntityToResolveFromStack();
- if (entity instanceof YangType) {
- return ((YangType<?>) entity).getPrefix();
- }
- if (entity instanceof YangUses) {
- return ((YangUses) entity).getPrefix();
- }
- if (entity instanceof YangIfFeature) {
- return ((YangIfFeature) entity).getPrefix();
- }
- if (entity instanceof YangBase) {
- return ((YangBase) entity).getBaseIdentifier()
- .getPrefix();
- }
- if (entity instanceof YangIdentityRef) {
- return ((YangIdentityRef) entity).getPrefix();
- }
- throw new DataModelException(LINKER_ERROR);
- }
-
- /**
- * Performs inter file linking and resolution.
- *
- * @throws DataModelException a violation in data model rule
- */
- private void linkInterFileAndResolve()
- throws DataModelException {
-
- while (!partialResolvedStack.isEmpty()) {
-
- // Current node to resolve, it can be a YANG type or YANG uses.
- T entityToResolve = getCurEntityToResolveFromStack();
- // Check if linking is already done
- if (entityToResolve instanceof Resolvable) {
-
- Resolvable resolvable = (Resolvable) entityToResolve;
- switch (resolvable.getResolvableStatus()) {
- case RESOLVED:
- /*
- * If the entity is already resolved in the stack, then pop
- * it and continue with the remaining stack elements to
- * resolve
- */
- partialResolvedStack.pop();
- break;
-
- case INTER_FILE_LINKED:
- /*
- * If the top of the stack is already linked then resolve
- * the references and pop the entity and continue with
- * remaining stack elements to resolve
- */
- resolveTopOfStack();
- partialResolvedStack.pop();
- break;
-
- case INTRA_FILE_RESOLVED:
- /*
- * If the top of the stack is intra file resolved then check
- * if top of stack is linked, if not link it using
- * import/include list and push the linked referred entity
- * to the stack, otherwise only push it to the stack.
- */
- linkInterFileTopOfStackRefUpdateStack();
- break;
-
- case UNDEFINED:
- /*
- * In case of if-feature resolution, if referred "feature" is not
- * defined then the resolvable status will be undefined.
- */
- partialResolvedStack.pop();
- break;
-
- default:
- throw new DataModelException(INVALID_LINKER_STATE);
- }
- } else {
- throw new DataModelException(INVALID_RESOLVED_ENTITY);
- }
- }
- }
-
- /**
- * Links the top of the stack if it's inter-file and update stack.
- *
- * @throws DataModelException data model error
- */
- private void linkInterFileTopOfStackRefUpdateStack()
- throws DataModelException {
- T entity = getCurEntityToResolveFromStack();
- if (entity instanceof YangLeafRef) {
- // When leafref path comes with relative path, it will be converted to absolute path.
- setAbsolutePathFromRelativePathInLeafref(entity);
- processXPathLinking(entity, curRefResolver);
- return;
- }
- /*
- * Obtain the referred node of top of stack entity under resolution
- */
- T refNode = getRefNode();
-
- /*
- * Check for null for scenario when it's not linked and inter-file
- * linking is required.
- */
- if (refNode == null) {
-
- /*
- * Check if prefix is null or not, to identify whether to search in
- * import list or include list.
- */
- if (getRefPrefix() != null && !getRefPrefix()
- .contentEquals(curRefResolver.getPrefix())) {
- if (resolveWithImport()) {
- return;
- }
- } else {
- if (resolveWithInclude()) {
- return;
- }
- }
-
- if (entity instanceof YangIfFeature) {
- ((YangIfFeature) entity).setResolvableStatus(UNDEFINED);
- return;
- }
- // If current entity is still not resolved, then
- // linking/resolution has failed.
-
- DataModelException ex = new DataModelException(
- getErrorInfoForLinker(entity));
- ex.setLine(getLineNumber());
- ex.setCharPosition(getCharPosition());
- throw ex;
- } else {
- ((Resolvable) entity).setResolvableStatus(INTER_FILE_LINKED);
- addUnresolvedRecursiveReferenceToStack((YangNode) refNode);
- }
- }
-
- /**
- * Sets the leafref with absolute path from the relative path.
- *
- * @param resolutionInfo information about the YANG construct which has to be resolved
- * @throws DataModelException a violation of data model rules
- */
- private void setAbsolutePathFromRelativePathInLeafref(T resolutionInfo)
- throws DataModelException {
- if (resolutionInfo instanceof YangLeafRef) {
-
- YangNode leafParent = ((YangLeafRef) resolutionInfo)
- .getParentNode();
- YangLeafRef leafref = (YangLeafRef) resolutionInfo;
-
- // Checks if the leafref has relative path in it.
- if (leafref.getPathType() == RELATIVE_PATH) {
- YangRelativePath relativePath = leafref.getRelativePath();
- List<YangAtomicPath> absoluteInRelative = relativePath.getAtomicPathList();
- int ancestorCount = relativePath.getAncestorNodeCount();
-
- // Gets the root node from the ancestor count.
- T nodeOrAugmentList =
- getRootNodeWithAncestorCountForLeafref(ancestorCount, leafParent,
- leafref);
- if (nodeOrAugmentList instanceof YangNode) {
- StringBuilder name = new StringBuilder();
- StringBuilder prefix = new StringBuilder();
- YangNode rootNode = (YangNode) nodeOrAugmentList;
- // Forms a new absolute path from the relative path
- while (!(rootNode instanceof YangReferenceResolver)) {
- name.append(rootNode.getName());
- prefix.append(SLASH_FOR_STRING).append(name.reverse());
- name.delete(0, name.length());
- rootNode = rootNode.getParent();
- if (rootNode == null) {
- throw new DataModelException(INVALID_TREE);
- }
- }
- prefix.reverse();
- fillAbsolutePathValuesInLeafref(leafref, prefix.toString(),
- absoluteInRelative);
- } else {
- List<String> listOfAugment = (List<String>) nodeOrAugmentList;
- Iterator<String> listOfAugmentIterator = listOfAugment.listIterator();
- StringBuilder augment = new StringBuilder(EMPTY_STRING);
- while (listOfAugmentIterator.hasNext()) {
- augment.append(SLASH_FOR_STRING)
- .append(listOfAugmentIterator.next());
- }
- fillAbsolutePathValuesInLeafref(leafref, augment.toString(),
- absoluteInRelative);
- }
- }
- }
- }
-
- /**
- * Fills the absolute path values in the leafref from relative path.
- *
- * @param leafref instance of YANG leafref
- * @param path path name which has to be prefixed to relative path
- * @param relative atomic paths in relative
- * @throws DataModelException a violation of data model rules
- */
- private void fillAbsolutePathValuesInLeafref(YangLeafRef leafref, String path,
- List<YangAtomicPath> relative)
- throws DataModelException {
- leafref.setPathType(ABSOLUTE_PATH);
- String[] pathName = new String[0];
- if (path != null && !path.equals(EMPTY_STRING)) {
- pathName = path.split(SLASH_FOR_STRING);
- }
- List<YangAtomicPath> finalListForAbsolute = new LinkedList<>();
- for (String value : pathName) {
- if (value != null && !value.isEmpty() && !value.equals(EMPTY_STRING)) {
- YangNodeIdentifier nodeId = getValidNodeIdentifier(value, PATH_DATA);
- YangAtomicPath atomicPath = new YangAtomicPath();
- atomicPath.setNodeIdentifier(nodeId);
- finalListForAbsolute.add(atomicPath);
- }
- }
- if (relative != null && !relative.isEmpty()) {
- Iterator<YangAtomicPath> pathIt = relative.listIterator();
- while (pathIt.hasNext()) {
- YangAtomicPath yangAtomicPath = pathIt.next();
- finalListForAbsolute.add(yangAtomicPath);
- }
- leafref.setAtomicPath(finalListForAbsolute);
- } else {
- DataModelException ex = new DataModelException(getLeafRefErrorInfo(leafref));
- ex.setCharPosition(leafref.getCharPosition());
- ex.setLine(leafref.getLineNumber());
- ex.setFileName(leafref.getFileName());
- throw ex;
- }
- }
-
- /**
- * Returns the root parent with respect to the ancestor count from leafref.
- *
- * @param ancestorCount count of node where parent node can be reached
- * @param curParent current parent node
- * @param leafref instance of YANG leafref
- * @return node where the ancestor count stops or augment path name list
- * @throws DataModelException a violation of data model rules
- */
- private T getRootNodeWithAncestorCountForLeafref(
- int ancestorCount, YangNode curParent, YangLeafRef leafref)
- throws DataModelException {
-
- int curParentCount = 1;
- curParent = skipInvalidDataNodes(curParent, leafref);
- if (curParent instanceof YangAugment) {
- YangAugment augment = (YangAugment) curParent;
- List<String> valueInAugment = getPathWithAugment(augment,
- ancestorCount - curParentCount);
- return (T) valueInAugment;
- } else {
- while (curParentCount < ancestorCount) {
- YangNode currentSkippedParent = skipInvalidDataNodes(curParent, leafref);
- if (currentSkippedParent == curParent) {
- if (curParent.getParent() == null) {
- throw new DataModelException(getLeafRefErrorInfo(leafref));
- }
- curParent = curParent.getParent();
- } else {
- curParent = currentSkippedParent;
- continue;
- }
- curParentCount = curParentCount + 1;
- if (curParent instanceof YangAugment) {
- YangAugment augment = (YangAugment) curParent;
- List<String> valueInAugment = getPathWithAugment(
- augment, ancestorCount - curParentCount);
- return (T) valueInAugment;
- }
- }
- }
- return (T) curParent;
- }
-
- /**
- * Finds and resolves with include list.
- *
- * @return true if resolved, false otherwise
- * @throws DataModelException a violation in data model rule
- */
- private boolean resolveWithInclude() throws DataModelException {
- /*
- * Run through all the nodes in include list and search for referred
- * typedef/grouping at the root level.
- */
- for (YangInclude yangInclude : curRefResolver.getIncludeList()) {
- YangNode linkedNode = getLinkedNode(yangInclude.getIncludedNode());
- if (linkedNode != null) {
- return addUnResolvedRefToStack(linkedNode);
- }
- }
- // If referred node can't be found return false.
- return false;
- }
-
- /**
- * Finds and resolves with import list.
- *
- * @return true if resolved, false otherwise
- * @throws DataModelException a violation in data model rule
- */
- private boolean resolveWithImport() throws DataModelException {
-
- // Run through import list to find the referred typedef/grouping.
- for (YangImport yangImport : curRefResolver.getImportList()) {
- /*
- * Match the prefix attached to entity under resolution with the
- * imported/included module/sub-module's prefix. If found, search
- * for the referred typedef/grouping at the root level.
- */
- if (yangImport.getPrefixId().contentEquals(getRefPrefix())) {
- YangNode linkedNode = getLinkedNode(yangImport.getImportedNode());
- if (linkedNode != null) {
- return addUnResolvedRefToStack(linkedNode);
- }
- /*
- * If referred node can't be found at root level break for loop,
- * and return false.
- */
- break;
- }
- }
- // If referred node can't be found return false.
- return false;
- }
-
- //Add unresolved constructs to stack.
- private boolean addUnResolvedRefToStack(YangNode linkedNode)
- throws DataModelException {
- // Add the link to external entity.
- addReferredEntityLink(linkedNode, INTER_FILE_LINKED);
-
- // Add the type/uses of referred typedef/grouping to the stack.
- addUnresolvedRecursiveReferenceToStack(linkedNode);
- return true;
- }
-
- //Returns linked node from entity of stack.
- private YangNode getLinkedNode(YangNode node) {
- T entity = getCurEntityToResolveFromStack();
- if (entity instanceof YangType) {
- return findRefTypedef(node);
- }
- if (entity instanceof YangUses) {
- return findRefGrouping(node);
- }
- if (entity instanceof YangIfFeature) {
- return findRefFeature(node);
- }
- if (entity instanceof YangBase) {
- return findRefIdentity(node);
- }
- if (entity instanceof YangIdentityRef) {
- return findRefIdentityRef(node);
- }
- return null;
- }
-
- /**
- * Returns referred typedef/grouping node.
- *
- * @return referred typedef/grouping node
- * @throws DataModelException a violation in data model rule
- */
- private T getRefNode() throws DataModelException {
- T entity = getCurEntityToResolveFromStack();
- if (entity instanceof YangType) {
- YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>)
- ((YangType<?>) entity).getDataTypeExtendedInfo();
- return (T) derivedInfo.getReferredTypeDef();
- }
- if (entity instanceof YangUses) {
- return (T) ((YangUses) entity).getRefGroup();
- }
- if (entity instanceof YangIfFeature) {
- return (T) ((YangIfFeature) entity).getReferredFeatureHolder();
- }
- if (entity instanceof YangLeafRef) {
- return (T) ((YangLeafRef) entity).getReferredLeafOrLeafList();
- }
- if (entity instanceof YangBase) {
- return (T) ((YangBase) entity).getReferredIdentity();
- }
- if (entity instanceof YangIdentityRef) {
- return (T) ((YangIdentityRef) entity).getReferredIdentity();
- }
- throw new DataModelException(LINKER_ERROR);
-
- }
-
- /**
- * Finds the referred grouping node at the root level of imported/included node.
- *
- * @param refNode module/sub-module node
- * @return referred grouping
- */
- private YangNode findRefGrouping(YangNode refNode) {
- YangNode tmpNode = refNode.getChild();
- while (tmpNode != null) {
- if (tmpNode instanceof YangGrouping) {
- if (tmpNode.getName()
- .equals(((YangUses) getCurEntityToResolveFromStack())
- .getName())) {
- return tmpNode;
- }
- }
- tmpNode = tmpNode.getNextSibling();
- }
- return null;
- }
-
- /**
- * Finds the referred feature node at the root level of imported/included node.
- *
- * @param refNode module/sub-module node
- * @return referred feature
- */
- private YangNode findRefFeature(YangNode refNode) {
- T entity = getCurEntityToResolveFromStack();
- YangNodeIdentifier ifFeature = ((YangIfFeature) entity).getName();
- List<YangFeature> featureList = ((YangFeatureHolder) refNode)
- .getFeatureList();
- if (featureList != null && !featureList.isEmpty()) {
- for (YangFeature feature : featureList) {
- if (ifFeature.getName().equals(feature.getName())) {
- ((YangIfFeature) entity).setReferredFeature(feature);
- return refNode;
- }
- }
- }
- return null;
- }
-
- /**
- * Finds the referred typedef node at the root level of imported/included node.
- *
- * @param refNode module/sub-module node
- * @return referred typedef
- */
- private YangNode findRefTypedef(YangNode refNode) {
- YangNode tmpNode = refNode.getChild();
- while (tmpNode != null) {
- if (tmpNode instanceof YangTypeDef) {
- if (tmpNode.getName()
- .equals(((YangType) getCurEntityToResolveFromStack())
- .getDataTypeName())) {
- return tmpNode;
- }
- }
- tmpNode = tmpNode.getNextSibling();
- }
- return null;
- }
-
- /**
- * Finds the referred identity node at the root level of imported/included node.
- *
- * @param refNode module/sub-module node
- * @return referred identity
- */
- private YangNode findRefIdentity(YangNode refNode) {
- YangNode tmpNode = refNode.getChild();
- while (tmpNode != null) {
- if (tmpNode instanceof YangIdentity) {
- if (tmpNode.getName()
- .equals(((YangBase) getCurEntityToResolveFromStack())
- .getBaseIdentifier().getName())) {
- return tmpNode;
- }
- }
- tmpNode = tmpNode.getNextSibling();
- }
- return null;
- }
-
- /**
- * Finds the referred identity node at the root level of imported/included node.
- *
- * @param refNode module/sub-module node
- * @return referred identity
- */
- private YangNode findRefIdentityRef(YangNode refNode) {
- YangNode tmpNode = refNode.getChild();
- while (tmpNode != null) {
- if (tmpNode instanceof YangIdentity) {
- if (tmpNode.getName()
- .equals(((YangIdentityRef) getCurEntityToResolveFromStack())
- .getBaseIdentity().getName())) {
- return tmpNode;
- }
- }
- tmpNode = tmpNode.getNextSibling();
- }
- return null;
- }
-
- /**
- * Sets descendant node augmented flag in ancestors.
- *
- * @param targetNode augmented YANG node
- */
- private void setAugmentedFlagInAncestors(YangNode targetNode) {
- targetNode = targetNode.getParent();
- while (targetNode != null) {
- targetNode.setDescendantNodeAugmented(true);
- targetNode = targetNode.getParent();
- }
- }
-}
\ No newline at end of file
diff --git a/generator/src/main/java/org/onosproject/yangutils/linker/impl/YangXpathLinker.java b/generator/src/main/java/org/onosproject/yangutils/linker/impl/YangXpathLinker.java
deleted file mode 100644
index 4418012..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/linker/impl/YangXpathLinker.java
+++ /dev/null
@@ -1,776 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.linker.impl;
-
-import org.onosproject.yangutils.datamodel.LeafRefInvalidHolder;
-import org.onosproject.yangutils.datamodel.RpcNotificationContainer;
-import org.onosproject.yangutils.datamodel.YangAtomicPath;
-import org.onosproject.yangutils.datamodel.YangAugment;
-import org.onosproject.yangutils.datamodel.YangGrouping;
-import org.onosproject.yangutils.datamodel.YangImport;
-import org.onosproject.yangutils.datamodel.YangInclude;
-import org.onosproject.yangutils.datamodel.YangInput;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangLeafList;
-import org.onosproject.yangutils.datamodel.YangLeafRef;
-import org.onosproject.yangutils.datamodel.YangLeavesHolder;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeIdentifier;
-import org.onosproject.yangutils.datamodel.YangOutput;
-import org.onosproject.yangutils.datamodel.YangSubModule;
-import org.onosproject.yangutils.datamodel.YangUses;
-import org.onosproject.yangutils.linker.exceptions.LinkerException;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Stack;
-
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.getErrorMsg;
-import static org.onosproject.yangutils.linker.impl.PrefixResolverType.INTER_TO_INTER;
-import static org.onosproject.yangutils.linker.impl.PrefixResolverType.INTER_TO_INTRA;
-import static org.onosproject.yangutils.linker.impl.PrefixResolverType.INTRA_TO_INTER;
-import static org.onosproject.yangutils.linker.impl.PrefixResolverType.NO_PREFIX_CHANGE_FOR_INTER;
-import static org.onosproject.yangutils.linker.impl.PrefixResolverType.NO_PREFIX_CHANGE_FOR_INTRA;
-import static org.onosproject.yangutils.linker.impl.XpathLinkingTypes.AUGMENT_LINKING;
-import static org.onosproject.yangutils.utils.UtilConstants.COLON;
-import static org.onosproject.yangutils.utils.UtilConstants.ERROR_MSG_FOR_AUGMENT_LINKING;
-import static org.onosproject.yangutils.utils.UtilConstants.FAILED_TO_FIND_LEAD_INFO_HOLDER;
-import static org.onosproject.yangutils.utils.UtilConstants.INPUT;
-import static org.onosproject.yangutils.utils.UtilConstants.IS_INVALID;
-import static org.onosproject.yangutils.utils.UtilConstants.LEAFREF_ERROR;
-import static org.onosproject.yangutils.utils.UtilConstants.LEAF_HOLDER_ERROR;
-import static org.onosproject.yangutils.utils.UtilConstants.OUTPUT;
-import static org.onosproject.yangutils.utils.UtilConstants.SLASH_FOR_STRING;
-
-/**
- * Represents x-path linking.
- *
- * @param <T> x-path linking can be done for target node or for target leaf/leaf-list
- */
-public class YangXpathLinker<T> {
-
- private List<YangAtomicPath> absPaths;
- private YangNode rootNode;
- private Map<YangAtomicPath, PrefixResolverType> prefixResolverTypes;
- private String curPrefix;
- private String constructsParentsPrefix;
- private XpathLinkingTypes linkingType;
-
- /**
- * Creates an instance of x-path linker.
- */
- public YangXpathLinker() {
- absPaths = new ArrayList<>();
- }
-
- /**
- * Returns list of augment nodes.
- *
- * @param node root node
- * @return list of augment nodes
- */
- public List<YangAugment> getListOfYangAugment(YangNode node) {
- node = node.getChild();
- List<YangAugment> augments = new ArrayList<>();
- while (node != null) {
- if (node instanceof YangAugment) {
- augments.add((YangAugment) node);
- }
- node = node.getNextSibling();
- }
- return augments;
- }
-
- /**
- * Process absolute node path for target leaf.
- *
- * @param atomicPaths atomic path node list
- * @param root root node
- * @param leafref instance of YANG leafref
- * @param curLinking x path linking type
- * @return linked target node
- */
- T processLeafRefXpathLinking(List<YangAtomicPath> atomicPaths, YangNode root,
- YangLeafRef leafref, XpathLinkingTypes curLinking) {
-
- YangNode targetNode;
- rootNode = root;
- prefixResolverTypes = new HashMap<>();
- linkingType = curLinking;
- parsePrefixResolverList(atomicPaths);
- YangAtomicPath leafRefPath = atomicPaths.get(atomicPaths.size() - 1);
-
- // When leaf-ref path contains only one absolute path.
- if (atomicPaths.size() == 1) {
- targetNode = getTargetNodeWhenPathSizeIsOne(atomicPaths);
- } else {
- for (YangAtomicPath atomicPath : atomicPaths) {
- if (atomicPath != leafRefPath) {
- absPaths.add(atomicPath);
- }
- }
- targetNode = parseData(root);
- }
- if (targetNode == null) {
- targetNode = searchInSubModule(root);
- }
-
- // Invalid path presence in the node list is checked.
- validateInvalidNodesInThePath(leafref);
-
- if (targetNode != null) {
- YangLeaf targetLeaf = searchReferredLeaf(targetNode, leafRefPath
- .getNodeIdentifier().getName());
- if (targetLeaf == null) {
- YangLeafList targetLeafList = searchReferredLeafList(
- targetNode, leafRefPath.getNodeIdentifier().getName());
- if (targetLeafList != null) {
- return (T) targetLeafList;
- } else {
- LinkerException ex = new LinkerException(
- FAILED_TO_FIND_LEAD_INFO_HOLDER + leafref.getPath());
- ex.setCharPosition(leafref.getCharPosition());
- ex.setLine(leafref.getLineNumber());
- ex.setFileName(leafref.getFileName());
- throw ex;
- }
- }
- return (T) targetLeaf;
- }
- return null;
- }
-
- /**
- * Validates the nodes in the path for any invalid node.
- *
- * @param leafref instance of YANG leafref
- */
- private void validateInvalidNodesInThePath(YangLeafRef leafref) {
- for (YangAtomicPath absolutePath : (Iterable<YangAtomicPath>) leafref
- .getAtomicPath()) {
- YangNode nodeInPath = absolutePath.getResolvedNode();
-
- if (nodeInPath instanceof LeafRefInvalidHolder) {
- LinkerException ex = new LinkerException(
- LEAFREF_ERROR + leafref.getPath() + IS_INVALID);
- ex.setCharPosition(leafref.getCharPosition());
- ex.setLine(leafref.getLineNumber());
- ex.setFileName(leafref.getFileName());
- throw ex;
- }
- }
- }
-
- /**
- * Returns target node when leaf-ref has only one absolute path in list.
- *
- * @param paths absolute paths
- * @return target node
- */
- private YangNode getTargetNodeWhenPathSizeIsOne(List<YangAtomicPath> paths) {
- if (paths.get(0).getNodeIdentifier().getPrefix() != null
- && !paths.get(0).getNodeIdentifier().getPrefix().equals
- (getRootsPrefix(rootNode))) {
- return getImportedNode(rootNode, paths.get(0).getNodeIdentifier());
- }
- return rootNode;
- }
-
- /**
- * Process absolute node path linking for augment.
- *
- * @param paths absolute path node list
- * @param root root node
- * @param curLinking x path linker type
- * @return linked target node
- */
- public YangNode processXpathLinking(List<YangAtomicPath> paths,
- YangNode root, XpathLinkingTypes curLinking) {
- absPaths = paths;
- rootNode = root;
- prefixResolverTypes = new HashMap<>();
- linkingType = curLinking;
- parsePrefixResolverList(paths);
- YangNode targetNode = parseData(root);
- if (targetNode == null) {
- targetNode = searchInSubModule(root);
- }
- return targetNode;
- }
-
- /**
- * Searches for the referred leaf in target node.
- *
- * @param targetNode target node
- * @param leafName leaf name
- * @return target leaf
- */
- private YangLeaf searchReferredLeaf(YangNode targetNode, String leafName) {
- if (!(targetNode instanceof YangLeavesHolder)) {
- throw new LinkerException(getErrorMsg(
- LEAF_HOLDER_ERROR, targetNode.getName(), targetNode
- .getLineNumber(), targetNode.getCharPosition(),
- targetNode.getFileName()));
- }
- YangLeavesHolder holder = (YangLeavesHolder) targetNode;
- List<YangLeaf> leaves = holder.getListOfLeaf();
- if (leaves != null && !leaves.isEmpty()) {
- for (YangLeaf leaf : leaves) {
- if (leaf.getName().equals(leafName)) {
- return leaf;
- }
- }
- }
- return null;
- }
-
- /**
- * Searches for the referred leaf-list in target node.
- *
- * @param targetNode target node
- * @param name leaf-list name
- * @return target leaf-list
- */
- private YangLeafList searchReferredLeafList(YangNode targetNode, String name) {
- if (!(targetNode instanceof YangLeavesHolder)) {
- throw new LinkerException(getErrorMsg(
- LEAF_HOLDER_ERROR, targetNode.getName(), targetNode
- .getLineNumber(), targetNode.getCharPosition(),
- targetNode.getFileName()));
- }
- YangLeavesHolder holder = (YangLeavesHolder) targetNode;
- List<YangLeafList> leavesList = holder.getListOfLeafList();
- if (leavesList != null && !leavesList.isEmpty()) {
- for (YangLeafList leafList : leavesList) {
- if (leafList.getName().equals(name)) {
- return leafList;
- }
- }
- }
- return null;
- }
-
- /**
- * Process linking using for node identifier for inter/intra file.
- *
- * @param root root node
- * @return linked target node
- */
- private YangNode parseData(YangNode root) {
- String rootPrefix = getRootsPrefix(root);
- constructsParentsPrefix = rootPrefix;
- Iterator<YangAtomicPath> pathIterator = absPaths.iterator();
- YangAtomicPath path = pathIterator.next();
- if (path.getNodeIdentifier().getPrefix() != null
- && !path.getNodeIdentifier().getPrefix().equals(rootPrefix)) {
- return parsePath(getImportedNode(root, path.getNodeIdentifier()));
- } else {
- return parsePath(root);
- }
- }
-
- /**
- * Process linking of target node in root node.
- *
- * @param root root node
- * @return linked target node
- */
- private YangNode parsePath(YangNode root) {
-
- YangNode tempNode = root;
- Stack<YangNode> linkerStack = new Stack<>();
- Iterator<YangAtomicPath> pathIterator = absPaths.iterator();
- YangAtomicPath tempPath = pathIterator.next();
- YangNodeIdentifier nodeId;
- curPrefix = tempPath.getNodeIdentifier().getPrefix();
- int index = 0;
- YangNode tempAugment;
- do {
- nodeId = tempPath.getNodeIdentifier();
- if (tempPath.getNodeIdentifier().getPrefix() == null) {
- tempAugment = resolveIntraFileAugment(tempPath, root);
- } else {
- tempAugment = resolveInterFileAugment(tempPath, root);
- }
- if (tempAugment != null) {
- linkerStack.push(tempNode);
- tempNode = tempAugment;
- }
-
- tempNode = searchTargetNode(tempNode, nodeId);
-
- if (tempNode == null && !linkerStack.isEmpty()) {
- tempNode = linkerStack.peek();
- linkerStack.pop();
- tempNode = searchTargetNode(tempNode, nodeId);
- }
-
- if (tempNode != null) {
- tempPath.setResolvedNode(tempNode);
- validateTempPathNode(tempNode);
- }
-
- if (index == absPaths.size() - 1) {
- break;
- }
- tempPath = pathIterator.next();
- index++;
- } while (validate(tempNode, index));
- return tempNode;
- }
-
- /**
- * Validates temp path nodes for augment linking.
- *
- * @param node temp path node
- */
- private void validateTempPathNode(YangNode node) {
-
- if (linkingType != AUGMENT_LINKING) {
- return;
- }
- if (node instanceof YangGrouping) {
- LinkerException ex = new LinkerException(
- ERROR_MSG_FOR_AUGMENT_LINKING +
- getAugmentNodeIdentifier(
- absPaths.get(absPaths.size() - 1).getNodeIdentifier(),
- absPaths,
- rootNode));
- ex.setFileName(rootNode.getFileName());
- throw ex;
-
- }
- }
-
- /**
- * Resolves intra file augment linking.
- *
- * @param tempPath temporary absolute path
- * @param root root node
- * @return linked target node
- */
- private YangNode resolveIntraFileAugment(YangAtomicPath tempPath, YangNode root) {
- YangNode tempAugment;
- if (curPrefix != tempPath.getNodeIdentifier().getPrefix()) {
- root = getIncludedNode(rootNode, tempPath.getNodeIdentifier().getName());
- if (root == null) {
- root = getIncludedNode(rootNode, getAugmentNodeIdentifier(
- tempPath.getNodeIdentifier(), absPaths, rootNode));
- if (root == null) {
- root = rootNode;
- }
- }
- } else {
- if (curPrefix != null) {
- root = getImportedNode(root, tempPath.getNodeIdentifier());
- }
- }
-
- curPrefix = tempPath.getNodeIdentifier().getPrefix();
- tempAugment = getAugment(tempPath.getNodeIdentifier(), root, absPaths);
- if (tempAugment == null) {
- tempAugment = getAugment(tempPath.getNodeIdentifier(), rootNode,
- absPaths);
- }
- return tempAugment;
- }
-
- /**
- * Resolves inter file augment linking.
- *
- * @param tempPath temporary absolute path
- * @param root root node
- * @return linked target node
- */
- private YangNode resolveInterFileAugment(YangAtomicPath tempPath, YangNode root) {
-
- YangNode tempAugment;
- if (!tempPath.getNodeIdentifier().getPrefix().equals(curPrefix)) {
- curPrefix = tempPath.getNodeIdentifier().getPrefix();
- root = getImportedNode(rootNode, tempPath.getNodeIdentifier());
- }
- tempAugment = getAugment(tempPath.getNodeIdentifier(), root, absPaths);
- if (tempAugment == null) {
- return resolveInterToInterFileAugment(root);
- }
- return tempAugment;
- }
-
- /**
- * Resolves augment when prefix changed from inter file to inter file.
- * it may be possible that the prefix used in imported module is different the
- * given list of node identifiers.
- *
- * @param root root node
- * @return target node
- */
- private YangNode resolveInterToInterFileAugment(YangNode root) {
- List<YangAugment> augments = getListOfYangAugment(root);
- int index;
- List<YangAtomicPath> paths = new ArrayList<>();
- for (YangAugment augment : augments) {
- index = 0;
-
- for (YangAtomicPath path : augment.getTargetNode()) {
-
- if (!searchForAugmentInImportedNode(path.getNodeIdentifier(), index)) {
- paths.clear();
- break;
- }
- paths.add(path);
- index++;
- }
- if (!paths.isEmpty() && paths.size() == absPaths.size() - 1) {
- return augment;
- } else {
- paths.clear();
- }
- }
- return null;
- }
-
- /**
- * Searches for the augment node in imported module when prefix has changed from
- * inter file to inter file.
- *
- * @param nodeId node id
- * @param index index
- * @return true if found
- */
- private boolean searchForAugmentInImportedNode(YangNodeIdentifier nodeId,
- int index) {
- if (index == absPaths.size()) {
- return false;
- }
- YangNodeIdentifier tempNodeId = absPaths.get(index).getNodeIdentifier();
- return nodeId.getName().equals(tempNodeId.getName());
- }
-
- /**
- * Returns augment node.
- *
- * @param tempNodeId temporary absolute path id
- * @param root root node
- * @return linked target node
- */
- private YangNode getAugment(YangNodeIdentifier tempNodeId, YangNode root,
- List<YangAtomicPath> absPaths) {
- String augmentName = getAugmentNodeIdentifier(tempNodeId, absPaths, root);
- if (augmentName != null) {
- return searchAugmentNode(root, augmentName);
- }
- return null;
- }
-
- /**
- * Process linking using import list.
- *
- * @param root root node
- * @param nodeId node identifier
- * @return linked target node
- */
- private YangNode getImportedNode(YangNode root, YangNodeIdentifier nodeId) {
-
- List<YangImport> importList;
-
- if (root instanceof YangModule) {
- importList = ((YangModule) root).getImportList();
- } else {
- importList = ((YangSubModule) root).getImportList();
- }
-
- for (YangImport imported : importList) {
- if (imported.getPrefixId().equals(nodeId.getPrefix())) {
- return imported.getImportedNode();
- }
- }
-
- if (nodeId.getName() != null && nodeId.getPrefix()
- .equals(constructsParentsPrefix)) {
- return rootNode;
- }
- return root;
- }
-
- /**
- * Searches in sub-module node.
- *
- * @param root root node
- * @return target linked node
- */
- private YangNode searchInSubModule(YangNode root) {
- List<YangInclude> includeList;
- YangNode tempNode;
- if (root instanceof YangModule) {
- includeList = ((YangModule) root).getIncludeList();
- } else {
- includeList = ((YangSubModule) root).getIncludeList();
- }
-
- for (YangInclude included : includeList) {
- tempNode = parseData(included.getIncludedNode());
- if (tempNode != null) {
- return tempNode;
- }
- }
- return null;
- }
-
- /**
- * Process linking using include list.
- *
- * @param root root node
- * @param tempPathName temporary path node name
- * @return linked target node
- */
- private YangNode getIncludedNode(YangNode root, String tempPathName) {
-
- List<YangInclude> includeList;
-
- if (root instanceof YangModule) {
- includeList = ((YangModule) root).getIncludeList();
- } else {
- includeList = ((YangSubModule) root).getIncludeList();
- }
-
- for (YangInclude included : includeList) {
- if (verifyChildNode(included.getIncludedNode(), tempPathName)) {
- return included.getIncludedNode();
- }
- }
-
- return null;
- }
-
- /**
- * Verifies for child nodes in sub module.
- *
- * @param node submodule node
- * @param name name of child node
- * @return true if child node found
- */
- private boolean verifyChildNode(YangNode node, String name) {
- node = node.getChild();
- while (node != null) {
- if (node.getName().equals(name)) {
- return true;
- }
- node = node.getNextSibling();
- }
- return false;
- }
-
-
- /**
- * Returns augment's node id.
- *
- * @param nodeId node identifier
- * @param absPaths absolute paths
- * @param root root node
- * @return augment's node id
- */
- private String getAugmentNodeIdentifier(
- YangNodeIdentifier nodeId, List<YangAtomicPath> absPaths, YangNode root) {
- Iterator<YangAtomicPath> nodeIdIterator = absPaths.iterator();
- YangAtomicPath tempNodeId;
- StringBuilder builder = new StringBuilder();
- String name;
- String prefix;
- String id;
- PrefixResolverType type;
- while (nodeIdIterator.hasNext()) {
- tempNodeId = nodeIdIterator.next();
- name = tempNodeId.getNodeIdentifier().getName();
- prefix = tempNodeId.getNodeIdentifier().getPrefix();
- if (!tempNodeId.getNodeIdentifier().equals(nodeId)) {
- type = prefixResolverTypes.get(tempNodeId);
- switch (type) {
- case INTER_TO_INTRA:
- id = SLASH_FOR_STRING + name;
- break;
- case INTRA_TO_INTER:
- if (!getRootsPrefix(root).equals(prefix)) {
- id = SLASH_FOR_STRING + prefix + COLON + name;
- } else {
- id = SLASH_FOR_STRING + name;
- }
- break;
- case INTER_TO_INTER:
- id = SLASH_FOR_STRING + prefix + COLON + name;
- break;
- case NO_PREFIX_CHANGE_FOR_INTRA:
- id = SLASH_FOR_STRING + name;
- break;
- case NO_PREFIX_CHANGE_FOR_INTER:
- if (!getRootsPrefix(root).equals(prefix)) {
- id = SLASH_FOR_STRING + prefix + COLON + name;
- } else {
- id = SLASH_FOR_STRING + name;
- }
- break;
- default:
- id = SLASH_FOR_STRING + name;
- break;
- }
- builder.append(id);
- } else {
- return builder.toString();
- }
- }
- return null;
- }
-
- /**
- * Searches augment node in root node by name of the augment. For intra
- * file augment, target augment name without prefix is taken and checked.
- *
- * @param root root node
- * @param augName current augment name
- * @return target augment node
- */
- private YangNode searchAugmentNode(YangNode root, String augName) {
- YangNode node = root;
- node = node.getChild();
- while (node != null) {
- if (node instanceof YangAugment) {
- String name = ((YangAugment) node).getPrefixRemovedName();
- if (node.getName().equals(augName) || name.equals(augName)) {
- return node;
- }
- }
- node = node.getNextSibling();
- }
- return null;
- }
-
- /**
- * Validates for target node if target node found or not.
- *
- * @param tempNode temporary node
- * @param index current index of list
- * @return false if target node found
- */
- private boolean validate(YangNode tempNode, int index) {
-
- int size = absPaths.size();
- if (tempNode != null && index != size) {
- return true;
- } else if (tempNode != null) {
- return false;
- // this is your target node.
- } else if (index != size) {
- return true;
- // this could be in submodule as well.
- }
- return false;
- }
-
- /**
- * Searches target node in root node.
- *
- * @param node root node
- * @param curNodeId YANG node identifier
- * @return linked target node
- */
- private YangNode searchTargetNode(YangNode node, YangNodeIdentifier curNodeId) {
-
- if (node != null) {
- node = node.getChild();
- }
- while (node != null) {
- if (node instanceof YangInput) {
- if (curNodeId.getName().equalsIgnoreCase(INPUT)) {
- return node;
- }
- } else if (node instanceof YangOutput) {
- if (curNodeId.getName().equalsIgnoreCase(OUTPUT)) {
- return node;
- }
- }
- if (node.getName().equals(curNodeId.getName()) &&
- !(node instanceof YangUses)) {
- return node;
- }
- node = node.getNextSibling();
- }
- return null;
- }
-
- /**
- * Returns root prefix.
- *
- * @param root root node
- * @return root prefix
- */
- private String getRootsPrefix(YangNode root) {
- if (root instanceof YangModule) {
- return ((YangModule) root).getPrefix();
- } else {
- return ((YangSubModule) root).getPrefix();
- }
- }
-
- /**
- * Resolves prefix and provides prefix resolver list.
- *
- * @param absolutePaths absolute paths
- */
- private void parsePrefixResolverList(List<YangAtomicPath> absolutePaths) {
- Iterator<YangAtomicPath> pathIterator = absolutePaths.iterator();
- YangAtomicPath absPath;
- String prePrefix;
- String curPrefix = null;
- while (pathIterator.hasNext()) {
- prePrefix = curPrefix;
- absPath = pathIterator.next();
- curPrefix = absPath.getNodeIdentifier().getPrefix();
- if (curPrefix != null) {
- if (!curPrefix.equals(prePrefix)) {
- if (prePrefix != null) {
- prefixResolverTypes.put(absPath, INTER_TO_INTER);
- } else {
- prefixResolverTypes.put(absPath, INTRA_TO_INTER);
- }
- } else {
- prefixResolverTypes.put(absPath, NO_PREFIX_CHANGE_FOR_INTER);
- }
- } else {
- if (prePrefix != null) {
- prefixResolverTypes.put(absPath, INTER_TO_INTRA);
- } else {
- prefixResolverTypes.put(absPath, NO_PREFIX_CHANGE_FOR_INTRA);
- }
- }
- }
-
- }
-
- /**
- * Adds augment to rpc augmented list of input.
- *
- * @param augment augment
- * @param rootNode root node
- */
- void addInModuleIfInput(YangAugment augment,
- YangNode rootNode) {
- ((RpcNotificationContainer) rootNode).addToAugmentList(augment);
- }
-}
\ No newline at end of file
diff --git a/generator/src/main/java/org/onosproject/yangutils/linker/impl/package-info.java b/generator/src/main/java/org/onosproject/yangutils/linker/impl/package-info.java
deleted file mode 100644
index 1d38e5a..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/linker/impl/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-/**
- * Provide intra/inter file and inter jar linking implementation.
- */
-package org.onosproject.yangutils.linker.impl;
diff --git a/generator/src/main/java/org/onosproject/yangutils/linker/package-info.java b/generator/src/main/java/org/onosproject/yangutils/linker/package-info.java
deleted file mode 100644
index 04ce9d6..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/linker/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-/**
- * Provide inter jar and inter file linking abstract interface.
- */
-package org.onosproject.yangutils.linker;
\ No newline at end of file
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/exception/InvalidNodeForTranslatorException.java b/generator/src/main/java/org/onosproject/yangutils/translator/exception/InvalidNodeForTranslatorException.java
deleted file mode 100644
index 935f6b6..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/exception/InvalidNodeForTranslatorException.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.exception;
-
-/**
- * Represents custom translator exception for translator's operations.
- */
-public class InvalidNodeForTranslatorException extends RuntimeException {
-
- private static final long serialVersionUID = 20160311L;
- private transient String fileName;
- private transient int lineNumber;
- private transient int charPosition;
-
- /**
- * Creates a new exception.
- */
- public InvalidNodeForTranslatorException() {
- super();
- }
-
- /**
- * Creates a new exception with given message.
- *
- * @param message the detail of exception in string
- */
- public InvalidNodeForTranslatorException(String message) {
- super(message);
- }
-
- /**
- * Creates a new exception from given message and cause.
- *
- * @param message the detail of exception in string
- * @param cause underlying cause of the error
- */
- public InvalidNodeForTranslatorException(final String message, final Throwable cause) {
- super(message, cause);
- }
-
- /**
- * Creates a new exception from cause.
- *
- * @param cause underlying cause of the error
- */
- public InvalidNodeForTranslatorException(final Throwable cause) {
- super(cause);
- }
-
- /**
- * Returns generated file name for the exception.
- *
- * @return generated file name for the exception
- */
- public String getFileName() {
- return this.fileName;
- }
-
- /**
- * Returns line number of the exception.
- *
- * @return line number of the exception
- */
- public int getLineNumber() {
- return this.lineNumber;
- }
-
- /**
- * Returns position of the exception.
- *
- * @return position of the exception
- */
- public int getCharPositionInLine() {
- return this.charPosition;
- }
-
- /**
- * Sets line number of YANG file.
- *
- * @param line line number of YANG file
- */
- public void setLine(int line) {
- this.lineNumber = line;
- }
-
- /**
- * Sets position of exception.
- *
- * @param charPosition position of exception
- */
- public void setCharPosition(int charPosition) {
- this.charPosition = charPosition;
- }
-
- /**
- * Sets file name in exception.
- *
- * @param fileName YANG file name
- */
- public void setFileName(String fileName) {
- this.fileName = fileName;
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/exception/TranslatorException.java b/generator/src/main/java/org/onosproject/yangutils/translator/exception/TranslatorException.java
deleted file mode 100644
index 0f68e97..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/exception/TranslatorException.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.exception;
-
-/**
- * Represents custom translator exception for translator's operations.
- */
-public class TranslatorException extends RuntimeException {
-
- private static final long serialVersionUID = 20160311L;
- private transient String fileName;
- private transient int lineNumber;
- private transient int charPosition;
-
- /**
- * Create a new translator exception.
- */
- public TranslatorException() {
- super();
- }
-
- /**
- * Creates a new translator exception with given message.
- *
- * @param message the detail of exception in string
- */
- public TranslatorException(String message) {
- super(message);
- }
-
- /**
- * Creates a new translator exception from given message and cause.
- *
- * @param message the detail of exception in string
- * @param cause underlying cause of the error
- */
- public TranslatorException(final String message, final Throwable cause) {
- super(message, cause);
- }
-
- /**
- * Creates a new translator exception from cause.
- *
- * @param cause underlying cause of the error
- */
- public TranslatorException(final Throwable cause) {
- super(cause);
- }
-
- /**
- * Returns line number of the exception.
- *
- * @return line number of the exception
- */
- public int getLineNumber() {
- return this.lineNumber;
- }
-
- /**
- * Returns YANG file name of the exception.
- *
- * @return YANG file name of the exception
- */
- public String getFileName() {
- return this.fileName;
- }
-
- /**
- * Returns position of the exception.
- *
- * @return position of the exception
- */
- public int getCharPositionInLine() {
- return this.charPosition;
- }
-
- /**
- * Sets line number of YANG file.
- *
- * @param line line number of YANG file
- */
- public void setLine(int line) {
- this.lineNumber = line;
- }
-
- /**
- * Sets position of exception.
- *
- * @param charPosition position of exception
- */
- public void setCharPosition(int charPosition) {
- this.charPosition = charPosition;
- }
-
- /**
- * Sets file name in translator exception.
- *
- * @param fileName YANG file name
- */
- public void setFileName(String fileName) {
- this.fileName = fileName;
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/exception/package-info.java b/generator/src/main/java/org/onosproject/yangutils/translator/exception/package-info.java
deleted file mode 100644
index b88a8a3..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/exception/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-/**
- * Custom exception for translator.
- */
-package org.onosproject.yangutils.translator.exception;
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/package-info.java b/generator/src/main/java/org/onosproject/yangutils/translator/package-info.java
deleted file mode 100644
index 72ba2e4..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-/**
- * Translator to generate class definition corresponding to YANG definition.
- */
-package org.onosproject.yangutils.translator;
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/GeneratedJavaFileType.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/GeneratedJavaFileType.java
deleted file mode 100644
index 6b14095..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/GeneratedJavaFileType.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava;
-
-/**
- * Represents type of java files generated.
- */
-public final class GeneratedJavaFileType {
-
- /**
- * Interface file.
- */
- public static final int INTERFACE_MASK = 1;
-
- /**
- * Builder interface file.
- */
- public static final int BUILDER_INTERFACE_MASK = 2;
-
- /**
- * Builder class file.
- */
- public static final int BUILDER_CLASS_MASK = 4;
-
- /**
- * Impl class file.
- */
- public static final int DEFAULT_CLASS_MASK = 8;
-
- /**
- * Interface and class file.
- */
- public static final int GENERATE_INTERFACE_WITH_BUILDER = 8207;
-
- /**
- * Java interface corresponding to rpc.
- */
- public static final int GENERATE_SERVICE_AND_MANAGER = 16;
-
- /**
- * Java class corresponding to YANG enumeration.
- */
- public static final int GENERATE_ENUM_CLASS = 32;
-
- /**
- * Java class corresponding to typedef.
- */
- public static final int GENERATE_TYPEDEF_CLASS = 64;
-
- /**
- * Java class corresponding to union.
- */
- public static final int GENERATE_UNION_CLASS = 128;
-
- /**
- * Java class corresponding to typedef.
- */
- static final int GENERATE_TYPE_CLASS = GENERATE_TYPEDEF_CLASS
- | GENERATE_UNION_CLASS;
-
- /**
- * Event class.
- */
- public static final int GENERATE_EVENT_CLASS = 256;
-
- /**
- * Event listener class.
- */
- public static final int GENERATE_EVENT_LISTENER_INTERFACE = 512;
-
- /**
- * Event listener class.
- */
- public static final int GENERATE_EVENT_SUBJECT_CLASS = 1024;
-
- /**
- * Java classes for events.
- */
- public static final int GENERATE_ALL_EVENT_CLASS_MASK = GENERATE_EVENT_CLASS | GENERATE_EVENT_LISTENER_INTERFACE
- | GENERATE_EVENT_SUBJECT_CLASS;
-
- /**
- * Identity listener class.
- */
- public static final int GENERATE_IDENTITY_CLASS = 2048;
-
- /**
- * Identity key class.
- */
- public static final int GENERATE_KEY_CLASS = 4096;
-
- /**
- * Creates an instance of generate java file type.
- */
- private GeneratedJavaFileType() {
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/GeneratedTempFileType.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/GeneratedTempFileType.java
deleted file mode 100644
index 6f61e10..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/GeneratedTempFileType.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava;
-
-/**
- * Represents type of temporary files generated.
- */
-public final class GeneratedTempFileType {
-
- /**
- * Attributes definition temporary file.
- */
- public static final int ATTRIBUTES_MASK = 1; // 1 << 0
-
- /**
- * Getter methods for interface.
- */
- public static final int GETTER_FOR_INTERFACE_MASK = 1 << 1;
-
- /**
- * Getter methods for class.
- */
- public static final int GETTER_FOR_CLASS_MASK = 1 << 2;
-
- /**
- * Setter methods for interface.
- */
- public static final int SETTER_FOR_INTERFACE_MASK = 1 << 3;
-
- /**
- * Setter methods for class.
- */
- public static final int SETTER_FOR_CLASS_MASK = 1 << 4;
-
- /**
- * Constructor method of class.
- */
- public static final int CONSTRUCTOR_IMPL_MASK = 1 << 5;
-
- /**
- * Hash code implementation of class.
- */
- public static final int HASH_CODE_IMPL_MASK = 1 << 6;
-
- /**
- * Equals implementation of class.
- */
- public static final int EQUALS_IMPL_MASK = 1 << 7;
-
- /**
- * To string implementation of class.
- */
- public static final int TO_STRING_IMPL_MASK = 1 << 8;
-
- /**
- * Of string implementation of class.
- */
- public static final int OF_STRING_IMPL_MASK = 1 << 9;
-
- /**
- * Constructor for type class like typedef, union.
- */
- public static final int CONSTRUCTOR_FOR_TYPE_MASK = 1 << 10;
-
- /**
- * From string implementation of class.
- */
- public static final int FROM_STRING_IMPL_MASK = 1 << 11;
-
- /**
- * Enum implementation of class.
- */
- public static final int ENUM_IMPL_MASK = 1 << 12;
-
- /**
- * Rpc interface of module / sub module.
- */
- public static final int RPC_INTERFACE_MASK = 1 << 13;
-
- /**
- * Rpc implementation of module / sub module.
- */
- public static final int RPC_IMPL_MASK = 1 << 14;
-
- /**
- * Event enum implementation of class.
- */
- public static final int EVENT_ENUM_MASK = 1 << 15;
-
- /**
- * Event method implementation of class.
- */
- public static final int EVENT_METHOD_MASK = 1 << 16;
-
- /**
- * Event subject attribute implementation of class.
- */
- public static final int EVENT_SUBJECT_ATTRIBUTE_MASK = 1 << 17;
-
- /**
- * Event subject getter implementation of class.
- */
- public static final int EVENT_SUBJECT_GETTER_MASK = 1 << 18;
-
- /**
- * Event subject setter implementation of class.
- */
- public static final int EVENT_SUBJECT_SETTER_MASK = 1 << 19;
-
- /**
- * Add to list method interface for class.
- */
- public static final int ADD_TO_LIST_INTERFACE_MASK = 1 << 20;
-
- /**
- * Add to list method implementation for class.
- */
- public static final int ADD_TO_LIST_IMPL_MASK = 1 << 21;
-
- /**
- * Leaf identifier enum attributes for class.
- */
- public static final int LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK = 1 << 22;
-
- /**
- * Is filter content match for leaves class.
- */
- public static final int FILTER_CONTENT_MATCH_FOR_LEAF_MASK = 1 << 23;
-
- /**
- * Is filter content match for leaf lists class.
- */
- public static final int FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK = 1 << 24;
-
- /**
- * Is filter content match for nodes class.
- */
- public static final int FILTER_CONTENT_MATCH_FOR_NODES_MASK = 1 << 25;
-
- /**
- * Edit config class content for class.
- */
- public static final int EDIT_CONTENT_MASK = 1 << 26;
-
- // No instantiation.
- private GeneratedTempFileType() {
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/JavaAttributeInfo.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/JavaAttributeInfo.java
deleted file mode 100644
index e1fa33b..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/JavaAttributeInfo.java
+++ /dev/null
@@ -1,344 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava;
-
-import org.onosproject.yangutils.datamodel.YangCompilerAnnotation;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.javadatamodel.JavaQualifiedTypeInfo;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-
-import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.isTypeLeafref;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.isTypeNameLeafref;
-
-/**
- * Represents the attribute info corresponding to class/interface generated.
- */
-public final class JavaAttributeInfo {
-
- /**
- * The data type info of attribute.
- */
- private YangType<?> attrType;
-
- /**
- * Name of the attribute.
- */
- private String name;
-
- /**
- * If the added attribute is a list of info.
- */
- private boolean isListAttr;
-
- /**
- * If the added attribute has to be accessed in a fully qualified manner.
- */
- private boolean isQualifiedName;
-
- /**
- * The class info will be used to set the attribute type and package info
- * will be use for qualified name.
- */
- private JavaQualifiedTypeInfoTranslator importInfo;
-
- /**
- * Compiler annotation attribute info.
- */
- private YangCompilerAnnotation compilerAnnotation;
-
- /**
- * If conflict occurs.
- */
- private boolean isIntConflict;
-
- /**
- * If conflict occurs.
- */
- private boolean isLongConflict;
-
- /**
- * If conflict occurs.
- */
- private boolean isShortConflict;
-
- /**
- * current holder or count in type list of attribute for from string method.
- */
- private String curHolderOrCount;
-
- /**
- * Creates a java attribute info object.
- */
- private JavaAttributeInfo() {
- }
-
- /**
- * Creates object of java attribute info.
- *
- * @param attrType YANG type
- * @param name attribute name
- * @param isListAttr is list attribute
- * @param isQualifiedName is qualified name
- */
- public JavaAttributeInfo(YangType<?> attrType, String name, boolean isListAttr, boolean isQualifiedName) {
- this.attrType = attrType;
- this.name = name;
- this.isListAttr = isListAttr;
- this.isQualifiedName = isQualifiedName;
- }
-
- /**
- * Returns the data type info of attribute.
- *
- * @return the data type info of attribute
- */
- public YangType<?> getAttributeType() {
- return attrType;
- }
-
- /**
- * Sets the data type info of attribute.
- *
- * @param type the data type info of attribute
- */
- public void setAttributeType(YangType<?> type) {
- attrType = type;
- }
-
- /**
- * Returns name of the attribute.
- *
- * @return name of the attribute
- */
- public String getAttributeName() {
-
- if (name == null) {
- throw new TranslatorException("Expected java attribute name is null");
- }
- return name;
- }
-
- /**
- * Sets name of the attribute.
- *
- * @param attrName name of the attribute
- */
- public void setAttributeName(String attrName) {
- name = attrName;
- }
-
- /**
- * Returns if the added attribute is a list of info.
- *
- * @return the if the added attribute is a list of info
- */
- public boolean isListAttr() {
- return isListAttr;
- }
-
- /**
- * Sets if the added attribute is a list of info.
- *
- * @param isList if the added attribute is a list of info
- */
- private void setListAttr(boolean isList) {
- isListAttr = isList;
- }
-
- /**
- * Returns if the added attribute has to be accessed in a fully qualified
- * manner.
- *
- * @return the if the added attribute has to be accessed in a fully
- * qualified manner.
- */
- public boolean isQualifiedName() {
- return isQualifiedName;
- }
-
- /**
- * Sets if the added attribute has to be accessed in a fully qualified
- * manner.
- *
- * @param isQualified if the added attribute has to be accessed in a fully
- * qualified manner
- */
- public void setIsQualifiedAccess(boolean isQualified) {
- isQualifiedName = isQualified;
- }
-
- /**
- * Returns the import info for the attribute type. It will be null, if the type
- * is basic built-in java type.
- *
- * @return import info
- */
- public JavaQualifiedTypeInfoTranslator getImportInfo() {
- return importInfo;
- }
-
- /**
- * Sets the import info for the attribute type.
- *
- * @param importInfo import info for the attribute type
- */
- public void setImportInfo(JavaQualifiedTypeInfoTranslator importInfo) {
- this.importInfo = importInfo;
- }
-
- /**
- * Returns the compiler annotation.
- *
- * @return compiler annotation info
- */
- public YangCompilerAnnotation getCompilerAnnotation() {
- return compilerAnnotation;
- }
-
- /**
- * Sets the compiler annotation.
- *
- * @param compilerAnnotation the compiler annotation to set
- */
- public void setCompilerAnnotation(YangCompilerAnnotation compilerAnnotation) {
- this.compilerAnnotation = compilerAnnotation;
- }
-
- /**
- * Returns true if conflict between int and uint.
- *
- * @return true if conflict between int and uInt
- */
- public boolean isIntConflict() {
- return isIntConflict;
- }
-
- /**
- * Sets true if conflict between int and uInt.
- *
- * @param intConflict true if conflict between int and uInt
- */
- void setIntConflict(boolean intConflict) {
- isIntConflict = intConflict;
- }
-
- /**
- * Returns true if conflict between long and uLong.
- *
- * @return true if conflict between long and uLong
- */
- public boolean isLongConflict() {
- return isLongConflict;
- }
-
- /**
- * Sets true if conflict between long and uLong.
- *
- * @param longConflict true if conflict between long and uLong
- */
- void setLongConflict(boolean longConflict) {
- isLongConflict = longConflict;
- }
-
- /**
- * Returns true if conflict between short and uint8.
- *
- * @return true if conflict between short and uint8
- */
- public boolean isShortConflict() {
- return isShortConflict;
- }
-
- /**
- * Sets true if conflict between short and uint8.
- *
- * @param shortConflict true if conflict between short and uint8
- */
- public void setShortConflict(boolean shortConflict) {
- isShortConflict = shortConflict;
- }
-
- /**
- * Returns java attribute info.
- *
- * @param importInfo java qualified type info
- * @param attributeName attribute name
- * @param attributeType attribute type
- * @param isQualifiedAccess is the attribute a qualified access
- * @param isListAttribute is list attribute
- * @return java attribute info.
- */
- public static JavaAttributeInfo getAttributeInfoForTheData(JavaQualifiedTypeInfo importInfo,
- String attributeName,
- YangType<?> attributeType, boolean isQualifiedAccess,
- boolean isListAttribute) {
-
- if (attributeType != null) {
- attributeType = isTypeLeafref(attributeType);
- }
- attributeName = isTypeNameLeafref(attributeName, attributeType);
- JavaAttributeInfo newAttr = new JavaAttributeInfo();
- newAttr.setImportInfo((JavaQualifiedTypeInfoTranslator) importInfo);
- newAttr.setAttributeName(attributeName);
- newAttr.setAttributeType(attributeType);
- newAttr.setIsQualifiedAccess(isQualifiedAccess);
- newAttr.setListAttr(isListAttribute);
-
- return newAttr;
- }
-
- /**
- * Returns java attribute info.
- *
- * @param importInfo java qualified type info
- * @param attributeName attribute name
- * @param attributeType attribute type
- * @param isQualifiedAccess is the attribute a qualified access
- * @param isListAttribute is list attribute
- * @param compilerAnnotation compiler annotation
- * @return java attribute info.
- */
- static JavaAttributeInfo getAttributeInfoForTheData(JavaQualifiedTypeInfoTranslator importInfo,
- String attributeName, YangType<?> attributeType,
- boolean isQualifiedAccess, boolean isListAttribute,
- YangCompilerAnnotation compilerAnnotation) {
- JavaAttributeInfo newAttr = getAttributeInfoForTheData(importInfo, attributeName, attributeType,
- isQualifiedAccess, isListAttribute);
-
- newAttr.setCompilerAnnotation(compilerAnnotation);
-
- return newAttr;
- }
-
- /**
- * Returns current holder or count in type list of attribute for from string method.
- *
- * @return current holder or count in type list of attribute for from string method
- */
- public String getCurHolderOrCount() {
- return curHolderOrCount;
- }
-
- /**
- * Sets current holder or count in type list of attribute for from string method.
- *
- * @param curHolderOrCount current holder or count in type list of attribute for from string method
- */
- public void setCurHolderOrCount(String curHolderOrCount) {
- this.curHolderOrCount = curHolderOrCount;
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGenerator.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGenerator.java
deleted file mode 100644
index 49beff0..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGenerator.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava;
-
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-
-import java.io.IOException;
-
-/**
- * Abstraction of an entity which provides Code generator functionalities.
- */
-public interface JavaCodeGenerator {
-
- /**
- * Traverse the schema of application and generate corresponding code.
- *
- * @param yangPlugin YANG plugin config
- * @throws TranslatorException when fails to translate the data model tree
- */
- void generateCodeEntry(YangPluginConfig yangPlugin)
- throws TranslatorException;
-
- /**
- * Traverse the schema of application and generate corresponding code.
- *
- * @throws TranslatorException when fails to generate java code
- * @throws IOException a violation in IO rule
- */
- void generateCodeExit()
- throws TranslatorException, IOException;
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGeneratorInfo.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGeneratorInfo.java
deleted file mode 100644
index 4ddde17..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGeneratorInfo.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava;
-
-import org.onosproject.yangutils.datamodel.LocationInfo;
-
-/**
- * Represents YANG java info containing interface for java code generator, java
- * file information, java import data and temp java code fragment files. This
- * interface serves as a generic interface and help to unify the generate code
- * entry function.
- */
-public interface JavaCodeGeneratorInfo
- extends JavaFileInfoContainer, TempJavaCodeFragmentFilesContainer, LocationInfo {
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGeneratorUtil.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGeneratorUtil.java
deleted file mode 100644
index bde310d..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/JavaCodeGeneratorUtil.java
+++ /dev/null
@@ -1,319 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava;
-
-import java.io.IOException;
-
-import org.onosproject.yangutils.datamodel.TraversalType;
-import org.onosproject.yangutils.datamodel.YangInput;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.datamodel.YangOutput;
-import org.onosproject.yangutils.translator.exception.InvalidNodeForTranslatorException;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-
-import static org.onosproject.yangutils.datamodel.TraversalType.CHILD;
-import static org.onosproject.yangutils.datamodel.TraversalType.PARENT;
-import static org.onosproject.yangutils.datamodel.TraversalType.ROOT;
-import static org.onosproject.yangutils.datamodel.TraversalType.SIBILING;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.searchAndDeleteTempDir;
-
-/**
- * Representation of java code generator based on application schema.
- */
-public final class JavaCodeGeneratorUtil {
-
- /**
- * Creates a java code generator utility object.
- */
- private JavaCodeGeneratorUtil() {
- }
-
- /**
- * Generates Java code files corresponding to the YANG schema.
- *
- * @param rootNode root node of the data model tree
- * @param yangPlugin YANG plugin config
- * @throws TranslatorException when fails to generate java code file the current node
- * @throws IOException when fails to do IO operations
- */
- public static void generateJavaCode(YangNode rootNode, YangPluginConfig yangPlugin)
- throws TranslatorException, IOException {
-
- YangNode codeGenNode = rootNode;
- TraversalType curTraversal = ROOT;
-
- while (codeGenNode != null) {
- if (curTraversal != PARENT) {
- if (!(codeGenNode instanceof JavaCodeGenerator)) {
- throw new TranslatorException("Unsupported node to generate code " +
- codeGenNode.getName() + " in " + codeGenNode.getLineNumber() + " at "
- + codeGenNode.getCharPosition() + " in " + codeGenNode.getFileName());
- }
- try {
- generateCodeEntry(codeGenNode, yangPlugin, rootNode);
- codeGenNode.setNameSpaceAndAddToParentSchemaMap();
- } catch (InvalidNodeForTranslatorException e) {
- if (codeGenNode.getNextSibling() != null) {
- curTraversal = SIBILING;
- codeGenNode = codeGenNode.getNextSibling();
- } else {
- curTraversal = PARENT;
- codeGenNode = codeGenNode.getParent();
- }
- continue;
- } catch (Exception e) {
- e.printStackTrace();
- close(codeGenNode, yangPlugin, rootNode);
- throw new TranslatorException(e.getMessage());
- }
-
- }
- if (curTraversal != PARENT && codeGenNode.getChild() != null) {
- curTraversal = CHILD;
- codeGenNode = codeGenNode.getChild();
- } else if (codeGenNode.getNextSibling() != null) {
- try {
- generateCodeExit(codeGenNode, yangPlugin, rootNode);
- } catch (Exception e) {
- e.printStackTrace();
- close(codeGenNode, yangPlugin, rootNode);
- throw new TranslatorException(e.getMessage());
- }
- curTraversal = SIBILING;
- codeGenNode = codeGenNode.getNextSibling();
- } else {
- try {
- generateCodeExit(codeGenNode, yangPlugin, rootNode);
- } catch (Exception e) {
- e.printStackTrace();
- close(codeGenNode, yangPlugin, rootNode);
- throw new TranslatorException(e.getMessage());
- }
- curTraversal = PARENT;
- codeGenNode = codeGenNode.getParent();
- }
- }
- }
-
- /**
- * Generates the current nodes code snippet.
- *
- * @param codeGenNode current data model node for which the code needs to be generated
- * @param yangPlugin YANG plugin config
- * @param rootNode YANG root node
- * @throws TranslatorException when fails to generate java code file the current node
- * @throws IOException when fails to do IO operations
- */
- private static void generateCodeEntry(YangNode codeGenNode,
- YangPluginConfig yangPlugin,
- YangNode rootNode)
- throws TranslatorException, IOException {
-
- if (codeGenNode instanceof JavaCodeGenerator) {
- ((JavaCodeGenerator) codeGenNode).generateCodeEntry(yangPlugin);
- } else {
- close(codeGenNode, yangPlugin, rootNode);
- throw new TranslatorException(
- "Generated data model node cannot be translated to target language code for " +
- codeGenNode.getName() + " in " + codeGenNode.getLineNumber()
- + " at " + codeGenNode.getCharPosition() + " in " + codeGenNode.getFileName());
- }
- }
-
- /**
- * Generates the current nodes code target code from the snippet.
- *
- * @param codeGenNode current data model node for which the code needs to be generated
- * @param pluginConfig plugin configurations
- * @param rootNode YANG root node
- * @throws TranslatorException when fails to generate java code file the current node
- * @throws IOException when fails to do IO operations
- */
- private static void generateCodeExit(YangNode codeGenNode,
- YangPluginConfig pluginConfig,
- YangNode rootNode)
- throws TranslatorException, IOException {
-
- if (codeGenNode instanceof JavaCodeGenerator) {
- ((JavaCodeGenerator) codeGenNode).generateCodeExit();
- } else {
- close(codeGenNode, pluginConfig, rootNode);
- throw new TranslatorException(
- "Generated data model node cannot be translated to target language code for " +
- codeGenNode.getName() + " in " + codeGenNode.getLineNumber()
- + " at " + codeGenNode.getCharPosition() + " in " + codeGenNode.getFileName());
- }
- }
-
- /**
- * Free other YANG nodes of data-model tree when error occurs while file generation of current node.
- *
- * @param freedNode current data model node
- */
- private static void freeRestResources(YangNode freedNode) {
-
- if (freedNode != null) {
- YangNode tempNode = freedNode;
- TraversalType curTraversal = ROOT;
-
- while (freedNode != tempNode.getParent()) {
-
- if (curTraversal != PARENT && freedNode.getChild() != null) {
- curTraversal = CHILD;
- freedNode = freedNode.getChild();
- } else if (freedNode.getNextSibling() != null) {
- curTraversal = SIBILING;
- if (freedNode != tempNode) {
- free(freedNode);
- }
- freedNode = freedNode.getNextSibling();
- } else {
- curTraversal = PARENT;
- if (freedNode != tempNode) {
- free(freedNode);
- }
- freedNode = freedNode.getParent();
- }
- }
- }
- }
-
- /**
- * Free the current node.
- *
- * @param node YANG node
- */
- private static void free(YangNode node) {
-
- YangNode parent = node.getParent();
- parent.setChild(null);
-
- if (node.getNextSibling() != null) {
- parent.setChild(node.getNextSibling());
- } else if (node.getPreviousSibling() != null) {
- parent.setChild(node.getPreviousSibling());
- }
- node = null;
- }
-
- /**
- * Delete Java code files corresponding to the YANG schema.
- *
- * @param rootNode root node of data-model tree
- * @param yangPluginConfig plugin configurations
- * @throws IOException when fails to delete java code file the current node
- */
- public static void translatorErrorHandler(YangNode rootNode, YangPluginConfig yangPluginConfig)
- throws IOException {
-
- if (rootNode != null) {
-
- // Start removing all open files.
- YangNode tempNode = rootNode;
- YangNode curNode = tempNode.getChild();
- TraversalType curTraversal = ROOT;
-
- while (tempNode != null) {
-
- if (curTraversal != PARENT) {
- close(tempNode, yangPluginConfig, rootNode);
- }
- if (curTraversal != PARENT && tempNode.getChild() != null) {
- curTraversal = CHILD;
- tempNode = tempNode.getChild();
- } else if (tempNode.getNextSibling() != null) {
- curTraversal = SIBILING;
- tempNode = tempNode.getNextSibling();
- } else {
- curTraversal = PARENT;
- tempNode = tempNode.getParent();
- }
- }
-
- freeRestResources(curNode);
- }
- }
-
- /**
- * Closes all the current open file handles of node and delete all generated files.
- *
- * @param node current YANG node
- * @param yangPlugin plugin configurations
- * @param rootNode YANG root node
- * @throws IOException when fails to do IO operations
- */
- private static void close(YangNode node, YangPluginConfig yangPlugin,
- YangNode rootNode)
- throws IOException {
- if (node instanceof JavaCodeGenerator && ((TempJavaCodeFragmentFilesContainer) node)
- .getTempJavaCodeFragmentFiles() != null) {
- ((TempJavaCodeFragmentFilesContainer) node).getTempJavaCodeFragmentFiles().freeTemporaryResources(true);
- }
- if (rootNode != null) {
- JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) rootNode).getJavaFileInfo();
- if (javaFileInfo.getPackage() != null) {
- searchAndDeleteTempDir(javaFileInfo.getBaseCodeGenPath() +
- javaFileInfo.getPackageFilePath());
- } else {
- searchAndDeleteTempDir(yangPlugin.getCodeGenDir());
- }
- }
-
- }
-
- /**
- * Searches child node in data model tree.
- *
- * @param parentNode parent node
- * @param nodeType node type
- * @param nodeName node name
- * @return child node
- */
- public static YangNode searchYangNode(YangNode parentNode, YangNodeType nodeType, String nodeName) {
- YangNode child = parentNode.getChild();
- TraversalType curTraversal = ROOT;
- if (child == null) {
- throw new IllegalArgumentException("Given parent node does not contain any child nodes");
- }
-
- while (child != null) {
- if (curTraversal != PARENT) {
- if (child instanceof YangInput || child instanceof YangOutput) {
- if (child.getNodeType().equals(nodeType)) {
- return child;
- }
- } else if (child.getName().equals(nodeName) && child.getNodeType().equals(nodeType)) {
- return child;
- }
- }
- if (curTraversal != PARENT && child.getChild() != null) {
- curTraversal = CHILD;
- child = child.getChild();
- } else if (child.getNextSibling() != null) {
- curTraversal = SIBILING;
- child = child.getNextSibling();
- } else {
- curTraversal = PARENT;
- child = child.getParent();
- }
- }
- return null;
- }
-
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/JavaFileInfoContainer.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/JavaFileInfoContainer.java
deleted file mode 100644
index 7fdaf6f..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/JavaFileInfoContainer.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.translator.tojava;
-
-/**
- * Represents data model nodes which are required to generate java classes, need to support
- * java file info.
- */
-public interface JavaFileInfoContainer {
-
- /**
- * Returns the generated java file information.
- *
- * @return generated java file information
- */
- JavaFileInfoTranslator getJavaFileInfo();
-
- /**
- * Sets the java file info object.
- *
- * @param javaInfo java file info object
- */
- void setJavaFileInfo(JavaFileInfoTranslator javaInfo);
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/JavaFileInfoTranslator.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/JavaFileInfoTranslator.java
deleted file mode 100644
index 781acb6..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/JavaFileInfoTranslator.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava;
-
-import org.onosproject.yangutils.datamodel.javadatamodel.JavaFileInfo;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-
-/**
- * Represents cached java file handle, which supports the addition of member attributes and
- * methods.
- */
-public class JavaFileInfoTranslator extends JavaFileInfo {
-
- private static final long serialVersionUID = 806102633L;
-
- /**
- * The type(s) of java source file(s) to be generated when the cached file
- * handle is closed.
- */
- private transient int genFileTypes;
-
- /**
- * File generation directory path.
- */
- private transient String relativeFilePath;
-
- /**
- * File generation base directory path.
- */
- private transient String codeGenDirFilePath;
-
- /**
- * Plugin configuration for naming convention.
- */
- private transient YangPluginConfig pluginConfig;
-
- /**
- * Returns the types of files being generated corresponding to the YANG
- * definition.
- *
- * @return the types of files being generated corresponding to the YANG
- * definition
- */
- public int getGeneratedFileTypes() {
- return genFileTypes;
- }
-
- /**
- * Sets the types of files being generated corresponding to the YANG
- * definition.
- *
- * @param fileTypes the types of files being generated corresponding to the
- * YANG definition
- */
- public void setGeneratedFileTypes(int fileTypes) {
- genFileTypes = fileTypes;
- }
-
- /**
- * Adds the types of files being generated corresponding to the YANG
- * definition.
- *
- * @param fileTypes the types of files being generated corresponding to the
- * YANG definition
- */
- public void addGeneratedFileTypes(int fileTypes) {
- genFileTypes |= fileTypes;
- }
-
- /**
- * Sets directory package path for code generation.
- *
- * @param path directory package path for code generation
- */
- public void setPackageFilePath(String path) {
- relativeFilePath = path;
- }
-
- /**
- * Returns directory package path for code generation.
- *
- * @return directory package path for code generation
- */
- public String getPackageFilePath() {
- return relativeFilePath;
- }
-
- /**
- * Returns base directory package path for code generation.
- *
- * @return directory package path for code generation
- */
- public String getBaseCodeGenPath() {
- return codeGenDirFilePath;
- }
-
- /**
- * Sets base directory package path for code generation.
- *
- * @param path base directory path
- */
- public void setBaseCodeGenPath(String path) {
- codeGenDirFilePath = path;
- }
-
- /**
- * Returns plugin configurations.
- *
- * @return the pluginConfig
- */
- public YangPluginConfig getPluginConfig() {
- return pluginConfig;
- }
-
- /**
- * Sets plugin configurations.
- *
- * @param pluginConfig the pluginConfig to set
- */
- public void setPluginConfig(YangPluginConfig pluginConfig) {
- this.pluginConfig = pluginConfig;
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/JavaImportData.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/JavaImportData.java
deleted file mode 100644
index 2477d65..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/JavaImportData.java
+++ /dev/null
@@ -1,338 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.translator.tojava;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.SortedSet;
-import java.util.TreeSet;
-
-import static java.util.Collections.sort;
-import static java.util.Collections.unmodifiableSortedSet;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getImportString;
-import static org.onosproject.yangutils.utils.UtilConstants.ABSTRACT_EVENT;
-import static org.onosproject.yangutils.utils.UtilConstants.ARRAY_LIST_IMPORT;
-import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
-import static org.onosproject.yangutils.utils.UtilConstants.BITSET;
-import static org.onosproject.yangutils.utils.UtilConstants.COLLECTION_IMPORTS;
-import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.EVENT_LISTENER;
-import static org.onosproject.yangutils.utils.UtilConstants.JAVA_LANG;
-import static org.onosproject.yangutils.utils.UtilConstants.JAVA_MATH;
-import static org.onosproject.yangutils.utils.UtilConstants.JAVA_UTIL_OBJECTS_IMPORT_CLASS;
-import static org.onosproject.yangutils.utils.UtilConstants.JAVA_UTIL_PKG;
-import static org.onosproject.yangutils.utils.UtilConstants.JAVA_UTIL_REGEX_PKG;
-import static org.onosproject.yangutils.utils.UtilConstants.LIST;
-import static org.onosproject.yangutils.utils.UtilConstants.LISTENER_SERVICE;
-import static org.onosproject.yangutils.utils.UtilConstants.MAP;
-import static org.onosproject.yangutils.utils.UtilConstants.ONOS_EVENT_PKG;
-import static org.onosproject.yangutils.utils.UtilConstants.PATTERN;
-import static org.onosproject.yangutils.utils.UtilConstants.QUEUE;
-import static org.onosproject.yangutils.utils.UtilConstants.SET;
-
-/**
- * Represents that generated Java file can contain imports.
- */
-public class JavaImportData {
-
- /**
- * Flag to denote if any list in imported.
- */
- private boolean isListToImport;
-
- /**
- * Flag to denote if any queue is imported due to compiler annotation.
- */
- private boolean isQueueToImport;
-
- /**
- * Flag to denote if any set is imported due to compiler annotation.
- */
- private boolean isSetToImport;
-
- /**
- * Flag to denote if any map is imported due to compiler annotation.
- */
- private boolean isMapToImport;
-
- /**
- * Sorted set of import info, to be used to maintain the set of classes to
- * be imported in the generated class.
- */
- private final SortedSet<JavaQualifiedTypeInfoTranslator> importSet;
-
- /**
- * Creates java import data object.
- */
- public JavaImportData() {
- importSet = new TreeSet<>();
- }
-
-
- /**
- * Sets the status of importing list.
- *
- * @param isList status to mention list is bing imported
- */
- void setIfListImported(boolean isList) {
- isListToImport = isList;
- }
-
-
- /**
- * Sets the status of the queue to be imported due to compiler annotations.
- *
- * @param queueToImport status of queue to import
- */
- void setQueueToImport(boolean queueToImport) {
- isQueueToImport = queueToImport;
- }
-
- /**
- * Sets the status of the set to be imported due to compiler annotations.
- *
- * @param setToImport status of set to import
- */
- void setSetToImport(boolean setToImport) {
- isSetToImport = setToImport;
- }
-
- /**
- * Sets true if map is imported due to compiler annotations.
- *
- * @param mapToImport true if map is imported due to compiler annotations
- */
- void setMapToImport(boolean mapToImport) {
- isMapToImport = mapToImport;
- }
-
- /**
- * Returns the set containing the imported class/interface info.
- *
- * @return the set containing the imported class/interface info
- */
- public SortedSet<JavaQualifiedTypeInfoTranslator> getImportSet() {
- return unmodifiableSortedSet(importSet);
- }
-
- /**
- * Adds an imported class/interface info if it is not already part of the
- * collection.
- * <p>
- * If already part of the collection, check if the packages are same, if so
- * then return true, to denote it is already in the import collection, and
- * it can be accessed without qualified access. If the packages do not
- * match, then do not add to the import collection, and return false to
- * denote, it is not added to import collection and needs to be accessed in
- * a qualified manner.
- *
- * @param newImportInfo class/interface info being imported
- * @param className name of the call being generated
- * @param classPkg generated class package
- * @return qualified access status of the import node being added
- */
- public boolean addImportInfo(JavaQualifiedTypeInfoTranslator newImportInfo,
- String className, String classPkg) {
-
- if (newImportInfo.getClassInfo().contentEquals(className)) {
- /*
- * If the current class name is same as the attribute class name,
- * then the attribute must be accessed in a qualified manner.
- */
- return true;
- } else if (newImportInfo.getPkgInfo() == null) {
- /*
- * If the package info is null, then it is not a candidate for import
- * / qualified access
- */
- return false;
- }
-
- /*
- * If the attribute type is having the package info, it is contender
- * for import list and also need to check if it needs to be a
- * qualified access.
- */
- if (newImportInfo.getPkgInfo().contentEquals(classPkg)) {
- /*
- * Package of the referred attribute and the generated class is same,
- * so no need import
- * or qualified access.
- */
- return false;
- }
-
- for (JavaQualifiedTypeInfoTranslator curImportInfo : getImportSet()) {
- if (curImportInfo.getClassInfo()
- .contentEquals(newImportInfo.getClassInfo())) {
- return !curImportInfo.getPkgInfo()
- .contentEquals(newImportInfo.getPkgInfo());
- }
- }
-
- /*
- * Import is added, so it is a member for non qualified access
- */
- importSet.add(newImportInfo);
- return false;
- }
-
- /**
- * Returns import for class.
- *
- * @param isForInterface if needs to check for interface
- * @return imports for class
- */
- public List<String> getImports(boolean isForInterface) {
-
- String importString;
- List<String> imports = new ArrayList<>();
- boolean check;
- for (JavaQualifiedTypeInfoTranslator importInfo : getImportSet()) {
- check = importInfo.isForInterface();
- if (!isForInterface) {
- check = true;
- }
- if (!importInfo.getPkgInfo().equals(EMPTY_STRING) &&
- importInfo.getClassInfo() != null &&
- !importInfo.getPkgInfo().equals(JAVA_LANG) &&
- check) {
- importString = getImportString(importInfo.getPkgInfo(), importInfo
- .getClassInfo());
- imports.add(importString);
- }
- }
- if (isListToImport) {
- imports.add(getImportForList());
- if (!isForInterface) {
- imports.add(ARRAY_LIST_IMPORT);
- }
- }
- if (isQueueToImport) {
- imports.add(getImportForQueue());
- }
- if (isSetToImport) {
- imports.add(getImportForSet());
- }
- if (isMapToImport) {
- imports.add(getImportForMap());
- }
-
- sort(imports);
- return imports;
- }
-
- /**
- * Returns import for hash and equals method.
- *
- * @return import for hash and equals method
- */
- String getImportForHashAndEquals() {
- return getImportString(JAVA_UTIL_PKG,
- JAVA_UTIL_OBJECTS_IMPORT_CLASS);
- }
-
- /**
- * Returns import for to bitset method.
- *
- * @return import for to bitset method
- */
- public String getImportForToBitSet() {
- return getImportString(JAVA_UTIL_PKG, BITSET);
- }
-
- /**
- * Returns import for to bitset method.
- *
- * @return import for to bitset method
- */
- public String getImportForPattern() {
- return getImportString(JAVA_UTIL_REGEX_PKG, PATTERN);
- }
-
- /**
- * Returns import for list attribute.
- *
- * @return import for list attribute
- */
- private String getImportForList() {
- return getImportString(COLLECTION_IMPORTS, LIST);
- }
-
- /**
- * Returns import for map attribute.
- *
- * @return import for map attribute
- */
- private String getImportForMap() {
- return getImportString(COLLECTION_IMPORTS, MAP);
- }
-
- /**
- * Returns import for queue attribute.
- *
- * @return import for queue attribute
- */
- private String getImportForQueue() {
- return getImportString(COLLECTION_IMPORTS, QUEUE);
- }
-
- /**
- * Returns import for set attribute.
- *
- * @return import for set attribute
- */
- private String getImportForSet() {
- return getImportString(COLLECTION_IMPORTS, SET);
- }
-
- /**
- * Returns import string for ListenerService class.
- *
- * @return import string for ListenerService class
- */
- public String getListenerServiceImport() {
- return getImportString(ONOS_EVENT_PKG, LISTENER_SERVICE);
- }
-
- /**
- * Returns import string for AbstractEvent class.
- *
- * @return import string for AbstractEvent class
- */
- String getAbstractEventsImport() {
- return getImportString(ONOS_EVENT_PKG, ABSTRACT_EVENT);
- }
-
- /**
- * Returns import string for EventListener class.
- *
- * @return import string for EventListener class
- */
- String getEventListenerImport() {
- return getImportString(ONOS_EVENT_PKG, EVENT_LISTENER);
- }
-
- /**
- * Returns import for big integer.
- *
- * @return import for big integer
- */
- public String getBigIntegerImport() {
- return getImportString(JAVA_MATH, BIG_INTEGER);
- }
-
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/JavaQualifiedTypeInfoTranslator.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/JavaQualifiedTypeInfoTranslator.java
deleted file mode 100644
index d4d2dea..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/JavaQualifiedTypeInfoTranslator.java
+++ /dev/null
@@ -1,310 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava;
-
-import com.google.common.base.MoreObjects;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.javadatamodel.JavaQualifiedTypeInfo;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.translator.tojava.javamodel.AttributesJavaDataType;
-import org.onosproject.yangutils.translator.tojava.javamodel.JavaLeafInfoContainer;
-import org.onosproject.yangutils.utils.io.YangToJavaNamingConflictUtil;
-
-import java.io.Serializable;
-import java.util.Objects;
-
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BINARY;
-import static org.onosproject.yangutils.translator.tojava.javamodel.AttributesJavaDataType.getJavaImportClass;
-import static org.onosproject.yangutils.translator.tojava.javamodel.AttributesJavaDataType.getJavaImportPackage;
-import static org.onosproject.yangutils.utils.UtilConstants.BASE64;
-import static org.onosproject.yangutils.utils.UtilConstants.COLLECTION_IMPORTS;
-
-/**
- * Represents the information about individual imports in the generated file.
- */
-public class JavaQualifiedTypeInfoTranslator
- extends JavaQualifiedTypeInfo
- implements Comparable<JavaQualifiedTypeInfoTranslator>, Serializable {
- private static final long serialVersionUID = 806201634L;
- private boolean isQualified;
- private boolean isForInterface = true;
-
- /**
- * Creates a java qualified type info object.
- */
- public JavaQualifiedTypeInfoTranslator() {
- super();
- }
-
- /**
- * Returns the imported package info.
- *
- * @return the imported package info
- */
- public String getPkgInfo() {
- return pkgInfo;
- }
-
- /**
- * Sets the imported package info.
- *
- * @param pkgInfo the imported package info
- */
- public void setPkgInfo(String pkgInfo) {
- this.pkgInfo = pkgInfo;
- }
-
- /**
- * Returns the imported class/interface info.
- *
- * @return the imported class/interface info
- */
- public String getClassInfo() {
- return classInfo;
- }
-
- /**
- * Sets the imported class/interface info.
- *
- * @param classInfo the imported class/interface info
- */
- public void setClassInfo(String classInfo) {
- this.classInfo = classInfo;
- }
-
- /**
- * Updates the leaf's java information.
- *
- * @param leaf leaf whose java information is being updated
- */
- public static void updateLeavesJavaQualifiedInfo(
- JavaLeafInfoContainer leaf) {
-
- JavaQualifiedTypeInfoTranslator importInfo =
- (JavaQualifiedTypeInfoTranslator) leaf.getJavaQualifiedInfo();
-
- if (leaf.getDataType() == null) {
- throw new TranslatorException(
- "missing data type of leaf " + leaf.getName()
- + " in " + leaf.getLineNumber() + " at" +
- leaf.getCharPosition() + " in " +
- leaf.getFileName());
- }
-
- /*
- * Current leaves holder is adding a leaf info as a attribute to the
- * current class.
- */
- String className =
- getJavaImportClass(leaf.getDataType(), leaf.isLeafList(),
- leaf.getConflictResolveConfig());
- if (className != null) {
- /*
- * Corresponding to the attribute type a class needs to be imported,
- * since it can be a derived type or a usage of wrapper classes.
- */
- importInfo.setClassInfo(className);
- String classPkg = getJavaImportPackage(leaf.getDataType(),
- leaf.isLeafList(),
- leaf.getConflictResolveConfig());
- if (classPkg == null) {
- throw new TranslatorException(
- "import package cannot be null when the class is used" +
- " for "
- + leaf.getName()
- + " in " + leaf.getLineNumber() + " at" +
- leaf.getCharPosition() + " in " +
- leaf.getFileName());
- }
- importInfo.setPkgInfo(classPkg);
- } else {
- /*
- * The attribute does not need a class to be imported, for example
- * built in java types.
- */
- String dataTypeName =
- AttributesJavaDataType.getJavaDataType(leaf.getDataType());
- if (dataTypeName == null) {
- throw new TranslatorException("not supported data type for "
- + leaf.getName()
- + " in " +
- leaf.getLineNumber() +
- " at" +
- leaf.getCharPosition() +
- " in " +
- leaf.getFileName());
- }
- importInfo.setClassInfo(dataTypeName);
- }
-
- leaf.getJavaQualifiedInfo().setJavaAttributeName(leaf.getJavaName(
- leaf.getConflictResolveConfig()));
- }
-
- /**
- * Returns the import info for an attribute, which needs to be used for code
- * generation for import or for qualified access.
- *
- * @param curNode current data model node for which the java file
- * is being
- * generated
- * @param attributeName name of the attribute being added, it will used in
- * import info for child class
- * @return return the import info for this attribute
- */
- public static JavaQualifiedTypeInfoTranslator getQualifiedTypeInfoOfCurNode(
- YangNode curNode,
- String attributeName) {
-
- JavaQualifiedTypeInfoTranslator importInfo =
- new JavaQualifiedTypeInfoTranslator();
-
- if (!(curNode instanceof JavaFileInfoContainer)) {
- throw new TranslatorException(
- "missing java file information to get the package details "
- + "of attribute corresponding to child node " +
- curNode.getName() +
- " in " + curNode.getLineNumber() + " at " +
- curNode.getCharPosition() + " in " +
- curNode.getFileName());
- }
-
- importInfo.setClassInfo(attributeName);
- importInfo.setPkgInfo(((JavaFileInfoContainer) curNode)
- .getJavaFileInfo().getPackage());
-
- return importInfo;
- }
-
- /**
- * Returns the java qualified type information for the wrapper classes.
- *
- * @param referredTypesAttrInfo attribute of referred type
- * @param conflictResolver plugin configurations
- * @return return the import info for this attribute
- */
- static JavaQualifiedTypeInfoTranslator getQualifiedInfoOfFromString(
- JavaAttributeInfo referredTypesAttrInfo,
- YangToJavaNamingConflictUtil conflictResolver) {
-
- /*
- * Get the java qualified type information for the wrapper classes and
- * set it in new java attribute information.
- */
- JavaQualifiedTypeInfoTranslator qualifiedInfoOfFromString =
- new JavaQualifiedTypeInfoTranslator();
-
- if (referredTypesAttrInfo.getAttributeType().getDataType() == BINARY) {
- qualifiedInfoOfFromString.setClassInfo(BASE64);
- qualifiedInfoOfFromString.setPkgInfo(COLLECTION_IMPORTS);
- } else {
- qualifiedInfoOfFromString.setClassInfo(
- getJavaImportClass(referredTypesAttrInfo.getAttributeType(),
- true, conflictResolver));
- qualifiedInfoOfFromString.setPkgInfo(
- getJavaImportPackage(
- referredTypesAttrInfo.getAttributeType(), true,
- conflictResolver));
- }
- return qualifiedInfoOfFromString;
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(pkgInfo, classInfo);
- }
-
- @Override
- public boolean equals(Object obj) {
-
- if (this == obj) {
- return true;
- }
- if (obj instanceof JavaQualifiedTypeInfoTranslator) {
- JavaQualifiedTypeInfoTranslator other =
- (JavaQualifiedTypeInfoTranslator) obj;
- return Objects.equals(pkgInfo, other.pkgInfo) &&
- Objects.equals(classInfo, other.classInfo);
- }
- return false;
- }
-
- /**
- * Checks if the import info matches.
- *
- * @param importInfo matched import
- * @return if equal or not
- */
- public boolean exactMatch(JavaQualifiedTypeInfoTranslator importInfo) {
- return equals(importInfo)
- && Objects.equals(pkgInfo, importInfo.getPkgInfo())
- && Objects.equals(classInfo, importInfo.getClassInfo());
- }
-
- @Override
- public String toString() {
- return MoreObjects.toStringHelper(getClass())
- .add("pkgInfo", pkgInfo)
- .add("classInfo", classInfo).toString();
- }
-
- /**
- * Checks that there is no 2 objects with the same class name.
- *
- * @param other compared import info.
- */
- @Override
- public int compareTo(JavaQualifiedTypeInfoTranslator other) {
- return getClassInfo().compareTo(other.getClassInfo());
- }
-
- /**
- * Returns true if import is qualified.
- *
- * @return true if import is qualified
- */
- public boolean isQualified() {
- return isQualified;
- }
-
- /**
- * Sets true if import is qualified.
- *
- * @param qualified true if import is qualified
- */
- public void setQualified(boolean qualified) {
- isQualified = qualified;
- }
-
- /**
- * Returns true if import should be added to interface.
- *
- * @return true if import should be added to interface
- */
- boolean isForInterface() {
- return isForInterface;
- }
-
- /**
- * Sets true if import should be added to interface.
- *
- * @param forInterface true if import should be added to interface
- */
- void setForInterface(boolean forInterface) {
- isForInterface = forInterface;
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaBeanFragmentFiles.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaBeanFragmentFiles.java
deleted file mode 100644
index 5f6b3bb..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaBeanFragmentFiles.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava;
-
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-
-import java.io.File;
-import java.io.IOException;
-
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructor;
-import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.closeFile;
-
-/**
- * Represents implementation of java bean code fragments temporary implementations.
- * Maintains the temp files required specific for bean java snippet generation.
- */
-public class TempJavaBeanFragmentFiles
- extends TempJavaFragmentFiles {
-
- /**
- * File name for constructor.
- */
- private static final String CONSTRUCTOR_FILE_NAME = "Constructor";
-
- /**
- * Temporary file handle for constructor of class.
- */
- private final File constructorImplTempFileHandle;
-
- /**
- * Creates an instance of temporary java code fragment.
- *
- * @param javaFileInfo generated java file info
- * @throws IOException when fails to create new file handle
- */
- TempJavaBeanFragmentFiles(JavaFileInfoTranslator javaFileInfo)
- throws IOException {
-
- super(javaFileInfo);
-
- /*
- * Initialize getterImpl, attributes, constructor, hash code, equals and
- * to strings when generation file type matches to impl class mask.
- */
- addGeneratedTempFile(CONSTRUCTOR_IMPL_MASK);
- constructorImplTempFileHandle = getTemporaryFileHandle(CONSTRUCTOR_FILE_NAME);
- }
-
- /**
- * Returns constructor's temporary file handle.
- *
- * @return temporary file handle
- */
- public File getConstructorImplTempFileHandle() {
- return constructorImplTempFileHandle;
- }
-
- /**
- * Adds constructor for class.
- *
- * @param attr attribute info
- * @throws IOException when fails to append to temporary file
- */
- private void addConstructor(JavaAttributeInfo attr)
- throws IOException {
- appendToFile(constructorImplTempFileHandle,
- getConstructor(attr, getGeneratedJavaFiles()));
- }
-
- /**
- * Adds the new attribute info to the target generated temporary files.
- *
- * @param newAttrInfo the attribute info that needs to be added to temporary
- * files
- * @throws IOException IO operation fail
- */
- @Override
- void addJavaSnippetInfoToApplicableTempFiles(JavaAttributeInfo newAttrInfo,
- YangPluginConfig pluginConfig)
- throws IOException {
- super.addJavaSnippetInfoToApplicableTempFiles(newAttrInfo, pluginConfig);
- addConstructor(newAttrInfo);
- }
-
- /**
- * Removes all temporary file handles.
- *
- * @param isErrorOccurred flag to tell translator that error has occurred
- * while code generation
- * @throws IOException when failed to delete the temporary files
- */
- @Override
- public void freeTemporaryResources(boolean isErrorOccurred)
- throws IOException {
-
- /*
- * Close constructor temporary file handle and delete the file.
- */
- closeFile(constructorImplTempFileHandle, true);
- super.freeTemporaryResources(isErrorOccurred);
- }
-
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaCodeFragmentFiles.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaCodeFragmentFiles.java
deleted file mode 100644
index dee7b1d..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaCodeFragmentFiles.java
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava;
-
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangTypeHolder;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-
-import java.io.IOException;
-
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ALL_EVENT_CLASS_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPE_CLASS;
-import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
-
-/**
- * Represents implementation of java code fragments temporary implementations.
- * Contains fragment file object of different types of java file.
- * Uses required object(s) to generate the target java file(s).
- */
-public class TempJavaCodeFragmentFiles {
-
- /**
- * Has the temporary files required for bean generated classes.
- */
- private TempJavaBeanFragmentFiles beanTempFiles;
-
- /**
- * Has the temporary files required for bean generated classes.
- */
- private TempJavaTypeFragmentFiles typeTempFiles;
-
- /**
- * Has the temporary files required for service generated classes.
- */
- private TempJavaServiceFragmentFiles serviceTempFiles;
-
- /**
- * Has the temporary files required for enumeration generated classes.
- */
- private TempJavaEnumerationFragmentFiles enumTempFiles;
-
- /**
- * Has the temporary files required for enumeration generated classes.
- */
- private TempJavaEventFragmentFiles eventTempFiles;
-
- /**
- * Creates an instance of temporary java code fragment.
- *
- * @param javaFileInfo generated java file info
- * @throws IOException when fails to create new file handle
- */
- public TempJavaCodeFragmentFiles(JavaFileInfoTranslator javaFileInfo)
- throws IOException {
-
- int genType = javaFileInfo.getGeneratedFileTypes();
- if ((genType & GENERATE_INTERFACE_WITH_BUILDER) != 0) {
- beanTempFiles = new TempJavaBeanFragmentFiles(javaFileInfo);
- }
-
- if ((genType & GENERATE_TYPE_CLASS) != 0) {
- typeTempFiles = new TempJavaTypeFragmentFiles(javaFileInfo);
- }
-
- if ((genType & GENERATE_ENUM_CLASS) != 0) {
- enumTempFiles = new TempJavaEnumerationFragmentFiles(javaFileInfo);
- }
-
- if ((genType & GENERATE_SERVICE_AND_MANAGER) != 0) {
- serviceTempFiles = new TempJavaServiceFragmentFiles(javaFileInfo);
- }
-
- if ((genType & GENERATE_ALL_EVENT_CLASS_MASK) != 0) {
- eventTempFiles = new TempJavaEventFragmentFiles(javaFileInfo);
- }
- }
-
- /**
- * Retrieves the temp file handle for bean file generation.
- *
- * @return temp file handle for bean file generation
- */
- public TempJavaBeanFragmentFiles getBeanTempFiles() {
- return beanTempFiles;
- }
-
- /**
- * Retrieves the temp file handle for data type file generation.
- *
- * @return temp file handle for data type file generation
- */
- public TempJavaTypeFragmentFiles getTypeTempFiles() {
- return typeTempFiles;
- }
-
-
- /**
- * Retrieves the temp file handle for service file generation.
- *
- * @return temp file handle for service file generation
- */
- public TempJavaServiceFragmentFiles getServiceTempFiles() {
- return serviceTempFiles;
- }
-
- /**
- * Retrieves the temp file handle for enumeration file generation.
- *
- * @return temp file handle for enumeration file generation
- */
- public TempJavaEnumerationFragmentFiles getEnumTempFiles() {
- return enumTempFiles;
- }
-
- /**
- * Retrieves the temp file handle for event file generation.
- *
- * @return temp file handle for enumeration file generation
- */
- public TempJavaEventFragmentFiles getEventFragmentFiles() {
- return eventTempFiles;
- }
-
- /**
- * Constructs java code exit.
- *
- * @param fileType generated file type
- * @param curNode current YANG node
- * @throws IOException when fails to generate java files
- */
- public void generateJavaFile(int fileType, YangNode curNode)
- throws IOException {
-
- if ((fileType & GENERATE_INTERFACE_WITH_BUILDER) != 0) {
- beanTempFiles.generateJavaFile(fileType, curNode);
- }
-
- /*
- * Creates user defined data type class file.
- */
- if ((fileType & GENERATE_TYPE_CLASS) != 0) {
- typeTempFiles.generateJavaFile(fileType, curNode);
- }
-
- /*
- * Creates service and manager class file.
- */
- if (fileType == GENERATE_SERVICE_AND_MANAGER) {
- serviceTempFiles.generateJavaFile(GENERATE_SERVICE_AND_MANAGER, curNode);
- }
-
- /*
- * Creates event, event listener and event subject files.
- */
- if (fileType == GENERATE_ALL_EVENT_CLASS_MASK) {
- eventTempFiles.generateJavaFile(GENERATE_ALL_EVENT_CLASS_MASK, curNode);
- }
-
- /*
- * Creates enumeration class file.
- */
- if (fileType == GENERATE_ENUM_CLASS) {
- enumTempFiles.generateJavaFile(GENERATE_ENUM_CLASS, curNode);
- }
- }
-
- /**
- * Add all the type in the current data model node as part of the
- * generated temporary file.
- *
- * @param typeHolder YANG java data model node which has type info, eg union / typedef
- * @param config plugin configurations for naming convention
- * @throws IOException IO operation fail
- */
- void addTypeInfoToTempFiles(YangTypeHolder typeHolder, YangPluginConfig config)
- throws IOException {
- typeTempFiles.addTypeInfoToTempFiles(typeHolder, config);
- }
-
- /**
- * Adds build method for interface.
- *
- * @return build method for interface
- * @throws IOException when fails to append to temporary file
- */
- public String addBuildMethodForInterface()
- throws IOException {
- if (beanTempFiles != null) {
- return beanTempFiles.addBuildMethodForInterface();
- }
- throw new TranslatorException("build method only supported for bean class");
- }
-
- /**
- * Adds default constructor for class.
- *
- * @param modifier modifier for constructor.
- * @param toAppend string which need to be appended with the class name
- * @return default constructor for class
- * @throws IOException when fails to append to file
- */
- public String addDefaultConstructor(String modifier, String toAppend)
- throws IOException {
- boolean isSuffix = false;
- if (toAppend.equals(BUILDER)) {
- isSuffix = true;
- }
- if (typeTempFiles != null) {
- return typeTempFiles.addDefaultConstructor(modifier, toAppend,
- isSuffix);
- }
- if (beanTempFiles != null) {
- return beanTempFiles.addDefaultConstructor(modifier, toAppend,
- isSuffix);
- }
-
- throw new TranslatorException("default constructor should not be added");
- }
-
- /**
- * Adds build method's implementation for class.
- *
- * @return build method implementation for class
- * @throws IOException when fails to append to temporary file
- */
- public String addBuildMethodImpl()
- throws IOException {
- if (beanTempFiles != null) {
- return beanTempFiles.addBuildMethodImpl();
- }
- throw new TranslatorException("build should not be added");
- }
-
- /**
- * Removes all temporary file handles.
- * when translator fails to generate java files we need to close
- * all open file handles include temporary files and java files
- *
- * @param isErrorOccurred if error occurred
- * @throws IOException when failed to delete the temporary files
- */
- public void freeTemporaryResources(boolean isErrorOccurred)
- throws IOException {
-
- if (beanTempFiles != null) {
- beanTempFiles.freeTemporaryResources(isErrorOccurred);
- }
-
- if (typeTempFiles != null) {
- typeTempFiles.freeTemporaryResources(isErrorOccurred);
- }
-
- if (enumTempFiles != null) {
- enumTempFiles.freeTemporaryResources(isErrorOccurred);
- }
-
- if (serviceTempFiles != null) {
- serviceTempFiles.freeTemporaryResources(isErrorOccurred);
- }
-
- if (eventTempFiles != null) {
- eventTempFiles.freeTemporaryResources(isErrorOccurred);
- }
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaCodeFragmentFilesContainer.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaCodeFragmentFilesContainer.java
deleted file mode 100644
index 1bbf349..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaCodeFragmentFilesContainer.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.translator.tojava;
-
-/**
- * Represents Has temporary file handle.
- */
-public interface TempJavaCodeFragmentFilesContainer {
-
- /**
- * Returns the temporary file handle.
- *
- * @return temporary file handle
- */
- TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles();
-
- /**
- * Sets temporary file handle.
- *
- * @param fileHandle temporary file handle
- */
- void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle);
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaEnumerationFragmentFiles.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaEnumerationFragmentFiles.java
deleted file mode 100644
index 783a310..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaEnumerationFragmentFiles.java
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.translator.tojava;
-
-import org.onosproject.yangutils.datamodel.YangEnum;
-import org.onosproject.yangutils.datamodel.YangEnumeration;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaTypeTranslator;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.List;
-
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.INT32;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
-import static org.onosproject.yangutils.translator.tojava.JavaAttributeInfo.getAttributeInfoForTheData;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.generateEnumAttributeStringWithSchemaName;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateEnumClassFile;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.createPackage;
-import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.INT;
-import static org.onosproject.yangutils.utils.UtilConstants.REGEX_FOR_FIRST_DIGIT;
-import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUTO_PREFIX;
-import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.closeFile;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getPrefixForIdentifier;
-
-/**
- * Represents implementation of java code fragments temporary implementations. Maintains the temp files required
- * specific for enumeration java snippet generation.
- */
-public class TempJavaEnumerationFragmentFiles
- extends TempJavaFragmentFiles {
-
- /**
- * File name for temporary enum class.
- */
- private static final String ENUM_CLASS_TEMP_FILE_NAME = "EnumClass";
-
- /**
- * Temporary file handle for enum class file.
- */
- private final File enumClassTempFileHandle;
-
- /**
- * Java file handle for enum class.
- */
- private File enumClassJavaFileHandle;
- private boolean isEnumClass;
-
- /**
- * Creates an instance of temporary java code fragment.
- *
- * @param javaFileInfo generated java file info
- * @throws IOException when fails to create new file handle
- */
- public TempJavaEnumerationFragmentFiles(JavaFileInfoTranslator javaFileInfo)
- throws IOException {
-
- super(javaFileInfo);
- /*
- * Initialize enum when generation file type matches to enum class mask.
- */
- addGeneratedTempFile(ENUM_IMPL_MASK);
- enumClassTempFileHandle = getTemporaryFileHandle(ENUM_CLASS_TEMP_FILE_NAME);
- }
-
- /**
- * Returns temporary file handle for enum class file.
- *
- * @return temporary file handle for enum class file
- */
- public File getEnumClassTempFileHandle() {
- return enumClassTempFileHandle;
- }
-
- /**
- * Adds enum class attributes to temporary file.
- *
- * @param yangEnum YANG enum
- * @throws IOException when fails to do IO operations.
- */
- private void addAttributesForEnumClass(YangEnum yangEnum)
- throws IOException {
- appendToFile(enumClassTempFileHandle,
- generateEnumAttributeStringWithSchemaName(yangEnum.getNamedValue(),
- yangEnum.getValue()));
- }
-
- /**
- * Adds enum attributes to temporary files.
- *
- * @param curNode current YANG node
- * @param config plugin configurations
- * @throws IOException when fails to do IO operations
- */
- public void addEnumAttributeToTempFiles(YangNode curNode,
- YangPluginConfig config)
- throws IOException {
-
- addJavaSnippetInfoToApplicableTempFiles(getJavaAttributeForEnum(config),
- config);
- if (curNode instanceof YangEnumeration) {
- YangEnumeration enumeration = (YangEnumeration) curNode;
- for (YangEnum curEnum : enumeration.getEnumSet()) {
- String enumName = curEnum.getNamedValue();
- String prefix;
- if (enumName.matches(REGEX_FOR_FIRST_DIGIT)) {
- prefix = getPrefixForIdentifier(
- config.getConflictResolver());
- if (prefix != null) {
- curEnum.setNamedValue(prefix + enumName);
- } else {
- curEnum.setNamedValue(YANG_AUTO_PREFIX + enumName);
- }
- }
- addJavaSnippetInfoToApplicableTempFiles(curEnum);
- }
- } else {
- throw new TranslatorException(
- "current node should be of enumeration type. " +
- curNode.getName() + " in " + curNode.getLineNumber() +
- " at " + curNode.getCharPosition() + " in " + curNode
- .getFileName());
- }
- }
-
- /**
- * Returns java attribute for enum class.
- *
- * @param config plugin configurations
- * @return java attribute
- */
- private JavaAttributeInfo getJavaAttributeForEnum(YangPluginConfig config) {
- YangJavaTypeTranslator javaType = new YangJavaTypeTranslator();
- javaType.setDataType(INT32);
- javaType.setDataTypeName(INT);
- javaType.updateJavaQualifiedInfo(config.getConflictResolver());
- return getAttributeInfoForTheData(
- javaType.getJavaQualifiedInfo(),
- javaType.getDataTypeName(), javaType,
- getIsQualifiedAccessOrAddToImportList(javaType.getJavaQualifiedInfo()),
- false);
- }
-
- /**
- * Adds the new attribute info to the target generated temporary files.
- *
- * @param yangEnum @throws IOException IO operation fail
- */
- private void addJavaSnippetInfoToApplicableTempFiles(YangEnum yangEnum)
- throws IOException {
- addAttributesForEnumClass(yangEnum);
- }
-
- /**
- * Constructs java code exit.
- *
- * @param fileType generated file type
- * @param curNode current YANG node
- * @throws IOException when fails to generate java files
- */
- @Override
- public void generateJavaFile(int fileType, YangNode curNode)
- throws IOException {
-
- List<String> imports = this.getJavaImportData().getImports(true);
- createPackage(curNode);
- enumClassJavaFileHandle = getJavaFileHandle(getJavaClassName(EMPTY_STRING));
- generateEnumClassFile(enumClassJavaFileHandle, curNode, imports);
- freeTemporaryResources(false);
- }
-
- /**
- * Removes all temporary file handles.
- *
- * @param isErrorOccurred flag to tell translator that error has occurred while file generation
- * @throws IOException when failed to delete the temporary files
- */
- @Override
- public void freeTemporaryResources(boolean isErrorOccurred)
- throws IOException {
- closeFile(enumClassJavaFileHandle, isErrorOccurred);
- closeFile(enumClassTempFileHandle, true);
- if (isEnumClass) {
- super.freeTemporaryResources(isErrorOccurred);
- }
- }
-
- public boolean isEnumClass() {
- return isEnumClass;
- }
-
- /**
- * Sets true if free super resources is required.
- *
- * @param enumClass true if free super resources is required
- */
- public void setEnumClass(boolean enumClass) {
- isEnumClass = enumClass;
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaEventFragmentFiles.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaEventFragmentFiles.java
deleted file mode 100644
index 4c5d69b..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaEventFragmentFiles.java
+++ /dev/null
@@ -1,442 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava;
-
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.translator.tojava.utils.JavaExtendsListHolder;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
-import static org.onosproject.yangutils.translator.tojava.JavaAttributeInfo.getAttributeInfoForTheData;
-import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedTypeInfoOfCurNode;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateEventFile;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateEventListenerFile;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateEventSubjectFile;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getFileObject;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getEnumJavaAttribute;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterForClass;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForClass;
-import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
-import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
-import static org.onosproject.yangutils.utils.UtilConstants.EVENT_LISTENER;
-import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
-import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
-import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.closeFile;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.MANAGER_SETTER_METHOD;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.enumJavaDocForInnerClass;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getAbsolutePackagePath;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
-
-/**
- * Represent temporary java fragments for event files.
- */
-public class TempJavaEventFragmentFiles
- extends TempJavaFragmentFiles {
- /**
- * File name for generated class file for special type like union, typedef suffix.
- */
- private static final String EVENT_SUBJECT_NAME_SUFFIX = "EventSubject";
-
- /**
- * File name for event enum temp file.
- */
- private static final String EVENT_ENUM_FILE_NAME = "EventEnum";
-
- /**
- * File name for event method temp file.
- */
- private static final String EVENT_METHOD_FILE_NAME = "EventMethod";
-
- /**
- * File name for event subject attribute temp file.
- */
- private static final String EVENT_SUBJECT_ATTRIBUTE_FILE_NAME
- = "EventSubjectAttribute";
-
- /**
- * File name for event subject getter temp file.
- */
- private static final String EVENT_SUBJECT_GETTER_FILE_NAME
- = "EventSubjectGetter";
-
- /**
- * File name for event subject setter temp file.
- */
- private static final String EVENT_SUBJECT_SETTER_FILE_NAME
- = "EventSubjectSetter";
-
- private static final String JAVA_FILE_EXTENSION = ".java";
-
- /**
- * Java file handle for event subject file.
- */
- private File eventSubjectJavaFileHandle;
-
- /**
- * Java file handle for event listener file.
- */
- private File eventListenerJavaFileHandle;
-
- /**
- * Java file handle for event file.
- */
- private File eventJavaFileHandle;
-
- /**
- * Java file handle for event enum impl file.
- */
- private final File eventEnumTempFileHandle;
-
- /**
- * Java file handle for event method impl file.
- */
- private final File eventMethodTempFileHandle;
-
- /**
- * Java file handle for event subject attribute file.
- */
- private final File eventSubjectAttributeTempFileHandle;
-
- /**
- * Java file handle for event subject getter impl file.
- */
- private final File eventSubjectGetterTempFileHandle;
-
- /**
- * Java file handle for event subject setter impl file.
- */
- private final File eventSubjectSetterTempFileHandle;
-
- /**
- * Creates an instance of temporary java code fragment.
- *
- * @param javaFileInfo generated file information
- * @throws IOException when fails to create new file handle
- */
- TempJavaEventFragmentFiles(JavaFileInfoTranslator javaFileInfo)
- throws IOException {
- setJavaExtendsListHolder(new JavaExtendsListHolder());
- setJavaImportData(new JavaImportData());
- setJavaFileInfo(javaFileInfo);
- setAbsoluteDirPath(getAbsolutePackagePath(
- getJavaFileInfo().getBaseCodeGenPath(),
- getJavaFileInfo().getPackageFilePath()));
-
- addGeneratedTempFile(EVENT_ENUM_MASK);
- addGeneratedTempFile(EVENT_METHOD_MASK);
- addGeneratedTempFile(EVENT_SUBJECT_ATTRIBUTE_MASK);
- addGeneratedTempFile(EVENT_SUBJECT_GETTER_MASK);
- addGeneratedTempFile(EVENT_SUBJECT_SETTER_MASK);
-
- eventEnumTempFileHandle = getTemporaryFileHandle(EVENT_ENUM_FILE_NAME);
- eventMethodTempFileHandle = getTemporaryFileHandle(
- EVENT_METHOD_FILE_NAME);
- eventSubjectAttributeTempFileHandle = getTemporaryFileHandle
- (EVENT_SUBJECT_ATTRIBUTE_FILE_NAME);
- eventSubjectGetterTempFileHandle = getTemporaryFileHandle(
- EVENT_SUBJECT_GETTER_FILE_NAME);
- eventSubjectSetterTempFileHandle = getTemporaryFileHandle(
- EVENT_SUBJECT_SETTER_FILE_NAME);
- }
-
- /**
- * Returns event enum temp file.
- *
- * @return event enum temp file
- */
- public File getEventEnumTempFileHandle() {
- return eventEnumTempFileHandle;
- }
-
- /**
- * Returns event method temp file.
- *
- * @return event method temp file
- */
- public File getEventMethodTempFileHandle() {
- return eventMethodTempFileHandle;
- }
-
- /**
- * Returns event subject attribute temp file.
- *
- * @return event subject attribute temp file
- */
- public File getEventSubjectAttributeTempFileHandle() {
- return eventSubjectAttributeTempFileHandle;
- }
-
- /**
- * Returns event subject getter temp file.
- *
- * @return event subject getter temp file
- */
- public File getEventSubjectGetterTempFileHandle() {
- return eventSubjectGetterTempFileHandle;
- }
-
- /**
- * Returns event subject setter temp file.
- *
- * @return event subject setter temp file
- */
- public File getEventSubjectSetterTempFileHandle() {
- return eventSubjectSetterTempFileHandle;
- }
-
- /*Adds event method contents to event file.*/
- private static String getEventFileContents(String eventClassname, String classname) {
- return "\n" +
- " /**\n" +
- " * Creates " + classname + " event with type and subject.\n" +
- " *\n" +
- " * @param type event type\n" +
- " * @param subject subject " + classname + "\n" +
- " */\n" +
- " public " + eventClassname + "(Type type, " +
- getCapitalCase(classname) + " subject) {\n" +
- " super(type, subject);\n" +
- " }\n" +
- "\n" +
- " /**\n" +
- " * Creates " + classname + " event with type, subject and time.\n" +
- " *\n" +
- " * @param type event type\n" +
- " * @param subject subject " + classname + "\n" +
- " * @param time time of event\n" +
- " */\n" +
- " public " + eventClassname + "(Type type, " + getCapitalCase(classname)
- + " subject, long time) {\n" +
- " super(type, subject, time);\n" +
- " }\n" +
- "\n";
- }
-
- public void generateJavaFile(int fileType, YangNode curNode)
- throws IOException {
- generateEventJavaFile(curNode);
- generateEventListenerJavaFile(curNode);
- generateEventSubjectJavaFile(curNode);
-
- // Close all the file handles.
- freeTemporaryResources(false);
- }
-
- /**
- * Constructs java code exit.
- *
- * @param curNode current YANG node
- * @throws IOException when fails to generate java files
- */
- private void generateEventJavaFile(YangNode curNode)
- throws IOException {
-
- List<String> imports = new ArrayList<>();
-
- imports.add(getJavaImportData().getAbstractEventsImport());
- String curNodeInfo = getCapitalCase(((JavaFileInfoContainer) curNode)
- .getJavaFileInfo().getJavaName());
- String nodeName = curNodeInfo + EVENT_STRING;
-
- addEnumMethod(nodeName, curNodeInfo + EVENT_SUBJECT_NAME_SUFFIX);
-
- //Creates event interface file.
- eventJavaFileHandle = getJavaFileHandle(curNode, curNodeInfo +
- EVENT_STRING);
- generateEventFile(eventJavaFileHandle, curNode, imports);
- }
-
- /**
- * Constructs java code exit.
- *
- * @param curNode current YANG node
- * @throws IOException when fails to generate java files
- */
- private void generateEventListenerJavaFile(YangNode curNode)
- throws IOException {
-
- List<String> imports = new ArrayList<>();
-
- imports.add(getJavaImportData().getEventListenerImport());
- String curNodeInfo = getCapitalCase(((JavaFileInfoContainer) curNode)
- .getJavaFileInfo().getJavaName());
-
- // Creates event listener interface file.
- eventListenerJavaFileHandle =
- getJavaFileHandle(curNode, curNodeInfo + EVENT_LISTENER);
- generateEventListenerFile(eventListenerJavaFileHandle, curNode, imports);
- }
-
- /**
- * Constructs java code exit.
- *
- * @param curNode current YANG node
- * @throws IOException when fails to generate java files
- */
- private void generateEventSubjectJavaFile(YangNode curNode)
- throws IOException {
-
- String curNodeInfo = getCapitalCase(((JavaFileInfoContainer) curNode)
- .getJavaFileInfo().getJavaName());
-
- //Creates event interface file.
- eventSubjectJavaFileHandle = getJavaFileHandle(curNode, curNodeInfo +
- EVENT_SUBJECT_NAME_SUFFIX);
- generateEventSubjectFile(eventSubjectJavaFileHandle, curNode);
- }
-
- /**
- * Adds java snippet for events to event subject file.
- *
- * @param curNode current node
- * @param pluginConfig plugin configurations
- * @throws IOException when fails to do IO operations
- */
- void addJavaSnippetOfEvent(YangNode curNode, YangPluginConfig pluginConfig)
- throws IOException {
-
- String currentInfo = getCamelCase(curNode.getName(), pluginConfig
- .getConflictResolver());
- String notificationName = curNode.getName();
-
- JavaQualifiedTypeInfoTranslator qualifiedTypeInfo
- = getQualifiedTypeInfoOfCurNode(curNode, getCapitalCase(currentInfo));
-
- JavaAttributeInfo javaAttributeInfo
- = getAttributeInfoForTheData(qualifiedTypeInfo, currentInfo,
- null, false, false);
-
- /*Adds java info for event in respective temp files.*/
- addEventEnum(notificationName);
- addEventSubjectAttribute(javaAttributeInfo);
- addEventSubjectGetter(javaAttributeInfo);
- addEventSubjectSetter(javaAttributeInfo, currentInfo);
- }
-
- /*Adds event to enum temp file.*/
- private void addEventEnum(String notificationName)
- throws IOException {
- appendToFile(getEventEnumTempFileHandle(), enumJavaDocForInnerClass(
- notificationName) + EIGHT_SPACE_INDENTATION
- + getEnumJavaAttribute(notificationName).toUpperCase() +
- COMMA + NEW_LINE);
- }
-
- /*Adds event method in event class*/
- private void addEnumMethod(String eventClassname, String className)
- throws IOException {
- appendToFile(getEventMethodTempFileHandle(),
- getEventFileContents(eventClassname, className));
- }
-
- /*Adds events to event subject file.*/
- private void addEventSubjectAttribute(JavaAttributeInfo attr)
- throws IOException {
- appendToFile(getEventSubjectAttributeTempFileHandle(),
- parseAttribute(attr));
- }
-
- /*Adds getter method for event in event subject class.*/
- private void addEventSubjectGetter(JavaAttributeInfo attr)
- throws IOException {
- String appDataStructure = null;
- if (attr.getCompilerAnnotation() != null) {
- appDataStructure = attr.getCompilerAnnotation()
- .getYangAppDataStructure().getDataStructure().name();
- }
- appendToFile(getEventSubjectGetterTempFileHandle(), getJavaDoc(
- GETTER_METHOD, attr.getAttributeName(), false,
- appDataStructure) + getGetterForClass(
- attr, GENERATE_EVENT_SUBJECT_CLASS) + NEW_LINE);
- }
-
- /*Adds setter method for event in event subject class.*/
- private void addEventSubjectSetter(JavaAttributeInfo attr,
- String className)
- throws IOException {
- String appDataStructure = null;
- if (attr.getCompilerAnnotation() != null) {
- appDataStructure = attr.getCompilerAnnotation()
- .getYangAppDataStructure().getDataStructure().name();
- }
- appendToFile(getEventSubjectSetterTempFileHandle(), getJavaDoc(
- MANAGER_SETTER_METHOD, attr.getAttributeName(),
- false, appDataStructure) + getSetterForClass(
- attr, className, GENERATE_EVENT_SUBJECT_CLASS) + NEW_LINE);
- }
-
- /**
- * Returns a temporary file handle for the event's file type.
- *
- * @param name file name
- * @return temporary file handle
- */
- private File getJavaFileHandle(YangNode curNode, String name) {
-
- JavaFileInfoTranslator parentInfo = ((JavaFileInfoContainer) curNode)
- .getJavaFileInfo();
- return getFileObject(getDirPath(parentInfo), name, JAVA_FILE_EXTENSION,
- parentInfo);
- }
-
- /**
- * Returns the directory path.
- *
- * @return directory path
- */
- private String getDirPath(JavaFileInfoTranslator parentInfo) {
- return (parentInfo.getPackageFilePath() + SLASH +
- parentInfo.getJavaName()).toLowerCase();
- }
-
- /**
- * Removes all temporary file handles.
- *
- * @param isErrorOccurred flag to tell translator that error has occurred while file generation
- * @throws IOException when failed to delete the temporary files
- */
- @Override
- public void freeTemporaryResources(boolean isErrorOccurred)
- throws IOException {
-
- closeFile(eventJavaFileHandle, isErrorOccurred);
- closeFile(eventListenerJavaFileHandle, isErrorOccurred);
- closeFile(eventSubjectJavaFileHandle, isErrorOccurred);
-
- closeFile(eventEnumTempFileHandle, true);
- closeFile(eventSubjectAttributeTempFileHandle, true);
- closeFile(eventMethodTempFileHandle, true);
- closeFile(eventSubjectGetterTempFileHandle, true);
- closeFile(eventSubjectSetterTempFileHandle, true);
-
- super.freeTemporaryResources(isErrorOccurred);
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaFragmentFiles.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaFragmentFiles.java
deleted file mode 100644
index 913220b..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaFragmentFiles.java
+++ /dev/null
@@ -1,2150 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.translator.tojava;
-
-import org.onosproject.yangutils.datamodel.RpcNotificationContainer;
-import org.onosproject.yangutils.datamodel.YangAugment;
-import org.onosproject.yangutils.datamodel.YangCase;
-import org.onosproject.yangutils.datamodel.YangChoice;
-import org.onosproject.yangutils.datamodel.YangDataStructure;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangLeafList;
-import org.onosproject.yangutils.datamodel.YangLeavesHolder;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangSchemaNode;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.javadatamodel.JavaFileInfo;
-import org.onosproject.yangutils.datamodel.javadatamodel.JavaQualifiedTypeInfo;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.translator.tojava.javamodel.JavaLeafInfoContainer;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaGroupingTranslator;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaLeafTranslator;
-import org.onosproject.yangutils.translator.tojava.utils.JavaExtendsListHolder;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.getParentNodeInGenCode;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.IDENTITYREF;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.DEFAULT_CLASS_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPE_CLASS;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_IMPL_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_INTERFACE_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EDIT_CONTENT_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_NODES_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
-import static org.onosproject.yangutils.translator.tojava.JavaAttributeInfo.getAttributeInfoForTheData;
-import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedInfoOfFromString;
-import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedTypeInfoOfCurNode;
-import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateBitsFile;
-import static org.onosproject.yangutils.translator.tojava.javamodel.AttributesJavaDataType.updateJavaFileInfo;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.generateEnumAttributeString;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getJavaAttributeDefinition;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateBuilderClassFile;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateBuilderInterfaceFile;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateDefaultClassFile;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateInterfaceFile;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateKeyClassFile;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getFileObject;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.createPackage;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddToListMethodImpl;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddToListMethodInterface;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBuildString;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getDefaultConstructorString;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethod;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethod;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterForClass;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterString;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethod;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForClass;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterString;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethod;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangDataStructure;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.parseBuilderInterfaceBuildMethodString;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getImportString;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getOverRideString;
-import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getSubtreeFilteringForLeaf;
-import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getSubtreeFilteringForLeafList;
-import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getSubtreeFilteringForNode;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.INVALID_LEAF_HOLDER;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.INVALID_NODE;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.INVALID_PARENT_NODE;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.MISSING_PARENT_NODE;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getBeanFiles;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getErrorMsg;
-import static org.onosproject.yangutils.utils.UtilConstants.AUGMENT_MAP_TYPE;
-import static org.onosproject.yangutils.utils.UtilConstants.BIT_SET;
-import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE;
-import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
-import static org.onosproject.yangutils.utils.UtilConstants.CLASS_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
-import static org.onosproject.yangutils.utils.UtilConstants.COLLECTION_IMPORTS;
-import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
-import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_CAPS;
-import static org.onosproject.yangutils.utils.UtilConstants.DIAMOND_CLOSE_BRACKET;
-import static org.onosproject.yangutils.utils.UtilConstants.DIAMOND_OPEN_BRACKET;
-import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.EXTEND;
-import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
-import static org.onosproject.yangutils.utils.UtilConstants.GOOGLE_MORE_OBJECT_IMPORT_CLASS;
-import static org.onosproject.yangutils.utils.UtilConstants.GOOGLE_MORE_OBJECT_IMPORT_PKG;
-import static org.onosproject.yangutils.utils.UtilConstants.HASH_MAP;
-import static org.onosproject.yangutils.utils.UtilConstants.INTERFACE;
-import static org.onosproject.yangutils.utils.UtilConstants.INVOCATION_TARGET_EXCEPTION;
-import static org.onosproject.yangutils.utils.UtilConstants.JAVA_UTIL_OBJECTS_IMPORT_CLASS;
-import static org.onosproject.yangutils.utils.UtilConstants.JAVA_UTIL_PKG;
-import static org.onosproject.yangutils.utils.UtilConstants.KEYS;
-import static org.onosproject.yangutils.utils.UtilConstants.MAP;
-import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
-import static org.onosproject.yangutils.utils.UtilConstants.OPERATION_TYPE_ATTRIBUTE;
-import static org.onosproject.yangutils.utils.UtilConstants.OPERATION_TYPE_CLASS;
-import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
-import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
-import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
-import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
-import static org.onosproject.yangutils.utils.UtilConstants.QUESTION_MARK;
-import static org.onosproject.yangutils.utils.UtilConstants.REFLECT_IMPORTS;
-import static org.onosproject.yangutils.utils.UtilConstants.SELECT_LEAF;
-import static org.onosproject.yangutils.utils.UtilConstants.SERVICE;
-import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
-import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
-import static org.onosproject.yangutils.utils.UtilConstants.SUBTREE_FILTERED;
-import static org.onosproject.yangutils.utils.UtilConstants.VALUE_LEAF;
-import static org.onosproject.yangutils.utils.UtilConstants.YANG;
-import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_INFO_MAP;
-import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.closeFile;
-import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.readAppendFile;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.ADD_TO_LIST;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.SETTER_METHOD;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getAbsolutePackagePath;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getPackageDirPathFromJavaJPackage;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.mergeJavaFiles;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
-
-/**
- * Represents implementation of java code fragments temporary implementations.
- * Manages the common temp file required for Java file(s) generated.
- */
-public class TempJavaFragmentFiles {
-
- /**
- * File type extension for java classes.
- */
- private static final String JAVA_FILE_EXTENSION = ".java";
-
- /**
- * File type extension for temporary classes.
- */
- private static final String TEMP_FILE_EXTENSION = ".tmp";
-
- /**
- * Folder suffix for temporary files folder.
- */
- private static final String TEMP_FOLDER_NAME_SUFFIX = "-Temp";
-
- /**
- * File name for getter method.
- */
- private static final String GETTER_METHOD_FILE_NAME = "GetterMethod";
-
- /**
- * File name for setter method.
- */
- private static final String SETTER_METHOD_FILE_NAME = "SetterMethod";
-
- /**
- * File name for getter method implementation.
- */
- private static final String GETTER_METHOD_IMPL_FILE_NAME =
- "GetterMethodImpl";
-
- /**
- * File name for setter method implementation.
- */
- private static final String SETTER_METHOD_IMPL_FILE_NAME =
- "SetterMethodImpl";
-
- /**
- * File name for attributes.
- */
- private static final String ATTRIBUTE_FILE_NAME = "Attributes";
-
- /**
- * File name for to string method.
- */
- private static final String TO_STRING_METHOD_FILE_NAME = "ToString";
-
- /**
- * File name for hash code method.
- */
- private static final String HASH_CODE_METHOD_FILE_NAME = "HashCode";
-
- /**
- * File name for equals method.
- */
- private static final String EQUALS_METHOD_FILE_NAME = "Equals";
-
- /**
- * File name for from string method.
- */
- private static final String FROM_STRING_METHOD_FILE_NAME = "FromString";
-
- /**
- * File name for from add to list interface method.
- */
- private static final String ADD_TO_LIST_INTERFACE_METHOD_FILE_NAME =
- "addToList";
-
- /**
- * File name for from add to list impl method.
- */
- private static final String ADD_TO_LIST_IMPL_METHOD_FILE_NAME =
- "addToListImpl";
-
- /**
- * File name for from leaf identifier attributes.
- */
- private static final String LEAF_IDENTIFIER_ATTRIBUTES_FILE_NAME =
- "leafIdentifierAtr";
-
- /**
- * File name for is filter content leaf match.
- */
- private static final String FILTER_CONTENT_MATCH_LEAF_FILE_NAME =
- "isFilterContentMatchLeafMask";
-
- /**
- * File name for is filter content leaf-list match.
- */
- private static final String FILTER_CONTENT_MATCH_LEAF_LIST_FILE_NAME =
- "isFilterContentMatchLeafListMask";
-
- /**
- * File name for is filter content node match.
- */
- private static final String FILTER_CONTENT_MATCH_NODE_FILE_NAME =
- "isFilterContentMatchNodeMask";
-
- /**
- * File name for edit content file.
- */
- private static final String EDIT_CONTENT_FILE_NAME = "editContentFile";
-
- /**
- * File name for interface java file name suffix.
- */
- private static final String INTERFACE_FILE_NAME_SUFFIX = EMPTY_STRING;
-
- /**
- * File name for builder interface file name suffix.
- */
- private static final String BUILDER_INTERFACE_FILE_NAME_SUFFIX =
- BUILDER + INTERFACE;
-
- /**
- * File name for builder class file name suffix.
- */
- private static final String BUILDER_CLASS_FILE_NAME_SUFFIX = BUILDER;
-
- /**
- * File name for list key class file name suffix.
- */
- private static final String KEY_CLASS_FILE_NAME_SUFFIX = KEYS;
-
- /**
- * Current attributes YANG node
- */
- private YangNode attrNode;
-
- /**
- * Information about the java files being generated.
- */
- private JavaFileInfoTranslator javaFileInfo;
-
- /**
- * Imported class info.
- */
- private JavaImportData javaImportData;
-
- /**
- * The variable which guides the types of temporary files generated using
- * the temporary generated file types mask.
- */
- private int tempFilesFlagSet;
-
- /**
- * Absolute path where the target java file needs to be generated.
- */
- private String absoluteDirPath;
-
- /**
- * Contains all the interface(s)/class name which will be extended by
- * generated files.
- */
- private JavaExtendsListHolder javaExtendsListHolder;
-
- /**
- * Java file handle for interface file.
- */
- private File interfaceJavaFileHandle;
-
- /**
- * Java file handle for builder interface file.
- */
- private File builderInterfaceJavaFileHandle;
-
- /**
- * Java file handle for builder class file.
- */
- private File builderClassJavaFileHandle;
-
- /**
- * Java file handle for impl class file.
- */
- private File implClassJavaFileHandle;
-
- /**
- * Temporary file handle for attribute.
- */
- private File attributesTempFileHandle;
-
- /**
- * Temporary file handle for getter of interface.
- */
- private File getterInterfaceTempFileHandle;
-
- /**
- * Temporary file handle for setter of interface.
- */
- private File setterInterfaceTempFileHandle;
-
- /**
- * Temporary file handle for getter of class.
- */
- private File getterImplTempFileHandle;
-
- /**
- * Temporary file handle for setter of class.
- */
- private File setterImplTempFileHandle;
-
- /**
- * Temporary file handle for hash code method of class.
- */
- private File hashCodeImplTempFileHandle;
-
- /**
- * Temporary file handle for equals method of class.
- */
- private File equalsImplTempFileHandle;
-
- /**
- * Temporary file handle for to string method of class.
- */
- private File toStringImplTempFileHandle;
-
- /**
- * Temporary file handle for from string method of class.
- */
- private File fromStringImplTempFileHandle;
-
- /**
- * Temporary file handle for add to list interface method of class.
- */
- private File addToListInterfaceTempFileHandle;
-
- /**
- * Temporary file handle for add to list impl method of class.
- */
- private File addToListImplTempFileHandle;
-
- /**
- * Temporary file handle for leaf id attributes of enum.
- */
- private File leafIdAttributeTempFileHandle;
-
- /**
- * Temporary file handle for is content match method for leaf-list.
- */
- private File getSubtreeFilteringForListTempFileHandle;
-
- /**
- * Temporary file handle for is content match method for node.
- */
- private File getSubtreeFilteringForChildNodeTempFileHandle;
-
- /**
- * Temporary file handle for is content match method for leaf.
- */
- private File subtreeFilteringForLeafTempFileHandle;
-
- /**
- * Temporary file handle for edit content file.
- */
- private File editContentTempFileHandle;
-
- /**
- * Leaf count.
- */
- private int leafCount;
-
- /**
- * If current node is root node.
- */
- private boolean rootNode;
-
- /**
- * Is attribute added.
- */
- private boolean isAttributePresent;
-
- /**
- * Creates an instance of temp JAVA fragment files.
- */
- TempJavaFragmentFiles() {
- }
-
- /**
- * Creates an instance of temporary java code fragment.
- *
- * @param fileInfo generated java file information
- * @throws IOException when fails to create new file handle
- */
- protected TempJavaFragmentFiles(JavaFileInfoTranslator fileInfo)
- throws IOException {
- javaExtendsListHolder = new JavaExtendsListHolder();
- javaImportData = new JavaImportData();
- javaFileInfo = fileInfo;
- absoluteDirPath = getAbsolutePackagePath(fileInfo.getBaseCodeGenPath(),
- fileInfo.getPackageFilePath());
- /*
- * Initialize getter when generation file type matches to interface
- * mask.
- */
- if (javaFlagSet(INTERFACE_MASK)) {
- addGeneratedTempFile(GETTER_FOR_INTERFACE_MASK |
- ADD_TO_LIST_INTERFACE_MASK |
- LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK);
- }
- /*
- * Initialize getter and setter when generation file type matches to
- * builder interface mask.
- */
- if (javaFlagSet(BUILDER_INTERFACE_MASK)) {
- addGeneratedTempFile(GETTER_FOR_INTERFACE_MASK |
- SETTER_FOR_INTERFACE_MASK);
- }
- /*
- * Initialize getterImpl, setterImpl and attributes when generation file
- * type matches to builder class mask.
- */
- if (javaFlagSet(BUILDER_CLASS_MASK)) {
- addGeneratedTempFile(ATTRIBUTES_MASK | GETTER_FOR_CLASS_MASK |
- SETTER_FOR_CLASS_MASK);
- }
- /*
- * Initialize getterImpl, attributes, constructor, hash code, equals and
- * to strings when generation file type matches to impl class mask.
- */
- if (javaFlagSet(DEFAULT_CLASS_MASK)) {
- addGeneratedTempFile(
- ATTRIBUTES_MASK | GETTER_FOR_CLASS_MASK |
- HASH_CODE_IMPL_MASK | EQUALS_IMPL_MASK |
- TO_STRING_IMPL_MASK | ADD_TO_LIST_IMPL_MASK |
- FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK |
- FILTER_CONTENT_MATCH_FOR_LEAF_MASK |
- FILTER_CONTENT_MATCH_FOR_NODES_MASK);
- }
- /*
- * Initialize temp files to generate type class.
- */
- if (javaFlagSet(GENERATE_TYPE_CLASS)) {
- addGeneratedTempFile(ATTRIBUTES_MASK | GETTER_FOR_CLASS_MASK |
- HASH_CODE_IMPL_MASK | EQUALS_IMPL_MASK |
- FROM_STRING_IMPL_MASK);
-
- if (getGeneratedJavaFiles() != GENERATE_UNION_CLASS) {
- addGeneratedTempFile(TO_STRING_IMPL_MASK);
- }
- }
-
- //Set temporary file handles
- if (tempFlagSet(ATTRIBUTES_MASK)) {
- attributesTempFileHandle =
- getTemporaryFileHandle(ATTRIBUTE_FILE_NAME);
- }
- if (tempFlagSet(GETTER_FOR_INTERFACE_MASK)) {
- getterInterfaceTempFileHandle =
- getTemporaryFileHandle(GETTER_METHOD_FILE_NAME);
- }
- if (tempFlagSet(SETTER_FOR_INTERFACE_MASK)) {
- setterInterfaceTempFileHandle =
- getTemporaryFileHandle(SETTER_METHOD_FILE_NAME);
- }
- if (tempFlagSet(GETTER_FOR_CLASS_MASK)) {
- getterImplTempFileHandle =
- getTemporaryFileHandle(GETTER_METHOD_IMPL_FILE_NAME);
- }
- if (tempFlagSet(SETTER_FOR_CLASS_MASK)) {
- setterImplTempFileHandle =
- getTemporaryFileHandle(SETTER_METHOD_IMPL_FILE_NAME);
- }
- if (tempFlagSet(HASH_CODE_IMPL_MASK)) {
- hashCodeImplTempFileHandle =
- getTemporaryFileHandle(HASH_CODE_METHOD_FILE_NAME);
- }
- if (tempFlagSet(EQUALS_IMPL_MASK)) {
- equalsImplTempFileHandle =
- getTemporaryFileHandle(EQUALS_METHOD_FILE_NAME);
- }
- if (tempFlagSet(TO_STRING_IMPL_MASK)) {
- toStringImplTempFileHandle =
- getTemporaryFileHandle(TO_STRING_METHOD_FILE_NAME);
- }
- if (tempFlagSet(FROM_STRING_IMPL_MASK)) {
- fromStringImplTempFileHandle =
- getTemporaryFileHandle(FROM_STRING_METHOD_FILE_NAME);
- }
- if (tempFlagSet(ADD_TO_LIST_INTERFACE_MASK)) {
- addToListInterfaceTempFileHandle =
- getTemporaryFileHandle(ADD_TO_LIST_INTERFACE_METHOD_FILE_NAME);
- }
- if (tempFlagSet(ADD_TO_LIST_IMPL_MASK)) {
- addToListImplTempFileHandle =
- getTemporaryFileHandle(ADD_TO_LIST_IMPL_METHOD_FILE_NAME);
- }
- if (tempFlagSet(LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK)) {
- leafIdAttributeTempFileHandle =
- getTemporaryFileHandle(LEAF_IDENTIFIER_ATTRIBUTES_FILE_NAME);
- }
- if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_MASK)) {
- subtreeFilteringForLeafTempFileHandle =
- getTemporaryFileHandle(FILTER_CONTENT_MATCH_LEAF_FILE_NAME);
- }
- if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK)) {
- getSubtreeFilteringForListTempFileHandle =
- getTemporaryFileHandle(FILTER_CONTENT_MATCH_LEAF_LIST_FILE_NAME);
- }
- if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_NODES_MASK)) {
- getSubtreeFilteringForChildNodeTempFileHandle =
- getTemporaryFileHandle(FILTER_CONTENT_MATCH_NODE_FILE_NAME);
- }
- if (tempFlagSet(EDIT_CONTENT_MASK)) {
- editContentTempFileHandle =
- getTemporaryFileHandle(EDIT_CONTENT_FILE_NAME);
- }
- }
-
- /**
- * Adds current node info as and attribute to the parent generated file.
- *
- * @param curNode current node
- * @param isList is list construct
- * @param config plugin configurations
- * @throws IOException IO operation exception
- */
- protected static void addCurNodeInfoInParentTempFile(YangNode curNode,
- boolean isList,
- YangPluginConfig config)
- throws IOException {
- YangNode parent = getParentNodeInGenCode(curNode);
- if (!(parent instanceof JavaCodeGenerator)) {
- throw new TranslatorException(getErrorMsg(MISSING_PARENT_NODE,
- curNode));
- }
- if (parent instanceof YangJavaGroupingTranslator) {
- /*
- * In case of grouping, there is no need to add the information, it
- * will be taken care in uses.
- */
- return;
- }
- addCurNodeInfoInParentTempFile(curNode, isList, config, parent);
- }
-
- /**
- * Adds current node info as and attribute to a specified parent generated
- * file. In case of grouping parent will be referred grouping node or
- * referred node in grouping.
- *
- * @param curNode current node
- * @param isList is list construct
- * @param config plugin configurations
- * @param parent parent node
- * @throws IOException IO operation exception
- */
- protected static void addCurNodeInfoInParentTempFile(
- YangNode curNode, boolean isList, YangPluginConfig config,
- YangNode parent)
- throws IOException {
- TempJavaBeanFragmentFiles tempFiles =
- getBeanFiles((JavaCodeGeneratorInfo) parent);
- tempFiles.setAttrNode(curNode);
- JavaFileInfoTranslator fileInfo = ((JavaCodeGeneratorInfo) parent)
- .getJavaFileInfo();
- if (curNode instanceof YangChoice && curNode.isOpTypeReq()) {
- JavaQualifiedTypeInfoTranslator info = new
- JavaQualifiedTypeInfoTranslator();
- info.setClassInfo(INVOCATION_TARGET_EXCEPTION);
- info.setPkgInfo(REFLECT_IMPORTS);
- info.setForInterface(false);
- tempFiles.getJavaImportData().addImportInfo(
- info, getCapitalCase(fileInfo.getJavaName()),
- fileInfo.getPackage());
- }
- JavaAttributeInfo attr = getCurNodeAsAttributeInTarget(
- curNode, parent, isList, tempFiles);
- tempFiles.addJavaSnippetInfoToApplicableTempFiles(attr, config);
- }
-
- /**
- * Creates an attribute info object corresponding to a data model node
- * and return it.
- *
- * @param curNode current node
- * @param targetNode target node
- * @param listNode flag indicating if a node is a list node
- * @param tempFiles temp java fragment files
- * @return java attribute info
- */
- public static JavaAttributeInfo
- getCurNodeAsAttributeInTarget(YangNode curNode, YangNode targetNode,
- boolean listNode,
- TempJavaFragmentFiles tempFiles) {
- JavaFileInfoTranslator translator =
- ((JavaFileInfoContainer) curNode).getJavaFileInfo();
- String curNodeName = translator.getJavaName();
- if (curNodeName == null) {
- updateJavaFileInfo(curNode, null);
- curNodeName = translator.getJavaName();
- }
- /*
- * Get the import info corresponding to the attribute for import in
- * generated java files or qualified access.
- */
- JavaQualifiedTypeInfoTranslator typeInfo =
- getQualifiedTypeInfoOfCurNode(curNode,
- getCapitalCase(curNodeName));
- if (!(targetNode instanceof TempJavaCodeFragmentFilesContainer)) {
- throw new TranslatorException(getErrorMsg(INVALID_PARENT_NODE,
- curNode));
- }
- JavaImportData parentImportData = tempFiles.getJavaImportData();
- JavaFileInfoTranslator fileInfo =
- ((JavaFileInfoContainer) targetNode).getJavaFileInfo();
-
- boolean qualified;
- if (tempFiles instanceof TempJavaServiceFragmentFiles &&
- typeInfo.getClassInfo().contentEquals(SERVICE) ||
- typeInfo.getClassInfo()
- .contentEquals(getCapitalCase(fileInfo.getJavaName() +
- SERVICE))) {
- qualified = true;
- } else {
- String className;
- if (tempFiles instanceof TempJavaServiceFragmentFiles) {
- className = getCapitalCase(fileInfo.getJavaName()) + SERVICE;
- } else {
- className = getCapitalCase(fileInfo.getJavaName());
- }
- qualified = parentImportData.addImportInfo(typeInfo, className,
- fileInfo.getPackage());
- if (!qualified && !(curNode instanceof YangChoice) &&
- targetNode.isOpTypeReq()) {
- String name = DEFAULT_CAPS + typeInfo.getClassInfo();
- JavaQualifiedTypeInfoTranslator qInfo =
- new JavaQualifiedTypeInfoTranslator();
- qInfo.setForInterface(false);
- qInfo.setPkgInfo(typeInfo.getPkgInfo());
- qInfo.setClassInfo(name);
- parentImportData.addImportInfo(qInfo, className,
- fileInfo.getPackage());
- }
- }
- boolean collectionSet = false;
- if (curNode instanceof YangList) {
- YangList yangList = (YangList) curNode;
- YangDataStructure ds = getYangDataStructure(
- yangList.getCompilerAnnotation());
- if (ds != null) {
- switch (ds) {
- case QUEUE:
- parentImportData.setQueueToImport(true);
- collectionSet = true;
- break;
-
- case SET:
- parentImportData.setSetToImport(true);
- collectionSet = true;
- break;
-
- case MAP:
- parentImportData.setMapToImport(true);
- collectionSet = true;
- break;
-
- default: {
- parentImportData.setIfListImported(true);
- collectionSet = true;
- }
- }
- }
- }
- if (listNode && !collectionSet) {
- parentImportData.setIfListImported(true);
- }
- if (curNode instanceof YangList) {
- return getAttributeInfoForTheData(typeInfo, curNodeName,
- null, qualified, listNode,
- ((YangList) curNode)
- .getCompilerAnnotation());
- }
- return getAttributeInfoForTheData(typeInfo, curNodeName, null,
- qualified, listNode);
- }
-
- /**
- * Returns java attribute for leaf.
- *
- * @param tempFiles temporary generated file
- * @param container JAVA leaf info container
- * @param config plugin configurations
- * @param leafList flag indicating if it's leaf list
- * @return java attribute info
- */
- private static JavaAttributeInfo
- getJavaAttributeOfLeaf(TempJavaFragmentFiles tempFiles,
- JavaLeafInfoContainer container,
- YangPluginConfig config, boolean leafList) throws IOException {
- if (leafList) {
- tempFiles.getJavaImportData().setIfListImported(true);
- return getAttributeOfLeafInfoContainer(tempFiles, container, config,
- true);
- }
- return getAttributeOfLeafInfoContainer(tempFiles, container, config,
- false);
- }
-
- /**
- * Returns java attribute for leaf container.
- *
- * @param tempFiles temporary generated file
- * @param container JAVA leaf info container
- * @param config plugin configurations
- * @param listAttribute flag indicating if list attribute
- * @return JAVA attribute information
- * @throws IOException when fails to do IO operations
- */
- private static JavaAttributeInfo
- getAttributeOfLeafInfoContainer(TempJavaFragmentFiles tempFiles,
- JavaLeafInfoContainer container,
- YangPluginConfig config,
- boolean listAttribute) throws IOException {
- container.setConflictResolveConfig(config.getConflictResolver());
- container.updateJavaQualifiedInfo();
- addImportForLeafInfo(tempFiles, container);
- JavaAttributeInfo attr = getAttributeInfoForTheData(
- container.getJavaQualifiedInfo(),
- container.getJavaName(config.getConflictResolver()),
- container.getDataType(),
- tempFiles.getIsQualifiedAccessOrAddToImportList(
- container.getJavaQualifiedInfo()), listAttribute);
- boolean condition =
- ((YangSchemaNode) container).getReferredSchema() == null &&
- container.getDataType().getDataType() == YangDataTypes.BITS;
- if (condition) {
- addBitsHandler(attr, container.getDataType(), tempFiles);
- }
- return attr;
- }
-
- /**
- * Returns list of java attribute for keys of list node.
- *
- * @param curNode current list node
- * @return attribute list
- * @throws IOException when fails to do IO operations
- */
- public static List<JavaAttributeInfo> getListOfAttributesForKey(
- YangNode curNode) throws IOException {
- List<String> keys = ((YangList) curNode).getKeyList();
-
- JavaFileInfoTranslator fileInfo =
- ((JavaFileInfoContainer) curNode).getJavaFileInfo();
- YangLeavesHolder holder = (YangLeavesHolder) curNode;
- Iterator<String> keyIt = keys.iterator();
- Iterator<YangLeaf> leafIt;
- String key;
- YangJavaLeafTranslator leaf;
- TempJavaBeanFragmentFiles beanFile = getBeanFiles(curNode);
- List<JavaAttributeInfo> attrs = new ArrayList<>();
- while (keyIt.hasNext()) {
- key = keyIt.next();
- leafIt = holder.getListOfLeaf().iterator();
- while (leafIt.hasNext()) {
- leaf = (YangJavaLeafTranslator) leafIt.next();
- if (key.equals(leaf.getName())) {
- attrs.add(getAttributeOfLeafInfoContainer(
- beanFile, leaf,
- fileInfo.getPluginConfig(), false));
- }
- }
- }
- return attrs;
- }
-
- /**
- * Adds bits handler attribute for bits to string method.
- *
- * @param attr attribute
- * @param type type
- * @param tempFiles temp fragment file
- */
- static void addBitsHandler(JavaAttributeInfo attr, YangType type,
- TempJavaFragmentFiles tempFiles)
- throws IOException {
- generateBitsFile(attr, type, tempFiles.getJavaFileInfo(), tempFiles);
- }
-
- /**
- * Adds attribute types import to leaf info container's parent.
- *
- * @param tempFiles temp java file
- * @param container leaf info container
- */
- private static void addImportForLeafInfo(TempJavaFragmentFiles tempFiles,
- JavaLeafInfoContainer container) {
- String containedInCls = getCapitalCase(tempFiles.getJavaFileInfo()
- .getJavaName());
- String containedInPkg = tempFiles.getJavaFileInfo().getPackage();
- JavaQualifiedTypeInfoTranslator info;
- if (container.getDataType().getDataType() == YangDataTypes.BITS) {
- //Add bitset import for type and leaf value flags.
- info = new JavaQualifiedTypeInfoTranslator();
- info.setClassInfo(BIT_SET);
- info.setPkgInfo(JAVA_UTIL_PKG);
- tempFiles.getJavaImportData().addImportInfo(info, containedInCls,
- containedInPkg);
- }
- tempFiles.getJavaImportData().addImportInfo(
- (JavaQualifiedTypeInfoTranslator) container
- .getJavaQualifiedInfo(), containedInCls, containedInPkg);
-
- }
-
- /**
- * Sets absolute path where the file needs to be generated.
- *
- * @param absoluteDirPath absolute path where the file needs to be
- * generated
- */
- protected void setAbsoluteDirPath(String absoluteDirPath) {
- this.absoluteDirPath = absoluteDirPath;
- }
-
- /**
- * Returns the generated java file information.
- *
- * @return generated java file information
- */
- protected JavaFileInfoTranslator getJavaFileInfo() {
- return javaFileInfo;
- }
-
- /**
- * Sets the generated java file information.
- *
- * @param javaFileInfo generated java file information
- */
- protected void setJavaFileInfo(JavaFileInfoTranslator javaFileInfo) {
- this.javaFileInfo = javaFileInfo;
- }
-
- /**
- * Returns the flag-set for generated temp files.
- *
- * @return flag-set
- */
- protected int getGeneratedTempFiles() {
- return tempFilesFlagSet;
- }
-
- /**
- * Adds to the flag-set for generated temp files.
- *
- * @param flags generated temp files flag-set
- */
- protected void addGeneratedTempFile(int flags) {
- tempFilesFlagSet |= flags;
- }
-
- /**
- * Returns the generated Java files.
- *
- * @return generated Java files
- */
- protected int getGeneratedJavaFiles() {
- return javaFileInfo.getGeneratedFileTypes();
- }
-
- /**
- * Retrieves the mapped Java class name.
- *
- * @return mapped Java class name
- */
- protected String getGeneratedJavaClassName() {
- return getCapitalCase(javaFileInfo.getJavaName());
- }
-
- /**
- * Retrieves the import data for the generated Java file.
- *
- * @return import data for the generated Java file
- */
- public JavaImportData getJavaImportData() {
- return javaImportData;
- }
-
- /**
- * Sets import data for the generated Java file.
- *
- * @param data import data for the generated Java file
- */
- protected void setJavaImportData(JavaImportData data) {
- javaImportData = data;
- }
-
- /**
- * Retrieves the status of any attributes added.
- *
- * @return status of any attributes added
- */
- protected boolean isAttributePresent() {
- return isAttributePresent;
- }
-
- /**
- * Returns getter methods's temporary file handle.
- *
- * @return temporary file handle
- */
- public File getGetterInterfaceTempFileHandle() {
- return getterInterfaceTempFileHandle;
- }
-
- /**
- * Returns setter method's temporary file handle.
- *
- * @return temporary file handle
- */
- public File getSetterInterfaceTempFileHandle() {
- return setterInterfaceTempFileHandle;
- }
-
- /**
- * Returns setter method's impl's temporary file handle.
- *
- * @return temporary file handle
- */
- public File getSetterImplTempFileHandle() {
- return setterImplTempFileHandle;
- }
-
- /**
- * Returns from string method's temporary file handle.
- *
- * @return from string method's temporary file handle
- */
- public File getFromStringImplTempFileHandle() {
- return fromStringImplTempFileHandle;
- }
-
- /**
- * Returns attribute's temporary file handle.
- *
- * @return temporary file handle
- */
- public File getAttributesTempFileHandle() {
- return attributesTempFileHandle;
- }
-
- /**
- * Returns getter method's impl's temporary file handle.
- *
- * @return temporary file handle
- */
- public File getGetterImplTempFileHandle() {
- return getterImplTempFileHandle;
- }
-
- /**
- * Returns hash code method's temporary file handle.
- *
- * @return temporary file handle
- */
- public File getHashCodeImplTempFileHandle() {
- return hashCodeImplTempFileHandle;
- }
-
- /**
- * Returns equals method's temporary file handle.
- *
- * @return temporary file handle
- */
- public File getEqualsImplTempFileHandle() {
- return equalsImplTempFileHandle;
- }
-
- /**
- * Returns to string method's temporary file handle.
- *
- * @return temporary file handle
- */
- public File getToStringImplTempFileHandle() {
- return toStringImplTempFileHandle;
- }
-
- /**
- * Returns java extends list holder.
- *
- * @return java extends list holder
- */
- public JavaExtendsListHolder getJavaExtendsListHolder() {
- return javaExtendsListHolder;
- }
-
- /**
- * Sets java extends list holder.
- *
- * @param holder java extends list holder
- */
- protected void setJavaExtendsListHolder(
- JavaExtendsListHolder holder) {
- javaExtendsListHolder = holder;
- }
-
- /**
- * Adds is filter content match for leaf.
- *
- * @param attr java attribute
- * @throws IOException when fails to do IO operations
- */
- private void addSubTreeFilteringForLeaf(JavaAttributeInfo attr)
- throws IOException {
- appendToFile(subtreeFilteringForLeafTempFileHandle,
- getSubtreeFilteringForLeaf(attr, attr.getAttributeType()) +
- NEW_LINE);
- }
-
- /**
- * Adds is filter content match for leaf-list.
- *
- * @param attr java attribute
- * @throws IOException when fails to do IO operations
- */
- private void addSubtreeFilteringForLeafList(JavaAttributeInfo attr)
- throws IOException {
- appendToFile(getSubtreeFilteringForListTempFileHandle,
- getSubtreeFilteringForLeafList(attr) + NEW_LINE);
- }
-
- /**
- * Adds is filter content match for nodes.
- *
- * @param attr java attribute
- * @throws IOException when fails to do IO operations
- */
- private void addSubtreeFilteringForChildNode(JavaAttributeInfo attr)
- throws IOException {
- appendToFile(getSubtreeFilteringForChildNodeTempFileHandle,
- getSubtreeFilteringForNode(attr, attrNode) + NEW_LINE);
- }
-
- /**
- * Adds attribute for class.
- *
- * @param attr attribute info
- * @throws IOException when fails to append to temporary file
- */
- private void addAttribute(JavaAttributeInfo attr)
- throws IOException {
- appendToFile(attributesTempFileHandle, parseAttribute(attr));
- }
-
- /**
- * Adds getter for interface.
- *
- * @param attr attribute info
- * @throws IOException when fails to append to temporary file
- */
- private void addGetterForInterface(JavaAttributeInfo attr)
- throws IOException {
- appendToFile(getterInterfaceTempFileHandle,
- getGetterString(attr, getGeneratedJavaFiles()) +
- NEW_LINE);
- }
-
- /**
- * Adds setter for interface.
- *
- * @param attr attribute info
- * @throws IOException when fails to append to temporary file
- */
- private void addSetterForInterface(JavaAttributeInfo attr)
- throws IOException {
- appendToFile(setterInterfaceTempFileHandle,
- getSetterString(attr, getGeneratedJavaClassName(),
- getGeneratedJavaFiles()) + NEW_LINE);
- }
-
- /**
- * Adds setter's implementation for class.
- *
- * @param attr attribute info
- * @throws IOException when fails to append to temporary file
- */
- private void addSetterImpl(JavaAttributeInfo attr)
- throws IOException {
- String setter = getSetterForClass(attr, getGeneratedJavaClassName(),
- getGeneratedJavaFiles());
- String javadoc = getOverRideString();
- if (attr.getAttributeName().equals(SUBTREE_FILTERED)) {
- javadoc = getJavaDoc(SETTER_METHOD, attr.getAttributeName(),
- false, null);
- }
- appendToFile(setterImplTempFileHandle, javadoc + setter);
- }
-
- /**
- * Adds getter method's impl for class.
- *
- * @param attr attribute info
- * @throws IOException when fails to append to temporary file
- */
- protected void addGetterImpl(JavaAttributeInfo attr)
- throws IOException {
- String getter = getGetterForClass(attr, getGeneratedJavaFiles());
- String javadoc = getOverRideString();
- YangDataStructure ds = getYangDataStructure(
- attr.getCompilerAnnotation());
- String annotation = null;
- if (ds != null) {
- annotation = ds.name();
- }
- if (attr.getAttributeName().equals(SUBTREE_FILTERED)) {
- javadoc = getJavaDoc(GETTER_METHOD, attr.getAttributeName(),
- false, annotation);
- }
- if (javaFlagSet(BUILDER_CLASS_MASK)) {
- appendToFile(getterImplTempFileHandle, javadoc + getter);
- } else {
- appendToFile(getterImplTempFileHandle,
- getJavaDoc(GETTER_METHOD, attr.getAttributeName(),
- false, annotation) + getter);
- }
- }
-
- /**
- * Adds add to list interface method.
- *
- * @param attr attribute
- * @throws IOException when fails to do IO operations
- */
- private void addAddToListInterface(JavaAttributeInfo attr)
- throws IOException {
- YangDataStructure ds = getYangDataStructure(
- attr.getCompilerAnnotation());
- String annotation = null;
- if (ds != null) {
- annotation = ds.name();
- }
- appendToFile(addToListInterfaceTempFileHandle,
- getJavaDoc(ADD_TO_LIST, attr.getAttributeName(), false,
- annotation) + getAddToListMethodInterface(
- attr, getGeneratedJavaClassName()) + NEW_LINE);
- }
-
- /**
- * Adds add to list interface method.
- *
- * @param attr attribute
- * @throws IOException when fails to do IO operations
- */
- private void addAddToListImpl(JavaAttributeInfo attr)
- throws IOException {
- appendToFile(addToListImplTempFileHandle,
- getAddToListMethodImpl(attr, getGeneratedJavaClassName()
- ) + NEW_LINE);
- }
-
- /**
- * Adds leaf identifier enum attributes.
- *
- * @param attr attribute
- * @param value value
- * @throws IOException when fails to do IO operations
- */
- private void addLeafIdAttributes(JavaAttributeInfo attr, int value)
- throws IOException {
- appendToFile(leafIdAttributeTempFileHandle, FOUR_SPACE_INDENTATION +
- generateEnumAttributeString(attr.getAttributeName(), value));
- }
-
- /**
- * Adds build method for interface.
- *
- * @return build method for interface
- * @throws IOException when fails to append to temporary file
- */
- protected String addBuildMethodForInterface()
- throws IOException {
- return parseBuilderInterfaceBuildMethodString(
- getGeneratedJavaClassName());
- }
-
- /**
- * Adds build method's implementation for class.
- *
- * @return build method implementation for class
- * @throws IOException when fails to append to temporary file
- */
- protected String addBuildMethodImpl()
- throws IOException {
- return getBuildString(getGeneratedJavaClassName(), rootNode) + NEW_LINE;
- }
-
- /**
- * Adds default constructor for class.
- *
- * @param modifier modifier for constructor
- * @param toAppend string which need to be appended with the class name
- * @param suffix is value need to be appended as suffix
- * @return default constructor for class
- * @throws IOException when fails to append to file
- */
- protected String addDefaultConstructor(String modifier, String toAppend,
- boolean suffix)
- throws IOException {
- StringBuilder name = new StringBuilder();
- name.append(getGeneratedJavaClassName());
- if (rootNode && !toAppend.equals(BUILDER)) {
- name.append(OP_PARAM);
- return getDefaultConstructorString(name.toString(), modifier);
- }
- if (suffix) {
- name.append(toAppend);
- return getDefaultConstructorString(name.toString(), modifier);
- }
- StringBuilder appended = new StringBuilder();
- if (toAppend.equals(DEFAULT)) {
- appended.append(getCapitalCase(toAppend));
- } else {
- appended.append(toAppend);
- }
- return NEW_LINE + getDefaultConstructorString(appended.append(
- name).toString(), modifier);
- // TODO getDefaultConstructorString to handle new line.
- }
-
- /**
- * Adds hash code method for class.
- *
- * @param attr attribute info
- * @throws IOException when fails to append to temporary file
- */
- private void addHashCodeMethod(JavaAttributeInfo attr)
- throws IOException {
- appendToFile(hashCodeImplTempFileHandle,
- getHashCodeMethod(attr) + NEW_LINE);
- }
-
- /**
- * Adds equals method for class.
- *
- * @param attr attribute info
- * @throws IOException when fails to append to temporary file
- */
- private void addEqualsMethod(JavaAttributeInfo attr)
- throws IOException {
- appendToFile(equalsImplTempFileHandle,
- getEqualsMethod(attr) + NEW_LINE);
- }
-
- /**
- * Adds ToString method for class.
- *
- * @param attr attribute info
- * @throws IOException when fails to append to temporary file
- */
- private void addToStringMethod(JavaAttributeInfo attr)
- throws IOException {
- appendToFile(toStringImplTempFileHandle,
- getToStringMethod(attr) + NEW_LINE);
- }
-
- /**
- * Adds from string method for union class.
- *
- * @param attr type attribute info
- * @param fromStringAttr from string attribute info
- * @throws IOException when fails to append to temporary file
- */
- void addFromStringMethod(JavaAttributeInfo attr,
- JavaAttributeInfo fromStringAttr)
- throws IOException {
- appendToFile(fromStringImplTempFileHandle,
- getFromStringMethod(attr, fromStringAttr) + NEW_LINE);
- }
-
- /**
- * Returns a temporary file handle for the specific file type.
- *
- * @param fileName file name
- * @return temporary file handle
- * @throws IOException when fails to create new file handle
- */
- protected File getTemporaryFileHandle(String fileName)
- throws IOException {
- String path = getTempDirPath(absoluteDirPath);
- File dir = new File(path);
- boolean isCreated;
- if (!dir.exists()) {
- isCreated = dir.mkdirs();
- if (!isCreated) {
- throw new IOException("failed to create temporary directory " +
- "for " + fileName);
- }
- }
- File file = new File(path + fileName + TEMP_FILE_EXTENSION);
- if (!file.exists()) {
- isCreated = file.createNewFile();
- if (!isCreated) {
- throw new IOException("failed to create temporary file for " +
- fileName);
- }
- } else {
- throw new IOException(fileName + " is reused due to YANG naming. " +
- "probably your previous build " +
- "would have failed");
- }
- return file;
- }
-
- /**
- * Returns a temporary file handle for the specific file type.
- *
- * @param fileName file name
- * @return temporary file handle
- * @throws IOException when fails to create new file handle
- */
- public File getJavaFileHandle(String fileName)
- throws IOException {
- return getFileObject(getDirPath(), fileName, JAVA_FILE_EXTENSION,
- javaFileInfo);
- }
-
- /**
- * Returns data from the temporary files.
- *
- * @param file temporary file handle
- * @param absolutePath absolute path
- * @return stored data from temporary files
- * @throws IOException when failed to get data from the given file
- */
- public String getTemporaryDataFromFileHandle(File file, String absolutePath)
- throws IOException {
- String path = getTempDirPath(absolutePath);
- if (new File(path + file.getName()).exists()) {
- return readAppendFile(path + file.getName(), EMPTY_STRING);
- }
- throw new IOException("Unable to get data from the given " +
- file.getName() + " file for " +
- getGeneratedJavaClassName() + PERIOD);
- }
-
- /**
- * Returns temporary directory path.
- *
- * @param path absolute path
- * @return directory path
- */
- private String getTempDirPath(String path) {
- return getPackageDirPathFromJavaJPackage(path) + SLASH +
- getGeneratedJavaClassName() + TEMP_FOLDER_NAME_SUFFIX + SLASH;
- }
-
- /**
- * Parses attribute to get the attribute string.
- *
- * @param attr attribute info
- * @return attribute string
- */
- protected String parseAttribute(JavaAttributeInfo attr) {
- /*
- * TODO: check if this utility needs to be called or move to the caller
- */
- String attrName = attr.getAttributeName();
- String attrAccessType = PRIVATE;
- if ((getGeneratedJavaFiles() & GENERATE_INTERFACE_WITH_BUILDER) != 0) {
- attrAccessType = PROTECTED;
- }
- String pkg = null;
- if (attr.isQualifiedName()) {
- pkg = attr.getImportInfo().getPkgInfo();
- }
- String attrType = attr.getImportInfo().getClassInfo();
- if (attr.getAttributeType() != null &&
- attr.getAttributeType().getDataType() == IDENTITYREF) {
- String type = attrType;
- if (pkg != null) {
- type = pkg + PERIOD + attrType;
- }
- attrType = CLASS_STRING + DIAMOND_OPEN_BRACKET +
- QUESTION_MARK + SPACE + EXTEND + SPACE + type +
- DIAMOND_CLOSE_BRACKET;
- return getJavaAttributeDefinition(
- null, attrType, attrName, attr.isListAttr(), attrAccessType,
- attr.getCompilerAnnotation());
- }
-
- return getJavaAttributeDefinition(
- pkg, attrType, attrName, attr.isListAttr(), attrAccessType,
- attr.getCompilerAnnotation());
- }
-
- /**
- * Appends content to temporary file.
- *
- * @param file temporary file
- * @param data data to be appended
- * @throws IOException when fails to append to file
- */
- protected void appendToFile(File file, String data)
- throws IOException {
- try {
- insertDataIntoJavaFile(file, data);
- } catch (IOException ex) {
- throw new IOException("failed to write in temp file.");
- }
- }
-
- /**
- * Adds parent's info to current node import list.
- *
- * @param curNode current node
- * @param config plugin configurations
- */
- protected void addParentInfoInCurNodeTempFile(YangNode curNode,
- YangPluginConfig config) {
- JavaQualifiedTypeInfoTranslator caseImportInfo =
- new JavaQualifiedTypeInfoTranslator();
- YangNode parent = getParentNodeInGenCode(curNode);
- if (curNode instanceof YangCase && parent instanceof YangAugment) {
- return;
- }
- if (!(parent instanceof JavaCodeGenerator)) {
- throw new TranslatorException(getErrorMsg(INVALID_PARENT_NODE, curNode));
- }
- if (!(curNode instanceof JavaFileInfoContainer)) {
- throw new TranslatorException(getErrorMsg(INVALID_NODE, curNode));
- }
- caseImportInfo.setClassInfo(
- getCapitalCase(getCamelCase(parent.getName(),
- config.getConflictResolver())));
- caseImportInfo.setPkgInfo(((JavaFileInfoContainer) parent).getJavaFileInfo()
- .getPackage());
-
- JavaFileInfoTranslator fileInfo =
- ((JavaFileInfoContainer) curNode).getJavaFileInfo();
-
- getBeanFiles(curNode).getJavaImportData().addImportInfo(
- caseImportInfo, getCapitalCase(fileInfo.getJavaName()),
- fileInfo.getPackage());
- }
-
- /**
- * Adds leaf attributes in generated files.
- *
- * @param entry JAVA leaf info container
- * @param config plugin config
- * @param curNode current node
- * @param leafList flag indicating whether leaf container is leafList
- * @throws IOException IO operation fail
- */
- private void addLeafInfoToTempFiles(JavaLeafInfoContainer entry,
- YangPluginConfig config,
- YangNode curNode,
- boolean leafList)
- throws IOException {
- if (entry != null) {
- if (curNode instanceof RpcNotificationContainer) {
- TempJavaBeanFragmentFiles tempFiles = getBeanFiles(curNode);
- addJavaSnippetInfoToApplicableTempFiles(
- getJavaAttributeOfLeaf(tempFiles, entry,
- config, leafList), config);
- } else {
- addJavaSnippetInfoToApplicableTempFiles(
- getJavaAttributeOfLeaf(this, entry,
- config, leafList), config);
- }
- }
- }
-
- /**
- * Adds all the leaves in the current data model node as part of the
- * generated temporary file.
- *
- * @param curNode current node
- * @param config plugin config
- * @throws IOException IO operation fail
- */
- protected void addCurNodeLeavesInfoToTempFiles(YangNode curNode,
- YangPluginConfig config)
- throws IOException {
- if (!(curNode instanceof YangLeavesHolder)) {
- throw new TranslatorException(getErrorMsg(INVALID_LEAF_HOLDER,
- curNode));
- }
- YangLeavesHolder leavesHolder = (YangLeavesHolder) curNode;
-
- for (YangLeaf leaf : leavesHolder.getListOfLeaf()) {
- addLeafInfoToTempFiles((JavaLeafInfoContainer) leaf, config,
- curNode, false);
- }
-
- for (YangLeafList leafList : leavesHolder.getListOfLeafList()) {
- addLeafInfoToTempFiles((JavaLeafInfoContainer) leafList, config,
- curNode, true);
- }
- }
-
- /**
- * Adds operation type to temp files.
- *
- * @param curNode current YANG node
- * @param config YANG plugin config
- * @throws IOException IO exception
- */
- protected void addOperationTypeToTempFiles(YangNode curNode,
- YangPluginConfig config)
- throws IOException {
- JavaQualifiedTypeInfoTranslator typeInfo =
- new JavaQualifiedTypeInfoTranslator();
- typeInfo.setClassInfo(OPERATION_TYPE_CLASS);
- JavaFileInfo curInfo = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
- JavaFileInfo info;
- if (curNode instanceof RpcNotificationContainer) {
- info = ((JavaFileInfoContainer) curNode).getJavaFileInfo();
- } else {
- info = ((JavaFileInfoContainer) getModuleNode(curNode))
- .getJavaFileInfo();
- }
-
- typeInfo.setPkgInfo(info.getPackage().toLowerCase() + PERIOD +
- getCapitalCase(info.getJavaName()));
- String curNodeName = getCapitalCase(curInfo.getJavaName());
- boolean isQualified = false;
- if (!(curNode instanceof RpcNotificationContainer)) {
- isQualified = javaImportData.addImportInfo(typeInfo, curNodeName,
- curInfo.getPackage());
- }
- JavaAttributeInfo attributeInfo =
- getAttributeInfoForTheData(typeInfo, YANG + curNodeName +
- OPERATION_TYPE_ATTRIBUTE, null, isQualified, false);
- addJavaSnippetInfoToApplicableTempFiles(attributeInfo, config);
- }
-
- private YangNode getModuleNode(YangNode curNode) {
- YangNode tempNode = curNode.getParent();
- while (!(tempNode instanceof RpcNotificationContainer)) {
- tempNode = tempNode.getParent();
- }
- return tempNode;
- }
-
- /**
- * Adds value leaf flag to temp files.
- *
- * @param config YANG plugin config
- * @param node YANG node
- * @throws IOException IO exception
- */
- protected void addValueLeafFlag(YangPluginConfig config, YangNode node)
- throws IOException {
- JavaFileInfo info = ((JavaFileInfoContainer) node).getJavaFileInfo();
- JavaQualifiedTypeInfoTranslator typeInfo =
- new JavaQualifiedTypeInfoTranslator();
- typeInfo.setClassInfo(BIT_SET);
- typeInfo.setPkgInfo(JAVA_UTIL_PKG);
- getJavaImportData().addImportInfo(typeInfo, info.getJavaName(),
- info.getPackage());
- JavaAttributeInfo attributeInfo =
- getAttributeInfoForTheData(typeInfo, VALUE_LEAF, null, false, false);
- addJavaSnippetInfoToApplicableTempFiles(attributeInfo, config);
- }
-
- /**
- * Adds value leaf flag to temp files.
- *
- * @param config YANG plugin config
- * @throws IOException IO exception
- */
- protected void addSelectLeafFlag(YangPluginConfig config)
- throws IOException {
- JavaQualifiedTypeInfoTranslator typeInfo =
- new JavaQualifiedTypeInfoTranslator();
- typeInfo.setClassInfo(BIT_SET);
- typeInfo.setPkgInfo(JAVA_UTIL_PKG);
- JavaAttributeInfo attributeInfo =
- getAttributeInfoForTheData(typeInfo, SELECT_LEAF, null, false, false);
- addJavaSnippetInfoToApplicableTempFiles(attributeInfo, config);
- }
-
- /**
- * Adds sub tree filtering to temp files.
- *
- * @param config YANG plugin config
- * @throws IOException IO exception
- */
- protected void addIsSubTreeFilteredFlag(YangPluginConfig config)
- throws IOException {
- JavaQualifiedTypeInfoTranslator typeInfo =
- new JavaQualifiedTypeInfoTranslator();
- typeInfo.setClassInfo(BOOLEAN_DATA_TYPE);
- typeInfo.setPkgInfo(null);
- JavaAttributeInfo attributeInfo =
- getAttributeInfoForTheData(typeInfo, SUBTREE_FILTERED, null, false, false);
- addJavaSnippetInfoToApplicableTempFiles(attributeInfo, config);
- }
-
- /**
- * Adds value leaf flag to temp files.
- *
- * @param config YANG plugin config
- * @param curNode current yang node
- * @throws IOException IO exception
- */
- protected void addYangAugmentedMap(YangPluginConfig config, YangNode curNode)
- throws IOException {
- JavaFileInfoTranslator info = ((JavaCodeGeneratorInfo) curNode)
- .getJavaFileInfo();
- JavaQualifiedTypeInfoTranslator typeInfo =
- new JavaQualifiedTypeInfoTranslator();
- typeInfo.setClassInfo(AUGMENT_MAP_TYPE);
- //Fix for add yangAugmentedInfo in equals/hashcode/and to string method.
- typeInfo.setPkgInfo(null);
- typeInfo.setForInterface(false);
- JavaAttributeInfo attributeInfo =
- getAttributeInfoForTheData(typeInfo, YANG_AUGMENTED_INFO_MAP,
- null, false, false);
- //MAP
- addImportInfoOfNode(MAP, COLLECTION_IMPORTS,
- getCapitalCase(info.getJavaName()),
- info.getPackage(), true);
- //HASH map
- addImportInfoOfNode(HASH_MAP, COLLECTION_IMPORTS,
- getCapitalCase(info.getJavaName()),
- info.getPackage(), false);
-
- if (curNode.isOpTypeReq()) {
- //exception
- addImportInfoOfNode(INVOCATION_TARGET_EXCEPTION, REFLECT_IMPORTS,
- getCapitalCase(info.getJavaName()),
- info.getPackage(), false);
- }
- addJavaSnippetInfoToApplicableTempFiles(attributeInfo, config);
- }
-
- private JavaQualifiedTypeInfoTranslator addImportInfoOfNode(
- String cls, String pkg, String nodeName, String nodePkg,
- boolean isForInterface) {
- JavaQualifiedTypeInfoTranslator typeInfo =
- new JavaQualifiedTypeInfoTranslator();
- typeInfo.setClassInfo(cls);
- typeInfo.setPkgInfo(pkg);
- typeInfo.setForInterface(isForInterface);
-
- getJavaImportData().addImportInfo(typeInfo, nodeName, nodePkg);
- return typeInfo;
- }
-
- /**
- * Adds the new attribute info to the target generated temporary files.
- *
- * @param newAttrInfo new attribute info
- * @param pluginConfig plugin configurations
- * @throws IOException IO operation fail
- */
- void addJavaSnippetInfoToApplicableTempFiles(JavaAttributeInfo newAttrInfo,
- YangPluginConfig pluginConfig)
- throws IOException {
- isAttributePresent = true;
- String attrName = newAttrInfo.getAttributeName();
- //Boolean flag for operation type attr info generation control.
- boolean required = !attrName.equals(VALUE_LEAF) &&
- !attrName.equals(SELECT_LEAF) &&
- !attrName.equals(YANG_AUGMENTED_INFO_MAP);
- //Boolean flag for subtree for nodes info generation control.
- boolean subTreeForChild =
- tempFlagSet(FILTER_CONTENT_MATCH_FOR_NODES_MASK) &&
- newAttrInfo.getAttributeType() == null &&
- !attrName.contains(OPERATION_TYPE_ATTRIBUTE) &&
- required && !attrName.equals(SUBTREE_FILTERED);
- ;
- if (tempFlagSet(ATTRIBUTES_MASK)) {
- addAttribute(newAttrInfo);
- }
- if (tempFlagSet(GETTER_FOR_INTERFACE_MASK) &&
- !attrName.equals(SUBTREE_FILTERED)) {
- addGetterForInterface(newAttrInfo);
- }
- if (tempFlagSet(SETTER_FOR_INTERFACE_MASK) && required &&
- !attrName.equals(SUBTREE_FILTERED)) {
- addSetterForInterface(newAttrInfo);
- }
- if (tempFlagSet(SETTER_FOR_CLASS_MASK) && required) {
- addSetterImpl(newAttrInfo);
- }
- if (tempFlagSet(HASH_CODE_IMPL_MASK)) {
- addHashCodeMethod(newAttrInfo);
- }
- if (tempFlagSet(EQUALS_IMPL_MASK)) {
- addEqualsMethod(newAttrInfo);
- }
- if (tempFlagSet(TO_STRING_IMPL_MASK)) {
- addToStringMethod(newAttrInfo);
- }
- if (tempFlagSet(EDIT_CONTENT_MASK)) {
- //TODO: add implementation for edit content match.
- }
- boolean listAttr = newAttrInfo.isListAttr();
- if (tempFlagSet(ADD_TO_LIST_IMPL_MASK) && listAttr) {
- addAddToListImpl(newAttrInfo);
- }
- if (tempFlagSet(ADD_TO_LIST_INTERFACE_MASK) && listAttr) {
- addAddToListInterface(newAttrInfo);
- }
- YangType attrType = newAttrInfo.getAttributeType();
- if (subTreeForChild) {
- addSubtreeFilteringForChildNode(newAttrInfo);
- }
- if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_MASK) &&
- !listAttr && attrType != null) {
- addSubTreeFilteringForLeaf(newAttrInfo);
- }
- if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK) &&
- listAttr && attrType != null) {
- addSubtreeFilteringForLeafList(newAttrInfo);
- }
- if (tempFlagSet(LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK) &&
- !listAttr && attrType != null) {
- leafCount++;
- addLeafIdAttributes(newAttrInfo, leafCount);
- }
- if (!newAttrInfo.isIntConflict() && !newAttrInfo.isLongConflict() &&
- !newAttrInfo.isShortConflict()) {
- if (tempFlagSet(GETTER_FOR_CLASS_MASK)) {
- addGetterImpl(newAttrInfo);
- }
- if (tempFlagSet(FROM_STRING_IMPL_MASK)) {
- JavaQualifiedTypeInfoTranslator typeInfo =
- getQualifiedInfoOfFromString(newAttrInfo,
- pluginConfig.getConflictResolver());
- /*
- * Create a new java attribute info with qualified information of
- * wrapper classes.
- */
- JavaAttributeInfo fromStringAttributeInfo =
- getAttributeInfoForTheData(
- typeInfo, newAttrInfo.getAttributeName(),
- attrType, getIsQualifiedAccessOrAddToImportList(
- typeInfo), false);
- addFromStringMethod(newAttrInfo, fromStringAttributeInfo);
- }
- }
- }
-
- /**
- * Returns JAVA class name for non implementation classes.
- *
- * @param suffix for the class name based on the file type
- * @return java class name
- */
- protected String getJavaClassName(String suffix) {
- return getCapitalCase(javaFileInfo.getJavaName()) + suffix;
- }
-
- /**
- * Returns class name for implementation classes.
- *
- * @param node YANG node
- * @return java class name
- */
- private String getImplClassName(YangNode node) {
- if (node instanceof RpcNotificationContainer) {
- return getGeneratedJavaClassName() + OP_PARAM;
- }
- return DEFAULT_CAPS + getGeneratedJavaClassName();
- }
-
- /**
- * Returns the directory path.
- *
- * @return directory path
- */
- private String getDirPath() {
- return javaFileInfo.getPackageFilePath();
- }
-
- /**
- * Constructs java code exit.
- *
- * @param fileType generated file type
- * @param curNode current YANG node
- * @throws IOException when fails to generate java files
- */
- public void generateJavaFile(int fileType, YangNode curNode)
- throws IOException {
-
- if (curNode.isOpTypeReq()) {
- addImportInfoOfNode(BIT_SET, JAVA_UTIL_PKG, getGeneratedJavaClassName(),
- getJavaFileInfo().getPackage(), false);
- }
- if (isAttributePresent) {
- //Object utils
- addImportInfoOfNode(JAVA_UTIL_OBJECTS_IMPORT_CLASS, JAVA_UTIL_PKG,
- getGeneratedJavaClassName(),
- getJavaFileInfo().getPackage(), false);
- //more objects.
- addImportInfoOfNode(GOOGLE_MORE_OBJECT_IMPORT_CLASS,
- GOOGLE_MORE_OBJECT_IMPORT_PKG,
- getGeneratedJavaClassName(),
- getJavaFileInfo().getPackage(), false);
- }
-
- List<String> imports =
- getBeanFiles(curNode).getJavaImportData().getImports(true);
- createPackage(curNode);
-
- //Generate java code.
- if ((fileType & INTERFACE_MASK) != 0 ||
- (fileType & BUILDER_INTERFACE_MASK) != 0) {
-
- //Create interface file.
- interfaceJavaFileHandle =
- getJavaFileHandle(getJavaClassName(INTERFACE_FILE_NAME_SUFFIX));
- interfaceJavaFileHandle =
- generateInterfaceFile(interfaceJavaFileHandle, imports,
- curNode, isAttributePresent);
-
- //Create builder interface file.
- if ((fileType & BUILDER_INTERFACE_MASK) != 0) {
- builderInterfaceJavaFileHandle =
- getJavaFileHandle(getJavaClassName(
- BUILDER_INTERFACE_FILE_NAME_SUFFIX));
- builderInterfaceJavaFileHandle =
- generateBuilderInterfaceFile(
- builderInterfaceJavaFileHandle,
- curNode, isAttributePresent);
- /*
- * Append builder interface file to interface file and
- * close it.
- */
- mergeJavaFiles(builderInterfaceJavaFileHandle,
- interfaceJavaFileHandle);
- }
-
- insertDataIntoJavaFile(interfaceJavaFileHandle, CLOSE_CURLY_BRACKET);
- validateLineLength(interfaceJavaFileHandle);
- }
-
- //add imports for default class.
- imports = getBeanFiles(curNode).getJavaImportData().getImports(false);
- if (!curNode.isOpTypeReq()) {
- removeCaseParentImport(curNode, imports);
- }
-
- if ((fileType & BUILDER_CLASS_MASK) != 0 ||
- (fileType & DEFAULT_CLASS_MASK) != 0) {
-
- //Create impl class file.
- implClassJavaFileHandle =
- getJavaFileHandle(getImplClassName(curNode));
- implClassJavaFileHandle =
- generateDefaultClassFile(implClassJavaFileHandle,
- curNode, isAttributePresent,
- imports);
-
- //Create builder class file.
- if ((fileType & BUILDER_CLASS_MASK) != 0) {
- builderClassJavaFileHandle =
- getJavaFileHandle(getJavaClassName(
- BUILDER_CLASS_FILE_NAME_SUFFIX));
- builderClassJavaFileHandle =
- generateBuilderClassFile(builderClassJavaFileHandle,
- curNode,
- isAttributePresent);
-
- //Append impl class to builder class and close it.
- mergeJavaFiles(builderClassJavaFileHandle,
- implClassJavaFileHandle);
- }
- insertDataIntoJavaFile(implClassJavaFileHandle, CLOSE_CURLY_BRACKET);
- validateLineLength(implClassJavaFileHandle);
- }
-
- if (curNode instanceof YangList) {
- File keyClassJavaFileHandle;
- YangList list = (YangList) curNode;
- YangDataStructure data = getYangDataStructure(
- list.getCompilerAnnotation());
- if (list.isConfig() && data == YangDataStructure.MAP) {
- keyClassJavaFileHandle =
- getJavaFileHandle(getJavaClassName(
- KEY_CLASS_FILE_NAME_SUFFIX));
- generateKeyClassFile(keyClassJavaFileHandle, curNode);
-
- }
- }
- //Close all the file handles.
- freeTemporaryResources(false);
- }
-
- //Removes case's parent import.
- private void removeCaseParentImport(YangNode node, List<String> imports) {
- YangNode parent = node.getParent();
- JavaFileInfo info = ((JavaFileInfoContainer) parent).getJavaFileInfo();
- String impt = getImportString(info.getPackage(),
- getCapitalCase(info.getJavaName()));
- imports.remove(impt);
- }
-
- /**
- * Removes all temporary file handles.
- *
- * @param errorOccurred flag indicating if error occurred
- * @throws IOException when failed to delete the temporary files
- */
- public void freeTemporaryResources(boolean errorOccurred)
- throws IOException {
- /*
- * Close all java file handles and when error occurs delete the files.
- */
- if (javaFlagSet(INTERFACE_MASK)) {
- closeFile(interfaceJavaFileHandle, errorOccurred);
- }
- if (javaFlagSet(BUILDER_CLASS_MASK)) {
- closeFile(builderClassJavaFileHandle);
- }
- if (javaFlagSet(BUILDER_INTERFACE_MASK)) {
- closeFile(builderInterfaceJavaFileHandle);
- }
- if (javaFlagSet(DEFAULT_CLASS_MASK)) {
- closeFile(implClassJavaFileHandle, errorOccurred);
- }
- /*
- * Close all temporary file handles and delete the files.
- */
- if (tempFlagSet(GETTER_FOR_CLASS_MASK)) {
- closeFile(getterImplTempFileHandle);
- }
- if (tempFlagSet(ATTRIBUTES_MASK)) {
- closeFile(attributesTempFileHandle);
- }
- if (tempFlagSet(HASH_CODE_IMPL_MASK)) {
- closeFile(hashCodeImplTempFileHandle);
- }
- if (tempFlagSet(TO_STRING_IMPL_MASK)) {
- closeFile(toStringImplTempFileHandle);
- }
- if (tempFlagSet(EQUALS_IMPL_MASK)) {
- closeFile(equalsImplTempFileHandle);
- }
- if (tempFlagSet(FROM_STRING_IMPL_MASK)) {
- closeFile(fromStringImplTempFileHandle);
- }
- if (tempFlagSet(ADD_TO_LIST_IMPL_MASK)) {
- closeFile(addToListImplTempFileHandle);
- }
- if (tempFlagSet(ADD_TO_LIST_INTERFACE_MASK)) {
- closeFile(addToListInterfaceTempFileHandle);
- }
- if (tempFlagSet(LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK)) {
- closeFile(leafIdAttributeTempFileHandle);
- }
- if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_MASK)) {
- closeFile(subtreeFilteringForLeafTempFileHandle);
- }
- if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK)) {
- closeFile(getSubtreeFilteringForListTempFileHandle);
- }
- if (tempFlagSet(FILTER_CONTENT_MATCH_FOR_NODES_MASK)) {
- closeFile(getSubtreeFilteringForChildNodeTempFileHandle);
- }
- if (tempFlagSet(EDIT_CONTENT_MASK)) {
- closeFile(editContentTempFileHandle);
- }
- }
-
- /**
- * Returns if the attribute needs to be accessed in a qualified manner or
- * not, if it needs to be imported, then the same needs to be done.
- *
- * @param importInfo import info
- * @return status of the qualified access to the attribute
- */
- protected boolean getIsQualifiedAccessOrAddToImportList(
- JavaQualifiedTypeInfo importInfo) {
- return javaImportData
- .addImportInfo((JavaQualifiedTypeInfoTranslator) importInfo,
- getGeneratedJavaClassName(),
- javaFileInfo.getPackage());
- }
-
- /**
- * Returns temp file handle for add to list interface.
- *
- * @return temp file handle for add to list interface
- */
- public File getAddToListInterfaceTempFileHandle() {
- return addToListInterfaceTempFileHandle;
- }
-
- /**
- * Returns temp file handle for add to list impl.
- *
- * @return temp file handle for add to list impl
- */
- public File getAddToListImplTempFileHandle() {
- return addToListImplTempFileHandle;
- }
-
- /**
- * Returns temp file handle for leaf identifier attributes.
- *
- * @return temp file handle for leaf identifier attributes
- */
- public File getLeafIdAttributeTempFileHandle() {
- return leafIdAttributeTempFileHandle;
- }
-
- /**
- * Sets true if root node.
- *
- * @param rootNode true if root node
- */
- void setRootNode(boolean rootNode) {
- this.rootNode = rootNode;
- }
-
- /**
- * Returns temp file for is content match.
- *
- * @return temp file for is content match
- */
- public File getSubtreeFilteringForLeafTempFileHandle() {
- return subtreeFilteringForLeafTempFileHandle;
- }
-
- /**
- * Returns temp file for edit content file.
- *
- * @return temp file for edit content file
- */
- public File getEditContentTempFileHandle() {
- return editContentTempFileHandle;
- }
-
- /**
- * Returns temp file for is content match.
- *
- * @return temp file for is content match
- */
- public File getGetSubtreeFilteringForListTempFileHandle() {
- return getSubtreeFilteringForListTempFileHandle;
- }
-
- /**
- * Returns temp file for is content match.
- *
- * @return temp file for is content match
- */
- public File getGetSubtreeFilteringForChildNodeTempFileHandle() {
- return getSubtreeFilteringForChildNodeTempFileHandle;
- }
-
- /**
- * Checks if a given flag is set in generated java files.
- * Returns true if ANY flag is set in a bitwise-ORed argument, e.g.
- * <pre>
- * javaFlagSet(FOO | BAR)
- * </pre>
- * returns true if either FOO flag or BAR flag is set.
- *
- * @param flag input flag mask value
- * @return true if set, else false
- */
- private boolean javaFlagSet(int flag) {
- return (getGeneratedJavaFiles() & flag) != 0;
- }
-
- /**
- * Checks if a given flag is set in temp files.
- *
- * @param flag input flag mask value
- * @return true if set, else false
- */
- private boolean tempFlagSet(int flag) {
- return (tempFilesFlagSet & flag) != 0;
- }
-
- /**
- * Sets attribute's node.
- *
- * @param attrNode attribute's node
- */
- public void setAttrNode(YangNode attrNode) {
- this.attrNode = attrNode;
- }
-
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaServiceFragmentFiles.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaServiceFragmentFiles.java
deleted file mode 100644
index 50dda06..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaServiceFragmentFiles.java
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava;
-
-import org.onosproject.yangutils.datamodel.RpcNotificationContainer;
-import org.onosproject.yangutils.datamodel.YangAugment;
-import org.onosproject.yangutils.datamodel.YangInput;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangOutput;
-import org.onosproject.yangutils.datamodel.YangRpc;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModuleTranslator;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaSubModuleTranslator;
-import org.onosproject.yangutils.translator.tojava.utils.JavaExtendsListHolder;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.List;
-
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
-import static org.onosproject.yangutils.translator.tojava.JavaAttributeInfo.getAttributeInfoForTheData;
-import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedTypeInfoOfCurNode;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.addListenersImport;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateServiceInterfaceFile;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.addResolvedAugmentedDataNodeImports;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.createPackage;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getRpcServiceMethod;
-import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.HYPHEN;
-import static org.onosproject.yangutils.utils.UtilConstants.INPUT;
-import static org.onosproject.yangutils.utils.UtilConstants.OUTPUT;
-import static org.onosproject.yangutils.utils.UtilConstants.Operation.ADD;
-import static org.onosproject.yangutils.utils.UtilConstants.RPC_INPUT_VAR_NAME;
-import static org.onosproject.yangutils.utils.UtilConstants.SERVICE;
-import static org.onosproject.yangutils.utils.UtilConstants.VOID;
-import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.closeFile;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateJavaDocForRpc;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getAbsolutePackagePath;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
-
-/**
- * Represents implementation of java service code fragments temporary
- * implementations. Maintains the temp files required specific for service
- * and manager java snippet generation.
- */
-public class TempJavaServiceFragmentFiles extends TempJavaFragmentFiles {
-
- /**
- * File name for rpc method.
- */
- private static final String RPC_INTERFACE_FILE_NAME = "Rpc";
-
- /**
- * Temporary file handle for rpc interface.
- */
- private final File rpcInterfaceTempFileHandle;
-
- /**
- * Java file handle for rpc interface file.
- */
- private File serviceJavaFileHandle;
-
- /**
- * Creates an instance of temporary java code fragment.
- *
- * @param javaFileInfo generated file information
- * @throws IOException when fails to create new file handle
- */
- TempJavaServiceFragmentFiles(JavaFileInfoTranslator javaFileInfo)
- throws IOException {
- setJavaExtendsListHolder(new JavaExtendsListHolder());
- setJavaImportData(new JavaImportData());
- setJavaFileInfo(javaFileInfo);
- setAbsoluteDirPath(getAbsolutePackagePath(
- getJavaFileInfo().getBaseCodeGenPath(),
- getJavaFileInfo().getPackageFilePath()));
- addGeneratedTempFile(RPC_INTERFACE_MASK);
- rpcInterfaceTempFileHandle = getTemporaryFileHandle(RPC_INTERFACE_FILE_NAME);
- }
-
- /**
- * Returns rpc method's temporary file handle.
- *
- * @return temporary file handle
- */
- public File getRpcInterfaceTempFileHandle() {
- return rpcInterfaceTempFileHandle;
- }
-
- /**
- * Constructs java code exit.
- *
- * @param fileType generated file type
- * @param curNode current YANG node
- * @throws IOException when fails to generate java files
- */
- @Override
- public void generateJavaFile(int fileType, YangNode curNode)
- throws IOException {
-
- addResolvedAugmentedDataNodeImports(curNode);
- List<String> imports = ((JavaCodeGeneratorInfo) curNode)
- .getTempJavaCodeFragmentFiles().getServiceTempFiles()
- .getJavaImportData().getImports(true);
- createPackage(curNode);
- boolean notification = false;
- if (curNode instanceof YangJavaModuleTranslator) {
- if (!((YangJavaModuleTranslator) curNode).getNotificationNodes()
- .isEmpty()) {
- notification = true;
- }
- } else if (curNode instanceof YangJavaSubModuleTranslator) {
- if (!((YangJavaSubModuleTranslator) curNode).getNotificationNodes()
- .isEmpty()) {
- notification = true;
- }
- }
-
- if (notification) {
- addListenersImport(curNode, imports, ADD);
- }
-
- serviceJavaFileHandle = getJavaFileHandle(getJavaClassName(SERVICE));
- generateServiceInterfaceFile(serviceJavaFileHandle, curNode, imports);
-
- // Close all the file handles.
- freeTemporaryResources(false);
- }
-
- /**
- * Adds rpc string information to applicable temp file.
- *
- * @param inAttr RPCs input node attribute info
- * @param outAttr RPCs output node attribute info
- * @param rpcName name of the rpc function
- * @throws IOException IO operation fail
- */
- private void addRpcString(JavaAttributeInfo inAttr, JavaAttributeInfo outAttr,
- String rpcName) throws IOException {
- String rpcInput = null;
- String rpcOutput = VOID;
- String rpcIn = EMPTY_STRING;
- if (inAttr != null) {
- rpcInput = getCapitalCase(inAttr.getAttributeName());
- }
- if (outAttr != null) {
- rpcOutput = getCapitalCase(outAttr.getAttributeName());
- }
- if (rpcInput != null) {
- rpcIn = RPC_INPUT_VAR_NAME;
- }
- appendToFile(rpcInterfaceTempFileHandle,
- generateJavaDocForRpc(rpcName, rpcIn, rpcOutput) +
- getRpcServiceMethod(rpcName, rpcInput, rpcOutput));
- }
-
- /**
- * Adds the JAVA rpc snippet information.
- *
- * @param inAttr RPCs input node attribute info
- * @param outAttr RPCs output node attribute info
- * @param rpcName name of the rpc function
- * @throws IOException IO operation fail
- */
- public void addJavaSnippetInfoToApplicableTempFiles(JavaAttributeInfo inAttr,
- JavaAttributeInfo outAttr,
- String rpcName)
- throws IOException {
- addRpcString(inAttr, outAttr, rpcName);
- }
-
- /**
- * Creates an attribute info object corresponding to a data model node and
- * return it.
- *
- * @param childNode child data model node(input / output) for which the java code generation
- * is being handled
- * @param parentNode parent node (module / sub-module) in which the child node is an attribute
- * @param rpcName rpc name
- * @return AttributeInfo attribute details required to add in temporary
- * files
- */
- public JavaAttributeInfo getChildNodeAsAttributeInParentService(
- YangNode childNode, YangNode parentNode, String rpcName) {
-
- JavaFileInfoTranslator fileInfo = ((JavaFileInfoContainer) childNode)
- .getJavaFileInfo();
- String childNodeName = fileInfo.getJavaName();
- if (childNodeName == null) {
- if (childNode instanceof YangInput) {
- childNodeName = rpcName + HYPHEN + INPUT;
- } else {
- childNodeName = rpcName + HYPHEN + OUTPUT;
- }
- childNodeName = getCamelCase(childNodeName, null);
- }
- /*
- * Get the import info corresponding to the attribute for import in
- * generated java files or qualified access
- */
- JavaQualifiedTypeInfoTranslator qualifiedTypeInfo =
- getQualifiedTypeInfoOfCurNode(childNode,
- getCapitalCase(childNodeName));
- if (!(parentNode instanceof TempJavaCodeFragmentFilesContainer)) {
- throw new TranslatorException("Parent node does not have file info");
- }
-
- boolean isQualified = addImportToService(qualifiedTypeInfo, parentNode);
- return getAttributeInfoForTheData(qualifiedTypeInfo, childNodeName,
- null, isQualified, false);
- }
-
- /**
- * Adds to service class import list.
- *
- * @param importInfo import info
- * @return true or false
- */
- private boolean addImportToService(
- JavaQualifiedTypeInfoTranslator importInfo, YangNode curNode) {
- JavaFileInfoTranslator fileInfo = ((JavaFileInfoContainer) curNode)
- .getJavaFileInfo();
- String name = fileInfo.getJavaName();
- String clsInfo = importInfo.getClassInfo();
-
- StringBuilder className = new StringBuilder()
- .append(getCapitalCase(name))
- .append(SERVICE);
- return clsInfo.contentEquals(SERVICE) || clsInfo.contentEquals(className) ||
- getJavaImportData().addImportInfo(importInfo, className.toString(),
- fileInfo.getPackage());
- }
-
- /**
- * Adds augmented rpc methods to service temp file.
- *
- * @param module root node
- * @throws IOException when fails to do IO operations
- */
- public void addAugmentedRpcMethod(RpcNotificationContainer module)
- throws IOException {
- JavaAttributeInfo in = null;
- JavaAttributeInfo out = null;
- YangNode rpcChild;
- YangRpc rpc;
- String rpcName;
- YangInput input;
-
- for (YangAugment info : module.getAugmentList()) {
- input = (YangInput) info.getAugmentedNode();
-
- if (input != null) {
- rpc = (YangRpc) input.getParent();
- if (!validateForIntraFile(module, (RpcNotificationContainer) rpc
- .getParent())) {
- rpcChild = rpc.getChild();
-
- rpcName = getCamelCase(rpc.getName(), null);
- while (rpcChild != null) {
- if (rpcChild instanceof YangInput) {
- in = getChildNodeAsAttributeInParentService(
- rpcChild, (YangNode) module, rpcName);
- }
- if (rpcChild instanceof YangOutput) {
- out = getChildNodeAsAttributeInParentService(
- rpcChild, (YangNode) module, rpcName);
- }
- rpcChild = rpcChild.getNextSibling();
- }
- addJavaSnippetInfoToApplicableTempFiles(in, out, rpcName);
- }
- }
- }
- }
-
- private boolean validateForIntraFile(RpcNotificationContainer parent,
- RpcNotificationContainer curModule) {
- return parent.getPrefix().equals(curModule.getPrefix());
- }
-
- /**
- * Removes all temporary file handles.
- *
- * @param errorOccurred flag indicating error
- * @throws IOException when failed to delete the temporary files
- */
- @Override
- public void freeTemporaryResources(boolean errorOccurred)
- throws IOException {
- closeFile(serviceJavaFileHandle, errorOccurred);
- closeFile(rpcInterfaceTempFileHandle);
- closeFile(getGetterInterfaceTempFileHandle());
- closeFile(getSetterInterfaceTempFileHandle());
- closeFile(getSetterImplTempFileHandle());
- super.freeTemporaryResources(errorOccurred);
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaTypeFragmentFiles.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaTypeFragmentFiles.java
deleted file mode 100644
index 7c9dfa5..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/TempJavaTypeFragmentFiles.java
+++ /dev/null
@@ -1,1026 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava;
-
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.YangTypeDef;
-import org.onosproject.yangutils.datamodel.YangTypeHolder;
-import org.onosproject.yangutils.datamodel.YangUnion;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaTypeTranslator;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-import static org.onosproject.yangutils.datamodel.exceptions.ErrorMessages.getErrorMsg;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BINARY;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BITS;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.INT16;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.INT32;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.INT64;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.UINT16;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.UINT32;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.UINT8;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
-import static org.onosproject.yangutils.translator.tojava.JavaAttributeInfo.getAttributeInfoForTheData;
-import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedInfoOfFromString;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateTypeDefClassFile;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateUnionClassFile;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.createPackage;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOfMethodStringAndJavaDoc;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getTypeConstructorStringAndJavaDoc;
-import static org.onosproject.yangutils.translator.tojava.utils.ValidatorTypeForUnionTypes.INT_TYPE_CONFLICT;
-import static org.onosproject.yangutils.translator.tojava.utils.ValidatorTypeForUnionTypes.LONG_TYPE_CONFLICT;
-import static org.onosproject.yangutils.translator.tojava.utils.ValidatorTypeForUnionTypes.SHORT_TYPE_CONFLICT;
-import static org.onosproject.yangutils.utils.UtilConstants.BASE64;
-import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.HOLDER_TYPE_DEF;
-import static org.onosproject.yangutils.utils.UtilConstants.JAVA_UTIL_PKG;
-import static org.onosproject.yangutils.utils.UtilConstants.LAST;
-import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
-import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.closeFile;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
-
-/**
- * Represents implementation of java data type code fragments temporary implementations. Maintains the temp files
- * required specific for user defined data type java snippet generation.
- */
-//TODO: Update with multi type handler framework.
-public class TempJavaTypeFragmentFiles
- extends TempJavaFragmentFiles {
-
- /**
- * File name for of string method.
- */
- private static final String OF_STRING_METHOD_FILE_NAME = "OfString";
-
- /**
- * File name for construction for special type like union, typedef.
- */
- private static final String CONSTRUCTOR_FOR_TYPE_FILE_NAME = "ConstructorForType";
-
- /**
- * Integer index in type list.
- */
- private int intIndex = 0;
-
- /**
- * UInt index in type list.
- */
- private int uIntIndex = 0;
-
- /**
- * long index in type list.
- */
- private int longIndex = 0;
-
- /**
- * ULong index in type list.
- */
- private int uLongIndex = 0;
-
- /**
- * short index in type list.
- */
- private int shortIndex = 0;
-
- /**
- * Uint8 index in type list.
- */
- private int uInt8Index = 0;
-
- /**
- * Temporary file handle for of string method of class.
- */
- private File ofStringImplTempFileHandle;
-
- /**
- * Temporary file handle for constructor for type class.
- */
- private File constructorForTypeTempFileHandle;
-
- /**
- * Java file handle for typedef class file.
- */
- private File typedefClassJavaFileHandle;
-
- /**
- * Java file handle for type class like union, typedef file.
- */
- private File typeClassJavaFileHandle;
-
- /**
- * Java attribute for int.
- */
- private JavaAttributeInfo intAttribute;
-
- /**
- * Java attribute for long.
- */
- private JavaAttributeInfo longAttribute;
-
- /**
- * Java attribute for short.
- */
- private JavaAttributeInfo shortAttribute;
-
- /**
- * Java attribute for uint8.
- */
- private JavaAttributeInfo uInt8Attribute;
-
- /**
- * Java attribute for uInt.
- */
- private JavaAttributeInfo uIntAttribute;
-
- /**
- * Java attribute for uLong.
- */
- private JavaAttributeInfo uLongAttribute;
-
- private List<YangType<?>> local = new ArrayList<>();
-
- private List<JavaAttributeInfo> attrs = new ArrayList<>();
-
- /**
- * Creates an instance of temporary java code fragment.
- *
- * @param javaFileInfo generated java file info
- * @throws IOException when fails to create new file handle
- */
- TempJavaTypeFragmentFiles(JavaFileInfoTranslator javaFileInfo)
- throws IOException {
-
- super(javaFileInfo);
-
- /*
- * Initialize getterImpl, attributes, hash code, equals and to strings
- * when generation file type matches to typeDef class mask.
- */
- addGeneratedTempFile(OF_STRING_IMPL_MASK | CONSTRUCTOR_FOR_TYPE_MASK |
- FROM_STRING_IMPL_MASK);
-
- ofStringImplTempFileHandle = getTemporaryFileHandle(
- OF_STRING_METHOD_FILE_NAME);
- constructorForTypeTempFileHandle = getTemporaryFileHandle(
- CONSTRUCTOR_FOR_TYPE_FILE_NAME);
-
- }
-
- /**
- * Returns type class constructor method's temporary file handle.
- *
- * @return type class constructor method's temporary file handle
- */
-
- public File getConstructorForTypeTempFileHandle() {
- return constructorForTypeTempFileHandle;
- }
-
- /**
- * Returns java file handle for typedef class file.
- *
- * @return java file handle for typedef class file
- */
- private File getTypedefClassJavaFileHandle() {
- return typedefClassJavaFileHandle;
- }
-
- /**
- * Sets the java file handle for typedef class file.
- *
- * @param typedefClassJavaFileHandle java file handle
- */
- private void setTypedefClassJavaFileHandle(File typedefClassJavaFileHandle) {
- this.typedefClassJavaFileHandle = typedefClassJavaFileHandle;
- }
-
- /**
- * Returns java file handle for type class file.
- *
- * @return java file handle for type class file
- */
- private File getTypeClassJavaFileHandle() {
- return typeClassJavaFileHandle;
- }
-
- /**
- * Sets the java file handle for type class file.
- *
- * @param typeClassJavaFileHandle type file handle
- */
- private void setTypeClassJavaFileHandle(File typeClassJavaFileHandle) {
- this.typeClassJavaFileHandle = typeClassJavaFileHandle;
- }
-
- /**
- * Returns of string method's temporary file handle.
- *
- * @return of string method's temporary file handle
- */
-
- public File getOfStringImplTempFileHandle() {
- return ofStringImplTempFileHandle;
- }
-
- private void verifyUnionTypes(List<YangType<?>> typeList,
- YangTypeHolder yangTypeHolder) {
- String msg;
- YangUnion union = (YangUnion) yangTypeHolder;
- for (YangType<?> yangType : typeList) {
- YangDataTypes type = yangType.getDataType();
- switch (type) {
- case EMPTY:
- msg = "Union member derived type must not be one of the " +
- "type whose built-in types is \"empty\"";
- break;
- case LEAFREF:
- msg = "Union member derived type must not be one of the " +
- "type whose built-in types is \"leafref\"";
- break;
- default:
- msg = null;
- }
- if (msg != null) {
- throw new TranslatorException(getErrorMsg(
- msg, union.getName(), union.getLineNumber(), union
- .getCharPosition(), union.getFileName()));
- }
- }
- }
-
- /**
- * Adds all the type in the current data model node as part of the generated temporary file.
- *
- * @param yangTypeHolder YANG java data model node which has type info, eg union / typedef
- * @param config plugin configurations for naming conventions
- * @throws IOException IO operation fail
- */
- void addTypeInfoToTempFiles(YangTypeHolder yangTypeHolder, YangPluginConfig config)
- throws IOException {
- List<YangType<?>> typeList = yangTypeHolder.getTypeList();
- if (yangTypeHolder instanceof YangUnion) {
- verifyUnionTypes(typeList, yangTypeHolder);
- }
- if (typeList != null) {
- List<YangType<?>> types = validateTypes(typeList);
- for (YangType<?> type : types) {
- if (!(type instanceof YangJavaTypeTranslator)) {
- throw new TranslatorException(
- "Type does not have Java info " + type
- .getDataTypeName() + " in " + type
- .getLineNumber() + " at " + type
- .getCharPosition() + " in " +
- type.getFileName());
- }
- JavaAttributeInfo javaAttributeInfo = getAttributeForType(type,
- config);
- if (yangTypeHolder instanceof YangTypeDef) {
- javaAttributeInfo.setCurHolderOrCount(HOLDER_TYPE_DEF);
- } else if (types.indexOf(type) == types.size() - 1) {
- javaAttributeInfo.setCurHolderOrCount(LAST);
- }
- if (type.getDataType() == BITS) {
- addBitsHandler(javaAttributeInfo, type, this);
- }
- if (type.getDataType() == BINARY) {
- JavaQualifiedTypeInfoTranslator info = new
- JavaQualifiedTypeInfoTranslator();
- info.setClassInfo(BASE64);
- info.setPkgInfo(JAVA_UTIL_PKG);
- getJavaImportData().addImportInfo(
- info, getGeneratedJavaClassName(), getJavaFileInfo()
- .getPackage());
- }
- addJavaSnippetInfoToApplicableTempFiles(javaAttributeInfo,
- config, types);
- }
- addTypeConstructor();
- addMethodsInConflictCase(config);
- for (JavaAttributeInfo attr : attrs) {
- super.addJavaSnippetInfoToApplicableTempFiles(attr, config);
- }
- }
- }
-
- /**
- * Returns java attribute.
- *
- * @param type YANG type
- * @param config plugin configurations
- * @return java attribute
- */
- private JavaAttributeInfo getAttributeForType(YangType type,
- YangPluginConfig config) {
- YangJavaTypeTranslator javaType = (YangJavaTypeTranslator) type;
- javaType.updateJavaQualifiedInfo(config.getConflictResolver());
- String typeName = getCamelCase(javaType.getDataTypeName(), config
- .getConflictResolver());
- return getAttributeInfoForTheData(
- javaType.getJavaQualifiedInfo(), typeName, javaType,
- getIsQualifiedAccessOrAddToImportList(
- javaType.getJavaQualifiedInfo()), false);
- }
-
- /**
- * Adds the new attribute info to the target generated temporary files for union class.
- *
- * @param attr the attribute info that needs to be added to temporary files
- * @param config plugin configurations
- * @param types type list
- * @throws IOException IO operation fail
- */
- private void addJavaSnippetInfoToApplicableTempFiles(
- JavaAttributeInfo attr, YangPluginConfig config, List<YangType<?>> types)
- throws IOException {
-
- YangDataTypes attrType = attr.getAttributeType().getDataType();
-
- if (attrType == INT16 || attrType == UINT8) {
- boolean isShortConflict = validateForConflictingShortTypes(types);
- attr.setShortConflict(isShortConflict);
- updateAttributeCondition(attr);
- if (!isShortConflict) {
- addMethodsWhenNoConflictingTypes(attr, config, types);
- }
- } else if (attrType == INT32 || attrType == UINT16) {
- boolean isIntConflict = validateForConflictingIntTypes(types);
- attr.setIntConflict(isIntConflict);
- updateAttributeCondition(attr);
- if (!isIntConflict) {
- addMethodsWhenNoConflictingTypes(attr, config, types);
- }
- } else if (attrType == INT64 || attrType == UINT32) {
- boolean isLongConflict = validateForConflictingLongTypes(types);
- attr.setLongConflict(isLongConflict);
- updateAttributeCondition(attr);
- if (!isLongConflict) {
- addMethodsWhenNoConflictingTypes(attr, config, types);
- }
- } else {
- addMethodsWhenNoConflictingTypes(attr, config, types);
- }
- String attrHolder = attr.getCurHolderOrCount();
- if (attrHolder != null && !attrHolder.equals(HOLDER_TYPE_DEF)) {
- attrs.add(attr);
- } else {
- super.addJavaSnippetInfoToApplicableTempFiles(attr, config);
- }
-
- }
-
- private List<YangType<?>> validateTypes(List<YangType<?>> types) {
- String curType;
- List<String> preType = new ArrayList<>();
- for (YangType type : types) {
- curType = type.getDataTypeName();
- if (!preType.contains(curType)) {
- preType.add(curType);
- local.add(type);
- }
- }
- return local;
- }
-
- /**
- * Adds of method and constructor when there is no conflicting types.
- *
- * @param javaAttributeInfo java attribute info
- * @param pluginConfig plugin configurations
- * @param types YANG type
- * @throws IOException when fails to do IO operations
- */
- private void addMethodsWhenNoConflictingTypes(JavaAttributeInfo javaAttributeInfo,
- YangPluginConfig pluginConfig, List<YangType<?>> types)
- throws IOException {
- if ((getGeneratedTempFiles() & OF_STRING_IMPL_MASK) != 0) {
- addOfStringMethod(javaAttributeInfo, pluginConfig);
- }
-
- if ((getGeneratedTempFiles() & CONSTRUCTOR_FOR_TYPE_MASK) != 0) {
- addTypeConstructor(javaAttributeInfo, types.indexOf
- (javaAttributeInfo.getAttributeType()));
- }
- }
-
- /**
- * Adds of, getter and from string method in conflict cases.
- *
- * @param pluginConfig plugin configurations
- * @throws IOException when fails to do IO operations
- */
- private void addMethodsInConflictCase(YangPluginConfig pluginConfig)
- throws IOException {
- JavaAttributeInfo attr = getIntAttribute();
- if (attr != null) {
- attr = getUIntAttribute();
- }
- if (attr != null) {
- if (attr.isIntConflict()) {
- if (getIntIndex() < getUIntIndex()) {
- getIntAttribute().setCurHolderOrCount(
- getUIntAttribute().getCurHolderOrCount());
- appendToFile(getOfStringImplTempFileHandle(), getOfMethodStringAndJavaDoc(getIntAttribute(),
- getGeneratedJavaClassName())
- + NEW_LINE);
- addGetterImpl(getIntAttribute());
-
- addFromStringMethod(getIntAttribute(), pluginConfig);
- } else {
- getUIntAttribute().setCurHolderOrCount(
- getIntAttribute().getCurHolderOrCount());
- appendToFile(getOfStringImplTempFileHandle(), getOfMethodStringAndJavaDoc(getUIntAttribute(),
- getGeneratedJavaClassName())
- + NEW_LINE);
- addGetterImpl(getUIntAttribute());
- addFromStringMethod(getUIntAttribute(), pluginConfig);
- }
- }
- }
- attr = getLongAttribute();
- if (attr != null) {
- attr = getULongAttribute();
- }
- if (attr != null) {
- if (attr.isLongConflict()) {
- if (getLongIndex() < getULongIndex()) {
- getLongAttribute().setCurHolderOrCount(
- getULongAttribute().getCurHolderOrCount());
- appendToFile(getOfStringImplTempFileHandle(), getOfMethodStringAndJavaDoc(getLongAttribute(),
- getGeneratedJavaClassName())
- + NEW_LINE);
- addGetterImpl(getLongAttribute());
- addFromStringMethod(getLongAttribute(), pluginConfig);
- } else {
- getULongAttribute().setCurHolderOrCount(
- getLongAttribute().getCurHolderOrCount());
- appendToFile(getOfStringImplTempFileHandle(), getOfMethodStringAndJavaDoc(getULongAttribute(),
- getGeneratedJavaClassName())
- + NEW_LINE);
- addGetterImpl(getULongAttribute());
- addFromStringMethod(getULongAttribute(), pluginConfig);
- }
- }
- }
-
- attr = getShortAttribute();
- if (attr != null) {
- attr = getUInt8Attribute();
- }
- if (attr != null) {
- if (attr.isShortConflict()) {
- if (getShortIndex() < getUInt8Index()) {
- getShortAttribute().setCurHolderOrCount(
- getUInt8Attribute().getCurHolderOrCount());
- appendToFile(getOfStringImplTempFileHandle(), getOfMethodStringAndJavaDoc(getShortAttribute(),
- getGeneratedJavaClassName())
- + NEW_LINE);
- addGetterImpl(getShortAttribute());
- addFromStringMethod(getShortAttribute(), pluginConfig);
- } else {
- getUInt8Attribute().setCurHolderOrCount(
- getShortAttribute().getCurHolderOrCount());
- appendToFile(getOfStringImplTempFileHandle(), getOfMethodStringAndJavaDoc(getUInt8Attribute(),
- getGeneratedJavaClassName())
- + NEW_LINE);
- addGetterImpl(getUInt8Attribute());
- addFromStringMethod(getUInt8Attribute(), pluginConfig);
- }
- }
- }
- }
-
- /**
- * Adds from string method for conflict case.
- *
- * @param newAttrInfo new attribute
- * @param pluginConfig plugin configurations
- * @throws IOException when fails to do IO operations
- */
- private void addFromStringMethod(JavaAttributeInfo newAttrInfo, YangPluginConfig pluginConfig)
- throws IOException {
-
- JavaQualifiedTypeInfoTranslator qualifiedInfoOfFromString = getQualifiedInfoOfFromString(newAttrInfo,
- pluginConfig.getConflictResolver());
- /*
- * Create a new java attribute info with qualified information of
- * wrapper classes.
- */
- JavaAttributeInfo fromStringAttributeInfo = getAttributeInfoForTheData(qualifiedInfoOfFromString,
- newAttrInfo.getAttributeName(),
- newAttrInfo.getAttributeType(),
- getIsQualifiedAccessOrAddToImportList(qualifiedInfoOfFromString), false);
-
- addFromStringMethod(newAttrInfo, fromStringAttributeInfo);
- }
-
- /**
- * Adds type constructor.
- *
- * @param attr attribute info
- * @param count count of types
- * @throws IOException when fails to append to temporary file
- */
- private void addTypeConstructor(JavaAttributeInfo attr, int count)
- throws IOException {
- appendToFile(getConstructorForTypeTempFileHandle(),
- getTypeConstructorStringAndJavaDoc(
- attr, getGeneratedJavaClassName(), getGeneratedJavaFiles(), count)
- + NEW_LINE);
- }
-
- /**
- * Adds type constructor.
- *
- * @throws IOException when fails to append to temporary file
- */
- private void addTypeConstructor()
- throws IOException {
- JavaAttributeInfo attr = getIntAttribute();
- if (attr != null) {
- attr = getUIntAttribute();
- }
- boolean index = getIntIndex() < getUIntIndex();
- int count;
- if (index) {
- count = getIntIndex();
- } else {
- count = getUIntIndex();
- }
- if (attr != null) {
- if (attr.isIntConflict()) {
- appendToFile(getConstructorForTypeTempFileHandle(), getTypeConstructorStringAndJavaDoc(
- getIntAttribute(),
- getUIntAttribute(), getGeneratedJavaClassName(), INT_TYPE_CONFLICT,
- index, count) + NEW_LINE);
- }
- }
- attr = getLongAttribute();
- if (attr != null) {
- attr = getULongAttribute();
- }
- index = getLongIndex() < getULongIndex();
- if (index) {
- count = getLongIndex();
- } else {
- count = getULongIndex();
- }
- if (attr != null) {
- if (attr.isLongConflict()) {
- appendToFile(getConstructorForTypeTempFileHandle(), getTypeConstructorStringAndJavaDoc(
- getLongAttribute(),
- getULongAttribute(), getGeneratedJavaClassName(), LONG_TYPE_CONFLICT,
- index, count) + NEW_LINE);
- }
- }
- attr = getShortAttribute();
- if (attr != null) {
- attr = getUInt8Attribute();
- }
- index = getShortIndex() < getUInt8Index();
- if (index) {
- count = getShortIndex();
- } else {
- count = getUInt8Index();
- }
- if (attr != null) {
- if (attr.isShortConflict()) {
- appendToFile(getConstructorForTypeTempFileHandle(), getTypeConstructorStringAndJavaDoc(
- getShortAttribute(),
- getUInt8Attribute(), getGeneratedJavaClassName(), SHORT_TYPE_CONFLICT,
- index, count) + NEW_LINE);
- }
- }
- }
-
- /**
- * Adds of string for type.
- *
- * @param attr attribute info
- * @param pluginConfig plugin configurations
- * @throws IOException when fails to append to temporary file
- */
- private void addOfStringMethod(JavaAttributeInfo attr, YangPluginConfig pluginConfig)
- throws IOException {
- appendToFile(getOfStringImplTempFileHandle(), getOfMethodStringAndJavaDoc(attr,
- getGeneratedJavaClassName())
- + NEW_LINE);
- }
-
- /**
- * Removes all temporary file handles.
- *
- * @param isErrorOccurred flag to tell translator that error has occurred while file generation
- * @throws IOException when failed to delete the temporary files
- */
- @Override
- public void freeTemporaryResources(boolean isErrorOccurred)
- throws IOException {
-
- if ((getGeneratedJavaFiles() & GENERATE_TYPEDEF_CLASS) != 0 ||
- (getGeneratedJavaFiles() & GENERATE_UNION_CLASS) != 0) {
- closeFile(typeClassJavaFileHandle, isErrorOccurred);
- }
-
- if ((getGeneratedTempFiles() & CONSTRUCTOR_FOR_TYPE_MASK) != 0) {
- closeFile(constructorForTypeTempFileHandle, true);
- }
- if ((getGeneratedTempFiles() & OF_STRING_IMPL_MASK) != 0) {
- closeFile(ofStringImplTempFileHandle, true);
- }
- if ((getGeneratedTempFiles() & FROM_STRING_IMPL_MASK) != 0) {
- closeFile(getFromStringImplTempFileHandle(), true);
- }
-
- super.freeTemporaryResources(isErrorOccurred);
-
- }
-
- /**
- * Constructs java code exit.
- *
- * @param fileType generated file type
- * @param curNode current YANG node
- * @throws IOException when fails to generate java files
- */
- @Override
- public void generateJavaFile(int fileType, YangNode curNode)
- throws IOException {
- List<String> imports = new ArrayList<>();
- if (isAttributePresent()) {
- imports = getJavaImportData().getImports(true);
- }
-
- createPackage(curNode);
- imports.add(getJavaImportData().getImportForHashAndEquals());
-
- /*
- * Creates type def class file.
- */
- if ((fileType & GENERATE_TYPEDEF_CLASS) != 0) {
- setTypedefClassJavaFileHandle(getJavaFileHandle(
- getJavaClassName(EMPTY_STRING)));
- generateTypeDefClassFile(getTypedefClassJavaFileHandle(), curNode, imports);
- }
- String bit = getJavaImportData().getImportForToBitSet();
- if (!imports.contains(bit)) {
- imports.add(bit);
- }
- /*
- * Creates type class file.
- */
- if ((fileType & GENERATE_UNION_CLASS) != 0) {
- setTypeClassJavaFileHandle(getJavaFileHandle(
- getJavaClassName(EMPTY_STRING)));
- generateUnionClassFile(getTypeClassJavaFileHandle(), curNode, imports);
- }
-
- /*
- * Close all the file handles.
- */
- freeTemporaryResources(false);
- }
-
- /**
- * Returns short type index from type list.
- *
- * @return short type index from type list
- */
- public int getShortIndex() {
- return shortIndex;
- }
-
- /**
- * Sets short type index from type list.
- *
- * @param shortIndex short type index from type list.
- */
- private void setShortIndex(int shortIndex) {
- this.shortIndex = shortIndex;
- }
-
- /**
- * Returns uInt type index from type list.
- *
- * @return uInt type index from type list
- */
- public int getUInt8Index() {
- return uInt8Index;
- }
-
- /**
- * Sets uInt8 type index from type list.
- *
- * @param uInt8Index uInt8 type index from type list.
- */
- private void setUInt8Index(int uInt8Index) {
- this.uInt8Index = uInt8Index;
- }
-
- /**
- * Returns int type index from type list.
- *
- * @return int type index from type list
- */
- public int getIntIndex() {
- return intIndex;
- }
-
- /**
- * Sets int type index from type list.
- *
- * @param intIndex int type index from type list.
- */
- private void setIntIndex(int intIndex) {
- this.intIndex = intIndex;
- }
-
- /**
- * Returns uInt type index from type list.
- *
- * @return uInt type index from type list
- */
- public int getUIntIndex() {
- return uIntIndex;
- }
-
- /**
- * Sets uInt type index from type list.
- *
- * @param uIntIndex uInt type index from type list.
- */
- private void setUIntIndex(int uIntIndex) {
- this.uIntIndex = uIntIndex;
- }
-
- /**
- * Returns long type index from type list.
- *
- * @return long type index from type list
- */
- public int getLongIndex() {
- return longIndex;
- }
-
- /**
- * Sets long type index from type list.
- *
- * @param longIndex long type index from type list.
- */
- private void setLongIndex(int longIndex) {
- this.longIndex = longIndex;
- }
-
- /**
- * Returns uLong type index from type list.
- *
- * @return uLong type index from type list
- */
- public int getULongIndex() {
- return uLongIndex;
- }
-
- /**
- * Sets uLong type index from type list.
- *
- * @param uLongIndex uLong type index from type list.
- */
- private void setULongIndex(int uLongIndex) {
- this.uLongIndex = uLongIndex;
- }
-
- /**
- * Validates conflict for int and uInt.
- *
- * @param typeList type list
- * @return true if conflict is there
- */
- private boolean validateForConflictingIntTypes(List<YangType<?>> typeList) {
- boolean isIntPresent = false;
- boolean isUIntPresent = false;
- for (YangType type : typeList) {
- if (type.getDataType().equals(INT32)) {
- setIntIndex(typeList.indexOf(type));
- isIntPresent = true;
- }
- if (type.getDataType().equals(UINT16)) {
- setUIntIndex(typeList.indexOf(type));
- isUIntPresent = true;
- }
- }
-
- return isIntPresent && isUIntPresent;
- }
-
- /**
- * Validates conflict for int and uInt.
- *
- * @param typeList type list
- * @return true if conflict is there
- */
- private boolean validateForConflictingShortTypes(List<YangType<?>> typeList) {
- boolean isShortPresent = false;
- boolean isUInt8Present = false;
- for (YangType type : typeList) {
- if (type.getDataType().equals(INT16)) {
- setShortIndex(typeList.indexOf(type));
- isShortPresent = true;
- }
- if (type.getDataType().equals(UINT8)) {
- setUInt8Index(typeList.indexOf(type));
- isUInt8Present = true;
- }
- }
-
- return isShortPresent && isUInt8Present;
- }
-
- /**
- * Validates conflict for long and uLong.
- *
- * @param typeList type list
- * @return true if conflict is there
- */
- private boolean validateForConflictingLongTypes(List<YangType<?>> typeList) {
- boolean isLongPresent = false;
- boolean isULongPresent = false;
- for (YangType type : typeList) {
- if (type.getDataType().equals(INT64)) {
- setLongIndex(typeList.indexOf(type));
- isLongPresent = true;
- }
- if (type.getDataType().equals(UINT32)) {
- setULongIndex(typeList.indexOf(type));
- isULongPresent = true;
- }
- }
-
- return isLongPresent && isULongPresent;
- }
-
- /**
- * Updates attribute info in case of conflicts.
- *
- * @param javaAttributeInfo java attribute info
- */
- private void updateAttributeCondition(JavaAttributeInfo javaAttributeInfo) {
-
- if (javaAttributeInfo.isIntConflict()) {
- if (javaAttributeInfo.getAttributeType().getDataType() == UINT16) {
- setUIntAttribute(javaAttributeInfo);
- } else if (javaAttributeInfo.getAttributeType().getDataType() == INT32) {
- setIntAttribute(javaAttributeInfo);
- }
-
- }
- if (javaAttributeInfo.isLongConflict()) {
- if (javaAttributeInfo.getAttributeType().getDataType() == UINT32) {
- setULongAttribute(javaAttributeInfo);
- } else if (javaAttributeInfo.getAttributeType().getDataType() == INT64) {
- setLongAttribute(javaAttributeInfo);
- }
-
- }
- if (javaAttributeInfo.isShortConflict()) {
- if (javaAttributeInfo.getAttributeType().getDataType() == UINT8) {
- setUInt8Attribute(javaAttributeInfo);
- } else if (javaAttributeInfo.getAttributeType().getDataType() == INT16) {
- setShortAttribute(javaAttributeInfo);
- }
-
- }
- }
-
- /**
- * Returns attribute for int.
- *
- * @return attribute for int
- */
- public JavaAttributeInfo getIntAttribute() {
- return intAttribute;
- }
-
- /**
- * Sets attribute for int.
- *
- * @param intAttribute attribute for int
- */
- private void setIntAttribute(JavaAttributeInfo intAttribute) {
- this.intAttribute = intAttribute;
- }
-
- /**
- * Returns attribute for long.
- *
- * @return attribute for long
- */
- public JavaAttributeInfo getLongAttribute() {
- return longAttribute;
- }
-
- /**
- * Sets attribute for long.
- *
- * @param longAttribute attribute for long
- */
- private void setLongAttribute(JavaAttributeInfo longAttribute) {
- this.longAttribute = longAttribute;
- }
-
- /**
- * Returns attribute for uInt.
- *
- * @return attribute for uInt
- */
- public JavaAttributeInfo getUIntAttribute() {
- return uIntAttribute;
- }
-
- /**
- * Sets attribute for uInt.
- *
- * @param uIntAttribute attribute for uInt
- */
- private void setUIntAttribute(JavaAttributeInfo uIntAttribute) {
- this.uIntAttribute = uIntAttribute;
- }
-
- /**
- * Returns attribute for uLong.
- *
- * @return attribute for uLong
- */
- public JavaAttributeInfo getULongAttribute() {
- return uLongAttribute;
- }
-
- /**
- * Sets attribute for uLong.
- *
- * @param uLongAttribute attribute for uLong
- */
- private void setULongAttribute(JavaAttributeInfo uLongAttribute) {
- this.uLongAttribute = uLongAttribute;
- }
-
- /**
- * Returns attribute for uInt8.
- *
- * @return attribute for uInt8
- */
- public JavaAttributeInfo getUInt8Attribute() {
- return uInt8Attribute;
- }
-
- /**
- * Sets attribute for uInt8.
- *
- * @param uInt8Attribute attribute for uInt8
- */
- private void setUInt8Attribute(JavaAttributeInfo uInt8Attribute) {
- this.uInt8Attribute = uInt8Attribute;
- }
-
- /**
- * Returns attribute for short.
- *
- * @return attribute for short
- */
- public JavaAttributeInfo getShortAttribute() {
- return shortAttribute;
- }
-
- /**
- * Sets attribute for short.
- *
- * @param shortAttribute attribute for short
- */
- private void setShortAttribute(JavaAttributeInfo shortAttribute) {
- this.shortAttribute = shortAttribute;
- }
-
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/YangDataModelFactory.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/YangDataModelFactory.java
deleted file mode 100644
index 9af1352..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/YangDataModelFactory.java
+++ /dev/null
@@ -1,429 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.translator.tojava;
-
-import org.onosproject.yangutils.datamodel.YangAugment;
-import org.onosproject.yangutils.datamodel.YangCase;
-import org.onosproject.yangutils.datamodel.YangChoice;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.YangGrouping;
-import org.onosproject.yangutils.datamodel.YangIdentity;
-import org.onosproject.yangutils.datamodel.YangInput;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangLeafList;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNotification;
-import org.onosproject.yangutils.datamodel.YangOutput;
-import org.onosproject.yangutils.datamodel.YangRpc;
-import org.onosproject.yangutils.datamodel.YangSubModule;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.YangTypeDef;
-import org.onosproject.yangutils.datamodel.YangUnion;
-import org.onosproject.yangutils.datamodel.YangUses;
-import org.onosproject.yangutils.datamodel.utils.GeneratedLanguage;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaChoiceTranslator;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaContainerTranslator;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaEnumerationTranslator;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaListTranslator;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModuleTranslator;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaNotificationTranslator;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaOutputTranslator;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaRpcTranslator;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaSubModuleTranslator;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaTypeTranslator;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaTypeDefTranslator;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaUnionTranslator;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaUsesTranslator;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaAugmentTranslator;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaCaseTranslator;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaGroupingTranslator;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaIdentityTranslator;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaInputTranslator;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaLeafTranslator;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaLeafListTranslator;
-
-/**
- * Represents factory to create data model objects based on the target file type.
- */
-public final class YangDataModelFactory {
-
- /**
- * Creates a YANG data model factory object.
- */
- private YangDataModelFactory() {
- }
-
- /**
- * Based on the target language generate the inherited data model node.
- *
- * @param targetLanguage target language in which YANG mapping needs to be
- * generated
- * @return the corresponding inherited node based on the target language
- */
- public static YangModule getYangModuleNode(GeneratedLanguage targetLanguage) {
- switch (targetLanguage) {
- case JAVA_GENERATION: {
- return new YangJavaModuleTranslator();
- }
- default: {
- throw new TranslatorException("Only YANG to Java is supported.");
- }
- }
- }
-
- /**
- * Returns based on the target language generate the inherited data model node.
- *
- * @param targetLanguage target language in which YANG mapping needs to be
- * generated
- * @return the corresponding inherited node based on the target language
- */
- public static YangAugment getYangAugmentNode(GeneratedLanguage targetLanguage) {
- switch (targetLanguage) {
- case JAVA_GENERATION: {
- return new YangJavaAugmentTranslator();
- }
- default: {
- throw new TranslatorException("Only YANG to Java is supported.");
- }
- }
- }
-
- /**
- * Returns based on the target language generate the inherited data model node.
- *
- * @param targetLanguage target language in which YANG mapping needs to be
- * generated
- * @return the corresponding inherited node based on the target language
- */
- public static YangCase getYangCaseNode(GeneratedLanguage targetLanguage) {
- switch (targetLanguage) {
- case JAVA_GENERATION: {
- return new YangJavaCaseTranslator();
- }
- default: {
- throw new TranslatorException("Only YANG to Java is supported.");
- }
- }
- }
-
- /**
- * Returns based on the target language generate the inherited data model node.
- *
- * @param targetLanguage target language in which YANG mapping needs to be
- * generated
- * @return the corresponding inherited node based on the target language
- */
- public static YangChoice getYangChoiceNode(GeneratedLanguage targetLanguage) {
- switch (targetLanguage) {
- case JAVA_GENERATION: {
- return new YangJavaChoiceTranslator();
- }
- default: {
- throw new TranslatorException("Only YANG to Java is supported.");
- }
- }
- }
-
- /**
- * Returns based on the target language generate the inherited data model node.
- *
- * @param targetLanguage target language in which YANG mapping needs to be
- * generated
- * @return the corresponding inherited node based on the target language
- */
- public static YangContainer getYangContainerNode(GeneratedLanguage targetLanguage) {
- switch (targetLanguage) {
- case JAVA_GENERATION: {
- return new YangJavaContainerTranslator();
- }
- default: {
- throw new TranslatorException("Only YANG to Java is supported.");
- }
- }
- }
-
- /**
- * Returns based on the target language generate the inherited data model node.
- *
- * @param targetLanguage target language in which YANG mapping needs to be
- * generated
- * @return the corresponding inherited node based on the target language
- */
- public static YangIdentity getYangIdentityNode(GeneratedLanguage targetLanguage) {
- switch (targetLanguage) {
- case JAVA_GENERATION: {
- return new YangJavaIdentityTranslator();
- }
- default: {
- throw new TranslatorException("Only YANG to Java is supported.");
- }
- }
- }
-
- /**
- * Returns based on the target language generate the inherited data model node.
- *
- * @param targetLanguage target language in which YANG mapping needs to be
- * generated
- * @return the corresponding inherited node based on the target language
- */
- public static YangGrouping getYangGroupingNode(GeneratedLanguage targetLanguage) {
- switch (targetLanguage) {
- case JAVA_GENERATION: {
- return new YangJavaGroupingTranslator();
- }
- default: {
- throw new TranslatorException("Only YANG to Java is supported.");
- }
- }
- }
-
- /**
- * Returns based on the target language generate the inherited data model node.
- *
- * @param targetLanguage target language in which YANG mapping needs to be
- * generated
- * @return the corresponding inherited node based on the target language
- */
- public static YangList getYangListNode(GeneratedLanguage targetLanguage) {
- switch (targetLanguage) {
- case JAVA_GENERATION: {
- return new YangJavaListTranslator();
- }
- default: {
- throw new TranslatorException("Only YANG to Java is supported.");
- }
- }
- }
-
- /**
- * Returns based on the target language generate the inherited data model node.
- *
- * @param targetLanguage target language in which YANG mapping needs to be
- * generated
- * @return the corresponding inherited node based on the target language
- */
- public static YangSubModule getYangSubModuleNode(GeneratedLanguage targetLanguage) {
- switch (targetLanguage) {
- case JAVA_GENERATION: {
- return new YangJavaSubModuleTranslator();
- }
- default: {
- throw new TranslatorException("Only YANG to Java is supported.");
- }
- }
- }
-
- /**
- * Returns based on the target language generate the inherited data model node.
- *
- * @param targetLanguage target language in which YANG mapping needs to be
- * generated
- * @return the corresponding inherited node based on the target language
- */
- public static YangTypeDef getYangTypeDefNode(GeneratedLanguage targetLanguage) {
- switch (targetLanguage) {
- case JAVA_GENERATION: {
- return new YangJavaTypeDefTranslator();
- }
- default: {
- throw new TranslatorException("Only YANG to Java is supported.");
- }
- }
- }
-
- /**
- * Returns based on the target language generate the inherited data model node.
- *
- * @param targetLanguage target language in which YANG mapping needs to be
- * generated
- * @return the corresponding inherited node based on the target language
- */
- public static YangUnion getYangUnionNode(GeneratedLanguage targetLanguage) {
- switch (targetLanguage) {
- case JAVA_GENERATION: {
- return new YangJavaUnionTranslator();
- }
- default: {
- throw new TranslatorException("Only YANG to Java is supported.");
- }
- }
- }
-
- /**
- * Returns based on the target language generate the inherited data model node.
- *
- * @param targetLanguage target language in which YANG mapping needs to be
- * generated
- * @return the corresponding inherited node based on the target language
- */
- public static YangUses getYangUsesNode(GeneratedLanguage targetLanguage) {
- switch (targetLanguage) {
- case JAVA_GENERATION: {
- return new YangJavaUsesTranslator();
- }
- default: {
- throw new TranslatorException("Only YANG to Java is supported.");
- }
- }
- }
-
- /**
- * Returns based on the target language generate the inherited data model node.
- *
- * @param targetLanguage target language in which YANG mapping needs to be
- * generated
- * @return the corresponding inherited node based on the target language
- */
- public static YangNotification getYangNotificationNode(GeneratedLanguage targetLanguage) {
- switch (targetLanguage) {
- case JAVA_GENERATION: {
- return new YangJavaNotificationTranslator();
- }
- default: {
- throw new TranslatorException("Only YANG to Java is supported.");
- }
- }
- }
-
- /**
- * Returns based on the target language generate the inherited data model node.
- *
- * @param targetLanguage target language in which YANG mapping needs to be
- * generated
- * @return the corresponding inherited node based on the target language
- */
- public static YangLeaf getYangLeaf(GeneratedLanguage targetLanguage) {
- switch (targetLanguage) {
- case JAVA_GENERATION: {
- return new YangJavaLeafTranslator();
- }
- default: {
- throw new RuntimeException("Only YANG to Java is supported.");
- }
- }
- }
-
- /**
- * Returns based on the target language generate the inherited data model node.
- *
- * @param targetLanguage target language in which YANG mapping needs to be
- * generated
- * @return the corresponding inherited node based on the target language
- */
- public static YangLeafList getYangLeafList(GeneratedLanguage targetLanguage) {
- switch (targetLanguage) {
- case JAVA_GENERATION: {
- return new YangJavaLeafListTranslator();
- }
- default: {
- throw new RuntimeException("Only YANG to Java is supported.");
- }
- }
- }
-
- /**
- * Returns based on the target language generate the inherited data model node.
- *
- * @param targetLanguage target language in which YANG mapping needs to be
- * generated
- * @return the corresponding inherited node based on the target language
- */
- public static YangRpc getYangRpcNode(GeneratedLanguage targetLanguage) {
- switch (targetLanguage) {
- case JAVA_GENERATION: {
- return new YangJavaRpcTranslator();
- }
- default: {
- throw new TranslatorException("Only YANG to Java is supported.");
- }
- }
- }
-
- /**
- * Returns based on the target language generate the inherited data model node.
- *
- * @param targetLanguage target language in which YANG mapping needs to be
- * generated
- * @return the corresponding inherited node based on the target language
- */
- public static YangInput getYangInputNode(GeneratedLanguage targetLanguage) {
- switch (targetLanguage) {
- case JAVA_GENERATION: {
- return new YangJavaInputTranslator();
- }
- default: {
- throw new TranslatorException("Only YANG to Java is supported.");
- }
- }
- }
-
- /**
- * Returns based on the target language generate the inherited data model node.
- *
- * @param targetLanguage target language in which YANG mapping needs to be
- * generated
- * @return the corresponding inherited node based on the target language
- */
- public static YangOutput getYangOutputNode(GeneratedLanguage targetLanguage) {
- switch (targetLanguage) {
- case JAVA_GENERATION: {
- return new YangJavaOutputTranslator();
- }
- default: {
- throw new TranslatorException("Only YANG to Java is supported.");
- }
- }
- }
-
- /**
- * Returns based on the target language generate the inherited data model node.
- *
- * @param targetLanguage target language in which YANG mapping needs to be
- * generated
- * @return the corresponding inherited node based on the target language
- */
- public static YangJavaEnumerationTranslator getYangEnumerationNode(GeneratedLanguage targetLanguage) {
- switch (targetLanguage) {
- case JAVA_GENERATION: {
- return new YangJavaEnumerationTranslator();
- }
- default: {
- throw new TranslatorException("Only YANG to Java is supported.");
- }
- }
- }
- /**
- * Returns based on the target language generate the inherited data model node.
- *
- * @param targetLanguage target language in which YANG mapping needs to be
- * generated
- * @return the corresponding inherited node based on the target language
- */
- public static YangType getYangType(GeneratedLanguage targetLanguage) {
- switch (targetLanguage) {
- case JAVA_GENERATION: {
- return new YangJavaTypeTranslator();
- }
- default: {
- throw new RuntimeException("Only YANG to Java is supported.");
- }
- }
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/YangJavaModelUtils.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/YangJavaModelUtils.java
deleted file mode 100644
index affda3e..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/YangJavaModelUtils.java
+++ /dev/null
@@ -1,817 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava;
-
-import org.onosproject.yangutils.datamodel.RpcNotificationContainer;
-import org.onosproject.yangutils.datamodel.YangAtomicPath;
-import org.onosproject.yangutils.datamodel.YangAugment;
-import org.onosproject.yangutils.datamodel.YangBit;
-import org.onosproject.yangutils.datamodel.YangBits;
-import org.onosproject.yangutils.datamodel.YangCase;
-import org.onosproject.yangutils.datamodel.YangChoice;
-import org.onosproject.yangutils.datamodel.YangEnum;
-import org.onosproject.yangutils.datamodel.YangEnumeration;
-import org.onosproject.yangutils.datamodel.YangGrouping;
-import org.onosproject.yangutils.datamodel.YangLeavesHolder;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeIdentifier;
-import org.onosproject.yangutils.datamodel.YangSchemaNode;
-import org.onosproject.yangutils.datamodel.YangTranslatorOperatorNode;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.YangTypeHolder;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaAugmentTranslator;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaEnumerationTranslator;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaInputTranslator;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModuleTranslator;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaOutputTranslator;
-import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaSubModuleTranslator;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-import org.slf4j.Logger;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.getParentNodeInGenCode;
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.isRpcChildNodePresent;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
-import static org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles.addCurNodeInfoInParentTempFile;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGenerator.generateInterfaceFile;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getRootPackage;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.INVALID_NODE;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.INVALID_PARENT_NODE;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.INVALID_TRANSLATION_NODE;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getBeanFiles;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getErrorMsg;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getErrorMsgForCodeGenerator;
-import static org.onosproject.yangutils.utils.UtilConstants.AUGMENTED;
-import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
-import static org.onosproject.yangutils.utils.UtilConstants.HYPHEN;
-import static org.onosproject.yangutils.utils.UtilConstants.INPUT_KEYWORD;
-import static org.onosproject.yangutils.utils.UtilConstants.OUTPUT_KEYWORD;
-import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.addPackageInfo;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getPackageDirPathFromJavaJPackage;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
-import static org.slf4j.LoggerFactory.getLogger;
-
-/**
- * Represents utility class for YANG java model.
- */
-public final class YangJavaModelUtils {
-
- private static final Logger LOG = getLogger(YangJavaModelUtils.class);
-
- // No instantiation.
- private YangJavaModelUtils() {
- }
-
- /**
- * Updates YANG java file package information.
- *
- * @param info YANG java file info node
- * @param config YANG plugin config
- */
- public static void updatePackageInfo(JavaCodeGeneratorInfo info,
- YangPluginConfig config) {
-
- JavaFileInfoTranslator translator = info.getJavaFileInfo();
-
- if (info instanceof YangJavaAugmentTranslator) {
- updatePackageForAugmentInfo(info, config);
- } else {
- setNodeJavaName(info, config);
- translator.setJavaAttributeName(info.getJavaFileInfo()
- .getJavaName());
- translator.setPackage(getCurNodePackage((YangNode) info));
- }
- updateCommonPackageInfo(translator, info, config);
- }
-
- /**
- * The java name for input, output is prefixed with rpc name and other
- * nodes are set by taking its own name from YANG.
- *
- * @param info YANG java file info node
- * @param config YANG plugin config
- */
- private static void setNodeJavaName(JavaCodeGeneratorInfo info,
- YangPluginConfig config) {
- String javaGenName;
- if (info instanceof YangJavaInputTranslator) {
- javaGenName = ((YangJavaInputTranslator) info).getParent().getName() +
- INPUT_KEYWORD;
- } else if (info instanceof YangJavaOutputTranslator) {
- javaGenName = ((YangJavaOutputTranslator) info).getParent().getName() +
- OUTPUT_KEYWORD;
- } else {
- javaGenName = ((YangNode) info).getName();
- }
- info.getJavaFileInfo().setJavaName(getCamelCase(
- javaGenName, config.getConflictResolver()));
- }
-
- /**
- * Updates YANG java file package information.
- *
- * @param info YANG java file info node
- * @param config YANG plugin config
- */
- private static void updatePackageForAugmentInfo(JavaCodeGeneratorInfo info,
- YangPluginConfig config) {
-
- JavaFileInfoTranslator translator = info.getJavaFileInfo();
-
- translator.setJavaName(getAugmentClassName(
- (YangJavaAugmentTranslator) info, config));
- translator.setPackage(getAugmentsNodePackage((YangNode) info));
- updateCommonPackageInfo(translator, info, config);
- }
-
- /**
- * Returns package for augment node.
- *
- * @param yangNode augment node
- * @return package for augment node
- */
- private static String getAugmentsNodePackage(YangNode yangNode) {
- YangAugment augment = (YangAugment) yangNode;
- StringBuilder augmentPkg = new StringBuilder();
- augmentPkg.append(getCurNodePackage(augment)).append(PERIOD)
- .append(getPkgFromAugment(augment));
- return augmentPkg.toString();
- }
-
- private static String getPkgFromAugment(YangAugment augment) {
- StringBuilder pkg = new StringBuilder();
- for (YangAtomicPath atomicPath : augment.getTargetNode()) {
- pkg.append(getCamelCase(atomicPath.getNodeIdentifier().getName(),
- null))
- .append(PERIOD);
- }
- return trimAtLast(pkg.toString(), PERIOD).toLowerCase();
- }
-
- /**
- * Updates YANG java file package information for specified package.
- *
- * @param info YANG java file info node
- * @param config YANG plugin config
- */
- private static void updatePackageInfo(JavaCodeGeneratorInfo info,
- YangPluginConfig config,
- String pkg) {
-
- JavaFileInfoTranslator translator = info.getJavaFileInfo();
- translator.setJavaName(getCamelCase(((YangNode) info).getName(),
- config.getConflictResolver()));
- translator.setPackage(pkg);
- updateCommonPackageInfo(translator, info, config);
- }
-
- /**
- * Updates common package information.
- *
- * @param translator JAVA file info translator
- * @param info YANG java file info node
- * @param config YANG plugin config
- */
- private static void updateCommonPackageInfo(JavaFileInfoTranslator translator,
- JavaCodeGeneratorInfo info,
- YangPluginConfig config) {
- translator.setPackageFilePath(getPackageDirPathFromJavaJPackage(
- info.getJavaFileInfo().getPackage()));
- translator.setBaseCodeGenPath(config.getCodeGenDir());
- translator.setPluginConfig(config);
- }
-
- /**
- * Updates temporary java code fragment files.
- *
- * @param info YANG java file info node
- * @throws IOException IO operations fails
- */
- private static void createTempFragmentFile(JavaCodeGeneratorInfo info)
- throws IOException {
- info.setTempJavaCodeFragmentFiles(
- new TempJavaCodeFragmentFiles(info.getJavaFileInfo()
- ));
- }
-
- /**
- * Updates leaf information in temporary java code fragment files.
- *
- * @param info YANG java file info node
- * @throws IOException IO operations fails
- */
- private static void updateTempFragmentFiles(JavaCodeGeneratorInfo info,
- YangPluginConfig config)
- throws IOException {
-
- TempJavaCodeFragmentFiles translator =
- info.getTempJavaCodeFragmentFiles();
- TempJavaBeanFragmentFiles bean = getBeanFiles(info);
- if (info instanceof RpcNotificationContainer) {
- bean.setRootNode(true);
- /*
- * event classes code generation.
- */
- updateNotificationNodeInfo(info, config);
- }
- if (info instanceof YangLeavesHolder) {
-
- YangLeavesHolder holder = (YangLeavesHolder) info;
- boolean isLeafPresent = holder.getListOfLeaf() != null && !holder
- .getListOfLeaf().isEmpty();
- boolean isLeafListPresent = holder.getListOfLeafList() != null &&
- !holder.getListOfLeafList().isEmpty();
- /*
- * Container
- * Case
- * Grouping
- * Input
- * List
- * Notification
- * Output
- */
- if (isLeafPresent || isLeafListPresent) {
- bean.addCurNodeLeavesInfoToTempFiles((YangNode) info,
- config);
- }
- //Add value leaf flag attribute to temp file.
- if (isLeafPresent) {
- bean.addValueLeafFlag(config, (YangNode) info);
- }
- if (((YangNode) info).isOpTypeReq()) {
- // Add operation type as an attribute.
- bean.addOperationTypeToTempFiles((YangNode) info,
- config);
- bean.addIsSubTreeFilteredFlag(config);
- if (isLeafPresent) {
- //Add select leaf flag attribute to temp file.
- bean.addSelectLeafFlag(config);
- }
- }
- } else if (info instanceof YangTypeHolder) {
- /*
- * Typedef
- * Union
- */
- translator.addTypeInfoToTempFiles((YangTypeHolder) info, config);
- } else if (info instanceof YangJavaEnumerationTranslator) {
- /*
- * Enumeration
- */
- translator.getEnumTempFiles()
- .addEnumAttributeToTempFiles((YangNode) info, config);
- } else if (!(info instanceof YangChoice)) {
- /*Do nothing, only the interface needs to be generated for choice*/
- throw new TranslatorException(
- getErrorMsgForCodeGenerator(INVALID_TRANSLATION_NODE,
- info));
- }
- }
-
- /**
- * Process generate code entry of YANG node.
- *
- * @param info YANG java file info node
- * @param config plugin configurations
- * @throws IOException IO operations fails
- */
- private static void generateTempFiles(JavaCodeGeneratorInfo info,
- YangPluginConfig config)
- throws IOException {
- if (!(info instanceof YangNode)) {
- throw new TranslatorException(
- getErrorMsgForCodeGenerator(INVALID_TRANSLATION_NODE,
- info));
- }
- createTempFragmentFile(info);
- updateTempFragmentFiles(info, config);
- }
-
- /**
- * Updates notification node info in service temporary file.
- *
- * @param info java code generator info
- * @param config plugin configurations
- * @throws IOException when fails to do IO operations
- */
- private static void updateNotificationNodeInfo(JavaCodeGeneratorInfo info,
- YangPluginConfig config)
- throws IOException {
- TempJavaCodeFragmentFiles tempFile = info.getTempJavaCodeFragmentFiles();
- for (YangNode notification :
- ((RpcNotificationContainer) info).getNotificationNodes()) {
- tempFile.getEventFragmentFiles()
- .addJavaSnippetOfEvent(notification, config);
- }
- }
-
- /**
- * Generates code for the current ata model node and adds itself as an
- * attribute in the parent.
- *
- * @param info YANG java file info node
- * @param config YANG plugin config
- * @param isMultiInstance flag to indicate whether it's a list
- * @throws IOException IO operations fails
- */
- public static void generateCodeAndUpdateInParent(JavaCodeGeneratorInfo info,
- YangPluginConfig config,
- boolean isMultiInstance)
- throws IOException {
- if (!(info instanceof YangNode)) {
- throw new TranslatorException(
- getErrorMsgForCodeGenerator(INVALID_TRANSLATION_NODE,
- info));
- }
-
- /*
- * For second level and below cloned nodes code shouldn't be
- * generated also they needn't be added in parent, since
- * generated code will be under grouping, cloned node is only
- * used for YANG namespace.
- */
- YangNode n = (YangNode) info;
- if (n.getReferredSchema() != null &&
- !(((YangNode) n.getReferredSchema()).getParent() instanceof
- YangGrouping)) {
- return;
- }
- /*
- * If first level cloned node, then it needs to be imported in the
- * generated code. In case uses under grouping, it would further have
- * second level uses, hence needn't add in parent grouping.
- */
- YangSchemaNode rn = getRefSchema(info);
- if (rn != null) {
- YangNode parent = ((YangNode) info).getParent();
- if (!(parent instanceof YangGrouping)) {
- addCurNodeInfoInParentTempFile((YangNode) rn, isMultiInstance,
- config, parent);
- }
- return;
- }
-
- /*
- * Generate the Java files corresponding to the current node.
- */
- generateCodeOfAugmentableNode(info, config);
-
- /*
- * Update the current nodes info in its parent nodes generated files.
- */
- addCurNodeInfoInParentTempFile((YangNode) info, isMultiInstance,
- config);
- }
-
- /**
- * Returns referred schema node in case of grouping uses.
- *
- * @param info YANG java file info node
- * @return referred schema node
- */
- private static YangSchemaNode getRefSchema(JavaCodeGeneratorInfo info) {
-
- YangSchemaNode node = (YangSchemaNode) info;
- if (node.getReferredSchema() == null) {
- return null;
- }
-
- /*
- * Obtain last referred node in case grouping is embedded inside
- * another grouping.
- */
- while (node.getReferredSchema() != null) {
- node = node.getReferredSchema();
- }
- return node;
- }
-
- /**
- * Generates code for the current data model node and adds support for it to
- * be augmented.
- *
- * @param info YANG java file info node
- * @param config YANG plugin config
- * @throws IOException IO operations fails
- */
- public static void generateCodeOfAugmentableNode(JavaCodeGeneratorInfo info,
- YangPluginConfig config)
- throws IOException {
- if (!(info instanceof YangNode)) {
- throw new TranslatorException(
- getErrorMsgForCodeGenerator(INVALID_TRANSLATION_NODE,
- info));
- }
-
- generateCodeOfNode(info, config);
- TempJavaBeanFragmentFiles tempFiles = getBeanFiles(info);
- if (!(info instanceof YangChoice)) {
- tempFiles.addYangAugmentedMap(config, (YangNode) info);
- }
- if (info instanceof YangCase) {
- YangNode parent = ((YangCase) info).getParent();
- JavaQualifiedTypeInfoTranslator typeInfo =
- getQualifierInfoForCasesParent(parent, config);
- tempFiles.getJavaExtendsListHolder()
- .addToExtendsList(typeInfo, (YangNode) info, tempFiles);
-
- tempFiles.addParentInfoInCurNodeTempFile((YangNode) info, config);
- }
- }
-
- /**
- * Returns cases parent's qualified info.
- *
- * @param parent parent node
- * @param config plugin configuration
- * @return cases parent's qualified info
- */
- private static JavaQualifiedTypeInfoTranslator getQualifierInfoForCasesParent(
- YangNode parent, YangPluginConfig config) {
- String parentName;
- String parentPkg;
- JavaFileInfoTranslator parentInfo;
- if (parent instanceof YangChoice) {
- parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
- } else {
- parent = ((YangAugment) parent).getAugmentedNode();
- parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
- }
- if (parentInfo.getPackage() != null) {
- parentName = getCapitalCase(parentInfo.getJavaName());
- parentPkg = parentInfo.getPackage();
- } else {
- parentName = getCapitalCase(getCamelCase(parent.getName(),
- config.getConflictResolver()));
- parentPkg = getNodesPackage(parent, config);
- }
- JavaQualifiedTypeInfoTranslator qualifiedTypeInfo =
- new JavaQualifiedTypeInfoTranslator();
- qualifiedTypeInfo.setClassInfo(parentName);
- qualifiedTypeInfo.setPkgInfo(parentPkg);
- return qualifiedTypeInfo;
- }
-
- /**
- * Generates code for the current data model node.
- *
- * @param info YANG java file info node
- * @param config YANG plugin config
- * @throws IOException IO operations fails
- */
- public static void generateCodeOfNode(JavaCodeGeneratorInfo info,
- YangPluginConfig config)
- throws IOException {
- if (!(info instanceof YangNode)) {
- throw new TranslatorException(
- getErrorMsgForCodeGenerator(INVALID_TRANSLATION_NODE,
- info));
- }
- updatePackageInfo(info, config);
- generateTempFiles(info, config);
- }
-
- /**
- * Generates code for the root module/sub-module node.
- *
- * @param info YANG java file info node
- * @param config YANG plugin config
- * @param rootPkg package of the root node
- * @throws IOException IO operations fails
- */
- public static void generateCodeOfRootNode(JavaCodeGeneratorInfo info,
- YangPluginConfig config,
- String rootPkg)
- throws IOException {
- if (!(info instanceof YangNode)) {
- throw new TranslatorException(
- getErrorMsgForCodeGenerator(INVALID_TRANSLATION_NODE,
- info));
- }
- updatePackageInfo(info, config, rootPkg);
-
- if (isRpcChildNodePresent((YangNode) info)) {
- info.getJavaFileInfo()
- .addGeneratedFileTypes(GENERATE_SERVICE_AND_MANAGER);
- }
- generateTempFiles(info, config);
- }
-
- /**
- * Returns the node package string.
- *
- * @param curNode current java node whose package string needs to be set
- * @return returns the root package string
- */
- public static String getCurNodePackage(YangNode curNode)
- throws TranslatorException {
-
- String pkg;
- if (!(curNode instanceof JavaFileInfoContainer) ||
- curNode.getParent() == null) {
- throw new TranslatorException(getErrorMsg(INVALID_NODE, curNode));
- }
-
- YangNode parentNode = getParentNodeInGenCode(curNode);
- if (!(parentNode instanceof JavaFileInfoContainer)) {
- throw new TranslatorException(getErrorMsg(INVALID_PARENT_NODE,
- curNode));
- }
- JavaFileInfoTranslator handle =
- ((JavaFileInfoContainer) parentNode).getJavaFileInfo();
- pkg = handle.getPackage() + PERIOD + handle.getJavaName();
- return pkg.toLowerCase();
- }
-
- /**
- * Returns true if root node contains any data node.
- *
- * @param node root YANG node
- * @return true if root node contains any data node
- */
- public static boolean isRootNodesCodeGenRequired(YangNode node) {
- return isNodeCodeGenRequired(node, true);
- }
-
- /**
- * Returns true if get/set method of root node are required.
- *
- * @param node root node
- * @return true if get/set method of root node are required
- */
- public static boolean isGetSetOfRootNodeRequired(YangNode node) {
- return isNodeCodeGenRequired(node, false);
- }
-
- /**
- * Returns true if either get/set method of root node are required or root
- * node contains any data node. This check is done depending on the
- * boolean parameter indicating whether check to be performed for root
- * node code generation or get/set method generation.
- *
- * @param node root node
- * @param rootNodeGen flag indicating check type
- * @return true if check pass, false otherwise
- */
- private static boolean isNodeCodeGenRequired(YangNode node,
- boolean rootNodeGen) {
- YangLeavesHolder holder = (YangLeavesHolder) node;
-
- if (!holder.getListOfLeaf().isEmpty()) {
- return true;
- }
- if (!holder.getListOfLeafList().isEmpty()) {
- return true;
- }
- node = node.getChild();
- if (node == null) {
- return false;
- }
-
- if (rootNodeGen) {
- while (node != null) {
- if (!(node instanceof YangTranslatorOperatorNode)) {
- return true;
- }
- node = node.getNextSibling();
- }
- return false;
- }
- while (node != null) {
- if (!(node instanceof YangAugment)) {
- return true;
- }
- node = node.getNextSibling();
- }
- return false;
- }
-
- /**
- * Returns nodes package.
- *
- * @param node YANG node
- * @param config plugin config
- * @return java package
- */
- public static String getNodesPackage(YangNode node,
- YangPluginConfig config) {
-
- List<String> clsInfo = new ArrayList<>();
- while (node.getParent() != null) {
- if (node instanceof YangJavaAugmentTranslator) {
- YangJavaAugmentTranslator augment =
- (YangJavaAugmentTranslator) node;
- clsInfo.add(getAugmentClassName(augment, config));
- clsInfo.add(getPkgFromAugment(augment));
- } else {
- clsInfo.add(getCamelCase(node.getName(), config
- .getConflictResolver()));
- }
- node = node.getParent();
- }
-
- StringBuilder pkg = new StringBuilder();
- if (node instanceof YangJavaModuleTranslator) {
- YangJavaModuleTranslator module = (YangJavaModuleTranslator) node;
- pkg.append(getRootPackage(module.getVersion(),
- module.getModuleNamespace(),
- module.getRevision(),
- config.getConflictResolver()));
- } else if (node instanceof YangJavaSubModuleTranslator) {
- YangJavaSubModuleTranslator subModule =
- (YangJavaSubModuleTranslator) node;
- pkg.append(getRootPackage(subModule.getVersion(),
- subModule.getNameSpaceFromModule(),
- subModule.getRevision(),
- config.getConflictResolver()));
- }
- clsInfo.add(getCamelCase(node.getName(), config.getConflictResolver()));
-
- int size = clsInfo.size();
- for (int i = size - 1; i > 0; i--) {
- pkg.append(PERIOD).append(clsInfo.get(i));
- }
- return pkg.toString().toLowerCase();
- }
-
- /**
- * Returns augment class name.
- *
- * @param augment YANG augment
- * @param config plugin configurations
- * @return augment class name
- */
- private static String getAugmentClassName(YangAugment augment,
- YangPluginConfig config) {
- YangNodeIdentifier identifier =
- augment.getTargetNode().get(augment.getTargetNode().size() - 1)
- .getNodeIdentifier();
- String prefix = identifier.getPrefix();
- String idName = identifier.getName();
- StringBuilder name = new StringBuilder(AUGMENTED).append(HYPHEN);
- if (identifier.getPrefix() != null) {
- name.append(prefix).append(HYPHEN);
- }
- name.append(idName);
- return getCapitalCase(getCamelCase(name.toString(),
- config.getConflictResolver()));
- }
-
- /**
- * Generated java code during exit.
- *
- * @param type generated file type
- * @param node current YANG node
- * @throws IOException when fails to generate java files
- */
- public static void generateJava(int type, YangNode node)
- throws IOException {
- /*
- * Call for file generation if node is not under uses.
- */
- if (node.getReferredSchema() == null) {
- ((TempJavaCodeFragmentFilesContainer) node)
- .getTempJavaCodeFragmentFiles().generateJavaFile(type, node);
- }
- }
-
- private static void createAndAddEnum(String name, int value,
- YangEnumeration enumeration) {
- YangEnum yangEnum = new YangEnum();
- yangEnum.setNamedValue(name);
- yangEnum.setValue(value);
- try {
- enumeration.addEnumInfo(yangEnum);
- } catch (DataModelException e) {
- LOG.error("failed to add enum in bits enum class " + e);
- }
- }
-
- /**
- * Returns bits type enum file.
- *
- * @param attr attribute
- * @param type data type
- * @param fileInfo file info
- * @param tempFile temp java fragment files
- * @throws IOException when fails to do IO operations
- */
- static void generateBitsFile(
- JavaAttributeInfo attr, YangType type,
- JavaFileInfoTranslator fileInfo, TempJavaFragmentFiles tempFile) throws IOException {
- String className = attr.getAttributeName();
- JavaFileInfoTranslator attrInfo = new JavaFileInfoTranslator();
- attrInfo.setJavaName(className);
- attrInfo.setPackage((fileInfo.getPackage() + "." + fileInfo.getJavaName()
- ).toLowerCase());
- attrInfo.setBaseCodeGenPath(fileInfo.getBaseCodeGenPath());
- attrInfo.setGeneratedFileTypes(GENERATE_ENUM_CLASS);
- attrInfo.setPackageFilePath(fileInfo.getPackageFilePath() + File
- .separator + fileInfo.getJavaName().toLowerCase());
- attrInfo.setPluginConfig(fileInfo.getPluginConfig());
- TempJavaCodeFragmentFiles codeFile = new TempJavaCodeFragmentFiles(
- attrInfo);
- YangJavaEnumerationTranslator enumeration = new YangJavaEnumerationTranslator() {
- @Override
- public String getJavaPackage() {
- return attr.getImportInfo().getPkgInfo();
- }
-
- @Override
- public String getJavaClassNameOrBuiltInType() {
- return className;
- }
-
- @Override
- public String getJavaAttributeName() {
- return className;
- }
- };
-
- enumeration.setName(getCapitalCase(className));
- enumeration.setJavaFileInfo(attrInfo);
- enumeration.setTempJavaCodeFragmentFiles(codeFile);
- YangBits yangBits = (YangBits) type.getDataTypeExtendedInfo();
- Integer key;
- YangBit bit;
- String bitName;
- for (Map.Entry<Integer, YangBit> entry : yangBits.getBitPositionMap()
- .entrySet()) {
- key = entry.getKey();
- bit = entry.getValue();
- if (bit != null) {
- bitName = bit.getBitName();
- createAndAddEnum(bitName, key, enumeration);
- }
- }
-
- codeFile.getEnumTempFiles()
- .addEnumAttributeToTempFiles(enumeration, fileInfo.getPluginConfig());
- codeFile.getEnumTempFiles().setEnumClass(false);
- codeFile.generateJavaFile(GENERATE_ENUM_CLASS, enumeration);
-
- //Add to import list.
- JavaQualifiedTypeInfoTranslator info = new
- JavaQualifiedTypeInfoTranslator();
- info.setClassInfo(getCapitalCase(attrInfo.getJavaName()));
- info.setPkgInfo(attrInfo.getPackage());
- if (tempFile instanceof TempJavaTypeFragmentFiles) {
- tempFile.getJavaImportData().addImportInfo(info, fileInfo
- .getJavaName(), fileInfo.getPackage());
- }
- }
-
- /**
- * Generates interface file for those yang file which contains only any
- * of these grouping, typedef and identity.
- *
- * @param rootNode root node
- * @throws IOException when fails to do IO operations
- */
- public static void generateInterfaceFileForNonDataNodes(YangNode rootNode) throws
- IOException {
- JavaCodeGeneratorInfo info = (JavaCodeGeneratorInfo) rootNode;
- TempJavaCodeFragmentFiles tempFile = info
- .getTempJavaCodeFragmentFiles();
- JavaFileInfoTranslator fileInfo = info.getJavaFileInfo();
- File filePath = new File(fileInfo.getBaseCodeGenPath() + fileInfo
- .getPackageFilePath());
- String name = getCapitalCase(fileInfo.getJavaName());
- //Add package info file for this.
- addPackageInfo(filePath, name, fileInfo.getPackage(), false);
- //Generate file handle for this.
- File interFace = tempFile.getBeanTempFiles().getJavaFileHandle(
- name);
- //generate java code for interface file.
- validateLineLength(generateInterfaceFile(interFace, null, rootNode,
- false));
- insertDataIntoJavaFile(interFace, CLOSE_CURLY_BRACKET);
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/AttributesJavaDataType.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/AttributesJavaDataType.java
deleted file mode 100644
index 39e75c1..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/AttributesJavaDataType.java
+++ /dev/null
@@ -1,572 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava.javamodel;
-
-import org.onosproject.yangutils.datamodel.YangDerivedInfo;
-import org.onosproject.yangutils.datamodel.YangEnumeration;
-import org.onosproject.yangutils.datamodel.YangIdentity;
-import org.onosproject.yangutils.datamodel.YangIdentityRef;
-import org.onosproject.yangutils.datamodel.YangLeafRef;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.YangUnion;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
-import org.onosproject.yangutils.utils.io.YangToJavaNamingConflictUtil;
-
-import java.util.Stack;
-
-import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.getCurNodePackage;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getRootPackage;
-import static org.onosproject.yangutils.utils.UtilConstants.BIG_DECIMAL;
-import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
-import static org.onosproject.yangutils.utils.UtilConstants.BIT_SET;
-import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE;
-import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_WRAPPER;
-import static org.onosproject.yangutils.utils.UtilConstants.BYTE;
-import static org.onosproject.yangutils.utils.UtilConstants.BYTE_WRAPPER;
-import static org.onosproject.yangutils.utils.UtilConstants.COLLECTION_IMPORTS;
-import static org.onosproject.yangutils.utils.UtilConstants.INT;
-import static org.onosproject.yangutils.utils.UtilConstants.INTEGER_WRAPPER;
-import static org.onosproject.yangutils.utils.UtilConstants.JAVA_LANG;
-import static org.onosproject.yangutils.utils.UtilConstants.JAVA_MATH;
-import static org.onosproject.yangutils.utils.UtilConstants.LONG;
-import static org.onosproject.yangutils.utils.UtilConstants.LONG_WRAPPER;
-import static org.onosproject.yangutils.utils.UtilConstants.OBJECT_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
-import static org.onosproject.yangutils.utils.UtilConstants.SHORT;
-import static org.onosproject.yangutils.utils.UtilConstants.SHORT_WRAPPER;
-import static org.onosproject.yangutils.utils.UtilConstants.SQUARE_BRACKETS;
-import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getPackageDirPathFromJavaJPackage;
-
-/**
- * Represents java data types info corresponding to YANG type.
- */
-public final class AttributesJavaDataType {
-
- /**
- * Creates an instance of attribute java data type.
- */
- private AttributesJavaDataType() {
- }
-
- /**
- * Returns java type.
- *
- * @param yangType YANG type
- * @return java type
- */
- public static String getJavaDataType(YangType<?> yangType) {
-
- YangDataTypes type = yangType.getDataType();
-
- switch (type) {
- case INT8:
- return BYTE;
- case INT16:
- return SHORT;
- case INT32:
- return INT;
- case INT64:
- return LONG;
- case UINT8:
- return SHORT;
- case UINT16:
- return INT;
- case UINT32:
- return LONG;
- case UINT64:
- return BIG_INTEGER;
- case BITS:
- return BIT_SET;
- case BINARY:
- return BYTE + SQUARE_BRACKETS;
- case DECIMAL64:
- return BIG_DECIMAL;
- case STRING:
- return STRING_DATA_TYPE;
- case BOOLEAN:
- return BOOLEAN_DATA_TYPE;
- case INSTANCE_IDENTIFIER:
- return STRING_DATA_TYPE;
- case LEAFREF:
- YangType refType = getReferredTypeFromLeafref(yangType);
- if (refType == null) {
- return OBJECT_STRING;
- }
- return getJavaDataType(getReferredTypeFromLeafref(yangType));
- default:
- throw new TranslatorException("given data type is not supported. " +
- yangType.getDataTypeName() + " in " +
- yangType.getLineNumber() + " at " +
- yangType.getCharPosition()
- + " in " + yangType.getFileName());
- }
- }
-
- /**
- * Returns java import class.
- *
- * @param yangType YANG type
- * @param isListAttr if the attribute need to be a list
- * @param pluginConfig plugin configurations
- * @return java import class
- */
- public static String getJavaImportClass(YangType<?> yangType, boolean isListAttr,
- YangToJavaNamingConflictUtil pluginConfig) {
-
- YangDataTypes type = yangType.getDataType();
-
- if (isListAttr) {
- switch (type) {
- case INT8:
- return BYTE_WRAPPER;
- case INT16:
- return SHORT_WRAPPER;
- case INT32:
- return INTEGER_WRAPPER;
- case INT64:
- return LONG_WRAPPER;
- case UINT8:
- return SHORT_WRAPPER;
- case UINT16:
- return INTEGER_WRAPPER;
- case UINT32:
- return LONG_WRAPPER;
- case UINT64:
- return BIG_INTEGER;
- case DECIMAL64:
- return BIG_DECIMAL;
- case STRING:
- return STRING_DATA_TYPE;
- case BOOLEAN:
- return BOOLEAN_WRAPPER;
- case ENUMERATION:
- return getCapitalCase(
- getCamelCase(((YangJavaEnumerationTranslator) yangType.getDataTypeExtendedInfo()).getName(),
- pluginConfig));
- case BITS:
- return BIT_SET;
- case BINARY:
- return BYTE + SQUARE_BRACKETS;
- case LEAFREF:
- return getLeafRefImpClass(yangType, pluginConfig, true);
- case IDENTITYREF:
- return getIdentityRefImpClass(yangType, pluginConfig);
- case EMPTY:
- return BOOLEAN_WRAPPER;
- case UNION:
- return getCapitalCase(getCamelCase(((YangJavaUnionTranslator) yangType
- .getDataTypeExtendedInfo()).getName(), pluginConfig));
- case INSTANCE_IDENTIFIER:
- return STRING_DATA_TYPE;
- case DERIVED:
- return getCapitalCase(
- getCamelCase(yangType.getDataTypeName(), pluginConfig));
- default:
- throw new TranslatorException("given data type is not supported ." +
- yangType.getDataTypeName() + " in " +
- yangType.getLineNumber() + " at " +
- yangType.getCharPosition()
- + " in " + yangType.getFileName());
- }
- } else {
- switch (type) {
- case UINT64:
- return BIG_INTEGER;
- case STRING:
- return STRING_DATA_TYPE;
- case ENUMERATION:
- return getCapitalCase(
- getCamelCase(((YangJavaEnumerationTranslator) yangType.getDataTypeExtendedInfo()).getName(),
- pluginConfig));
- case BITS:
- return BIT_SET;
- case DECIMAL64:
- return BIG_DECIMAL;
- case LEAFREF:
- return getLeafRefImpClass(yangType, pluginConfig, false);
- case IDENTITYREF:
- return getIdentityRefImpClass(yangType, pluginConfig);
- case EMPTY:
- return BOOLEAN_DATA_TYPE;
- case UNION:
- return getCapitalCase(getCamelCase(((YangJavaUnionTranslator) yangType
- .getDataTypeExtendedInfo()).getName(), pluginConfig));
- case INSTANCE_IDENTIFIER:
- return STRING_DATA_TYPE;
- case DERIVED:
- return getCapitalCase(
- getCamelCase(yangType.getDataTypeName(), pluginConfig));
- default:
- return null;
- }
- }
- }
-
- /**
- * Returns java import package.
- *
- * @param yangType YANG type
- * @param isListAttr if the attribute is of list type
- * @param conflictResolver object of YANG to java naming conflict util
- * @return java import package
- */
- public static String getJavaImportPackage(YangType<?> yangType, boolean isListAttr,
- YangToJavaNamingConflictUtil conflictResolver) {
-
- YangDataTypes type = yangType.getDataType();
-
- if (isListAttr) {
- switch (type) {
- case INT8:
- case INT16:
- case INT32:
- case INT64:
- case UINT8:
- case UINT16:
- case UINT32:
- case BINARY:
- case STRING:
- case BOOLEAN:
- case EMPTY:
- return JAVA_LANG;
- case UINT64:
- case DECIMAL64:
- return JAVA_MATH;
- case ENUMERATION:
- return getEnumsPackage(yangType, conflictResolver);
- case BITS:
- return COLLECTION_IMPORTS;
- case LEAFREF:
- return getLeafRefImpPkg(yangType, conflictResolver, true);
- case IDENTITYREF:
- return getIdentityRefPackage(yangType, conflictResolver);
- case UNION:
- return getUnionPackage(yangType, conflictResolver);
- case INSTANCE_IDENTIFIER:
- return JAVA_LANG;
- case DERIVED:
- return getTypeDefsPackage(yangType, conflictResolver);
- default:
- throw new TranslatorException("given data type is not supported. " +
- yangType.getDataTypeName() + " in " +
- yangType.getLineNumber() + " at " +
- yangType.getCharPosition()
- + " in " + yangType.getFileName());
- }
- } else {
- switch (type) {
- case UINT64:
- case DECIMAL64:
- return JAVA_MATH;
- case EMPTY:
- case STRING:
- return JAVA_LANG;
- case ENUMERATION:
- return getEnumsPackage(yangType, conflictResolver);
- case BITS:
- return COLLECTION_IMPORTS;
- case LEAFREF:
- return getLeafRefImpPkg(yangType, conflictResolver, false);
- case IDENTITYREF:
- return getIdentityRefPackage(yangType, conflictResolver);
- case UNION:
- return getUnionPackage(yangType, conflictResolver);
- case INSTANCE_IDENTIFIER:
- return JAVA_LANG;
- case DERIVED:
- return getTypeDefsPackage(yangType, conflictResolver);
- default:
- return null;
- }
- }
- }
-
- /**
- * Returns java package for typedef node.
- *
- * @param type YANG type
- * @param conflictResolver object of YANG to java naming conflict util
- * @return java package for typedef node
- */
- private static String getTypeDefsPackage(YangType<?> type, YangToJavaNamingConflictUtil conflictResolver) {
- Object var = type.getDataTypeExtendedInfo();
- if (!(var instanceof YangDerivedInfo)) {
- throw new TranslatorException("type should have been derived. " +
- type.getDataTypeName() + " in " +
- type.getLineNumber() + " at " +
- type.getCharPosition()
- + " in " + type.getFileName());
- }
-
- if ((((YangDerivedInfo<?>) var).getReferredTypeDef() == null)) {
- throw new TranslatorException("derived info is not an instance of typedef. " +
- type.getDataTypeName() + " in " +
- type.getLineNumber() + " at " +
- type.getCharPosition()
- + " in " + type.getFileName());
- }
-
- YangJavaTypeDefTranslator typedef = (YangJavaTypeDefTranslator) ((YangDerivedInfo<?>) var).getReferredTypeDef();
- return getTypePackage(typedef, conflictResolver);
- }
-
- /**
- * Returns java package for union node.
- *
- * @param type YANG type
- * @param conflictResolver object of YANG to java naming conflict util
- * @return java package for union node
- */
- private static String getUnionPackage(YangType<?> type, YangToJavaNamingConflictUtil conflictResolver) {
-
- if (!(type.getDataTypeExtendedInfo() instanceof YangUnion)) {
- throw new TranslatorException("type should have been union. " +
- type.getDataTypeName() + " in " +
- type.getLineNumber() + " at " +
- type.getCharPosition()
- + " in " + type.getFileName());
- }
-
- YangJavaUnionTranslator union = (YangJavaUnionTranslator) type.getDataTypeExtendedInfo();
- return getTypePackage(union, conflictResolver);
- }
-
- /**
- * Returns YANG enumeration's java package.
- *
- * @param type YANG type
- * @param conflictResolver object of YANG to java naming conflict util
- * @return YANG enumeration's java package
- */
- private static String getEnumsPackage(YangType<?> type, YangToJavaNamingConflictUtil conflictResolver) {
-
- if (!(type.getDataTypeExtendedInfo() instanceof YangEnumeration)) {
- throw new TranslatorException("type should have been enumeration. " +
- type.getDataTypeName() + " in " +
- type.getLineNumber() + " at " +
- type.getCharPosition()
- + " in " + type.getFileName());
- }
- YangJavaEnumerationTranslator enumeration = (YangJavaEnumerationTranslator) type.getDataTypeExtendedInfo();
- return getTypePackage(enumeration, conflictResolver);
- }
-
- /**
- * Returns YANG identity's java package.
- *
- * @param type YANG type
- * @param conflictResolver object of YANG to java naming conflict util
- * @return YANG identity's java package
- */
- private static String getIdentityRefPackage(YangType<?> type, YangToJavaNamingConflictUtil conflictResolver) {
-
- if (!(type.getDataTypeExtendedInfo() instanceof YangIdentityRef)) {
- throw new TranslatorException("type should have been identityref. " +
- type.getDataTypeName() + " in " +
- type.getLineNumber() + " at " +
- type.getCharPosition()
- + " in " + type.getFileName());
- }
- YangIdentityRef identityRef = (YangIdentityRef) type.getDataTypeExtendedInfo();
- if (identityRef.isInGrouping()) {
- return JAVA_LANG;
- }
- YangJavaIdentityTranslator identity = (YangJavaIdentityTranslator) (identityRef.getReferredIdentity());
- return getTypePackage(identity, conflictResolver);
- }
-
- /**
- * Returns type package.
- *
- * @param info YANG code generator info
- * @param conflictResolver object of YANG to java naming conflict util
- * @return type java package
- */
- private static String getTypePackage(JavaCodeGeneratorInfo info,
- YangToJavaNamingConflictUtil conflictResolver) {
- YangNode node = (YangNode) info;
- // Check for referred schema type node for grouping scenario.
- while (node.getReferredSchema() != null) {
- node = (YangNode) node.getReferredSchema();
- }
- info = (JavaCodeGeneratorInfo) node;
- if (info.getJavaFileInfo().getPackage() == null) {
- return getPackageFromParent(node.getParent(), conflictResolver);
- }
- return info.getJavaFileInfo().getPackage();
- }
-
- /**
- * Returns package from parent node.
- *
- * @param parent parent YANG node
- * @param conflictResolver object of YANG to java naming conflict util
- * @return java package from parent node
- */
- private static String getPackageFromParent(YangNode parent,
- YangToJavaNamingConflictUtil conflictResolver) {
- if (!(parent instanceof JavaFileInfoContainer)) {
- throw new TranslatorException("invalid child node is being processed. " +
- parent.getName() + " in " +
- parent.getLineNumber() + " at " +
- parent.getCharPosition()
- + " in " + parent.getFileName());
- }
- JavaFileInfoTranslator parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
- if (parentInfo.getPackage() == null) {
- updateJavaFileInfo(parent, conflictResolver);
- }
- return parentInfo.getPackage() + PERIOD + parentInfo.getJavaName().toLowerCase();
- }
-
- /**
- * Update the referred data model nodes java file info, this will be called,
- * when the linked node is yet to translate. Then resolve until the parent hierarchy.
- *
- * @param yangNode node whose java info needs to be updated
- * @param conflictResolver yang plugin config
- */
- public static void updateJavaFileInfo(YangNode yangNode,
- YangToJavaNamingConflictUtil conflictResolver) {
- Stack<YangNode> nodesToUpdatePackage = new Stack<>();
-
- /*
- * Add the nodes to be updated for package info in a stack.
- */
- while (yangNode != null
- && ((JavaFileInfoContainer) yangNode)
- .getJavaFileInfo().getPackage() == null) {
- nodesToUpdatePackage.push(yangNode);
- yangNode = yangNode.getParent();
- }
-
- /*
- * If the package is not updated till root node, then root package needs to
- * be updated.
- */
- if (yangNode == null) {
- yangNode = nodesToUpdatePackage.pop();
- String pkg;
- if (yangNode instanceof YangJavaModuleTranslator) {
- YangJavaModuleTranslator module = (YangJavaModuleTranslator) yangNode;
- pkg = getRootPackage(module.getVersion(), module.getModuleNamespace(),
- module.getRevision(), conflictResolver);
- } else if (yangNode instanceof YangJavaSubModuleTranslator) {
- YangJavaSubModuleTranslator submodule = (YangJavaSubModuleTranslator) yangNode;
- pkg = getRootPackage(submodule.getVersion(),
- submodule.getNameSpaceFromModule(),
- submodule.getRevision(), conflictResolver);
- } else {
- throw new TranslatorException("Invalid root node of data model tree " +
- yangNode.getName() + " in " +
- yangNode.getLineNumber() + " at " +
- yangNode.getCharPosition()
- + " in " + yangNode.getFileName());
- }
-
- ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
- .setJavaName(getCamelCase(yangNode.getName(), conflictResolver));
- ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
- .setPackage(pkg);
- ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
- .setPackageFilePath(getPackageDirPathFromJavaJPackage(
- ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
- .getPackage()));
- }
-
- /*
- * Parent of the node in stack is updated with java info,
- * all the nodes can be popped and updated
- */
- while (nodesToUpdatePackage.size() != 0) {
- yangNode = nodesToUpdatePackage.pop();
- ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
- .setJavaName(getCamelCase(yangNode.getName(), conflictResolver));
- ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
- .setPackage(getCurNodePackage(yangNode));
- ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
- .setPackageFilePath(getPackageDirPathFromJavaJPackage(
- ((JavaCodeGeneratorInfo) yangNode).getJavaFileInfo()
- .getPackage()));
- }
- }
-
- /**
- * Returns the referred type from leaf/leaf-list.
- *
- * @param type current type in leaf
- * @return type from the leafref
- */
- private static YangType<?> getReferredTypeFromLeafref(YangType type) {
- YangLeafRef<?> lri = (YangLeafRef<?>) type.getDataTypeExtendedInfo();
- return lri.isInGrouping() ? null : lri.getEffectiveDataType();
- }
-
- /**
- * Returns leaf ref import string.
- *
- * @param type YANG type
- * @param cnfg YANG to java naming conflict util
- * @param isList true if list, false otherwise
- * @return import class
- */
- public static String getLeafRefImpClass(
- YangType type, YangToJavaNamingConflictUtil cnfg, boolean isList) {
- YangType<?> rt = getReferredTypeFromLeafref(type);
- return rt == null ? OBJECT_STRING : getJavaImportClass(rt, isList,
- cnfg);
- }
-
- /**
- * Returns identity ref import class.
- *
- * @param type YANG type
- * @param cnfg YANG to java naming conflict util
- * @return import class
- */
- public static String getIdentityRefImpClass(
- YangType type, YangToJavaNamingConflictUtil cnfg) {
- YangIdentityRef ir = (YangIdentityRef) type.getDataTypeExtendedInfo();
- if (ir.isInGrouping()) {
- return OBJECT_STRING;
- }
- YangIdentity identity = ir.getReferredIdentity();
- return getCapitalCase(getCamelCase(identity.getName(), cnfg));
- }
-
- /**
- * Returns leaf ref import package.
- *
- * @param type YANG type
- * @param cnfg YANG to java naming conflict util
- * @param isList true if list, false otherwise
- * @return import package
- */
- private static String getLeafRefImpPkg(
- YangType type, YangToJavaNamingConflictUtil cnfg, boolean isList) {
- YangType<?> rt = getReferredTypeFromLeafref(type);
- return rt == null ? JAVA_LANG : getJavaImportPackage(rt, isList, cnfg);
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/JavaLeafInfoContainer.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/JavaLeafInfoContainer.java
deleted file mode 100644
index c1c6e60..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/JavaLeafInfoContainer.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.translator.tojava.javamodel;
-
-import org.onosproject.yangutils.datamodel.LocationInfo;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.javadatamodel.JavaQualifiedTypeInfoContainer;
-import org.onosproject.yangutils.utils.io.YangToJavaNamingConflictUtil;
-
-/**
- * Represent java based identification of the YANG leaves.
- */
-public interface JavaLeafInfoContainer
- extends JavaQualifiedTypeInfoContainer, LocationInfo {
- /**
- * Retrieves the data type of the leaf.
- *
- * @return data type of the leaf
- */
- YangType<?> getDataType();
-
- /**
- * Retrieves the name of the leaf.
- *
- * @return name of the leaf
- */
- String getName();
-
- /**
- * Retrieves the java name of the leaf.
- *
- * @param conflictResolveConfig user config to resolve conflicts
- * @return name of the leaf
- */
- String getJavaName(YangToJavaNamingConflictUtil conflictResolveConfig);
-
- /**
- * Identifies if object is a leaf-list.
- *
- * @return true if leaf-list false otherwise
- */
- boolean isLeafList();
-
- /**
- * updates the qualified info.
- */
- void updateJavaQualifiedInfo();
-
- /**
- * Returns java naming conflict resolver.
- *
- * @return java naming conflict resolver
- */
- YangToJavaNamingConflictUtil getConflictResolveConfig();
-
- /**
- * Sets java naming conflict resolver.
- *
- * @param conflictResolveConfig java naming conflict resolver
- */
- void setConflictResolveConfig(YangToJavaNamingConflictUtil conflictResolveConfig);
-
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/JavaQualifiedTypeResolver.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/JavaQualifiedTypeResolver.java
deleted file mode 100644
index 909c6f4..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/JavaQualifiedTypeResolver.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.translator.tojava.javamodel;
-
-import org.onosproject.yangutils.utils.io.YangToJavaNamingConflictUtil;
-
-/**
- * Represent java based identification of the YANG leaves.
- */
-interface JavaQualifiedTypeResolver {
-
- /**
- * updates the qualified access details of the type.
- *
- * @param conflictResolver plugin configurations
- */
- void updateJavaQualifiedInfo(YangToJavaNamingConflictUtil conflictResolver);
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaAugmentTranslator.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaAugmentTranslator.java
deleted file mode 100644
index ca964f1..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaAugmentTranslator.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.translator.tojava.javamodel;
-
-import org.onosproject.yangutils.datamodel.YangChoice;
-import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaAugment;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
-import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-
-import java.io.IOException;
-
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
-import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeOfNode;
-
-/**
- * Represents augment information extended to support java code generation.
- */
-public class YangJavaAugmentTranslator
- extends YangJavaAugment
- implements JavaCodeGeneratorInfo, JavaCodeGenerator {
-
- private static final long serialVersionUID = 806201632L;
-
- /**
- * File handle to maintain temporary java code fragments as per the code snippet types.
- */
- private transient TempJavaCodeFragmentFiles tempFileHandle;
-
- /**
- * Creates a YANG java augment object.
- */
- public YangJavaAugmentTranslator() {
- super();
- setJavaFileInfo(new JavaFileInfoTranslator());
- getJavaFileInfo().setGeneratedFileTypes(GENERATE_INTERFACE_WITH_BUILDER);
- }
-
- /**
- * Returns the generated java file information.
- *
- * @return generated java file information
- */
- @Override
- public JavaFileInfoTranslator getJavaFileInfo() {
-
- if (javaFileInfo == null) {
- throw new TranslatorException("Missing java info in java datamodel node " +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition()
- + " in " + getFileName());
- }
- return (JavaFileInfoTranslator) javaFileInfo;
- }
-
- /**
- * Sets the java file info object.
- *
- * @param javaInfo java file info object
- */
- @Override
- public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
- javaFileInfo = javaInfo;
- }
-
- /**
- * Returns the temporary file handle.
- *
- * @return temporary file handle
- */
- @Override
- public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
- return tempFileHandle;
- }
-
- /**
- * Sets temporary file handle.
- *
- * @param fileHandle temporary file handle
- */
- @Override
- public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
- tempFileHandle = fileHandle;
- }
-
- /**
- * Prepare the information for java code generation corresponding to YANG augment info.
- *
- * @param yangPlugin YANG plugin config
- * @throws TranslatorException translator operation fail
- */
- @Override
- public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
- try {
- generateCodeOfNode(this, yangPlugin);
- } catch (IOException e) {
- throw new TranslatorException("Failed to generate code for augmentable node " +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition()
- + " in " + getFileName() + " " + e.getLocalizedMessage());
- }
- }
-
- /**
- * Create a java file using the YANG augment info.
- *
- * @throws TranslatorException when failed to do translator operations
- */
- @Override
- public void generateCodeExit() throws TranslatorException {
- try {
- if (validateAugmentNode()) {
- getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_INTERFACE_WITH_BUILDER, this);
- }
- } catch (IOException e) {
- throw new TranslatorException("Failed to generate code for augmentable node " +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition()
- + " in " + getFileName() + " " + e.getLocalizedMessage());
- }
- }
-
- /**
- * Returns true if augment does not have choice as target node.
- *
- * @return true if augment does not have choice as target node
- */
- private boolean validateAugmentNode() {
- return !(getAugmentedNode() instanceof YangChoice);
- }
-
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaCaseTranslator.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaCaseTranslator.java
deleted file mode 100644
index eccbf1c..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaCaseTranslator.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.translator.tojava.javamodel;
-
-import java.io.IOException;
-
-import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaCase;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
-import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
-import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeOfAugmentableNode;
-import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateJava;
-
-/**
- * Represents case information extended to support java code generation.
- */
-public class YangJavaCaseTranslator
- extends YangJavaCase
- implements JavaCodeGeneratorInfo, JavaCodeGenerator {
-
- private static final long serialVersionUID = 806201631L;
-
- /**
- * File handle to maintain temporary java code fragments as per the code
- * snippet types.
- */
- private transient TempJavaCodeFragmentFiles tempFileHandle;
-
- /**
- * Creates YANG java case object.
- */
- public YangJavaCaseTranslator() {
- super();
- setJavaFileInfo(new JavaFileInfoTranslator());
- getJavaFileInfo().setGeneratedFileTypes(GENERATE_INTERFACE_WITH_BUILDER);
- }
-
- /**
- * Returns the generated java file information.
- *
- * @return generated java file information
- */
- @Override
- public JavaFileInfoTranslator getJavaFileInfo() {
- if (javaFileInfo == null) {
- throw new TranslatorException("Missing java info in java datamodel node" +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition()
- + " in " + getFileName());
- }
- return (JavaFileInfoTranslator) javaFileInfo;
- }
-
- /**
- * Sets the java file info object.
- *
- * @param javaInfo java file info object
- */
- @Override
- public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
- javaFileInfo = javaInfo;
- }
-
- /**
- * Returns the temporary file handle.
- *
- * @return temporary file handle
- */
- @Override
- public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
- return tempFileHandle;
- }
-
- /**
- * Sets temporary file handle.
- *
- * @param fileHandle temporary file handle
- */
- @Override
- public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
- tempFileHandle = fileHandle;
- }
-
- /**
- * Prepare the information for java code generation corresponding to YANG
- * case info.
- *
- * @param yangPlugin YANG plugin config
- * @throws TranslatorException translator operation fail
- */
- @Override
- public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
- try {
- if (getReferredSchema() != null) {
- return;
- }
- generateCodeOfAugmentableNode(this, yangPlugin);
- } catch (IOException e) {
- throw new TranslatorException(
- "Failed to prepare generate code entry for case node " +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition()
- + " in " + getFileName() + " " + e.getLocalizedMessage());
- }
- }
-
- /**
- * Creates a java file using the YANG case info.
- */
- @Override
- public void generateCodeExit() throws TranslatorException {
- try {
- generateJava(GENERATE_INTERFACE_WITH_BUILDER, this);
- } catch (IOException e) {
- throw new TranslatorException("Failed to generate code for case node " +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition()
- + " in " + getFileName() + " " + e.getLocalizedMessage());
- }
- }
-
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaChoiceTranslator.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaChoiceTranslator.java
deleted file mode 100644
index 0caf8cc..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaChoiceTranslator.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.translator.tojava.javamodel;
-
-import java.io.IOException;
-
-import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaChoice;
-import org.onosproject.yangutils.translator.exception.InvalidNodeForTranslatorException;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
-import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
-import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeAndUpdateInParent;
-import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateJava;
-
-/**
- * Represents choice information extended to support java code generation.
- */
-public class YangJavaChoiceTranslator
- extends YangJavaChoice
- implements JavaCodeGeneratorInfo, JavaCodeGenerator {
-
- private static final long serialVersionUID = 806201631L;
-
- /**
- * File handle to maintain temporary java code fragments as per the code
- * snippet types.
- */
- private transient TempJavaCodeFragmentFiles tempFileHandle;
-
- /**
- * Creates YANG java choice object.
- */
- public YangJavaChoiceTranslator() {
- super();
- setJavaFileInfo(new JavaFileInfoTranslator());
- getJavaFileInfo().setGeneratedFileTypes(INTERFACE_MASK);
- }
-
- /**
- * Returns the generated java file information.
- *
- * @return generated java file information
- */
- @Override
- public JavaFileInfoTranslator getJavaFileInfo() {
- if (javaFileInfo == null) {
- throw new TranslatorException("Missing java info in java datamodel node" +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition()
- + " in " + getFileName());
- }
- return (JavaFileInfoTranslator) javaFileInfo;
- }
-
- /**
- * Sets the java file info object.
- *
- * @param javaInfo java file info object
- */
- @Override
- public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
- javaFileInfo = javaInfo;
- }
-
- /**
- * Returns the temporary file handle.
- *
- * @return temporary file handle
- */
- @Override
- public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
- return tempFileHandle;
- }
-
- /**
- * Sets temporary file handle.
- *
- * @param fileHandle temporary file handle
- */
- @Override
- public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
- tempFileHandle = fileHandle;
- }
-
- /**
- * Prepare the information for java code generation corresponding to YANG
- * choice info.
- *
- * @param yangPlugin YANG plugin config
- * @throws TranslatorException translator operation fail
- */
- @Override
- public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
- try {
- generateCodeAndUpdateInParent(this, yangPlugin, false);
- } catch (IOException e) {
- throw new TranslatorException(
- "Failed to prepare generate code entry for choice node " +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition()
- + " in " + getFileName() + " " + e.getLocalizedMessage());
- }
- }
-
- /**
- * Creates a java file using the YANG choice info.
- */
- @Override
- public void generateCodeExit() throws TranslatorException {
- try {
- generateJava(INTERFACE_MASK, this);
- } catch (IOException e) {
- throw new TranslatorException("Failed to generate code for choice node " +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition()
- + " in " + getFileName() + " " + e.getLocalizedMessage());
- }
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaContainerTranslator.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaContainerTranslator.java
deleted file mode 100644
index 6f9fd51..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaContainerTranslator.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.translator.tojava.javamodel;
-
-import java.io.IOException;
-
-import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaContainer;
-import org.onosproject.yangutils.translator.exception.InvalidNodeForTranslatorException;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
-import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
-import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeAndUpdateInParent;
-import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateJava;
-
-/**
- * Represents container information extended to support java code generation.
- */
-public class YangJavaContainerTranslator
- extends YangJavaContainer
- implements JavaCodeGeneratorInfo, JavaCodeGenerator {
-
- private static final long serialVersionUID = 806201630L;
-
- /**
- * File handle to maintain temporary java code fragments as per the code
- * snippet types.
- */
- private transient TempJavaCodeFragmentFiles tempFileHandle;
-
- /**
- * Creates YANG java container object.
- */
- public YangJavaContainerTranslator() {
- super();
- setJavaFileInfo(new JavaFileInfoTranslator());
- getJavaFileInfo().setGeneratedFileTypes(GENERATE_INTERFACE_WITH_BUILDER);
- }
-
- /**
- * Returns the generated java file information.
- *
- * @return generated java file information
- */
- @Override
- public JavaFileInfoTranslator getJavaFileInfo() {
- if (javaFileInfo == null) {
- throw new TranslatorException("Missing java info in java datamodel node " +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition()
- + " in " + getFileName());
- }
- return (JavaFileInfoTranslator) javaFileInfo;
- }
-
- /**
- * Sets the java file info object.
- *
- * @param javaInfo java file info object
- */
- @Override
- public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
- javaFileInfo = javaInfo;
- }
-
- /**
- * Returns the temporary file handle.
- *
- * @return temporary file handle
- */
- @Override
- public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
- return tempFileHandle;
- }
-
- /**
- * Sets temporary file handle.
- *
- * @param fileHandle temporary file handle
- */
- @Override
- public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
- tempFileHandle = fileHandle;
- }
-
- /**
- * Prepare the information for java code generation corresponding to YANG
- * container info.
- *
- * @param yangPlugin YANG plugin config
- * @throws TranslatorException translator operation fail
- */
- @Override
- public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
- try {
- generateCodeAndUpdateInParent(this, yangPlugin, false);
- } catch (IOException e) {
- throw new TranslatorException(
- "Failed to prepare generate code entry for container node " +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition()
- + " in " + getFileName() + " " + e.getLocalizedMessage());
- }
- }
-
- /**
- * Create a java file using the YANG container info.
- *
- * @throws TranslatorException translator operation fail
- */
- @Override
- public void generateCodeExit() throws TranslatorException {
- try {
- generateJava(GENERATE_INTERFACE_WITH_BUILDER, this);
- } catch (IOException e) {
- throw new TranslatorException("Failed to generate code for container node " +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition()
- + " in " + getFileName() + " " + e.getLocalizedMessage());
- }
- }
-
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaEnumerationTranslator.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaEnumerationTranslator.java
deleted file mode 100644
index ac00154..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaEnumerationTranslator.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava.javamodel;
-
-import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaEnumeration;
-import org.onosproject.yangutils.translator.exception.InvalidNodeForTranslatorException;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
-import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-
-import java.io.IOException;
-
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
-import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeOfNode;
-import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateJava;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.FAIL_AT_ENTRY;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.FAIL_AT_EXIT;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getErrorMsg;
-
-/**
- * Represents YANG java enumeration information extended to support java code generation.
- */
-public class YangJavaEnumerationTranslator
- extends YangJavaEnumeration
- implements JavaCodeGenerator, JavaCodeGeneratorInfo {
-
- private static final long serialVersionUID = 806201629L;
-
- /**
- * File handle to maintain temporary java code fragments as per the code
- * snippet types.
- */
- private transient TempJavaCodeFragmentFiles tempFileHandle;
-
- /**
- * Creates YANG java enumeration object.
- */
- public YangJavaEnumerationTranslator() {
- setJavaFileInfo(new JavaFileInfoTranslator());
- getJavaFileInfo().setGeneratedFileTypes(GENERATE_ENUM_CLASS);
- }
-
- /**
- * Returns the generated java file information.
- *
- * @return generated java file information
- */
- @Override
- public JavaFileInfoTranslator getJavaFileInfo() {
-
- if (javaFileInfo == null) {
- throw new TranslatorException("Missing java info in java datamodel node " +
- getName());
- }
- return (JavaFileInfoTranslator) javaFileInfo;
- }
-
- /**
- * Sets the java file info object.
- *
- * @param javaInfo java file info object
- */
- @Override
- public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
- javaFileInfo = javaInfo;
- }
-
- /**
- * Returns the temporary file handle.
- *
- * @return temporary file handle
- */
- @Override
- public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
- return tempFileHandle;
- }
-
- /**
- * Sets temporary file handle.
- *
- * @param fileHandle temporary file handle
- */
- @Override
- public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
- tempFileHandle = fileHandle;
- }
-
- /**
- * Prepare the information for java code generation corresponding to YANG
- * enumeration info.
- *
- * @param yangPlugin YANG plugin config
- * @throws TranslatorException translator operations fails
- */
- @Override
- public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
- try {
- if (getReferredSchema() != null) {
- throw new InvalidNodeForTranslatorException();
- }
- generateCodeOfNode(this, yangPlugin);
- tempFileHandle.getEnumTempFiles().setEnumClass(true);
- } catch (IOException e) {
- throw new TranslatorException(getErrorMsg(FAIL_AT_ENTRY, this,
- e.getLocalizedMessage()));
- }
- }
-
- /**
- * Creates a java file using the YANG enumeration info.
- *
- * @throws TranslatorException translator operation fail
- */
- @Override
- public void generateCodeExit() throws TranslatorException {
- try {
- generateJava(GENERATE_ENUM_CLASS, this);
- } catch (IOException e) {
- throw new TranslatorException(getErrorMsg(FAIL_AT_EXIT, this,
- e.getLocalizedMessage()));
- }
- }
-
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaGroupingTranslator.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaGroupingTranslator.java
deleted file mode 100644
index 26c9a1b..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaGroupingTranslator.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.translator.tojava.javamodel;
-
-import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaGrouping;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
-import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-
-import java.io.IOException;
-
-import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.updatePackageInfo;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.createPackage;
-
-/**
- * Represents grouping information extended to support java code generation.
- */
-public class YangJavaGroupingTranslator
- extends YangJavaGrouping
- implements JavaCodeGeneratorInfo, JavaCodeGenerator {
-
- private static final long serialVersionUID = 806201628L;
-
- /**
- * File handle to maintain temporary java code fragments as per the code
- * snippet types.
- */
- private transient TempJavaCodeFragmentFiles tempFileHandle;
-
- /**
- * Creates YANG Java grouping object.
- */
- public YangJavaGroupingTranslator() {
- super();
- setJavaFileInfo(new JavaFileInfoTranslator());
- }
-
- /**
- * Returns the generated java file information.
- *
- * @return generated java file information
- */
- @Override
- public JavaFileInfoTranslator getJavaFileInfo() {
- if (javaFileInfo == null) {
- throw new TranslatorException("Missing java info in java datamodel node " +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition()
- + " in " + getFileName());
- }
- return (JavaFileInfoTranslator) javaFileInfo;
- }
-
- /**
- * Sets the java file info object.
- *
- * @param javaInfo java file info object
- */
- @Override
- public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
- javaFileInfo = javaInfo;
- }
-
- /**
- * Returns the temporary file handle.
- *
- * @return temporary file handle
- */
- @Override
- public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
- return tempFileHandle;
- }
-
- /**
- * Sets temporary file handle.
- *
- * @param fileHandle temporary file handle
- */
- @Override
- public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
- tempFileHandle = fileHandle;
- }
-
-
- @Override
- public void generateCodeEntry(YangPluginConfig yangPlugin)
- throws TranslatorException {
- updatePackageInfo(this, yangPlugin);
- }
-
- @Override
- public void generateCodeExit()
- throws TranslatorException, IOException {
- createPackage(this);
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaIdentityTranslator.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaIdentityTranslator.java
deleted file mode 100644
index 793c90b..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaIdentityTranslator.java
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.translator.tojava.javamodel;
-
-import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaIdentity;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
-import org.onosproject.yangutils.translator.tojava.JavaImportData;
-import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
-import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.List;
-
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_IDENTITY_CLASS;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
-import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.updatePackageInfo;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getFileObject;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.createPackage;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodForIdentity;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodForIdentity;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.FAIL_AT_ENTRY;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.FAIL_AT_EXIT;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getErrorMsg;
-import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
-import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.JAVA_FILE_EXTENSION;
-import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.closeFile;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
-
-/**
- * Represents input information extended to support java code generation.
- */
-public class YangJavaIdentityTranslator extends YangJavaIdentity
- implements JavaCodeGeneratorInfo, JavaCodeGenerator {
-
- //Contains the information of the imported.
- private transient JavaImportData importData;
-
- /**
- * File handle to maintain temporary java code fragments as per the code
- * snippet types.
- */
- private transient TempJavaCodeFragmentFiles tempFileHandle;
-
- /**
- * Creates YANG java container object.
- */
- public YangJavaIdentityTranslator() {
- setJavaFileInfo(new JavaFileInfoTranslator());
- getJavaFileInfo().setGeneratedFileTypes(GENERATE_INTERFACE_WITH_BUILDER);
- importData = new JavaImportData();
- }
-
- /**
- * Returns the generated java file information.
- *
- * @return generated java file information
- */
- @Override
- public JavaFileInfoTranslator getJavaFileInfo() {
- if (javaFileInfo == null) {
- throw new TranslatorException("Missing java info in java identity" +
- " node " + getName());
- }
- return (JavaFileInfoTranslator) javaFileInfo;
- }
-
- /**
- * Sets the java file info object.
- *
- * @param javaInfo java file info object
- */
- @Override
- public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
- javaFileInfo = javaInfo;
- }
-
- /**
- * Returns the temporary file handle.
- *
- * @return temporary file handle
- */
- @Override
- public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
- return tempFileHandle;
- }
-
- /**
- * Sets temporary file handle.
- *
- * @param fileHandle temporary file handle
- */
- @Override
- public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
- tempFileHandle = fileHandle;
- }
-
- /**
- * Prepare the information for java code generation corresponding to YANG
- * container info.
- *
- * @param yangPlugin YANG plugin config
- * @throws TranslatorException translator operation fail
- */
- @Override
- public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
- try {
-
- updatePackageInfo(this, yangPlugin);
- JavaQualifiedTypeInfoTranslator basePkgInfo =
- new JavaQualifiedTypeInfoTranslator();
- JavaFileInfoTranslator itsInfo = getJavaFileInfo();
- String name = itsInfo.getJavaName();
- String className = getCapitalCase(name);
- String path = itsInfo.getPackageFilePath();
- createPackage(this);
- List<String> imports = null;
- boolean isQualified;
-
- if (getBaseNode() != null && getBaseNode().getReferredIdentity() != null) {
- if (!(getBaseNode().getReferredIdentity() instanceof YangJavaIdentityTranslator)) {
- throw new TranslatorException(getErrorMsg(FAIL_AT_ENTRY, this,
- EMPTY_STRING));
-
- }
- YangJavaIdentityTranslator base =
- (YangJavaIdentityTranslator) getBaseNode().getReferredIdentity();
- JavaFileInfoTranslator info = base.getJavaFileInfo();
- String baseClassName = getCapitalCase(info.getJavaName());
- String basePkg = info.getPackage();
- basePkgInfo.setClassInfo(baseClassName);
- basePkgInfo.setPkgInfo(basePkg);
- isQualified = importData.addImportInfo(basePkgInfo, className,
- javaFileInfo.getPackage());
- if (!isQualified) {
- imports = importData.getImports(true);
- }
- }
-
- File file = getFileObject(path, className, JAVA_FILE_EXTENSION, itsInfo);
-
- initiateJavaFileGeneration(file, GENERATE_IDENTITY_CLASS, imports, this, className);
- file = validateLineLength(file);
- //Add to string and from string method to class
- addStringMethodsToClass(file, name);
- insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
-
- closeFile(file, false);
- } catch (IOException e) {
- throw new TranslatorException(getErrorMsg(FAIL_AT_EXIT, this,
- e.getLocalizedMessage()));
- }
- }
-
- private void addStringMethodsToClass(File file, String className) throws IOException {
- insertDataIntoJavaFile(file, getToStringMethodForIdentity(getName()));
- insertDataIntoJavaFile(file, getFromStringMethodForIdentity(
- className, getName()));
- }
-
- /**
- * Create a java file using the YANG container info.
- *
- * @throws TranslatorException translator operation fail
- */
- @Override
- public void generateCodeExit() throws TranslatorException {
- /* Do nothing, file is already generated in entry*/
- }
-}
-
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaInputTranslator.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaInputTranslator.java
deleted file mode 100644
index 878a591..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaInputTranslator.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava.javamodel;
-
-import java.io.IOException;
-
-import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaInput;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
-import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
-import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeOfAugmentableNode;
-
-/**
- * Represents input information extended to support java code generation.
- */
-public class YangJavaInputTranslator
- extends YangJavaInput
- implements JavaCodeGeneratorInfo, JavaCodeGenerator {
-
- private static final long serialVersionUID = 806201627L;
-
- /**
- * File handle to maintain temporary java code fragments as per the code
- * snippet types.
- */
- private transient TempJavaCodeFragmentFiles tempFileHandle;
-
- /**
- * Creates an instance of java input.
- */
- public YangJavaInputTranslator() {
- super();
- setJavaFileInfo(new JavaFileInfoTranslator());
- getJavaFileInfo().setGeneratedFileTypes(GENERATE_INTERFACE_WITH_BUILDER);
- }
-
- /**
- * Returns the generated java file information.
- *
- * @return generated java file information
- */
- @Override
- public JavaFileInfoTranslator getJavaFileInfo() {
- if (javaFileInfo == null) {
- throw new TranslatorException("missing java info in java datamodel node " +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition()
- + " in " + getFileName());
- }
- return (JavaFileInfoTranslator) javaFileInfo;
- }
-
- /**
- * Sets the java file info object.
- *
- * @param javaInfo java file info object
- */
- @Override
- public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
- javaFileInfo = javaInfo;
- }
-
- /**
- * Returns the temporary file handle.
- *
- * @return temporary file handle
- */
- @Override
- public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
- return tempFileHandle;
- }
-
- /**
- * Sets temporary file handle.
- *
- * @param fileHandle temporary file handle
- */
- @Override
- public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
- tempFileHandle = fileHandle;
- }
-
- /**
- * Prepare the information for java code generation corresponding to YANG
- * input info.
- *
- * @param yangPlugin YANG plugin config
- * @throws TranslatorException translator operation fail
- */
- @Override
- public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
- try {
- generateCodeOfAugmentableNode(this, yangPlugin);
- } catch (IOException e) {
- throw new TranslatorException(
- "Failed to prepare generate code entry for input node " +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition()
- + " in " + getFileName() + " " + e.getLocalizedMessage());
- }
- }
-
- /**
- * Creates a java file using the YANG input info.
- *
- * @throws TranslatorException translator operation fail
- */
- @Override
- public void generateCodeExit() throws TranslatorException {
- try {
- getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_INTERFACE_WITH_BUILDER, this);
- } catch (IOException e) {
- throw new TranslatorException("Failed to generate code for input node " +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition()
- + " in " + getFileName() + " " + e.getLocalizedMessage());
- }
- }
-
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaLeafListTranslator.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaLeafListTranslator.java
deleted file mode 100644
index c79d86b..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaLeafListTranslator.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.translator.tojava.javamodel;
-
-import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaLeafList;
-import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
-import org.onosproject.yangutils.utils.io.YangToJavaNamingConflictUtil;
-
-import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator.updateLeavesJavaQualifiedInfo;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
-
-/**
- * Represents java information corresponding to the YANG leaf-list.
- */
-public class YangJavaLeafListTranslator
- extends YangJavaLeafList
- implements JavaLeafInfoContainer {
-
- private static final long serialVersionUID = 806201638L;
-
- private transient YangToJavaNamingConflictUtil conflictResolveConfig;
-
- /**
- * Returns a new YANG leaf object with java qualified access details.
- */
- public YangJavaLeafListTranslator() {
- super();
- setJavaQualifiedInfo(new JavaQualifiedTypeInfoTranslator());
- }
-
- @Override
- public String getJavaName(YangToJavaNamingConflictUtil conflictResolveConfig) {
- return getCamelCase(getName(), conflictResolveConfig);
- }
-
- @Override
- public boolean isLeafList() {
- return true;
- }
-
- @Override
- public void updateJavaQualifiedInfo() {
- updateLeavesJavaQualifiedInfo(this);
- }
-
- /**
- * Returns java naming conflict resolve configurations.
- *
- * @return java naming conflict resolve configurations
- */
- @Override
- public YangToJavaNamingConflictUtil getConflictResolveConfig() {
- return conflictResolveConfig;
- }
-
- /**
- * Sets java naming conflict resolve configurations.
- *
- * @param conflictResolveConfig java naming conflict resolve configurations
- */
- @Override
- public void setConflictResolveConfig(YangToJavaNamingConflictUtil conflictResolveConfig) {
- this.conflictResolveConfig = conflictResolveConfig;
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaLeafTranslator.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaLeafTranslator.java
deleted file mode 100644
index a846e59..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaLeafTranslator.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.translator.tojava.javamodel;
-
-import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaLeaf;
-import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
-import org.onosproject.yangutils.utils.io.YangToJavaNamingConflictUtil;
-
-import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator.updateLeavesJavaQualifiedInfo;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
-
-/**
- * Represents java information corresponding to the YANG leaf.
- */
-public class YangJavaLeafTranslator
- extends YangJavaLeaf
- implements JavaLeafInfoContainer {
-
- private static final long serialVersionUID = 806201636L;
-
- private transient YangToJavaNamingConflictUtil conflictResolveConfig;
-
- /**
- * Returns a new YANG leaf object with java qualified access details.
- */
- public YangJavaLeafTranslator() {
- super();
- setJavaQualifiedInfo(new JavaQualifiedTypeInfoTranslator());
- }
-
- @Override
- public String getJavaName(YangToJavaNamingConflictUtil conflictResolveConfig) {
- return getCamelCase(getName(), conflictResolveConfig);
- }
-
- @Override
- public boolean isLeafList() {
- return false;
- }
-
- @Override
- public void updateJavaQualifiedInfo() {
- updateLeavesJavaQualifiedInfo(this);
- }
-
- /**
- * Returns java naming conflict resolve configurations.
- *
- * @return java naming conflict resolve configurations
- */
- @Override
- public YangToJavaNamingConflictUtil getConflictResolveConfig() {
- return conflictResolveConfig;
- }
-
- /**
- * Sets java naming conflict resolve configurations.
- *
- * @param conflictResolveConfig java naming conflict resolve configurations
- */
- @Override
- public void setConflictResolveConfig(YangToJavaNamingConflictUtil conflictResolveConfig) {
- this.conflictResolveConfig = conflictResolveConfig;
- }
-
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaListTranslator.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaListTranslator.java
deleted file mode 100644
index d8f26bd..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaListTranslator.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.translator.tojava.javamodel;
-
-import java.io.IOException;
-
-import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaList;
-import org.onosproject.yangutils.translator.exception.InvalidNodeForTranslatorException;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
-import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
-import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeAndUpdateInParent;
-import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateJava;
-
-/**
- * Represents YANG list information extended to support java code generation.
- */
-public class YangJavaListTranslator
- extends YangJavaList
- implements JavaCodeGeneratorInfo, JavaCodeGenerator {
-
- private static final long serialVersionUID = 806201626L;
-
- /**
- * File handle to maintain temporary java code fragments as per the code
- * snippet types.
- */
- private transient TempJavaCodeFragmentFiles tempFileHandle;
-
- /**
- * Creates YANG java list object.
- */
- public YangJavaListTranslator() {
- super();
- setJavaFileInfo(new JavaFileInfoTranslator());
- getJavaFileInfo().setGeneratedFileTypes(GENERATE_INTERFACE_WITH_BUILDER);
- }
-
- /**
- * Returns the generated java file information.
- *
- * @return generated java file information
- */
- @Override
- public JavaFileInfoTranslator getJavaFileInfo() {
- if (javaFileInfo == null) {
- throw new TranslatorException("Missing java info in java datamodel node " +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition()
- + " in " + getFileName());
- }
- return (JavaFileInfoTranslator) javaFileInfo;
- }
-
- /**
- * Sets the java file info object.
- *
- * @param javaInfo java file info object
- */
- @Override
- public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
- javaFileInfo = javaInfo;
- }
-
- /**
- * Returns the temporary file handle.
- *
- * @return temporary file handle
- */
- @Override
- public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
- return tempFileHandle;
- }
-
- /**
- * Sets temporary file handle.
- *
- * @param fileHandle temporary file handle
- */
- @Override
- public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
- tempFileHandle = fileHandle;
- }
-
- /**
- * Prepare the information for java code generation corresponding to YANG
- * list info.
- *
- * @param yangPlugin YANG plugin config
- * @throws TranslatorException translator operation fail
- */
- @Override
- public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
- try {
- generateCodeAndUpdateInParent(this, yangPlugin, true);
- } catch (IOException e) {
- throw new TranslatorException(
- "Failed to prepare generate code entry for list node " +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition()
- + " in " + getFileName() + " " + e.getLocalizedMessage());
- }
- }
-
- /**
- * Creates a java file using the YANG list info.
- *
- * @throws TranslatorException translator operation fail
- */
- @Override
- public void generateCodeExit() throws TranslatorException {
- try {
- generateJava(GENERATE_INTERFACE_WITH_BUILDER, this);
- } catch (IOException e) {
- throw new TranslatorException("Failed to generate code for list node " +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition()
- + " in " + getFileName() + " " + e.getLocalizedMessage());
- }
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaModuleTranslator.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaModuleTranslator.java
deleted file mode 100644
index ea376ff..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaModuleTranslator.java
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.translator.tojava.javamodel;
-
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNotification;
-import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaModule;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
-import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-
-import java.io.IOException;
-import java.util.ArrayList;
-
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ALL_EVENT_CLASS_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
-import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeOfRootNode;
-import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateInterfaceFileForNonDataNodes;
-import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.isRootNodesCodeGenRequired;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getRootPackage;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.FAIL_AT_ENTRY;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.FAIL_AT_EXIT;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getErrorMsg;
-import static org.onosproject.yangutils.utils.UtilConstants.SBI;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.removeEmptyDirectory;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.searchAndDeleteTempDir;
-
-/**
- * Represents module information extended to support java code generation.
- */
-public class YangJavaModuleTranslator
- extends YangJavaModule
- implements JavaCodeGeneratorInfo, JavaCodeGenerator {
-
- private static final long serialVersionUID = 806201625L;
-
- /**
- * File handle to maintain temporary java code fragments as per the code
- * snippet types.
- */
- private transient TempJavaCodeFragmentFiles tempFileHandle;
-
- /**
- * Creates a YANG node of module type.
- */
- public YangJavaModuleTranslator() {
- setJavaFileInfo(new JavaFileInfoTranslator());
- notificationNodes = new ArrayList<>();
- getJavaFileInfo().setGeneratedFileTypes(
- GENERATE_SERVICE_AND_MANAGER | GENERATE_INTERFACE_WITH_BUILDER);
- }
-
- /**
- * Returns the generated java file information.
- *
- * @return generated java file information
- */
- @Override
- public JavaFileInfoTranslator getJavaFileInfo() {
- if (javaFileInfo == null) {
- throw new TranslatorException(
- "Missing java info in java datamodel node " + getName());
- }
- return (JavaFileInfoTranslator) javaFileInfo;
- }
-
- /**
- * Sets the java file info object.
- *
- * @param javaInfo java file info object
- */
- @Override
- public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
- javaFileInfo = javaInfo;
- }
-
- /**
- * Returns the temporary file handle.
- *
- * @return temporary file handle
- */
- @Override
- public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
- return tempFileHandle;
- }
-
- /**
- * Sets temporary file handle.
- *
- * @param fileHandle temporary file handle
- */
- @Override
- public void setTempJavaCodeFragmentFiles(
- TempJavaCodeFragmentFiles fileHandle) {
- tempFileHandle = fileHandle;
- }
-
- /**
- * Generates java code for module.
- *
- * @param yangPlugin YANG plugin config
- * @throws TranslatorException when fails to generate the source files
- */
- @Override
- public void generateCodeEntry(YangPluginConfig yangPlugin)
- throws TranslatorException {
- String modulePkg = getRootPackage(getVersion(), getModuleNamespace(),
- getRevision(),
- yangPlugin.getConflictResolver());
-
- if (isNotificationChildNodePresent(this)) {
- getJavaFileInfo().setGeneratedFileTypes(
- getJavaFileInfo().getGeneratedFileTypes()
- | GENERATE_ALL_EVENT_CLASS_MASK);
- }
- try {
- generateCodeOfRootNode(this, yangPlugin, modulePkg);
- //Add augmented rpc name
- tempFileHandle.getServiceTempFiles().addAugmentedRpcMethod(this);
- } catch (IOException e) {
- throw new TranslatorException(getErrorMsg(FAIL_AT_ENTRY, this,
- e.getLocalizedMessage()));
- }
- }
-
- /**
- * Creates a java file using the YANG module info.
- */
- @Override
- public void generateCodeExit()
- throws TranslatorException {
- /*
- * As part of the notification support the following files needs to be generated.
- * 1) Subject of the notification(event), this is simple interface with builder class.
- * 2) Event class extending "AbstractEvent" and defining event type enum.
- * 3) Event listener interface extending "EventListener".
- * 4) Event subject class.
- *
- * The manager class needs to extend the "ListenerRegistry".
- */
- try {
- if ((getJavaFileInfo().getGeneratedFileTypes() &
- GENERATE_ALL_EVENT_CLASS_MASK) != 0) {
- getTempJavaCodeFragmentFiles().generateJavaFile(
- GENERATE_ALL_EVENT_CLASS_MASK, this);
- }
-
- if (!isRootNodesCodeGenRequired(this)) {
- if (getChild() != null) {
- generateInterfaceFileForNonDataNodes(this);
- }
- } else {
- getTempJavaCodeFragmentFiles()
- .generateJavaFile(GENERATE_INTERFACE_WITH_BUILDER, this);
- if (getJavaFileInfo().getPluginConfig()
- .getCodeGenerateForSbi() == null ||
- !getJavaFileInfo().getPluginConfig()
- .getCodeGenerateForSbi().equals(SBI)) {
- getTempJavaCodeFragmentFiles()
- .generateJavaFile(GENERATE_SERVICE_AND_MANAGER, this);
- }
- }
-
- searchAndDeleteTempDir(getJavaFileInfo().getBaseCodeGenPath() +
- getJavaFileInfo().getPackageFilePath());
- removeEmptyDirectory(getJavaFileInfo().getBaseCodeGenPath() +
- getJavaFileInfo().getPackageFilePath());
- } catch (IOException e) {
- throw new TranslatorException(getErrorMsg(FAIL_AT_EXIT, this,
- e.getLocalizedMessage()));
- }
- }
-
- /**
- * Adds to notification node list.
- *
- * @param curNode notification node
- */
- private void addToNotificationList(YangNode curNode) {
- notificationNodes.add(curNode);
- }
-
- /**
- * Checks if there is any notification node present.
- *
- * @param rootNode root node of the data model
- * @return status of notification's existence
- */
- private boolean isNotificationChildNodePresent(YangNode rootNode) {
- YangNode childNode = rootNode.getChild();
-
- while (childNode != null) {
- if (childNode instanceof YangNotification) {
- addToNotificationList(childNode);
- }
- childNode = childNode.getNextSibling();
- }
-
- return !notificationNodes.isEmpty();
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaNotificationTranslator.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaNotificationTranslator.java
deleted file mode 100644
index 5d6f45d..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaNotificationTranslator.java
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava.javamodel;
-
-import org.onosproject.yangutils.datamodel.RpcNotificationContainer;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaNotification;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
-import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
-import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
-import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
-import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
-import org.onosproject.yangutils.translator.tojava.utils.JavaExtendsListHolder;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-
-import java.io.IOException;
-
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
-import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeOfAugmentableNode;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getEnumJavaAttribute;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.FAIL_AT_ENTRY;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.FAIL_AT_EXIT;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.INVALID_NODE;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getErrorMsg;
-import static org.onosproject.yangutils.utils.UtilConstants.EVENT_LISTENER_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
-
-/**
- * Represents notification information extended to support java code generation.
- */
-public class YangJavaNotificationTranslator
- extends YangJavaNotification
- implements JavaCodeGenerator, JavaCodeGeneratorInfo {
-
- private static final long serialVersionUID = 806201624L;
-
- /**
- * File handle to maintain temporary java code fragments as per the code
- * snippet types.
- */
- private transient TempJavaCodeFragmentFiles tempFileHandle;
-
- /**
- * Creates an instance of java Notification.
- */
- public YangJavaNotificationTranslator() {
- setJavaFileInfo(new JavaFileInfoTranslator());
- getJavaFileInfo().setGeneratedFileTypes(GENERATE_INTERFACE_WITH_BUILDER);
- }
-
- /**
- * Returns the generated java file information.
- *
- * @return generated java file information
- */
- @Override
- public JavaFileInfoTranslator getJavaFileInfo() {
-
- if (javaFileInfo == null) {
- throw new TranslatorException(getErrorMsg(INVALID_NODE, this));
- }
- return (JavaFileInfoTranslator) javaFileInfo;
- }
-
- /**
- * Sets the java file info object.
- *
- * @param javaInfo java file info object
- */
- @Override
- public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
- javaFileInfo = javaInfo;
- }
-
- /**
- * Returns the temporary file handle.
- *
- * @return temporary file handle
- */
- @Override
- public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
- return tempFileHandle;
- }
-
- /**
- * Sets temporary file handle.
- *
- * @param fileHandle temporary file handle
- */
- @Override
- public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
- tempFileHandle = fileHandle;
- }
-
- /**
- * Prepare the information for java code generation corresponding to YANG
- * notification info.
- *
- * @param yangPlugin YANG plugin config
- * @throws TranslatorException translator operation fail
- */
- @Override
- public void generateCodeEntry(YangPluginConfig yangPlugin)
- throws TranslatorException {
-
- // Obtain the notification name as per enum in notification.
- String enumName = getEnumJavaAttribute(getName().toUpperCase());
- ((RpcNotificationContainer) getParent())
- .addToNotificationEnumMap(enumName, this);
-
- /*
- * As part of the notification support the following files needs to be
- * generated.
- * 1) Subject of the notification(event), this is simple interface with
- * builder class.
- * 2) Event class extending "AbstractEvent" and defining event type
- * enum.
- * 3) Event listener interface extending "EventListener".
- *
- * The manager class needs to extend the ListenerRegistry.
- */
-
- // Generate subject of the notification(event), this is simple interface
- // with builder class.
- try {
- generateCodeOfAugmentableNode(this, yangPlugin);
- addNotificationToExtendsList();
- } catch (IOException e) {
- throw new TranslatorException(getErrorMsg(FAIL_AT_ENTRY, this,
- e.getLocalizedMessage()));
- }
- }
-
- /*Adds current notification info to the extends list so its parents service*/
- private void addNotificationToExtendsList() {
- YangNode parent = getParent();
- TempJavaServiceFragmentFiles tempFiles =
- ((TempJavaCodeFragmentFilesContainer) parent).getTempJavaCodeFragmentFiles()
- .getServiceTempFiles();
- JavaExtendsListHolder holder = tempFiles.getJavaExtendsListHolder();
- JavaQualifiedTypeInfoTranslator event =
- new JavaQualifiedTypeInfoTranslator();
-
- String parentInfo = getCapitalCase(((JavaFileInfoContainer) parent)
- .getJavaFileInfo()
- .getJavaName());
- event.setClassInfo(parentInfo + EVENT_STRING);
- event.setPkgInfo(getJavaFileInfo().getPackage());
- holder.addToExtendsList(event, parent, tempFiles);
-
- JavaQualifiedTypeInfoTranslator eventListener =
- new JavaQualifiedTypeInfoTranslator();
-
- eventListener.setClassInfo(parentInfo + EVENT_LISTENER_STRING);
- eventListener.setPkgInfo(getJavaFileInfo().getPackage());
- holder.addToExtendsList(eventListener, parent, tempFiles);
- }
-
- /**
- * Creates a java file using the YANG notification info.
- */
- @Override
- public void generateCodeExit()
- throws TranslatorException {
- try {
- getTempJavaCodeFragmentFiles().generateJavaFile(
- GENERATE_INTERFACE_WITH_BUILDER, this);
- } catch (IOException e) {
- throw new TranslatorException(getErrorMsg(FAIL_AT_EXIT, this,
- e.getLocalizedMessage()));
- }
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaOutputTranslator.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaOutputTranslator.java
deleted file mode 100644
index fe640ea..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaOutputTranslator.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava.javamodel;
-
-import java.io.IOException;
-
-import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaOutput;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
-import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
-import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeOfAugmentableNode;
-
-/**
- * Represents output information extended to support java code generation.
- */
-public class YangJavaOutputTranslator
- extends YangJavaOutput
- implements JavaCodeGeneratorInfo, JavaCodeGenerator {
-
- private static final long serialVersionUID = 806201623L;
-
- /**
- * File handle to maintain temporary java code fragments as per the code
- * snippet types.
- */
- private transient TempJavaCodeFragmentFiles tempFileHandle;
-
- /**
- * Creates an instance of java output.
- */
- public YangJavaOutputTranslator() {
- super();
- setJavaFileInfo(new JavaFileInfoTranslator());
- getJavaFileInfo().setGeneratedFileTypes(GENERATE_INTERFACE_WITH_BUILDER);
- }
-
- /**
- * Returns the generated java file information.
- *
- * @return generated java file information
- */
- @Override
- public JavaFileInfoTranslator getJavaFileInfo() {
- if (javaFileInfo == null) {
- throw new TranslatorException("missing java info in java datamodel node " +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition()
- + " in " + getFileName());
- }
- return (JavaFileInfoTranslator) javaFileInfo;
- }
-
- /**
- * Sets the java file info object.
- *
- * @param javaInfo java file info object
- */
- @Override
- public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
- javaFileInfo = javaInfo;
- }
-
- /**
- * Returns the temporary file handle.
- *
- * @return temporary file handle
- */
- @Override
- public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
- return tempFileHandle;
- }
-
- /**
- * Sets temporary file handle.
- *
- * @param fileHandle temporary file handle
- */
- @Override
- public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
- tempFileHandle = fileHandle;
- }
-
- /**
- * Prepare the information for java code generation corresponding to YANG
- * output info.
- *
- * @param yangPlugin YANG plugin config
- * @throws TranslatorException translator operation fail
- */
- @Override
- public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
- try {
- generateCodeOfAugmentableNode(this, yangPlugin);
- } catch (IOException e) {
- throw new TranslatorException(
- "Failed to prepare generate code entry for output node " +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition()
- + " in " + getFileName() + " " + e.getLocalizedMessage());
- }
-
- }
-
- /**
- * Creates a java file using the YANG output info.
- *
- * @throws TranslatorException translator operation fail
- */
- @Override
- public void generateCodeExit() throws TranslatorException {
- try {
- getTempJavaCodeFragmentFiles().generateJavaFile(GENERATE_INTERFACE_WITH_BUILDER, this);
- } catch (IOException e) {
- throw new TranslatorException(
- "Failed to prepare generate code exit for output node " +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition()
- + " in " + getFileName() + " " + e.getLocalizedMessage());
- }
- }
-
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaRpcTranslator.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaRpcTranslator.java
deleted file mode 100644
index d0e1f03..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaRpcTranslator.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava.javamodel;
-
-import org.onosproject.yangutils.datamodel.RpcNotificationContainer;
-import org.onosproject.yangutils.datamodel.YangInput;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangOutput;
-import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaRpc;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
-import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
-import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
-import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-
-import java.io.IOException;
-
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.getParentNodeInGenCode;
-import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.updatePackageInfo;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.FAIL_AT_EXIT;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.INVALID_CHILD_NODE;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.INVALID_PARENT_NODE;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getErrorMsg;
-
-/**
- * Represents rpc information extended to support java code generation.
- */
-public class YangJavaRpcTranslator
- extends YangJavaRpc
- implements JavaCodeGenerator, JavaCodeGeneratorInfo {
-
- private static final long serialVersionUID = 806201622L;
-
- /**
- * Temporary file for code generation.
- */
- private transient TempJavaCodeFragmentFiles tempJavaCodeFragmentFiles;
-
- /**
- * Creates an instance of YANG java rpc.
- */
- public YangJavaRpcTranslator() {
- setJavaFileInfo(new JavaFileInfoTranslator());
- }
-
- /**
- * Returns the generated java file information.
- *
- * @return generated java file information
- */
- @Override
- public JavaFileInfoTranslator getJavaFileInfo() {
-
- if (javaFileInfo == null) {
- throw new TranslatorException("missing java info in java datamodel node " +
- getName());
- }
- return (JavaFileInfoTranslator) javaFileInfo;
- }
-
- /**
- * Sets the java file info object.
- *
- * @param javaInfo java file info object
- */
- @Override
- public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
- javaFileInfo = javaInfo;
- }
-
- @Override
- public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
- return tempJavaCodeFragmentFiles;
- }
-
- @Override
- public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
- tempJavaCodeFragmentFiles = fileHandle;
- }
-
- /**
- * Prepares the information for java code generation corresponding to YANG
- * RPC info.
- *
- * @param yangPlugin YANG plugin config
- * @throws TranslatorException translator operations fails
- */
- @Override
- public void generateCodeEntry(YangPluginConfig yangPlugin)
- throws TranslatorException {
-
- // Add package information for rpc and create corresponding folder.
- updatePackageInfo(this, yangPlugin);
- }
-
- /**
- * Creates a java file using the YANG RPC info.
- *
- * @throws TranslatorException translator operations fails
- */
- @Override
- public void generateCodeExit()
- throws TranslatorException {
- // Get the parent module/sub-module.
- YangNode parent = getParentNodeInGenCode(this);
-
- // Parent should be holder of rpc or notification.
- if (!(parent instanceof RpcNotificationContainer)) {
- throw new TranslatorException(getErrorMsg(INVALID_PARENT_NODE,
- this));
- }
-
- /*
- * Create attribute info for input and output of rpc and add it to the
- * parent import list.
- */
- TempJavaServiceFragmentFiles tempJavaFragmentFiles =
- ((TempJavaCodeFragmentFilesContainer) getParent())
- .getTempJavaCodeFragmentFiles()
- .getServiceTempFiles();
- JavaAttributeInfo javaAttributeInfoOfInput = null;
- JavaAttributeInfo javaAttributeInfoOfOutput = null;
-
- // Get the child input and output node and obtain create java attribute
- // info.
- YangNode yangNode = getChild();
- while (yangNode != null) {
- if (yangNode instanceof YangInput) {
- javaAttributeInfoOfInput = tempJavaFragmentFiles
- .getChildNodeAsAttributeInParentService(yangNode,
- getParent(),
- getJavaClassNameOrBuiltInType());
- } else if (yangNode instanceof YangOutput) {
- javaAttributeInfoOfOutput = tempJavaFragmentFiles
- .getChildNodeAsAttributeInParentService(yangNode,
- getParent(),
- getJavaClassNameOrBuiltInType());
- } else {
- throw new TranslatorException(getErrorMsg(INVALID_CHILD_NODE,
- this));
- }
- yangNode = yangNode.getNextSibling();
- }
-
- /*
- * Add the rpc information to the parent's service temp file.
- */
- try {
-
- ((TempJavaCodeFragmentFilesContainer) parent)
- .getTempJavaCodeFragmentFiles().getServiceTempFiles()
- .addJavaSnippetInfoToApplicableTempFiles(
- javaAttributeInfoOfInput, javaAttributeInfoOfOutput,
- getJavaClassNameOrBuiltInType());
- } catch (IOException e) {
- throw new TranslatorException(getErrorMsg(FAIL_AT_EXIT, this,
- e.getLocalizedMessage()));
- }
- // No file will be generated during RPC exit.
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaSubModuleTranslator.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaSubModuleTranslator.java
deleted file mode 100644
index c63f215..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaSubModuleTranslator.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.translator.tojava.javamodel;
-
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNotification;
-import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaSubModule;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
-import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-
-import java.io.IOException;
-import java.util.ArrayList;
-
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ALL_EVENT_CLASS_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_INTERFACE_WITH_BUILDER;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
-import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeOfRootNode;
-import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateInterfaceFileForNonDataNodes;
-import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.isRootNodesCodeGenRequired;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getRootPackage;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.FAIL_AT_ENTRY;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorErrorType.FAIL_AT_EXIT;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getErrorMsg;
-import static org.onosproject.yangutils.utils.UtilConstants.SBI;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.removeEmptyDirectory;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.searchAndDeleteTempDir;
-
-/**
- * Represents sub module information extended to support java code generation.
- */
-public class YangJavaSubModuleTranslator
- extends YangJavaSubModule
- implements JavaCodeGeneratorInfo, JavaCodeGenerator {
-
- private static final long serialVersionUID = 806201621L;
-
- /**
- * File handle to maintain temporary java code fragments as per the code snippet types.
- */
- private transient TempJavaCodeFragmentFiles tempFileHandle;
-
- /**
- * Creates YANG java sub module object.
- */
- public YangJavaSubModuleTranslator() {
- setJavaFileInfo(new JavaFileInfoTranslator());
- notificationNodes = new ArrayList<>();
- int genType =
- GENERATE_SERVICE_AND_MANAGER | GENERATE_INTERFACE_WITH_BUILDER;
- if (isNotificationChildNodePresent(this)) {
- genType = GENERATE_SERVICE_AND_MANAGER | GENERATE_ALL_EVENT_CLASS_MASK;
- }
- getJavaFileInfo().setGeneratedFileTypes(genType);
- }
-
- /**
- * Returns the generated java file information.
- *
- * @return generated java file information
- */
- @Override
- public JavaFileInfoTranslator getJavaFileInfo() {
- if (javaFileInfo == null) {
- throw new TranslatorException("Missing java info in java datamodel node " +
- getName());
- }
- return (JavaFileInfoTranslator) javaFileInfo;
- }
-
- /**
- * Sets the java file info object.
- *
- * @param javaInfo java file info object
- */
- @Override
- public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
- javaFileInfo = javaInfo;
- }
-
- /**
- * Returns the temporary file handle.
- *
- * @return temporary file handle
- */
- @Override
- public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
- return tempFileHandle;
- }
-
- /**
- * Sets temporary file handle.
- *
- * @param fileHandle temporary file handle
- */
- @Override
- public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
- tempFileHandle = fileHandle;
- }
-
- /**
- * Returns the name space of the module to which the sub module belongs to.
- *
- * @return the name space string of the module.
- */
- public String getNameSpaceFromModule() {
- return ((YangModule) getBelongsTo().getModuleNode()).getModuleNamespace();
- }
-
- /**
- * Prepares the information for java code generation corresponding to
- * YANG submodule info.
- *
- * @param yangPlugin YANG plugin config
- * @throws TranslatorException when fails to translate
- */
- @Override
- public void generateCodeEntry(YangPluginConfig yangPlugin)
- throws TranslatorException {
- String subModulePkg = getRootPackage(
- getVersion(), getNameSpaceFromModule(), getRevision(),
- yangPlugin.getConflictResolver());
-
- if (isNotificationChildNodePresent(this)) {
- getJavaFileInfo().setGeneratedFileTypes(
- getJavaFileInfo().getGeneratedFileTypes()
- | GENERATE_ALL_EVENT_CLASS_MASK);
- }
- try {
- generateCodeOfRootNode(this, yangPlugin, subModulePkg);
- tempFileHandle.getServiceTempFiles().addAugmentedRpcMethod(
- this);
- } catch (IOException e) {
- throw new TranslatorException(getErrorMsg(FAIL_AT_ENTRY, this,
- e.getLocalizedMessage()));
- }
- }
-
- /**
- * Creates a java file using the YANG submodule info.
- */
- @Override
- public void generateCodeExit()
- throws TranslatorException {
- /*
- * As part of the notification support the following files needs to be generated.
- * 1) Subject of the notification(event), this is simple interface with builder class.
- * 2) Event class extending "AbstractEvent" and defining event type enum.
- * 3) Event listener interface extending "EventListener".
- * 4) Event subject class.
- *
- * The manager class needs to extend the "ListenerRegistry".
- */
- try {
- if ((getJavaFileInfo().getGeneratedFileTypes() &
- GENERATE_ALL_EVENT_CLASS_MASK) != 0) {
- getTempJavaCodeFragmentFiles().generateJavaFile(
- GENERATE_ALL_EVENT_CLASS_MASK, this);
- }
- if (!isRootNodesCodeGenRequired(this)) {
- generateInterfaceFileForNonDataNodes(this);
- } else {
- getTempJavaCodeFragmentFiles()
- .generateJavaFile(GENERATE_INTERFACE_WITH_BUILDER, this);
- if (getJavaFileInfo().getPluginConfig()
- .getCodeGenerateForSbi() == null ||
- !getJavaFileInfo().getPluginConfig()
- .getCodeGenerateForSbi().equals(SBI)) {
- getTempJavaCodeFragmentFiles().generateJavaFile(
- GENERATE_SERVICE_AND_MANAGER, this);
- }
- }
-
- searchAndDeleteTempDir(getJavaFileInfo().getBaseCodeGenPath() +
- getJavaFileInfo().getPackageFilePath());
- removeEmptyDirectory(getJavaFileInfo().getBaseCodeGenPath() +
- getJavaFileInfo().getPackageFilePath());
- } catch (IOException e) {
- throw new TranslatorException(getErrorMsg(FAIL_AT_EXIT, this,
- e.getLocalizedMessage()));
- }
- }
-
- /**
- * Adds to notification node list.
- *
- * @param curNode notification node
- */
- private void addToNotificationList(YangNode curNode) {
- notificationNodes.add(curNode);
- }
-
- /**
- * Checks if there is any notification node present.
- *
- * @param rootNode root node of the data model
- * @return status of notification's existence
- */
- private boolean isNotificationChildNodePresent(YangNode rootNode) {
- YangNode childNode = rootNode.getChild();
-
- while (childNode != null) {
- if (childNode instanceof YangNotification) {
- addToNotificationList(childNode);
- }
- childNode = childNode.getNextSibling();
- }
-
- return !notificationNodes.isEmpty();
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaTypeDefTranslator.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaTypeDefTranslator.java
deleted file mode 100644
index 4605c52..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaTypeDefTranslator.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.translator.tojava.javamodel;
-
-import org.onosproject.yangutils.datamodel.YangDerivedInfo;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaTypeDef;
-import org.onosproject.yangutils.translator.exception.InvalidNodeForTranslatorException;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
-import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-
-import java.io.IOException;
-
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.LEAFREF;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
-import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeOfNode;
-import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateJava;
-
-/**
- * Represents type define information extended to support java code generation.
- */
-public class YangJavaTypeDefTranslator
- extends YangJavaTypeDef
- implements JavaCodeGeneratorInfo, JavaCodeGenerator {
-
- private static final long serialVersionUID = 806201620L;
-
- /**
- * File handle to maintain temporary java code fragments as per the code
- * snippet types.
- */
- private transient TempJavaCodeFragmentFiles tempFileHandle;
-
- /**
- * Creates a YANG java typedef object.
- */
- public YangJavaTypeDefTranslator() {
- super();
- setJavaFileInfo(new JavaFileInfoTranslator());
- getJavaFileInfo().setGeneratedFileTypes(GENERATE_TYPEDEF_CLASS);
- }
-
- /**
- * Returns the generated java file information.
- *
- * @return generated java file information
- */
- @Override
- public JavaFileInfoTranslator getJavaFileInfo() {
-
- if (javaFileInfo == null) {
- throw new TranslatorException("Missing java info in java datamodel node " +
- getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition()
- + " in " + getFileName());
- }
- return (JavaFileInfoTranslator) javaFileInfo;
- }
-
- /**
- * Sets the java file info object.
- *
- * @param javaInfo java file info object
- */
- @Override
- public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
- javaFileInfo = javaInfo;
- }
-
- /**
- * Returns the temporary file handle.
- *
- * @return temporary file handle
- */
- @Override
- public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
- return tempFileHandle;
- }
-
- /**
- * Sets temporary file handle.
- *
- * @param fileHandle temporary file handle
- */
- @Override
- public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
- tempFileHandle = fileHandle;
- }
-
- /**
- * Prepare the information for java code generation corresponding to YANG
- * typedef info.
- *
- * @param yangPlugin YANG plugin config
- * @throws TranslatorException when fails to translate
- */
- @Override
- public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
- if (getReferredSchema() != null) {
- throw new InvalidNodeForTranslatorException();
- }
- // TODO update the below exception in all related places, remove file
- // name and other information.
- YangType typeInTypeDef = this.getTypeDefBaseType();
- InvalidNodeForTranslatorException exception = new InvalidNodeForTranslatorException();
- exception.setFileName(this.getFileName());
- exception.setCharPosition(this.getCharPosition());
- exception.setLine(this.getLineNumber());
- if (typeInTypeDef.getDataType() == DERIVED) {
- YangDerivedInfo derivedInfo = (YangDerivedInfo) typeInTypeDef.getDataTypeExtendedInfo();
- if (derivedInfo.getEffectiveBuiltInType() == LEAFREF) {
- throw exception;
- }
- } else if (typeInTypeDef.getDataType() == LEAFREF) {
- throw exception;
- }
- try {
- generateCodeOfNode(this, yangPlugin);
- } catch (IOException e) {
- throw new TranslatorException(
- "Failed to prepare generate code entry for typedef node " + getName()
- + "in " + getLineNumber() + " at " + getCharPosition() + " in " + getFileName()
- + " " + e.getLocalizedMessage());
- }
- }
-
- /**
- * Create a java file using the YANG typedef info.
- *
- * @throws TranslatorException when fails to translate
- */
- @Override
- public void generateCodeExit() throws TranslatorException {
- try {
- generateJava(GENERATE_TYPEDEF_CLASS, this);
- } catch (IOException e) {
- throw new TranslatorException(
- "Failed to prepare generate code for typedef node " + getName()
- + "in " + getLineNumber() + " at " + getCharPosition() + " in " + getFileName()
- + " " + e.getLocalizedMessage());
- }
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaTypeTranslator.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaTypeTranslator.java
deleted file mode 100644
index 93e4858..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaTypeTranslator.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.translator.tojava.javamodel;
-
-import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaType;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
-import org.onosproject.yangutils.utils.io.YangToJavaNamingConflictUtil;
-
-import static org.onosproject.yangutils.translator.tojava.javamodel.AttributesJavaDataType.getJavaDataType;
-import static org.onosproject.yangutils.translator.tojava.javamodel.AttributesJavaDataType.getJavaImportClass;
-import static org.onosproject.yangutils.translator.tojava.javamodel.AttributesJavaDataType.getJavaImportPackage;
-
-/**
- * Represents java information corresponding to the YANG type.
- */
-public class YangJavaTypeTranslator
- extends YangJavaType
- implements JavaQualifiedTypeResolver {
-
- /**
- * Create a YANG leaf object with java qualified access details.
- */
- public YangJavaTypeTranslator() {
- super();
- setJavaQualifiedInfo(new JavaQualifiedTypeInfoTranslator());
- }
-
- @Override
- public void updateJavaQualifiedInfo(YangToJavaNamingConflictUtil conflictResolver) {
- JavaQualifiedTypeInfoTranslator importInfo = (JavaQualifiedTypeInfoTranslator) getJavaQualifiedInfo();
-
- /*
- * Type is added as an attribute in the class.
- */
- String className = getJavaImportClass(this, false, conflictResolver);
- if (className != null) {
- /*
- * Corresponding to the attribute type a class needs to be imported,
- * since it can be a derived type or a usage of wrapper classes.
- */
- importInfo.setClassInfo(className);
- String classPkg = getJavaImportPackage(this,
- false, conflictResolver);
- if (classPkg == null) {
- throw new TranslatorException("import package cannot be null when the class is used " +
- getDataTypeName() + " in " +
- getLineNumber() + " at " +
- getCharPosition()
- + " in " + getFileName());
- }
- importInfo.setPkgInfo(classPkg);
- } else {
- /*
- * The attribute does not need a class to be imported, for example
- * built in java types.
- */
- String dataTypeName = getJavaDataType(this);
- if (dataTypeName == null) {
- throw new TranslatorException("not supported data type " +
- getDataTypeName() + " in " +
- getLineNumber() + " at " +
- getCharPosition()
- + " in " + getFileName());
- }
- importInfo.setClassInfo(dataTypeName);
- }
- setJavaQualifiedInfo(importInfo);
- }
-
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaUnionTranslator.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaUnionTranslator.java
deleted file mode 100644
index ce04f68..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaUnionTranslator.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.translator.tojava.javamodel;
-
-import java.io.IOException;
-
-import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaUnion;
-import org.onosproject.yangutils.translator.exception.InvalidNodeForTranslatorException;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
-import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
-import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateCodeOfNode;
-import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.generateJava;
-
-/**
- * Represents union information extended to support java code generation.
- */
-public class YangJavaUnionTranslator
- extends YangJavaUnion
- implements JavaCodeGeneratorInfo, JavaCodeGenerator {
-
- private static final long serialVersionUID = 806201619L;
-
- /**
- * File handle to maintain temporary java code fragments as per the code
- * snippet types.
- */
- private transient TempJavaCodeFragmentFiles tempFileHandle;
-
- /**
- * Creates an instance of YANG java union.
- */
- public YangJavaUnionTranslator() {
- super();
- setJavaFileInfo(new JavaFileInfoTranslator());
- getJavaFileInfo().setGeneratedFileTypes(GENERATE_UNION_CLASS);
- }
-
- /**
- * Returns the generated java file information.
- *
- * @return generated java file information
- */
- @Override
- public JavaFileInfoTranslator getJavaFileInfo() {
- if (javaFileInfo == null) {
- throw new RuntimeException("Missing java info in java datamodel node " + getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition()
- + " in " + getFileName());
- }
- return (JavaFileInfoTranslator) javaFileInfo;
- }
-
- /**
- * Sets the java file info object.
- *
- * @param javaInfo java file info object
- */
- @Override
- public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
- javaFileInfo = javaInfo;
- }
-
- /**
- * Returns the temporary file handle.
- *
- * @return temporary file handle
- */
- @Override
- public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
- return tempFileHandle;
- }
-
- /**
- * Sets temporary file handle.
- *
- * @param fileHandle temporary file handle
- */
- @Override
- public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
- tempFileHandle = fileHandle;
- }
-
- /**
- * Prepare the information for java code generation corresponding to YANG
- * union info.
- *
- * @param yangPlugin YANG plugin config
- * @throws TranslatorException when fails to translate
- */
- @Override
- public void generateCodeEntry(YangPluginConfig yangPlugin) throws TranslatorException {
- try {
- if (getReferredSchema() != null) {
- throw new InvalidNodeForTranslatorException();
- }
- generateCodeOfNode(this, yangPlugin);
- } catch (IOException e) {
- throw new TranslatorException(
- "Failed to prepare generate code entry for union node " + getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition()
- + " in " + getFileName() + " " + e.getLocalizedMessage());
- }
-
- }
-
- /**
- * Creates a java file using the YANG union info.
- *
- * @throws TranslatorException when fails to translate
- */
- @Override
- public void generateCodeExit() throws TranslatorException {
- try {
- generateJava(GENERATE_UNION_CLASS, this);
- } catch (IOException e) {
- throw new TranslatorException("Failed to generate code for union node " + getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition()
- + " in " + getFileName() + " " + e.getLocalizedMessage());
- }
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaUsesTranslator.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaUsesTranslator.java
deleted file mode 100644
index a213faf..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/YangJavaUsesTranslator.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.translator.tojava.javamodel;
-
-import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaUses;
-import org.onosproject.yangutils.translator.exception.InvalidNodeForTranslatorException;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGenerator;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
-import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-
-/**
- * Represents uses information extended to support java code generation.
- */
-public class YangJavaUsesTranslator
- extends YangJavaUses
- implements JavaCodeGeneratorInfo, JavaCodeGenerator {
-
- private static final long serialVersionUID = 806201618L;
-
- /**
- * File handle to maintain temporary java code fragments as per the code
- * snippet types.
- */
- private transient TempJavaCodeFragmentFiles tempFileHandle;
-
- /**
- * Creates YANG java uses object.
- */
- public YangJavaUsesTranslator() {
- super();
- setJavaFileInfo(new JavaFileInfoTranslator());
- }
-
- /**
- * Returns the generated java file information.
- *
- * @return generated java file information
- */
- @Override
- public JavaFileInfoTranslator getJavaFileInfo() {
- if (javaFileInfo == null) {
- throw new TranslatorException("Missing java info in java datamodel node " + getName() + " in " +
- getLineNumber() + " at " +
- getCharPosition()
- + " in " + getFileName());
- }
- return (JavaFileInfoTranslator) javaFileInfo;
- }
-
- /**
- * Sets the java file info object.
- *
- * @param javaInfo java file info object
- */
- @Override
- public void setJavaFileInfo(JavaFileInfoTranslator javaInfo) {
- javaFileInfo = javaInfo;
- }
-
- /**
- * Returns the temporary file handle.
- *
- * @return temporary file handle
- */
- @Override
- public TempJavaCodeFragmentFiles getTempJavaCodeFragmentFiles() {
- return tempFileHandle;
- }
-
- /**
- * Sets temporary file handle.
- *
- * @param fileHandle temporary file handle
- */
- @Override
- public void setTempJavaCodeFragmentFiles(TempJavaCodeFragmentFiles fileHandle) {
- tempFileHandle = fileHandle;
- }
-
- @Override
- public void generateCodeEntry(YangPluginConfig yangPlugin)
- throws TranslatorException {
- InvalidNodeForTranslatorException exception = new InvalidNodeForTranslatorException();
- exception.setFileName(this.getFileName());
- exception.setCharPosition(this.getCharPosition());
- exception.setLine(this.getLineNumber());
- throw exception;
- }
-
- @Override
- public void generateCodeExit()
- throws TranslatorException {
- /*
- * Do nothing.
- */
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/package-info.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/package-info.java
deleted file mode 100644
index 3257922..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/javamodel/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-/**
- * Maintains application's schema mapped to java classes / interfaces.
- */
-package org.onosproject.yangutils.translator.tojava.javamodel;
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/package-info.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/package-info.java
deleted file mode 100644
index 1aac09e..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-/**
- * Generates java class definition from data model.
- */
-package org.onosproject.yangutils.translator.tojava;
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/BracketType.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/BracketType.java
deleted file mode 100644
index 67fa9a5..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/BracketType.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava.utils;
-
-/**
- * Represents different bracket types.
- */
-enum BracketType {
-
- //Open close bracket '()'.
- OPEN_CLOSE_BRACKET,
-
- //Open close bracket with value '(value)).
- OPEN_CLOSE_BRACKET_WITH_VALUE,
-
- //Open close bracket with value '(String value)).
- OPEN_CLOSE_BRACKET_WITH_VALUE_AND_RETURN_TYPE,
-
- //Open close bracket with value '(String value,.
- OPEN_BRACKET_WITH_VALUE,
-
- //Open close bracket with value ',String value)).
- CLOSE_BRACKET_WITH_VALUE,
-
- //Open close diamond bracket '<>'.
- OPEN_CLOSE_DIAMOND,
-
- //Open close diamond bracket with value '<String>'
- OPEN_CLOSE_DIAMOND_WITH_VALUE
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/ClassDefinitionGenerator.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/ClassDefinitionGenerator.java
deleted file mode 100644
index 03431df..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/ClassDefinitionGenerator.java
+++ /dev/null
@@ -1,476 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava.utils;
-
-import org.onosproject.yangutils.datamodel.RpcNotificationContainer;
-import org.onosproject.yangutils.datamodel.YangAugment;
-import org.onosproject.yangutils.datamodel.YangCase;
-import org.onosproject.yangutils.datamodel.YangIdentity;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNotification;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
-import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
-import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
-
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.DEFAULT_CLASS_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_IDENTITY_CLASS;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_KEY_CLASS;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
-import static org.onosproject.yangutils.translator.tojava.utils.BracketType.OPEN_CLOSE_DIAMOND_WITH_VALUE;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.brackets;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getBuilderImplStringClassDef;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getDefaultDefinition;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getDefaultDefinitionWithExtends;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getDefaultDefinitionWithImpl;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getDefaultName;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getDefinitionWithImplements;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getErrorMsg;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getEventExtendsString;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getSpecificModifier;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getSuffixedName;
-import static org.onosproject.yangutils.utils.UtilConstants.ABSTRACT;
-import static org.onosproject.yangutils.utils.UtilConstants.ABSTRACT_EVENT;
-import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
-import static org.onosproject.yangutils.utils.UtilConstants.CLASS;
-import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
-import static org.onosproject.yangutils.utils.UtilConstants.COMPARABLE;
-import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_CAPS;
-import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.ENUM;
-import static org.onosproject.yangutils.utils.UtilConstants.ERROR_MSG_JAVA_IDENTITY;
-import static org.onosproject.yangutils.utils.UtilConstants.EVENT_LISTENER_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.EVENT_TYPE;
-import static org.onosproject.yangutils.utils.UtilConstants.EXTEND;
-import static org.onosproject.yangutils.utils.UtilConstants.FINAL;
-import static org.onosproject.yangutils.utils.UtilConstants.IMPLEMENTS;
-import static org.onosproject.yangutils.utils.UtilConstants.INTERFACE;
-import static org.onosproject.yangutils.utils.UtilConstants.LISTENER_SERVICE;
-import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
-import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
-import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
-import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
-import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
-import static org.onosproject.yangutils.utils.UtilConstants.REGEX_FOR_ANY_STRING_ENDING_WITH_SERVICE;
-import static org.onosproject.yangutils.utils.UtilConstants.SERVICE;
-import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
-import static org.onosproject.yangutils.utils.UtilConstants.STATIC;
-import static org.onosproject.yangutils.utils.UtilConstants.SUBJECT;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
-
-/**
- * Represents generator for class definition of generated files.
- */
-final class ClassDefinitionGenerator {
-
- /**
- * Creates an instance of class definition generator.
- */
- private ClassDefinitionGenerator() {
- }
-
- /**
- * Based on the file type and the YANG name of the file, generate the class
- * / interface definition start.
- *
- * @param genFileTypes generated file type
- * @param yangName class name
- * @return class definition
- */
- static String generateClassDefinition(int genFileTypes, String yangName) {
-
- /*
- * Based on the file type and the YANG name of the file, generate the
- * class / interface definition start.
- */
- switch (genFileTypes) {
- case GENERATE_TYPEDEF_CLASS:
- case GENERATE_UNION_CLASS:
- return getTypeClassDefinition(yangName);
- case GENERATE_ENUM_CLASS:
- return getEnumClassDefinition(yangName);
- default:
- return null;
- }
- }
-
- /**
- * Based on the file type and the YANG name of the file, generate the class
- * / interface definition start.
- *
- * @param genFileTypes generated file type
- * @param yangName class name
- * @param curNode current YANG node
- * @return class definition
- */
- static String generateClassDefinition(int genFileTypes, String yangName,
- YangNode curNode) {
- /*
- * Based on the file type and the YANG name of the file, generate the
- * class / interface definition start.
- */
- switch (genFileTypes) {
- case INTERFACE_MASK:
- return getInterfaceDefinition(yangName, curNode);
- case BUILDER_CLASS_MASK:
- return getBuilderClassDefinition(yangName, curNode);
- case DEFAULT_CLASS_MASK:
- return getImplClassDefinition(yangName, curNode);
- case BUILDER_INTERFACE_MASK:
- return getBuilderInterfaceDefinition(yangName, curNode);
- case GENERATE_SERVICE_AND_MANAGER:
- return getRpcInterfaceDefinition(yangName, curNode);
- case GENERATE_EVENT_CLASS:
- String eventName = yangName + SUBJECT;
- return getEventDefinition(yangName, eventName);
- case GENERATE_EVENT_LISTENER_INTERFACE:
- return getEventListenerDefinition(yangName);
- case GENERATE_KEY_CLASS:
- return getKeyClassDefinition(yangName);
- case GENERATE_EVENT_SUBJECT_CLASS:
- return getClassDefinition(yangName);
- case GENERATE_IDENTITY_CLASS:
- return getIdentityClassDefinition(yangName, curNode);
- default:
- return null;
- }
- }
-
- /**
- * Returns enum file class definition.
- *
- * @param yangName class name
- * @return enum file class definition
- */
- private static String getEnumClassDefinition(String yangName) {
- return getDefaultDefinition(ENUM, yangName, PUBLIC);
- }
-
- /**
- * Returns interface file class definition.
- *
- * @param yangName file name
- * @return definition
- */
- private static String getInterfaceDefinition(String yangName,
- YangNode curNode) {
-
- String clsDef = getClassDefinitionForWhenExtended(curNode, yangName,
- INTERFACE_MASK);
- if (clsDef != null) {
- return clsDef;
- }
- return getDefaultDefinition(INTERFACE, yangName, PUBLIC);
- }
-
- /**
- * Returns builder interface file class definition.
- *
- * @param yangName java class name, corresponding to which the builder
- * class is being generated
- * @return definition
- */
- private static String getBuilderInterfaceDefinition(String yangName,
- YangNode curNode) {
- if (!(curNode instanceof YangCase) &&
- !(curNode instanceof YangAugment)) {
- String clsDef = getClassDefinitionForWhenExtended(
- curNode, yangName, BUILDER_INTERFACE_MASK);
- if (clsDef != null) {
- return clsDef;
- }
- }
- return getDefaultDefinition(INTERFACE, getSuffixedName(yangName, BUILDER),
- null);
- }
-
- /**
- * Returns builder file class definition.
- *
- * @param yangName file name
- * @return definition
- */
- private static String getBuilderClassDefinition(String yangName,
- YangNode curNode) {
- String mod = getSpecificModifier(PUBLIC, STATIC);
- String bName = getSuffixedName(yangName, BUILDER);
- if (!(curNode instanceof YangCase)) {
- String clsDef = getClassDefinitionForWhenExtended(curNode, yangName,
- BUILDER_CLASS_MASK);
- if (clsDef != null) {
- return clsDef;
- }
- }
- return getDefaultDefinitionWithImpl(CLASS, bName, mod,
- getBuilderImplStringClassDef(yangName));
- }
-
- /**
- * Returns impl file class definition.
- *
- * @param yangName file name
- * @return definition
- */
- private static String getImplClassDefinition(String yangName,
- YangNode curNode) {
- if (!(curNode instanceof YangCase)) {
- String clsDef = getClassDefinitionForWhenExtended(
- curNode, yangName, DEFAULT_CLASS_MASK);
- if (clsDef != null) {
- return clsDef;
- }
- }
- if (curNode instanceof RpcNotificationContainer) {
- return getDefaultDefinitionWithImpl(
- CLASS, getSuffixedName(yangName, OP_PARAM), PUBLIC, yangName);
- }
- return getDefaultDefinitionWithImpl(CLASS, getDefaultName(yangName),
- PUBLIC, yangName);
- }
-
- /**
- * Returns impl file class definition.
- *
- * @param yangName file name
- * @return definition
- */
- private static String getClassDefinition(String yangName) {
- return getDefaultDefinition(CLASS, yangName, PUBLIC);
- }
-
- /**
- * Returns impl file class definition.
- *
- * @param yangName file name
- * @return definition
- */
- private static String getKeyClassDefinition(String yangName) {
- String compareName = COMPARABLE + brackets(
- OPEN_CLOSE_DIAMOND_WITH_VALUE, yangName, null);
- return getDefinitionWithImplements(CLASS, yangName, PUBLIC, compareName);
- }
-
- /**
- * Returns implementation file identity class definition.
- *
- * @param yangName file name
- * @return identity class definition
- */
- private static String getIdentityClassDefinition(String yangName, YangNode curNode) {
- String error = getErrorMsg(ERROR_MSG_JAVA_IDENTITY, curNode.getName(),
- curNode.getLineNumber(), curNode
- .getCharPosition(), curNode
- .getFileName());
- if (!(curNode instanceof YangIdentity)) {
- throw new TranslatorException(error);
- }
- YangIdentity identity = (YangIdentity) curNode;
- String mod = getSpecificModifier(PUBLIC, ABSTRACT);
- if (identity.getBaseNode() != null) {
- YangIdentity baseIdentity = identity.getBaseNode().getReferredIdentity();
- if (baseIdentity == null) {
- throw new TranslatorException(error);
- }
-
- JavaFileInfoTranslator fileInfo = ((JavaFileInfoContainer) baseIdentity)
- .getJavaFileInfo();
- return getDefaultDefinitionWithExtends(
- CLASS, yangName, mod, getCapitalCase(fileInfo.getJavaName()));
- }
- return getDefaultDefinition(CLASS, yangName, mod);
- }
-
- /**
- * Returns type file class definition.
- *
- * @param yangName file name
- * @return definition
- */
- private static String getTypeClassDefinition(String yangName) {
- return getDefaultDefinition(CLASS, yangName,
- getSpecificModifier(PUBLIC, FINAL));
- }
-
- /**
- * Returns RPC file interface definition.
- *
- * @param yangName file name
- * @param curNode current YANG node
- * @return definition
- */
- private static String getRpcInterfaceDefinition(String yangName, YangNode curNode) {
- JavaExtendsListHolder holder = ((TempJavaCodeFragmentFilesContainer) curNode)
- .getTempJavaCodeFragmentFiles().getServiceTempFiles()
- .getJavaExtendsListHolder();
- if (holder.getExtendsList() != null && !holder.getExtendsList().isEmpty()) {
- curNode = curNode.getChild();
- while (curNode != null) {
- if (curNode instanceof YangNotification) {
- return getRpcInterfaceDefinitionWhenItExtends(yangName);
- }
- curNode = curNode.getNextSibling();
- }
- }
- if (yangName.matches(REGEX_FOR_ANY_STRING_ENDING_WITH_SERVICE)) {
- return getDefaultDefinition(INTERFACE, yangName, PUBLIC);
- }
- String name = getSuffixedName(
- yangName.substring(0, yangName.length() - 7), SERVICE);
- return getDefaultDefinitionWithImpl(CLASS, yangName, PUBLIC, name);
- }
-
- /* Provides class definition when RPC interface needs to extends any event.*/
- private static String getRpcInterfaceDefinitionWhenItExtends(String yangName) {
-
- StringBuilder newString = new StringBuilder(yangName);
- newString.replace(yangName.lastIndexOf(SERVICE), yangName
- .lastIndexOf(SERVICE) + 7, EMPTY_STRING);
- return getDefaultDefinitionWithExtends(
- INTERFACE, yangName, PUBLIC, getEventExtendsString(
- getSuffixedName(newString.toString(), EVENT_STRING),
- LISTENER_SERVICE, getSuffixedName(newString.toString(),
- EVENT_LISTENER_STRING)));
- }
-
- /**
- * Returns event class definition.
- *
- * @param javaName file name
- * @return definition
- */
- private static String getEventDefinition(String javaName, String eventName) {
- return getDefaultDefinitionWithExtends(
- CLASS, javaName, PUBLIC, getEventExtendsString(
- getSuffixedName(javaName, EVENT_TYPE), ABSTRACT_EVENT,
- eventName));
-
- }
-
- /**
- * Returns event listener interface definition.
- *
- * @param javaName file name
- * @return definition
- */
- private static String getEventListenerDefinition(String javaName) {
-
- String name = javaName.substring(0, javaName.length() - 8);
- return getDefaultDefinitionWithExtends(
- INTERFACE, javaName, PUBLIC, EVENT_LISTENER_STRING +
- brackets(OPEN_CLOSE_DIAMOND_WITH_VALUE, name, null));
- }
-
- /**
- * Returns class definition when class is extending another class.
- *
- * @param curNode current node
- * @param yangName name
- * @param genFileTypes gen file type
- * @return class definition
- */
- private static String getClassDefinitionForWhenExtended(
- YangNode curNode, String yangName, int genFileTypes) {
- JavaExtendsListHolder holder = ((TempJavaCodeFragmentFilesContainer) curNode)
- .getTempJavaCodeFragmentFiles().getBeanTempFiles()
- .getJavaExtendsListHolder();
- StringBuilder def = new StringBuilder();
- if (holder.getExtendsList() != null && !holder.getExtendsList().isEmpty()) {
- def.append(PUBLIC).append(SPACE);
- switch (genFileTypes) {
- case INTERFACE_MASK:
- def.append(INTERFACE).append(SPACE).append(yangName)
- .append(SPACE).append(EXTEND).append(SPACE);
- def = new StringBuilder(getDefinitionString(def.toString(),
- holder));
- break;
- case BUILDER_INTERFACE_MASK:
- def.append(INTERFACE)
- .append(SPACE).append(yangName).append(BUILDER)
- .append(SPACE).append(EXTEND).append(SPACE);
- def = new StringBuilder(getDefinitionString(
- def.toString(), holder));
- break;
- case BUILDER_CLASS_MASK:
- def.append(STATIC).append(SPACE).append(CLASS)
- .append(SPACE).append(yangName).append(BUILDER)
- .append(SPACE).append(EXTEND).append(SPACE);
- def = new StringBuilder(getDefinitionString(def.toString(),
- holder));
- def.append(SPACE).append(IMPLEMENTS).append(SPACE)
- .append(yangName).append(PERIOD)
- .append(yangName).append(BUILDER);
- break;
- case DEFAULT_CLASS_MASK:
- if (curNode instanceof RpcNotificationContainer) {
- def.append(CLASS).append(SPACE).append(yangName)
- .append(OP_PARAM).append(SPACE).append(EXTEND)
- .append(SPACE);
- } else {
- def.append(CLASS).append(SPACE).append(DEFAULT_CAPS)
- .append(yangName).append(SPACE).append(EXTEND)
- .append(SPACE);
- }
- def = new StringBuilder(getDefinitionString(def.toString(),
- holder));
- def.append(SPACE).append(IMPLEMENTS).append(SPACE)
- .append(yangName);
- break;
- default:
- return null;
- }
- return def.append(SPACE).append(OPEN_CURLY_BRACKET)
- .append(NEW_LINE).toString();
- }
- return null;
- }
-
- /**
- * Returns updated class definition.
- *
- * @param def current definition
- * @param holder extend list holder
- * @return updated class definition
- */
- private static String getDefinitionString(String def,
- JavaExtendsListHolder holder) {
- StringBuilder builder = new StringBuilder(def);
- String str;
- for (JavaQualifiedTypeInfoTranslator info : holder.getExtendsList()) {
- if (!holder.getExtendedClassStore().get(info)) {
- str = info.getClassInfo() + COMMA + SPACE;
- } else {
- str = info.getPkgInfo() + PERIOD + info.getClassInfo() +
- COMMA + SPACE;
- }
- builder.append(str);
- }
- def = builder.toString();
- return trimAtLast(def, COMMA);
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/IndentationType.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/IndentationType.java
deleted file mode 100644
index e49bc4b..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/IndentationType.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava.utils;
-
-/**
- * Represents indentation type.
- */
-public enum IndentationType {
-
- //Four space indentation.
- FOUR_SPACE,
-
- //Eight space indentation.
- EIGHT_SPACE,
-
- //Twelve space indentation.
- TWELVE_SPACE,
-
- //Sixteen space indentation.
- SIXTEEN_SPACE,
-
- //Twenty space indentation.
- TWENTY_SPACE,
-
- //Twenty four space indentation.
- TWENTY_FOUR_SPACE,
-
- //Twenty eight space indentation.
- TWENTY_EIGHT_SPACE
-
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGen.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGen.java
deleted file mode 100644
index 56bde74..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGen.java
+++ /dev/null
@@ -1,454 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava.utils;
-
-import org.onosproject.yangutils.datamodel.YangCompilerAnnotation;
-import org.onosproject.yangutils.datamodel.YangDataStructure;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
-import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
-import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
-import org.onosproject.yangutils.utils.UtilConstants.Operation;
-
-import java.util.List;
-
-import static java.util.Collections.sort;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getEnumJavaAttribute;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangDataStructure;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getDefaultDefinition;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getImportString;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getOpenCloseParaWithValue;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.signatureClose;
-import static org.onosproject.yangutils.utils.UtilConstants.BIT_SET;
-import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
-import static org.onosproject.yangutils.utils.UtilConstants.DIAMOND_CLOSE_BRACKET;
-import static org.onosproject.yangutils.utils.UtilConstants.DIAMOND_OPEN_BRACKET;
-import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
-import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.ENUM;
-import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
-import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
-import static org.onosproject.yangutils.utils.UtilConstants.HASH_MAP;
-import static org.onosproject.yangutils.utils.UtilConstants.INT;
-import static org.onosproject.yangutils.utils.UtilConstants.INT_MAX_RANGE_ATTR;
-import static org.onosproject.yangutils.utils.UtilConstants.INT_MIN_RANGE_ATTR;
-import static org.onosproject.yangutils.utils.UtilConstants.KEYS;
-import static org.onosproject.yangutils.utils.UtilConstants.LIST;
-import static org.onosproject.yangutils.utils.UtilConstants.LONG_MAX_RANGE_ATTR;
-import static org.onosproject.yangutils.utils.UtilConstants.LONG_MIN_RANGE_ATTR;
-import static org.onosproject.yangutils.utils.UtilConstants.MAP;
-import static org.onosproject.yangutils.utils.UtilConstants.NEW;
-import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
-import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CLOSE_BRACKET_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CLOSE_DIAMOND_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
-import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
-import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
-import static org.onosproject.yangutils.utils.UtilConstants.QUEUE;
-import static org.onosproject.yangutils.utils.UtilConstants.QUOTES;
-import static org.onosproject.yangutils.utils.UtilConstants.SCHEMA_NAME;
-import static org.onosproject.yangutils.utils.UtilConstants.SELECT_LEAF;
-import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
-import static org.onosproject.yangutils.utils.UtilConstants.SET;
-import static org.onosproject.yangutils.utils.UtilConstants.SET_VALUE_PARA;
-import static org.onosproject.yangutils.utils.UtilConstants.SHORT_MAX_RANGE_ATTR;
-import static org.onosproject.yangutils.utils.UtilConstants.SHORT_MIN_RANGE_ATTR;
-import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
-import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
-import static org.onosproject.yangutils.utils.UtilConstants.TYPE;
-import static org.onosproject.yangutils.utils.UtilConstants.UINT8_MAX_RANGE_ATTR;
-import static org.onosproject.yangutils.utils.UtilConstants.UINT8_MIN_RANGE_ATTR;
-import static org.onosproject.yangutils.utils.UtilConstants.UINT_MAX_RANGE_ATTR;
-import static org.onosproject.yangutils.utils.UtilConstants.UINT_MIN_RANGE_ATTR;
-import static org.onosproject.yangutils.utils.UtilConstants.ULONG_MAX_RANGE_ATTR;
-import static org.onosproject.yangutils.utils.UtilConstants.ULONG_MIN_RANGE_ATTR;
-import static org.onosproject.yangutils.utils.UtilConstants.VALUE_LEAF;
-import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_INFO_MAP;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.ENUM_ATTRIBUTE;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.enumJavaDocForInnerClass;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
-
-/**
- * Represents utility class to generate the java snippet.
- */
-public final class JavaCodeSnippetGen {
-
- // No instantiation.
- private JavaCodeSnippetGen() {
- }
-
- /**
- * Returns the java file header comment.
- *
- * @return the java file header comment
- */
- public static String getFileHeaderComment() {
-
- /*
- * TODO return the file header.
- */
- return null;
- }
-
- /**
- * Returns the textual java code information corresponding to the import
- * list.
- *
- * @param importInfo import info
- * @return the textual java code information corresponding to the import
- * list
- */
- static String getImportText(JavaQualifiedTypeInfoTranslator importInfo) {
- return getImportString(importInfo.getPkgInfo(), importInfo
- .getClassInfo());
- }
-
- /**
- * Returns the textual java code for attribute definition in class.
- *
- * @param typePkg Package of the attribute type
- * @param attrType java attribute type
- * @param attrName name of the attribute
- * @param isList is list attribute
- * @param accessType attribute access type
- * @param annotation compiler annotation
- * @return the textual java code for attribute definition in class
- */
- public static String getJavaAttributeDefinition(String typePkg,
- String attrType,
- String attrName,
- boolean isList,
- String accessType,
- YangCompilerAnnotation annotation) {
- StringBuilder attrDef = new StringBuilder(FOUR_SPACE_INDENTATION);
- attrDef.append(accessType).append(SPACE);
-
- if (!isList) {
- if (typePkg != null) {
- attrDef.append(typePkg).append(PERIOD);
- }
-
- attrDef.append(attrType).append(SPACE)
- .append(attrName);
- //Initialize select leaf/value leaf/ augment map attribute.
- if (attrName.equals(SELECT_LEAF) || attrName.equals(VALUE_LEAF)) {
- attrDef.append(SPACE).append(EQUAL).append(SPACE).append(NEW)
- .append(SPACE).append(BIT_SET)
- .append(OPEN_CLOSE_BRACKET_STRING);
- } else if (attrName.equals(YANG_AUGMENTED_INFO_MAP)) {
- attrDef.append(SPACE).append(EQUAL).append(SPACE).append(NEW)
- .append(SPACE).append(HASH_MAP)
- .append(OPEN_CLOSE_DIAMOND_STRING)
- .append(OPEN_CLOSE_BRACKET_STRING);
- }
-
- attrDef.append(signatureClose());
- } else {
- StringBuilder type = new StringBuilder();
- if (typePkg != null) {
- type.append(typePkg).append(PERIOD);
- }
-
- type.append(attrType);
-
- // Add starting definition.
- addAttrStartDef(annotation, attrDef, type.toString());
-
-
- // Add ending definition.
- addAttrEndDef(attrDef, attrName);
- }
- return attrDef.toString();
- }
-
- /**
- * Adds starting attribute definition.
- *
- * @param annotation compiler annotation
- * @param attrDef JAVA attribute definition
- * @param type attr type
- */
- private static void addAttrStartDef(YangCompilerAnnotation annotation,
- StringBuilder attrDef, String type) {
- YangDataStructure ds = getYangDataStructure(annotation);
- if (ds != null) {
- switch (ds) {
- case QUEUE: {
- attrDef.append(QUEUE)
- .append(DIAMOND_OPEN_BRACKET);
- break;
- }
- case SET: {
- attrDef.append(SET)
- .append(DIAMOND_OPEN_BRACKET);
- break;
- }
- case MAP:
- attrDef.append(MAP).append(DIAMOND_OPEN_BRACKET)
- .append(type).append(KEYS).append(COMMA);
- break;
- default: {
- attrDef.append(LIST)
- .append(DIAMOND_OPEN_BRACKET);
- }
- }
- } else {
- attrDef.append(LIST).append(DIAMOND_OPEN_BRACKET);
- }
- attrDef.append(type);
- }
-
- /**
- * Adds ending attribute definition.
- *
- * @param attrDef JAVA attribute definition
- * @param attrName name of attribute
- */
- private static void addAttrEndDef(StringBuilder attrDef, String attrName) {
- attrDef.append(DIAMOND_CLOSE_BRACKET).append(SPACE)
- .append(attrName).append(signatureClose());
- }
-
- /**
- * Returns string for enum's attribute.
- *
- * @param name name of attribute
- * @param value value of the enum
- * @return string for enum's attribute
- */
- public static String generateEnumAttributeString(String name, int value) {
- String enumName = getEnumJavaAttribute(name);
- return enumJavaDocForInnerClass(name) + EIGHT_SPACE_INDENTATION +
- enumName.toUpperCase() + getOpenCloseParaWithValue(
- value + EMPTY_STRING) + COMMA + NEW_LINE;
- }
-
- /**
- * Returns string for enum's attribute for enum class.
- *
- * @param name name of attribute
- * @param value value of the enum
- * @return string for enum's attribute
- */
- public static String generateEnumAttributeStringWithSchemaName(
- String name, int value) {
- String enumName = getEnumJavaAttribute(name);
- String str = value + COMMA + SPACE + QUOTES + name + QUOTES;
- return getJavaDoc(ENUM_ATTRIBUTE, name, false, null) +
- FOUR_SPACE_INDENTATION + enumName.toUpperCase() +
- getOpenCloseParaWithValue(str) + COMMA + NEW_LINE;
- }
-
- /**
- * Returns sorted import list.
- *
- * @param imports import list
- * @return sorted import list
- */
- public static List<String> sortImports(List<String> imports) {
- sort(imports);
- return imports;
- }
-
- /**
- * Returns event enum start.
- *
- * @return event enum start
- */
- static String getEventEnumTypeStart() {
- return NEW_LINE + FOUR_SPACE_INDENTATION +
- getDefaultDefinition(ENUM, TYPE, PUBLIC);
- }
-
- /**
- * Adds listener's imports.
- *
- * @param curNode currentYangNode.
- * @param imports import list
- * @param operation add or remove
- */
- public static void addListenersImport(YangNode curNode,
- List<String> imports,
- Operation operation) {
- String thisImport;
- TempJavaServiceFragmentFiles tempFiles =
- ((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles()
- .getServiceTempFiles();
- thisImport = tempFiles.getJavaImportData().getListenerServiceImport();
- performOperationOnImports(imports, thisImport, operation);
- }
-
- /**
- * Performs given operations on import list.
- *
- * @param imports list of imports
- * @param curImport current import
- * @param operation ADD or REMOVE
- * @return import list
- */
- private static List<String> performOperationOnImports(List<String> imports,
- String curImport,
- Operation operation) {
- switch (operation) {
- case ADD:
- imports.add(curImport);
- break;
- case REMOVE:
- imports.remove(curImport);
- break;
- default:
- throw new TranslatorException("Invalid operation type");
- }
- sortImports(imports);
- return imports;
- }
-
- /**
- * Returns integer attribute for enum's class to get the values.
- *
- * @param className enum's class name
- * @return enum's attribute
- */
- static String getEnumsValueAttribute(String className) {
- return getJavaAttributeDefinition(null, INT, className,
- false, PRIVATE, null) +
- getJavaAttributeDefinition(null, STRING_DATA_TYPE, SCHEMA_NAME,
- false, PRIVATE, null) + NEW_LINE;
- }
-
- /**
- * Adds attribute for int ranges.
- *
- * @param modifier modifier for attribute
- * @param addFirst true if int need to be added fist.
- * @return attribute for int ranges
- */
- static String addStaticAttributeIntRange(String modifier,
- boolean addFirst) {
- if (addFirst) {
- return getTypeConflictAttributeStrings(modifier,
- INT_MIN_RANGE_ATTR,
- INT_MAX_RANGE_ATTR);
- }
- return getTypeConflictAttributeStrings(modifier,
- UINT_MIN_RANGE_ATTR,
- UINT_MAX_RANGE_ATTR);
- }
-
- /**
- * Adds attribute for long ranges.
- *
- * @param modifier modifier for attribute
- * @param addFirst if need to be added first
- * @return attribute for long ranges
- */
- static String addStaticAttributeLongRange(String modifier,
- boolean addFirst) {
- if (addFirst) {
- return getTypeConflictAttributeStrings(modifier,
- LONG_MIN_RANGE_ATTR,
- LONG_MAX_RANGE_ATTR);
- }
- return getTypeConflictAttributeStrings(modifier,
- ULONG_MIN_RANGE_ATTR,
- ULONG_MAX_RANGE_ATTR);
- }
-
- /**
- * Adds attribute for long ranges.
- *
- * @param modifier modifier for attribute
- * @param addFirst if need to be added first
- * @return attribute for long ranges
- */
- static String addStaticAttributeShortRange(String modifier,
- boolean addFirst) {
- if (addFirst) {
- return getTypeConflictAttributeStrings(modifier,
- SHORT_MIN_RANGE_ATTR,
- SHORT_MAX_RANGE_ATTR);
- }
- return getTypeConflictAttributeStrings(modifier,
- UINT8_MIN_RANGE_ATTR,
- UINT8_MAX_RANGE_ATTR);
- }
-
- /**
- * Returns attribute for conflicting type in union.
- *
- * @param modifier modifier
- * @param attr1 attribute one
- * @param att2 attribute two
- * @return attribute for conflicting type in union
- */
- private static String getTypeConflictAttributeStrings(String modifier,
- String attr1,
- String att2) {
- return FOUR_SPACE_INDENTATION + modifier + SPACE +
- attr1 + FOUR_SPACE_INDENTATION + modifier +
- SPACE + att2 + NEW_LINE;
- }
-
- /**
- * Returns operation type enum.
- *
- * @return operation type enum
- */
- static String getOperationTypeEnum() {
- return " /**\n" +
- " * Specify the node specific operation in protocols " +
- "like NETCONF.\n" +
- " * Applicable in protocol edit operation, not applicable" +
- " in query operation\n" +
- " */\n" +
- " public static enum OnosYangOpType {\n" +
- " MERGE,\n" +
- " REPLACE,\n" +
- " CREATE,\n" +
- " DELETE,\n" +
- " REMOVE,\n" +
- " NONE\n" +
- " }\n";
- }
-
- /**
- * Returns attribute in constructor for yang augmented info map.
- *
- * @return augment info map
- */
- static String getYangAugmentedMapObjectForConstruct() {
- return " this.yangAugmentedInfoMap = builderObject" +
- ".yangAugmentedInfoMap();\n";
- }
-
- /**
- * Returns set value parameter for union class.
- *
- * @return set value parameter for union class.
- */
- static String getSetValueParaForUnionClass() {
- String[] array = {NEW_LINE, SEMI_COLON};
- return new StringBuilder().append(trimAtLast(
- getJavaAttributeDefinition(null, BIT_SET, SET_VALUE_PARA,
- false, PRIVATE, null), array))
- .append(SPACE).append(EQUAL).append(SPACE).append(NEW)
- .append(SPACE).append(BIT_SET).append(OPEN_CLOSE_BRACKET_STRING)
- .append(signatureClose()).toString();
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaExtendsListHolder.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaExtendsListHolder.java
deleted file mode 100644
index f3c8829..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaExtendsListHolder.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava.utils;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
-import org.onosproject.yangutils.translator.tojava.JavaImportData;
-import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
-import org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles;
-
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
-
-/**
- * Represent the extends list for generated java classes. It holds the class details which needs to be extended by the
- * generated java code.
- */
-public class JavaExtendsListHolder {
-
- private Map<JavaQualifiedTypeInfoTranslator, Boolean> extendedClassStore;
- private List<JavaQualifiedTypeInfoTranslator> extendsList;
-
- /**
- * Creates an instance of JavaExtendsListHolder.
- */
- public JavaExtendsListHolder() {
- setExtendedClassStore(new HashMap<>());
- setExtendsList(new ArrayList<>());
- }
-
- /**
- * Returns extends list.
- *
- * @return extends list
- */
- Map<JavaQualifiedTypeInfoTranslator, Boolean> getExtendedClassStore() {
- return extendedClassStore;
- }
-
- /**
- * Sets extends list.
- *
- * @param extendedClass map of classes need to be extended
- */
- private void setExtendedClassStore(Map<JavaQualifiedTypeInfoTranslator, Boolean> extendedClass) {
- extendedClassStore = extendedClass;
- }
-
- /**
- * Adds to the extends list.
- *
- * @param info java file info
- * @param node YANG node
- * @param tempJavaFragmentFiles temp java fragment files
- */
- public void addToExtendsList(JavaQualifiedTypeInfoTranslator info, YangNode node,
- TempJavaFragmentFiles tempJavaFragmentFiles) {
- JavaFileInfoTranslator fileInfo = ((JavaFileInfoContainer) node).getJavaFileInfo();
-
- JavaImportData importData = tempJavaFragmentFiles.getJavaImportData();
- boolean qualified = importData.addImportInfo(info,
- getCapitalCase(fileInfo.getJavaName()), fileInfo.getPackage());
-
- /*true means import should be added*/
- getExtendedClassStore().put(info, qualified);
-
- addToExtendsList(info);
- }
-
- /**
- * Returns extends list.
- *
- * @return the extendsList
- */
- public List<JavaQualifiedTypeInfoTranslator> getExtendsList() {
- return extendsList;
- }
-
- /**
- * Sets extends info list.
- *
- * @param classInfoList the extends List to set
- */
- private void setExtendsList(List<JavaQualifiedTypeInfoTranslator> classInfoList) {
- extendsList = classInfoList;
- }
-
- /**
- * Adds extends info to list.
- *
- * @param classInfo class info
- */
- private void addToExtendsList(JavaQualifiedTypeInfoTranslator classInfo) {
- getExtendsList().add(classInfo);
- }
-
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java
deleted file mode 100644
index 116c905..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGenerator.java
+++ /dev/null
@@ -1,1307 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava.utils;
-
-import org.onosproject.yangutils.datamodel.RpcNotificationContainer;
-import org.onosproject.yangutils.datamodel.YangAugmentableNode;
-import org.onosproject.yangutils.datamodel.YangChoice;
-import org.onosproject.yangutils.datamodel.YangEnumeration;
-import org.onosproject.yangutils.datamodel.YangLeavesHolder;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.YangTypeDef;
-import org.onosproject.yangutils.datamodel.YangUnion;
-import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
-import org.onosproject.yangutils.translator.tojava.JavaImportData;
-import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
-import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
-import org.onosproject.yangutils.translator.tojava.TempJavaEnumerationFragmentFiles;
-import org.onosproject.yangutils.translator.tojava.TempJavaEventFragmentFiles;
-import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
-import org.onosproject.yangutils.translator.tojava.TempJavaTypeFragmentFiles;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import static java.util.Collections.sort;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.DEFAULT_CLASS_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_KEY_CLASS;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_IMPL_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_INTERFACE_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
-import static org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles.getCurNodeAsAttributeInTarget;
-import static org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles.getListOfAttributesForKey;
-import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.isGetSetOfRootNodeRequired;
-import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.FOUR_SPACE;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEnumsValueAttribute;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getEventEnumTypeStart;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getJavaAttributeDefinition;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getOperationTypeEnum;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getSetValueParaForUnionClass;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.initiateJavaFileGeneration;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.ENUM_METHOD_INT_VALUE;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.ENUM_METHOD_STRING_VALUE;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.builderMethod;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.generateBuildMethodForSubTree;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodImpl;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAddAugmentInfoMethodInterface;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getAugmentsDataMethodForService;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBitSetEnumClassFromString;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBitSetEnumClassToString;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getCompareToForKeyClass;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsConstructor;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEnumsOfValueMethod;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethod;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodClose;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethodOpen;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodClose;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getFromStringMethodSignature;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetter;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterForClass;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterString;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethod;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodClose;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getHashCodeMethodOpen;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getInterfaceLeafIdEnumSignature;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getRangeValidatorMethodForUnion;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForClass;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForSelectLeaf;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterString;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringForEnumClass;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringForType;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodClose;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethodOpen;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getUnionToStringMethod;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoImpl;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangAugmentInfoInterface;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.isLeafValueSetInterface;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.isSelectLeafSetInterface;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.setSelectLeafSetInterface;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getImportString;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getInterfaceLeafIdEnumMethods;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getIsSelectLeafSet;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getIsValueLeafSet;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodClose;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.signatureClose;
-import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getAugmentableSubTreeFiltering;
-import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessChildNodeSubtreeFiltering;
-import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessLeafListSubtreeFiltering;
-import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessLeafSubtreeFiltering;
-import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessSubTreeFilteringEnd;
-import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessSubTreeForChoiceInterface;
-import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessSubtreeFilteringStart;
-import static org.onosproject.yangutils.translator.tojava.utils.SubtreeFilteringMethodsGenerator.getProcessSubtreeFunctionBody;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.addDefaultConstructor;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getBeanFiles;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getTypeFiles;
-import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
-import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
-import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_CLASS;
-import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_INTERFACE;
-import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
-import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
-import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
-import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_CAPS;
-import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.ENUM_CLASS;
-import static org.onosproject.yangutils.utils.UtilConstants.EVENT_CLASS;
-import static org.onosproject.yangutils.utils.UtilConstants.EVENT_LISTENER_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.EVENT_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.EVENT_SUBJECT_NAME_SUFFIX;
-import static org.onosproject.yangutils.utils.UtilConstants.IMPL_CLASS;
-import static org.onosproject.yangutils.utils.UtilConstants.INT;
-import static org.onosproject.yangutils.utils.UtilConstants.INTERFACE;
-import static org.onosproject.yangutils.utils.UtilConstants.JAVA_UTIL_OBJECTS_IMPORT_CLASS;
-import static org.onosproject.yangutils.utils.UtilConstants.JAVA_UTIL_PKG;
-import static org.onosproject.yangutils.utils.UtilConstants.KEYS;
-import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
-import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
-import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
-import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
-import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
-import static org.onosproject.yangutils.utils.UtilConstants.RPC_CLASS;
-import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
-import static org.onosproject.yangutils.utils.UtilConstants.SERVICE_METHOD_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.TYPEDEF_CLASS;
-import static org.onosproject.yangutils.utils.UtilConstants.UNION_CLASS;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.MANAGER_SETTER_METHOD;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.replaceLast;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.validateLineLength;
-
-/**
- * Representation of java file generator.
- */
-public final class JavaFileGenerator {
-
- // No instantiation
- private JavaFileGenerator() {
- }
-
- /**
- * Returns generated interface file for current node.
- *
- * @param file file
- * @param imports imports for the file
- * @param curNode current YANG node
- * @param attrPresent if any attribute is present or not
- * @return interface file
- * @throws IOException when fails to write in file
- */
- public static File generateInterfaceFile(File file, List<String> imports,
- YangNode curNode,
- boolean attrPresent)
- throws IOException {
-
- JavaFileInfoTranslator fileInfo =
- ((JavaFileInfoContainer) curNode).getJavaFileInfo();
-
- String path;
- if (curNode instanceof RpcNotificationContainer) {
- path = fileInfo.getPluginConfig().getCodeGenDir() +
- fileInfo.getPackageFilePath();
- } else {
- path = fileInfo.getBaseCodeGenPath() +
- fileInfo.getPackageFilePath();
- }
-
- String className = getCapitalCase(fileInfo.getJavaName());
-
- boolean leavesPresent;
- YangLeavesHolder leavesHolder;
- if (curNode instanceof YangLeavesHolder) {
- leavesHolder = (YangLeavesHolder) curNode;
- leavesPresent = leavesPresent(leavesHolder);
- } else {
- leavesPresent = false;
- }
-
- initiateJavaFileGeneration(file, INTERFACE_MASK, imports, curNode,
- className);
-
- // Generate ENUM interface
- if (curNode instanceof RpcNotificationContainer) {
- insertDataIntoJavaFile(file, getOperationTypeEnum());
- }
- List<String> methods = new ArrayList<>();
-
- //Add only for choice class
- if (curNode instanceof YangChoice) {
- insertDataIntoJavaFile(file, getProcessSubTreeForChoiceInterface(
- curNode));
- }
-
- if (attrPresent) {
- // Add getter methods to interface file.
- try {
- //Leaf identifier enum.
- if (leavesPresent) {
- insertDataIntoJavaFile(file, getInterfaceLeafIdEnumSignature(
- className) + trimAtLast(replaceLast(
- getDataFromTempFileHandle(
- LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK,
- getBeanFiles(curNode), path),
- COMMA, SEMI_COLON), NEW_LINE) +
- getInterfaceLeafIdEnumMethods());
- }
-
- insertDataIntoJavaFile(file, NEW_LINE);
- //Getter methods.
- insertDataIntoJavaFile(file, getDataFromTempFileHandle(
- GETTER_FOR_INTERFACE_MASK, getBeanFiles(curNode), path));
- } catch (IOException e) {
- throw new IOException(getErrorMsg(className, INTERFACE));
- }
- }
-
- if (curNode instanceof YangAugmentableNode &&
- !(curNode instanceof YangChoice)) {
- methods.add(getYangAugmentInfoInterface());
- }
-
- if (leavesPresent) {
- methods.add(isLeafValueSetInterface());
- if (curNode.isOpTypeReq()) {
- methods.add(isSelectLeafSetInterface());
- }
- }
- for (String method : methods) {
- insertDataIntoJavaFile(file, method);
- }
- return file;
- }
-
- /**
- * Returns generated builder interface file for current node.
- *
- * @param file file
- * @param curNode current YANG node
- * @param attrPresent if any attribute is present or not
- * @return builder interface file
- * @throws IOException when fails to write in file
- */
- public static File generateBuilderInterfaceFile(File file, YangNode curNode,
- boolean attrPresent)
- throws IOException {
-
- JavaFileInfoTranslator fileInfo =
- ((JavaFileInfoContainer) curNode).getJavaFileInfo();
-
- boolean leavesPresent;
- YangLeavesHolder leavesHolder;
- if (curNode instanceof YangLeavesHolder &&
- curNode.isOpTypeReq()) {
- leavesHolder = (YangLeavesHolder) curNode;
- leavesPresent = leavesPresent(leavesHolder);
- } else {
- leavesPresent = false;
- }
-
- String className = getCapitalCase(fileInfo.getJavaName());
- String path;
- if (curNode instanceof RpcNotificationContainer) {
- path = fileInfo.getPluginConfig().getCodeGenDir() +
- fileInfo.getPackageFilePath();
- } else {
- path = fileInfo.getBaseCodeGenPath() +
- fileInfo.getPackageFilePath();
- }
-
- initiateJavaFileGeneration(file, BUILDER_INTERFACE_MASK, null, curNode,
- className);
- List<String> methods = new ArrayList<>();
- if (attrPresent) {
- try {
- //Getter methods.
- methods.add(getDataFromTempFileHandle(
- GETTER_FOR_INTERFACE_MASK,
- getBeanFiles(curNode), path));
-
- //Setter methods.
- methods.add(getDataFromTempFileHandle(
- SETTER_FOR_INTERFACE_MASK,
- getBeanFiles(curNode), path));
-
- //Add to list method.
- insertDataIntoJavaFile(file, getDataFromTempFileHandle(
- ADD_TO_LIST_INTERFACE_MASK, getBeanFiles(curNode), path));
- } catch (IOException e) {
- throw new IOException(getErrorMsg(className, BUILDER_INTERFACE));
- }
- }
-
- if (curNode instanceof YangAugmentableNode &&
- !(curNode instanceof YangChoice)) {
- methods.add(getAddAugmentInfoMethodInterface(className + BUILDER));
- methods.add(getYangAugmentInfoInterface());
- }
-
- if (leavesPresent) {
- methods.add(setSelectLeafSetInterface(className));
- }
- //Add build method to builder interface file.
- methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
- .getTempJavaCodeFragmentFiles()
- .addBuildMethodForInterface());
-
- //Add getters and setters in builder interface.
- for (String method : methods) {
- insertDataIntoJavaFile(file, method);
- }
-
- insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
- return file;
- }
-
- /**
- * Returns generated builder class file for current node.
- *
- * @param file file
- * @param curNode current YANG node
- * @param attrPresent if any attribute is present or not
- * @return builder class file
- * @throws IOException when fails to write in file
- */
- public static File generateBuilderClassFile(File file, YangNode curNode,
- boolean attrPresent)
- throws IOException {
-
- JavaFileInfoTranslator fileInfo =
- ((JavaFileInfoContainer) curNode).getJavaFileInfo();
-
- boolean leavesPresent;
- YangLeavesHolder leavesHolder;
- if (curNode instanceof YangLeavesHolder) {
- leavesHolder = (YangLeavesHolder) curNode;
- leavesPresent = leavesPresent(leavesHolder);
- } else {
- leavesPresent = false;
- }
-
- String className = getCapitalCase(fileInfo.getJavaName());
- String path;
- if (curNode instanceof RpcNotificationContainer) {
- path = fileInfo.getPluginConfig().getCodeGenDir() +
- fileInfo.getPackageFilePath();
- } else {
- path = fileInfo.getBaseCodeGenPath() +
- fileInfo.getPackageFilePath();
- }
-
- initiateJavaFileGeneration(file, BUILDER_CLASS_MASK, null, curNode,
- className);
- List<String> methods = new ArrayList<>();
- if (attrPresent) {
-
- //Add attribute strings.
- try {
- insertDataIntoJavaFile(file, getDataFromTempFileHandle(
- ATTRIBUTES_MASK, getBeanFiles(curNode), path));
- } catch (IOException e) {
- throw new IOException(getErrorMsg(className, BUILDER_CLASS));
- }
- try {
- //Getter methods.
- methods.add(getDataFromTempFileHandle(
- GETTER_FOR_CLASS_MASK, getBeanFiles(curNode), path));
- // Setter methods.
- methods.add(getDataFromTempFileHandle(
- SETTER_FOR_CLASS_MASK, getBeanFiles(curNode), path));
-
- //Add to list impl method.
- methods.add(getDataFromTempFileHandle(
- ADD_TO_LIST_IMPL_MASK, getBeanFiles(curNode), path));
-
- insertDataIntoJavaFile(file, NEW_LINE);
-
- //Add operation attribute methods.
- if (leavesPresent && curNode.isOpTypeReq()) {
- insertDataIntoJavaFile(file, NEW_LINE);
- methods.add(getSetterForSelectLeaf(className));
- }
- } catch (IOException e) {
- throw new IOException(getErrorMsg(className, BUILDER_CLASS));
- }
- } else {
- insertDataIntoJavaFile(file, NEW_LINE);
- }
-
- if (curNode instanceof YangAugmentableNode) {
- methods.add(getAddAugmentInfoMethodImpl(className + BUILDER));
- methods.add(getYangAugmentInfoImpl());
- }
-
- // Add default constructor and build method impl.
- methods.add(((TempJavaCodeFragmentFilesContainer) curNode)
- .getTempJavaCodeFragmentFiles()
- .addBuildMethodImpl());
- if (curNode.isOpTypeReq()) {
- methods.add(generateBuildMethodForSubTree(curNode));
- }
- methods.add(addDefaultConstructor(curNode, PUBLIC, BUILDER));
-
- //Add methods in builder class.
- for (String method : methods) {
- insertDataIntoJavaFile(file, method);
- }
- insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
- return file;
- }
-
- /**
- * Returns generated key class file for current list node.
- *
- * @param file file
- * @param curNode current YANG node
- * @return key class file
- * @throws IOException when fails to write in file
- */
- public static File generateKeyClassFile(File file, YangNode curNode)
- throws IOException {
-
- JavaFileInfoTranslator fileInfo =
- ((JavaFileInfoContainer) curNode).getJavaFileInfo();
-
- String className = getCapitalCase(fileInfo.getJavaName()) + KEYS;
- List<String> imports = new ArrayList<>();
-
- YangNode parent = curNode.getParent();
- JavaImportData importData = ((JavaCodeGeneratorInfo) parent)
- .getTempJavaCodeFragmentFiles().getBeanTempFiles()
- .getJavaImportData();
- JavaQualifiedTypeInfoTranslator info =
- new JavaQualifiedTypeInfoTranslator();
- info.setClassInfo(className);
- info.setPkgInfo(fileInfo.getPackage());
- importData.addImportInfo(info, parent.getJavaClassNameOrBuiltInType(),
- parent.getJavaPackage());
- List<JavaAttributeInfo> attrs = getListOfAttributesForKey(curNode);
-
- Iterator<JavaAttributeInfo> attrIt = attrs.iterator();
- JavaAttributeInfo attr;
- JavaQualifiedTypeInfoTranslator typeInfo;
- while (attrIt.hasNext()) {
- attr = attrIt.next();
- typeInfo = attr.getImportInfo();
- if (!typeInfo.getClassInfo().equals(className)) {
- imports.add(getImportString(attr.getImportInfo().getPkgInfo(),
- attr.getImportInfo().getClassInfo()));
- } else {
- attr.setIsQualifiedAccess(true);
- }
- }
-
- imports.add(getImportString(JAVA_UTIL_PKG,
- JAVA_UTIL_OBJECTS_IMPORT_CLASS));
-
- initiateJavaFileGeneration(file, GENERATE_KEY_CLASS, imports, curNode,
- className);
- String pkg = null;
- attrIt = attrs.iterator();
- while (attrIt.hasNext()) {
- attr = attrIt.next();
- if (attr.isQualifiedName()) {
- pkg = attr.getImportInfo().getPkgInfo();
- }
- insertDataIntoJavaFile(file, getJavaAttributeDefinition(
- pkg, attr.getImportInfo().getClassInfo(),
- attr.getAttributeName(), false, PROTECTED, null));
- }
- attrIt = attrs.iterator();
- while (attrIt.hasNext()) {
- attr = attrIt.next();
- //add getter methods
- insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, attr
- .getAttributeName(), false, null));
- insertDataIntoJavaFile(file, getGetterForClass(
- attr, GENERATE_KEY_CLASS));
- insertDataIntoJavaFile(file, NEW_LINE);
- //Add setter methods.
- insertDataIntoJavaFile(file, getJavaDoc(MANAGER_SETTER_METHOD, attr
- .getAttributeName(), false, null));
- insertDataIntoJavaFile(file, getSetterForClass(
- attr, className, GENERATE_EVENT_SUBJECT_CLASS));
- insertDataIntoJavaFile(file, NEW_LINE);
- }
- //add hashcode and equals method.
- insertDataIntoJavaFile(file, getHashCodeMethodOpen());
- StringBuilder builder = new StringBuilder();
- for (JavaAttributeInfo att : attrs) {
- builder.append(getHashCodeMethod(att));
- }
- insertDataIntoJavaFile(file, getHashCodeMethodClose(builder.toString()));
-
- insertDataIntoJavaFile(file, getEqualsMethodOpen(className));
- StringBuilder builder2 = new StringBuilder();
- for (JavaAttributeInfo att : attrs) {
- builder2.append(getEqualsMethod(att)).append(NEW_LINE);
- }
- insertDataIntoJavaFile(file, getEqualsMethodClose(builder2.toString()));
-
-
- insertDataIntoJavaFile(file, getCompareToForKeyClass(attrs, className));
-
- insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET);
- return file;
- }
-
- /**
- * Returns generated default class file for current node.
- *
- * @param file file
- * @param curNode current YANG node
- * @param attrPresent if any attribute is present or not
- * @param imports list of imports
- * @return impl class file
- * @throws IOException when fails to write in file
- */
- public static File generateDefaultClassFile(File file, YangNode curNode,
- boolean attrPresent,
- List<String> imports)
- throws IOException {
-
- JavaFileInfoTranslator fileInfo =
- ((JavaFileInfoContainer) curNode).getJavaFileInfo();
- boolean leavesPresent;
- YangLeavesHolder leavesHolder;
- if (curNode instanceof YangLeavesHolder) {
- leavesHolder = (YangLeavesHolder) curNode;
- leavesPresent = leavesPresent(leavesHolder);
- } else {
- leavesPresent = false;
- }
-
- boolean rootNode = false;
-
- String className = getCapitalCase(fileInfo.getJavaName());
- String opParamClassName = className;
- String name = DEFAULT_CAPS + className;
- String path;
- if (curNode instanceof RpcNotificationContainer) {
- opParamClassName = className + OP_PARAM;
- name = opParamClassName;
- rootNode = true;
- path = fileInfo.getPluginConfig().getCodeGenDir() +
- fileInfo.getPackageFilePath();
- } else {
- path = fileInfo.getBaseCodeGenPath() +
- fileInfo.getPackageFilePath();
- }
-
- initiateJavaFileGeneration(file, DEFAULT_CLASS_MASK, imports, curNode,
- className);
-
- List<String> methods = new ArrayList<>();
- if (attrPresent) {
- addDefaultClassAttributeInfo(file, curNode, className,
- opParamClassName, path, methods,
- rootNode);
- } else {
- insertDataIntoJavaFile(file, NEW_LINE);
- }
-
- if (curNode instanceof YangAugmentableNode) {
- methods.add(getYangAugmentInfoImpl());
- }
- try {
- //Constructor.
- String constructor = getConstructorStart(className, rootNode) +
- getDataFromTempFileHandle(
- CONSTRUCTOR_IMPL_MASK, getBeanFiles(curNode), path)
- + methodClose(FOUR_SPACE);
- methods.add(constructor);
- if (curNode.isOpTypeReq()) {
- String augmentableSubTreeFiltering = EMPTY_STRING;
- if (curNode instanceof YangAugmentableNode) {
- // add is filter content match.
- augmentableSubTreeFiltering = getAugmentableSubTreeFiltering();
- }
- methods.add(getProcessSubtreeFilteringStart(curNode) +
- getProcessSubtreeFunctionBody(curNode) +
- augmentableSubTreeFiltering +
- getProcessSubTreeFilteringEnd(name));
-
- if (curNode instanceof YangLeavesHolder) {
- if (((YangLeavesHolder) curNode).getListOfLeaf() != null &&
- !((YangLeavesHolder) curNode).getListOfLeaf().isEmpty()) {
- methods.add(getProcessLeafSubtreeFiltering(curNode,
- path));
- }
- if (((YangLeavesHolder) curNode).getListOfLeafList() != null &&
- !((YangLeavesHolder) curNode).getListOfLeafList().isEmpty()) {
- methods.add(getProcessLeafListSubtreeFiltering(curNode,
- path));
- }
- }
-
- if (curNode.getChild() != null) {
- methods.add(getProcessChildNodeSubtreeFiltering(curNode,
- path));
- }
- }
- } catch (IOException e) {
- throw new IOException(getErrorMsg(className, IMPL_CLASS));
- }
-
- methods.add(addDefaultConstructor(curNode, PROTECTED, DEFAULT));
-
- methods.add(builderMethod(className));
- if (leavesPresent) {
- methods.add(getIsValueLeafSet());
- if (curNode.isOpTypeReq()) {
- methods.add(getIsSelectLeafSet());
- }
- }
- // Add methods in impl class.
- for (String method : methods) {
- insertDataIntoJavaFile(file, method);
- }
-
- return file;
- }
-
- /**
- * Add methods related to attributes.
- *
- * @param file file
- * @param curNode current YANG node
- * @param className name of the class
- * @param opParamClassName op param class name
- * @param path file path
- * @param methods list of methods string
- * @param rootNode flag indicating whether node is root node
- * @throws IOException a violation in IO rule
- */
- private static void addDefaultClassAttributeInfo(File file, YangNode curNode,
- String className,
- String opParamClassName,
- String path, List<String> methods,
- boolean rootNode)
- throws IOException {
-
- //Add attribute strings.
- try {
- insertDataIntoJavaFile(file, getDataFromTempFileHandle(
- ATTRIBUTES_MASK, getBeanFiles(curNode), path));
- } catch (IOException e) {
- throw new IOException(getErrorMsg(className, IMPL_CLASS));
- }
-
- try {
- //Getter methods.
- methods.add(getDataFromTempFileHandle(
- GETTER_FOR_CLASS_MASK, getBeanFiles(curNode), path));
-
- // Hash code method.
- methods.add(getHashCodeMethodClose(
- getHashCodeMethodOpen() + getDataFromTempFileHandle(
- HASH_CODE_IMPL_MASK, getBeanFiles(curNode), path)
- .replace(NEW_LINE, EMPTY_STRING)));
-
- //Equals method.
- if (rootNode) {
- methods.add(getEqualsMethodClose(
- getEqualsMethodOpen(opParamClassName) +
- getDataFromTempFileHandle(
- EQUALS_IMPL_MASK,
- getBeanFiles(curNode), path)));
- } else {
- methods.add(getEqualsMethodClose(
- getEqualsMethodOpen(DEFAULT_CAPS + className) +
- getDataFromTempFileHandle(EQUALS_IMPL_MASK,
- getBeanFiles(curNode),
- path)));
- }
- // To string method.
- methods.add(getToStringMethodOpen() + getDataFromTempFileHandle(
- TO_STRING_IMPL_MASK, getBeanFiles(curNode), path) +
- getToStringMethodClose());
- } catch (IOException e) {
- throw new IOException(getErrorMsg(className, IMPL_CLASS));
- }
- }
-
- /**
- * Generates class file for type def.
- *
- * @param file generated file
- * @param curNode current YANG node
- * @param imports imports for file
- * @return type def class file
- * @throws IOException when fails to generate class file
- */
- public static File generateTypeDefClassFile(File file, YangNode curNode,
- List<String> imports)
- throws IOException {
-
- JavaFileInfoTranslator fileInfo =
- ((JavaFileInfoContainer) curNode).getJavaFileInfo();
- // import
- String className = getCapitalCase(fileInfo.getJavaName());
- String path = fileInfo.getBaseCodeGenPath() +
- fileInfo.getPackageFilePath();
- initiateJavaFileGeneration(file, className, GENERATE_TYPEDEF_CLASS,
- imports, path);
-
- List<String> methods = new ArrayList<>();
- insertDataIntoJavaFile(file, NEW_LINE);
- //Add attribute strings.
- try {
- insertDataIntoJavaFile(file, getDataFromTempFileHandle(
- ATTRIBUTES_MASK, getTypeFiles(curNode), path));
- } catch (IOException e) {
- throw new IOException(getErrorMsg(className, TYPEDEF_CLASS));
- }
-
- //Default constructor.
- methods.add(addDefaultConstructor(curNode, PRIVATE, EMPTY_STRING));
-
- try {
-
- //Type constructor.
- methods.add(getDataFromTempFileHandle(
- CONSTRUCTOR_FOR_TYPE_MASK, getTypeFiles(curNode), path));
-
- //Of method.
- methods.add(getDataFromTempFileHandle(
- OF_STRING_IMPL_MASK, getTypeFiles(curNode), path));
-
- //Getter methods.
- methods.add(getDataFromTempFileHandle(
- GETTER_FOR_CLASS_MASK, getTypeFiles(curNode), path));
-
- // Hash code method.
- methods.add(getHashCodeMethodClose(
- getHashCodeMethodOpen() + getDataFromTempFileHandle(
- HASH_CODE_IMPL_MASK, getTypeFiles(curNode), path)
- .replace(NEW_LINE, EMPTY_STRING)));
-
- //Equals method.
- methods.add(getEqualsMethodClose(
- getEqualsMethodOpen(className + EMPTY_STRING) +
- getDataFromTempFileHandle(EQUALS_IMPL_MASK,
- getTypeFiles(curNode), path)));
-
- // To string method.
- addTypedefToString(curNode, methods);
-
- JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
-
- //From string method.
- methods.add(getFromStringMethodSignature(className) +
- getDataFromTempFileHandle(
- FROM_STRING_IMPL_MASK,
- javaGenInfo.getTempJavaCodeFragmentFiles()
- .getTypeTempFiles(), path) +
- getFromStringMethodClose());
- } catch (IOException e) {
- throw new IOException(getErrorMsg(className, TYPEDEF_CLASS));
- }
-
- for (String method : methods) {
- insertDataIntoJavaFile(file, method);
- }
- insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
-
- return validateLineLength(file);
- }
-
- /**
- * Adds typedef to string method.
- *
- * @param curNode current node
- * @param methods list of methods string
- */
- private static void addTypedefToString(YangNode curNode,
- List<String> methods) {
- //To string method.
-
- List<YangType<?>> types = ((YangTypeDef) curNode).getTypeList();
- YangType type = types.get(0);
- methods.add(getToStringForType(getCamelCase(type.getDataTypeName(),
- null), type));
- }
-
- /**
- * Generates class file for union type.
- *
- * @param file generated file
- * @param curNode current YANG node
- * @param imports imports for file
- * @return type def class file
- * @throws IOException when fails to generate class file
- */
- public static File generateUnionClassFile(File file, YangNode curNode,
- List<String> imports)
- throws IOException {
-
- JavaFileInfoTranslator fileInfo =
- ((JavaFileInfoContainer) curNode).getJavaFileInfo();
-
- String className = getCapitalCase(fileInfo.getJavaName());
- String path = fileInfo.getBaseCodeGenPath() +
- fileInfo.getPackageFilePath();
-
- TempJavaTypeFragmentFiles tempFiles =
- ((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles()
- .getTypeTempFiles();
-
- boolean intConflict = false;
- boolean longConflict = false;
- boolean shortConflict = false;
- JavaAttributeInfo intAttr = tempFiles.getIntAttribute();
- if (intAttr == null) {
- intAttr = tempFiles.getUIntAttribute();
- }
-
- JavaAttributeInfo longAttr =
- tempFiles.getLongAttribute();
- if (longAttr == null) {
- longAttr = tempFiles.getULongAttribute();
- }
-
- JavaAttributeInfo shortAttr =
- tempFiles.getShortAttribute();
- if (shortAttr == null) {
- shortAttr = tempFiles.getUInt8Attribute();
- }
-
- if (intAttr != null) {
- intConflict = intAttr.isIntConflict();
- }
- if (longAttr != null) {
- longConflict = longAttr.isLongConflict();
- }
- if (shortAttr != null) {
- shortConflict = shortAttr.isShortConflict();
- }
- if (longConflict) {
- String impt = tempFiles.getJavaImportData().getBigIntegerImport();
- if (!imports.contains(impt)) {
- imports.add(impt);
- sort(imports);
- }
- }
-
- initiateJavaFileGeneration(file, className, GENERATE_UNION_CLASS,
- imports, path);
-
- List<String> methods = new ArrayList<>();
-
- // Add attribute strings.
- try {
- addUnionClassAttributeInfo(file, curNode, intConflict,
- longConflict, shortConflict, path, tempFiles);
- } catch (IOException e) {
- throw new IOException(getErrorMsg(className, UNION_CLASS));
- }
-
- //Default constructor.
- methods.add(addDefaultConstructor(curNode, PRIVATE, EMPTY_STRING));
-
- try {
-
- //Type constructor.
- methods.add(getDataFromTempFileHandle(
- CONSTRUCTOR_FOR_TYPE_MASK, getTypeFiles(curNode), path));
-
- // Of string method.
- methods.add(getDataFromTempFileHandle(
- OF_STRING_IMPL_MASK, getTypeFiles(curNode), path));
-
- //Getter methods.
- methods.add(getDataFromTempFileHandle(
- GETTER_FOR_CLASS_MASK, getTypeFiles(curNode), path));
-
- //Hash code method.
- methods.add(getHashCodeMethodClose(
- getHashCodeMethodOpen() +
- getDataFromTempFileHandle(
- HASH_CODE_IMPL_MASK, getTypeFiles(curNode),
- path).replace(NEW_LINE, EMPTY_STRING)));
-
- //Equals method.
- methods.add(getEqualsMethodClose(
- getEqualsMethodOpen(className) +
- getDataFromTempFileHandle(
- EQUALS_IMPL_MASK, getTypeFiles(curNode),
- path)));
-
- //To string method.
- methods.add(getUnionToStringMethod(
- ((YangUnion) curNode).getTypeList()));
-
- //From string method.
- methods.add(getFromStringMethodSignature(className) +
- getDataFromTempFileHandle(
- FROM_STRING_IMPL_MASK,
- getTypeFiles(curNode), path) +
- getFromStringMethodClose());
-
- if (intConflict) {
- methods.add(getRangeValidatorMethodForUnion(INT));
- }
- if (longConflict) {
- methods.add(getRangeValidatorMethodForUnion(BIG_INTEGER));
- }
- if (shortConflict && !intConflict) {
- methods.add(getRangeValidatorMethodForUnion(INT));
- }
- } catch (IOException e) {
- throw new IOException(getErrorMsg(className, UNION_CLASS));
- }
-
- for (String method : methods) {
- insertDataIntoJavaFile(file, method);
- }
- insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
-
- return validateLineLength(file);
- }
-
- /**
- * Adds union class attribute information.
- *
- * @param file generated file
- * @param curNode current YANG node
- * @param intConflict flag to indicate if there is a conflict in int
- * @param longConflict flag to indicate if there is a conflict in long
- * @param shortConflict flag to indicate if there is a conflict in short
- * @param path file path
- * @param tempFiles temp java type fragment files
- * @throws IOException a violation in IO rule
- */
- private static void addUnionClassAttributeInfo(File file,
- YangNode curNode,
- boolean intConflict,
- boolean longConflict,
- boolean shortConflict,
- String path,
- TempJavaTypeFragmentFiles tempFiles)
- throws IOException {
- if (intConflict) {
- insertDataIntoJavaFile(file, JavaCodeSnippetGen
- .addStaticAttributeIntRange(PRIVATE,
- tempFiles.getIntIndex() <
- tempFiles.getUIntIndex()));
- }
-
- if (longConflict) {
- insertDataIntoJavaFile(file, JavaCodeSnippetGen
- .addStaticAttributeLongRange(PRIVATE,
- tempFiles.getLongIndex() <
- tempFiles.getULongIndex()));
- }
-
- if (shortConflict) {
- insertDataIntoJavaFile(file, JavaCodeSnippetGen
- .addStaticAttributeShortRange(PRIVATE,
- tempFiles.getShortIndex() <
- tempFiles.getUInt8Index()));
- }
-
- insertDataIntoJavaFile(file, getDataFromTempFileHandle(
- ATTRIBUTES_MASK, getTypeFiles(curNode), path));
- insertDataIntoJavaFile(file, getSetValueParaForUnionClass());
- }
-
- /**
- * Generates class file for type enum.
- *
- * @param file generated file
- * @param curNode current YANG node
- * @param imports import list
- * @return class file for type enum
- * @throws IOException when fails to generate class file
- */
- public static File generateEnumClassFile(File file, YangNode curNode, List<String> imports)
- throws IOException {
-
- JavaFileInfoTranslator fileInfo =
- ((JavaFileInfoContainer) curNode).getJavaFileInfo();
-
- String className = fileInfo.getJavaName();
- String path = fileInfo.getBaseCodeGenPath() +
- fileInfo.getPackageFilePath();
- TempJavaEnumerationFragmentFiles enumFile = ((JavaCodeGeneratorInfo)
- curNode).getTempJavaCodeFragmentFiles().getEnumTempFiles();
- JavaImportData data = enumFile.getJavaImportData();
- if (!enumFile.isEnumClass()) {
- imports.add(data.getImportForToBitSet());
- imports.add(data.getImportForPattern());
- }
-
- initiateJavaFileGeneration(file, getCapitalCase(className),
- GENERATE_ENUM_CLASS, imports, path);
-
- //Add attribute strings.
- try {
- JavaCodeGeneratorInfo javaGenInfo = (JavaCodeGeneratorInfo) curNode;
- String[] remove = {COMMA, NEW_LINE};
- insertDataIntoJavaFile(file, trimAtLast(getDataFromTempFileHandle(
- ENUM_IMPL_MASK, javaGenInfo.getTempJavaCodeFragmentFiles()
- .getEnumTempFiles(), path), remove) +
- signatureClose());
- } catch (IOException e) {
- throw new IOException(getErrorMsg(getCapitalCase(className),
- ENUM_CLASS));
- }
-
- insertDataIntoJavaFile(file, NEW_LINE);
- // Add an attribute to get the enum's values.
- insertDataIntoJavaFile(file, getEnumsValueAttribute(className));
-
- // Add a constructor for enum.
- //TODO: generate javadoc for method.
- insertDataIntoJavaFile(file, getEnumsConstructor(getCapitalCase(className)) +
- NEW_LINE);
-
- insertDataIntoJavaFile(file,
- getEnumsOfValueMethod(className,
- (YangEnumeration) curNode,
- ENUM_METHOD_INT_VALUE));
- insertDataIntoJavaFile(file,
- getEnumsOfValueMethod(className,
- (YangEnumeration) curNode,
- ENUM_METHOD_STRING_VALUE));
-
- // Add a getter method for enum.
- insertDataIntoJavaFile(file, getJavaDoc(GETTER_METHOD, className, false,
- null) +
- getGetter(INT, className, GENERATE_ENUM_CLASS) + NEW_LINE);
-
- if (!enumFile.isEnumClass()) {
- insertDataIntoJavaFile(file, getBitSetEnumClassFromString
- (getCapitalCase(className)));
- insertDataIntoJavaFile(file, getBitSetEnumClassToString(
- getCapitalCase(className), (YangEnumeration) curNode));
- } else {
- insertDataIntoJavaFile(file, getToStringForEnumClass());
- }
-
- insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
-
- return validateLineLength(file);
- }
-
- /**
- * Generates interface file for rpc.
- *
- * @param file generated file
- * @param curNode current YANG node
- * @param imports imports for file
- * @return rpc class file
- * @throws IOException when fails to generate class file
- */
- public static File generateServiceInterfaceFile(File file, YangNode curNode,
- List<String> imports)
- throws IOException {
-
- JavaFileInfoTranslator fileInfo =
- ((JavaFileInfoContainer) curNode).getJavaFileInfo();
-
- TempJavaServiceFragmentFiles tempFiles =
- ((JavaCodeGeneratorInfo) curNode)
- .getTempJavaCodeFragmentFiles().getServiceTempFiles();
- String className = getCapitalCase(fileInfo.getJavaName()) +
- SERVICE_METHOD_STRING;
- String path = fileInfo.getBaseCodeGenPath() +
- fileInfo.getPackageFilePath();
- initiateJavaFileGeneration(file, GENERATE_SERVICE_AND_MANAGER, imports,
- curNode, className);
-
- List<String> methods = new ArrayList<>();
- JavaAttributeInfo rootAttribute =
- getCurNodeAsAttributeInTarget(curNode, curNode, false,
- tempFiles);
-
- try {
-
- if (isGetSetOfRootNodeRequired(curNode)) {
- //Getter methods.
- methods.add(getGetterString(rootAttribute,
- GENERATE_SERVICE_AND_MANAGER) +
- NEW_LINE);
- // Setter methods.
- methods.add(getSetterString(rootAttribute, className,
- GENERATE_SERVICE_AND_MANAGER) +
- NEW_LINE);
- }
-
- methods.add(getAugmentsDataMethodForService(curNode));
-
- if (((JavaCodeGeneratorInfo) curNode).getTempJavaCodeFragmentFiles()
- .getServiceTempFiles() != null) {
- JavaCodeGeneratorInfo javaGenInfo =
- (JavaCodeGeneratorInfo) curNode;
-
- // Rpc methods
- methods.add(getDataFromTempFileHandle(
- RPC_INTERFACE_MASK,
- javaGenInfo.getTempJavaCodeFragmentFiles()
- .getServiceTempFiles(), path));
- }
- } catch (IOException e) {
- throw new IOException(getErrorMsg(className, RPC_CLASS));
- }
-
- for (String method : methods) {
- insertDataIntoJavaFile(file, method);
- }
- insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
-
- return validateLineLength(file);
- }
-
- /**
- * Generates event file.
- *
- * @param file generated file
- * @param curNode current YANG node
- * @param imports imports for file
- * @throws IOException when fails to generate class file
- */
- public static void generateEventFile(File file, YangNode curNode,
- List<String> imports)
- throws IOException {
-
- String className =
- getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo()
- .getJavaName()) + EVENT_STRING;
-
- TempJavaEventFragmentFiles tempFiles =
- ((TempJavaCodeFragmentFilesContainer) curNode)
- .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
-
- String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo()
- .getBaseCodeGenPath() +
- ((JavaFileInfoContainer) curNode).getJavaFileInfo()
- .getPackageFilePath();
- initiateJavaFileGeneration(file, GENERATE_EVENT_CLASS, imports, curNode,
- className);
- try {
- insertDataIntoJavaFile(file, getEventEnumTypeStart() +
- trimAtLast(getDataFromTempFileHandle(EVENT_ENUM_MASK,
- tempFiles, path),
- COMMA) + methodClose(FOUR_SPACE));
-
- insertDataIntoJavaFile(file,
- getDataFromTempFileHandle(EVENT_METHOD_MASK,
- tempFiles, path));
- } catch (IOException e) {
- throw new IOException(getErrorMsg(className, EVENT_CLASS));
- }
-
- insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
- validateLineLength(file);
- }
-
- /**
- * Generates event listener file.
- *
- * @param file generated file
- * @param curNode current YANG node
- * @param imports imports for file
- * @throws IOException when fails to generate class file
- */
- public static void generateEventListenerFile(File file, YangNode curNode,
- List<String> imports)
- throws IOException {
-
- String className =
- getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo()
- .getJavaName()) + EVENT_LISTENER_STRING;
-
- initiateJavaFileGeneration(file, GENERATE_EVENT_LISTENER_INTERFACE,
- imports, curNode, className);
- insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
- validateLineLength(file);
- }
-
- /**
- * Generates event subject's file.
- *
- * @param file file handle
- * @param curNode current YANG node
- * @throws IOException when fails to do IO exceptions
- */
- public static void generateEventSubjectFile(File file, YangNode curNode)
- throws IOException {
-
- String className =
- getCapitalCase(((JavaFileInfoContainer) curNode).getJavaFileInfo()
- .getJavaName()) + EVENT_SUBJECT_NAME_SUFFIX;
-
- initiateJavaFileGeneration(file, GENERATE_EVENT_SUBJECT_CLASS, null,
- curNode, className);
-
- String path = ((JavaFileInfoContainer) curNode).getJavaFileInfo()
- .getBaseCodeGenPath() +
- ((JavaFileInfoContainer) curNode).getJavaFileInfo()
- .getPackageFilePath();
-
- TempJavaEventFragmentFiles tempFiles =
- ((TempJavaCodeFragmentFilesContainer) curNode)
- .getTempJavaCodeFragmentFiles().getEventFragmentFiles();
-
- insertDataIntoJavaFile(file, NEW_LINE);
- try {
- insertDataIntoJavaFile(
- file, getDataFromTempFileHandle(EVENT_SUBJECT_ATTRIBUTE_MASK,
- tempFiles, path));
-
- insertDataIntoJavaFile(
- file, getDataFromTempFileHandle(EVENT_SUBJECT_GETTER_MASK,
- tempFiles, path));
-
- insertDataIntoJavaFile(
- file, getDataFromTempFileHandle(EVENT_SUBJECT_SETTER_MASK,
- tempFiles, path));
- } catch (IOException e) {
- throw new IOException(getErrorMsg(className, EVENT_CLASS));
- }
-
- insertDataIntoJavaFile(file, CLOSE_CURLY_BRACKET + NEW_LINE);
- validateLineLength(file);
- }
-
- /**
- * Returns error message string.
- *
- * @param className name of the class
- * @param fileType type of file
- * @return error message string
- */
- private static String getErrorMsg(String className, String fileType) {
- return "No data found in temporary java code fragment files for " +
- className + " while " + fileType + " file generation.";
- }
-
- /**
- * Checks whether leaf is present in YANG leaves holder.
- *
- * @param holder holder of YANG leaves
- * @return true if leaves are present, false otherwise
- */
- private static boolean leavesPresent(YangLeavesHolder holder) {
- return holder.getListOfLeaf() != null &&
- !holder.getListOfLeaf().isEmpty();
- }
-
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGeneratorUtils.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGeneratorUtils.java
deleted file mode 100644
index 221f414..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaFileGeneratorUtils.java
+++ /dev/null
@@ -1,852 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava.utils;
-
-import org.onosproject.yangutils.datamodel.InvalidOpTypeHolder;
-import org.onosproject.yangutils.datamodel.YangAtomicPath;
-import org.onosproject.yangutils.datamodel.YangAugment;
-import org.onosproject.yangutils.datamodel.YangLeafRef;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeIdentifier;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
-import org.onosproject.yangutils.translator.tojava.JavaImportData;
-import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
-import org.onosproject.yangutils.translator.tojava.TempJavaBeanFragmentFiles;
-import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
-import org.onosproject.yangutils.translator.tojava.TempJavaEnumerationFragmentFiles;
-import org.onosproject.yangutils.translator.tojava.TempJavaEventFragmentFiles;
-import org.onosproject.yangutils.translator.tojava.TempJavaFragmentFiles;
-import org.onosproject.yangutils.translator.tojava.TempJavaServiceFragmentFiles;
-import org.onosproject.yangutils.translator.tojava.TempJavaTypeFragmentFiles;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-import org.onosproject.yangutils.utils.io.impl.CopyrightHeader;
-import org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_CLASS_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.BUILDER_INTERFACE_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.DEFAULT_CLASS_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_ENUM_CLASS;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_CLASS;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_LISTENER_INTERFACE;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_IDENTITY_CLASS;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_KEY_CLASS;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.INTERFACE_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_IMPL_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ADD_TO_LIST_INTERFACE_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ATTRIBUTES_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_FOR_TYPE_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.CONSTRUCTOR_IMPL_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EDIT_CONTENT_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.ENUM_IMPL_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EQUALS_IMPL_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_ENUM_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_METHOD_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_ATTRIBUTE_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_GETTER_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.EVENT_SUBJECT_SETTER_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_NODES_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FROM_STRING_IMPL_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_CLASS_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.GETTER_FOR_INTERFACE_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.HASH_CODE_IMPL_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.OF_STRING_IMPL_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.RPC_INTERFACE_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_CLASS_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.SETTER_FOR_INTERFACE_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.TO_STRING_IMPL_MASK;
-import static org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator.getQualifiedTypeInfoOfCurNode;
-import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.getNodesPackage;
-import static org.onosproject.yangutils.translator.tojava.utils.ClassDefinitionGenerator.generateClassDefinition;
-import static org.onosproject.yangutils.utils.UtilConstants.AUGMENTED;
-import static org.onosproject.yangutils.utils.UtilConstants.ERROR_MSG_FOR_GEN_CODE;
-import static org.onosproject.yangutils.utils.UtilConstants.LEAFREF;
-import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
-import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
-import static org.onosproject.yangutils.utils.UtilConstants.PACKAGE;
-import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
-import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
-import static org.onosproject.yangutils.utils.UtilConstants.SET_METHOD_PREFIX;
-import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
-import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_CLASS;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_INTERFACE;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.DEFAULT_CLASS;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.ENUM_CLASS;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT_LISTENER;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.EVENT_SUBJECT_CLASS;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.INTERFACE;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.RPC_INTERFACE;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getJavaPackageFromPackagePath;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.insertDataIntoJavaFile;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.parsePkg;
-
-/**
- * Represents utilities for java file generator.
- */
-public final class JavaFileGeneratorUtils {
-
- /**
- * Creates an instance of java file generator util.
- */
- private JavaFileGeneratorUtils() {
- }
-
- /**
- * Returns a file object for generated file.
- *
- * @param filePath file package path
- * @param fileName file name
- * @param extension file extension
- * @param handler cached file handle
- * @return file object
- */
- public static File getFileObject(String filePath, String fileName,
- String extension,
- JavaFileInfoTranslator handler) {
- return new File(handler.getBaseCodeGenPath() + filePath + SLASH +
- fileName + extension);
- }
-
- /**
- * Returns data stored in temporary files.
- *
- * @param tempFiles temporary file types
- * @param tempHandle temp java fragment files
- * @param path absolute path
- * @return data stored in temporary files
- * @throws IOException when failed to get the data from temporary file handle
- */
- static String getDataFromTempFileHandle(
- int tempFiles, TempJavaFragmentFiles tempHandle, String path)
- throws IOException {
-
- TempJavaTypeFragmentFiles typeHandle = null;
- if (tempHandle instanceof TempJavaTypeFragmentFiles) {
- typeHandle = (TempJavaTypeFragmentFiles) tempHandle;
- }
-
- TempJavaBeanFragmentFiles beanHandle = null;
- if (tempHandle instanceof TempJavaBeanFragmentFiles) {
- beanHandle = (TempJavaBeanFragmentFiles) tempHandle;
- }
-
- TempJavaServiceFragmentFiles serviceHandle = null;
- if (tempHandle instanceof TempJavaServiceFragmentFiles) {
- serviceHandle = (TempJavaServiceFragmentFiles) tempHandle;
- }
-
- TempJavaEventFragmentFiles eventHandle = null;
- if (tempHandle instanceof TempJavaEventFragmentFiles) {
- eventHandle = (TempJavaEventFragmentFiles) tempHandle;
- }
-
- if ((tempFiles & ATTRIBUTES_MASK) != 0) {
- return tempHandle.getTemporaryDataFromFileHandle(
- tempHandle.getAttributesTempFileHandle(),
- path);
- }
- if ((tempFiles & GETTER_FOR_INTERFACE_MASK) != 0) {
- return tempHandle.getTemporaryDataFromFileHandle(
- tempHandle.getGetterInterfaceTempFileHandle(),
- path);
- }
- if ((tempFiles & SETTER_FOR_INTERFACE_MASK) != 0) {
- return tempHandle.getTemporaryDataFromFileHandle(
- tempHandle.getSetterInterfaceTempFileHandle(),
- path);
- }
- if ((tempFiles & GETTER_FOR_CLASS_MASK) != 0) {
- return tempHandle.getTemporaryDataFromFileHandle(
- tempHandle.getGetterImplTempFileHandle(),
- path);
- }
- if ((tempFiles & SETTER_FOR_CLASS_MASK) != 0) {
- return tempHandle.getTemporaryDataFromFileHandle(
- tempHandle.getSetterImplTempFileHandle(),
- path);
- }
- if ((tempFiles & ADD_TO_LIST_INTERFACE_MASK) != 0) {
- return tempHandle.getTemporaryDataFromFileHandle(
- tempHandle.getAddToListInterfaceTempFileHandle(),
- path);
- }
- if ((tempFiles & ADD_TO_LIST_IMPL_MASK) != 0) {
- return tempHandle.getTemporaryDataFromFileHandle(
- tempHandle.getAddToListImplTempFileHandle(),
- path);
- }
- if ((tempFiles & FILTER_CONTENT_MATCH_FOR_LEAF_MASK) != 0) {
- return tempHandle.getTemporaryDataFromFileHandle(
- tempHandle.getSubtreeFilteringForLeafTempFileHandle(),
- path);
- }
- if ((tempFiles & FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK) != 0) {
- return tempHandle.getTemporaryDataFromFileHandle(
- tempHandle.getGetSubtreeFilteringForListTempFileHandle(),
- path);
- }
- if ((tempFiles & FILTER_CONTENT_MATCH_FOR_NODES_MASK) != 0) {
- return tempHandle.getTemporaryDataFromFileHandle(
- tempHandle.getGetSubtreeFilteringForChildNodeTempFileHandle(),
- path);
- }
- if ((tempFiles & EDIT_CONTENT_MASK) != 0) {
- return tempHandle.getTemporaryDataFromFileHandle(
- tempHandle.getEditContentTempFileHandle(),
- path);
- }
- if ((tempFiles & LEAF_IDENTIFIER_ENUM_ATTRIBUTES_MASK) != 0) {
- return tempHandle.getTemporaryDataFromFileHandle(
- tempHandle.getLeafIdAttributeTempFileHandle(),
- path);
- }
- if ((tempFiles & CONSTRUCTOR_IMPL_MASK) != 0) {
- if (beanHandle == null) {
- throw new TranslatorException("Required constructor info is" +
- " missing.");
- }
- return beanHandle.getTemporaryDataFromFileHandle(
- beanHandle.getConstructorImplTempFileHandle(),
- path);
- }
- if ((tempFiles & HASH_CODE_IMPL_MASK) != 0) {
- return tempHandle.getTemporaryDataFromFileHandle(
- tempHandle.getHashCodeImplTempFileHandle(),
- path);
- }
- if ((tempFiles & EQUALS_IMPL_MASK) != 0) {
- return tempHandle.getTemporaryDataFromFileHandle(
- tempHandle.getEqualsImplTempFileHandle(),
- path);
- }
- if ((tempFiles & TO_STRING_IMPL_MASK) != 0) {
- return tempHandle.getTemporaryDataFromFileHandle(
- tempHandle.getToStringImplTempFileHandle(),
- path);
- }
- if ((tempFiles & OF_STRING_IMPL_MASK) != 0) {
- if (typeHandle == null) {
- throw new TranslatorException("Required of string implementation" +
- " info is missing.");
- }
- return typeHandle.getTemporaryDataFromFileHandle(
- typeHandle.getOfStringImplTempFileHandle(), path);
- }
- if ((tempFiles & CONSTRUCTOR_FOR_TYPE_MASK) != 0) {
- if (typeHandle == null) {
- throw new TranslatorException("Required constructor implementation" +
- " info is missing.");
- }
- return typeHandle.getTemporaryDataFromFileHandle(
- typeHandle.getConstructorForTypeTempFileHandle(),
- path);
- }
- if ((tempFiles & FROM_STRING_IMPL_MASK) != 0) {
- return tempHandle.getTemporaryDataFromFileHandle(
- tempHandle.getFromStringImplTempFileHandle(),
- path);
- }
- if ((tempFiles & ENUM_IMPL_MASK) != 0) {
- if (!(tempHandle instanceof TempJavaEnumerationFragmentFiles)) {
- throw new TranslatorException("Required enum info is missing.");
- }
- TempJavaEnumerationFragmentFiles enumHandle =
- (TempJavaEnumerationFragmentFiles) tempHandle;
- return enumHandle.getTemporaryDataFromFileHandle(
- enumHandle.getEnumClassTempFileHandle(), path);
- }
- if ((tempFiles & RPC_INTERFACE_MASK) != 0) {
- if (serviceHandle == null) {
- throw new TranslatorException("Required rpc interface info is" +
- " missing.");
- }
- return serviceHandle.getTemporaryDataFromFileHandle(
- serviceHandle.getRpcInterfaceTempFileHandle(),
- path);
- }
- if ((tempFiles & EVENT_ENUM_MASK) != 0) {
- if (eventHandle == null) {
- throw new TranslatorException(
- "Required event enum implementation info is missing.");
- }
- return eventHandle.getTemporaryDataFromFileHandle(
- eventHandle.getEventEnumTempFileHandle(),
- path);
- }
- if ((tempFiles & EVENT_METHOD_MASK) != 0) {
- if (eventHandle == null) {
- throw new TranslatorException(
- "Required event method implementation info is missing.");
- }
- return eventHandle.getTemporaryDataFromFileHandle(
- eventHandle.getEventMethodTempFileHandle(),
- path);
- }
- if ((tempFiles & EVENT_SUBJECT_GETTER_MASK) != 0) {
- if (eventHandle == null) {
- throw new TranslatorException(
- "Required event subject getter implementation info is" +
- " missing.");
- }
- return eventHandle.getTemporaryDataFromFileHandle(
- eventHandle.getEventSubjectGetterTempFileHandle(),
- path);
- }
- if ((tempFiles & EVENT_SUBJECT_SETTER_MASK) != 0) {
- if (eventHandle == null) {
- throw new TranslatorException(
- "Required event subject setter implementation info is" +
- " missing.");
- }
- return eventHandle.getTemporaryDataFromFileHandle(
- eventHandle.getEventSubjectSetterTempFileHandle(),
- path);
- }
- if ((tempFiles & EVENT_SUBJECT_ATTRIBUTE_MASK) != 0) {
- if (eventHandle == null) {
- throw new TranslatorException(
- "Required event subject attribute implementation info is" +
- " missing.");
- }
- return eventHandle.getTemporaryDataFromFileHandle(
- eventHandle.getEventSubjectAttributeTempFileHandle(),
- path);
- }
- return null;
- }
-
- /**
- * Initiates generation of file based on generated file type.
- *
- * @param file generated file
- * @param className generated file class name
- * @param genType generated file type
- * @param imports imports for the file
- * @param pkg generated file package
- * @throws IOException when fails to generate a file
- */
- public static void initiateJavaFileGeneration(File file, String className,
- int genType, List<String> imports,
- String pkg)
- throws IOException {
-
- if (file.exists()) {
- throw new IOException(" file " + file.getName() + " is already generated." +
- ERROR_MSG_FOR_GEN_CODE);
- }
-
- boolean isFileCreated;
- try {
- isFileCreated = file.createNewFile();
- if (!isFileCreated) {
- throw new IOException("Failed to create " + file.getName() +
- " class file.");
- }
- appendContents(file, className, genType, imports, pkg);
- } catch (IOException e) {
- throw new IOException("Failed to append contents in " + file.getName() +
- " class file.");
- }
- }
-
- /**
- * Initiates generation of file based on generated file type.
- *
- * @param file generated file
- * @param genType generated file type
- * @param imports imports for the file
- * @param curNode current YANG node
- * @param name class name
- * @throws IOException when fails to generate a file
- */
- public static void initiateJavaFileGeneration(File file, int genType,
- List<String> imports,
- YangNode curNode, String name)
- throws IOException {
-
- if (file.exists()) {
- throw new IOException(" file " + file.getName() + " is already generated." +
- ERROR_MSG_FOR_GEN_CODE);
- }
- boolean isFileCreated;
- try {
- isFileCreated = file.createNewFile();
- if (!isFileCreated) {
- throw new IOException("Failed to create " + file.getName() +
- " class file.");
- }
- appendContents(file, genType, imports, curNode, name);
- } catch (IOException e) {
- throw new IOException("Failed to append contents in " + file.getName() +
- " class file.");
- }
- }
-
- /**
- * Appends all the contents into a generated java file.
- *
- * @param file generated file
- * @param genType generated file type
- * @param importsList list of java imports
- * @param curNode current YANG node
- * @param className class name
- * @throws IOException when fails to do IO operations
- */
- private static void appendContents(File file, int genType,
- List<String> importsList, YangNode curNode,
- String className)
- throws IOException {
-
- JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) curNode)
- .getJavaFileInfo();
-
- String name = javaFileInfo.getJavaName();
- String path = javaFileInfo.getBaseCodeGenPath() + javaFileInfo
- .getPackageFilePath();
-
- String pkgString;
- if (genType == GENERATE_EVENT_CLASS ||
- genType == GENERATE_EVENT_LISTENER_INTERFACE ||
- genType == GENERATE_EVENT_SUBJECT_CLASS) {
- pkgString = parsePackageString((path + PERIOD + name)
- .toLowerCase(), importsList);
- } else {
- pkgString = parsePackageString(path, importsList);
- }
- switch (genType) {
- case INTERFACE_MASK:
- appendHeaderContents(file, pkgString, importsList);
- write(file, genType, INTERFACE, curNode, className, false);
- break;
- case GENERATE_KEY_CLASS:
- appendHeaderContents(file, pkgString, importsList);
- write(file, genType, DEFAULT_CLASS, curNode, className, false);
- break;
- case DEFAULT_CLASS_MASK:
- appendHeaderContents(file, pkgString, importsList);
- write(file, genType, DEFAULT_CLASS, curNode, className,
- curNode.isOpTypeReq());
- break;
- case BUILDER_CLASS_MASK:
- write(file, genType, BUILDER_CLASS, curNode, className, false);
- break;
- case BUILDER_INTERFACE_MASK:
- write(file, genType, BUILDER_INTERFACE, curNode, className, false);
- break;
- case GENERATE_SERVICE_AND_MANAGER:
- appendHeaderContents(file, pkgString, importsList);
- write(file, genType, RPC_INTERFACE, curNode, className, false);
- break;
- case GENERATE_EVENT_CLASS:
- appendHeaderContents(file, pkgString, importsList);
- write(file, genType, EVENT, curNode, className, false);
- break;
- case GENERATE_EVENT_LISTENER_INTERFACE:
- appendHeaderContents(file, pkgString, importsList);
- write(file, genType, EVENT_LISTENER, curNode, className, false);
- break;
- case GENERATE_EVENT_SUBJECT_CLASS:
- appendHeaderContents(file, pkgString, importsList);
- write(file, genType, EVENT_SUBJECT_CLASS, curNode, className, false);
- break;
- case GENERATE_IDENTITY_CLASS:
- appendHeaderContents(file, pkgString, importsList);
- write(file, genType, EVENT_SUBJECT_CLASS, curNode, className, false);
- break;
- default:
- break;
- }
- }
-
- /**
- * Appends all the contents into a generated java file.
- *
- * @param file generated file
- * @param fileName generated file name
- * @param genType generated file type
- * @param importsList list of java imports
- * @param pkg generated file package
- * @throws IOException when fails to append contents
- */
- private static void appendContents(File file, String fileName, int genType,
- List<String> importsList, String pkg)
- throws IOException {
-
- String pkgString = parsePackageString(pkg, importsList);
-
- switch (genType) {
- case GENERATE_TYPEDEF_CLASS:
- appendHeaderContents(file, pkgString, importsList);
- write(file, fileName, genType, DEFAULT_CLASS);
- break;
- case GENERATE_UNION_CLASS:
- appendHeaderContents(file, pkgString, importsList);
- write(file, fileName, genType, DEFAULT_CLASS);
- break;
- case GENERATE_ENUM_CLASS:
- appendHeaderContents(file, pkgString, importsList);
- write(file, fileName, genType, ENUM_CLASS);
- break;
- default:
- break;
- }
- }
-
- /**
- * Removes base directory path from package and generates package string for file.
- *
- * @param javaPkg generated java package
- * @param importsList list of imports
- * @return package string
- */
- private static String parsePackageString(String javaPkg,
- List<String> importsList) {
-
- javaPkg = parsePkg(getJavaPackageFromPackagePath(javaPkg));
- if (importsList != null) {
- if (!importsList.isEmpty()) {
- return PACKAGE + SPACE + javaPkg + SEMI_COLON + NEW_LINE;
- } else {
- return PACKAGE + SPACE + javaPkg + SEMI_COLON;
- }
- } else {
- return PACKAGE + SPACE + javaPkg + SEMI_COLON;
- }
- }
-
- /**
- * Appends other contents to interface, impl and typedef classes.
- * for example : ONOS copyright, imports and package.
- *
- * @param file generated file
- * @param pkg generated package
- * @param importsList list of imports
- * @throws IOException when fails to append contents
- */
- private static void appendHeaderContents(File file, String pkg,
- List<String> importsList)
- throws IOException {
-
- insertDataIntoJavaFile(file, CopyrightHeader.parseCopyrightHeader());
- insertDataIntoJavaFile(file, pkg);
-
- /*
- * TODO: add the file header using comments for snippet of yang file.
- * JavaCodeSnippetGen.getFileHeaderComment
- */
-
- if (importsList != null) {
- insertDataIntoJavaFile(file, NEW_LINE);
- for (String imports : importsList) {
- insertDataIntoJavaFile(file, imports);
- }
- }
- }
-
- /**
- * Writes data to the specific generated file.
- *
- * @param file generated file
- * @param genType generated file type
- * @param javaDocType java doc type
- * @param curNode current YANG node
- * @param fileName file name
- * @param isForClass is for default class
- * @throws IOException when fails to write into a file
- */
- private static void write(File file, int genType, JavaDocType javaDocType,
- YangNode curNode, String fileName, boolean isForClass)
- throws IOException {
- insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName,
- isForClass, null));
- insertDataIntoJavaFile(file, generateClassDefinition(genType,
- fileName, curNode));
- }
-
- /**
- * Writes data to the specific generated file.
- *
- * @param file generated file
- * @param fileName file name
- * @param genType generated file type
- * @param javaDocType java doc type
- * @throws IOException when fails to write into a file
- */
- private static void write(File file, String fileName, int genType,
- JavaDocType javaDocType) throws IOException {
- insertDataIntoJavaFile(file, getJavaDoc(javaDocType, fileName, false,
- null));
- insertDataIntoJavaFile(file, generateClassDefinition(genType, fileName));
- }
-
- /**
- * Returns set of node identifiers.
- *
- * @param parent parent node
- * @return set of node identifiers
- */
- static List<YangAtomicPath> getSetOfNodeIdentifiers(YangNode parent) {
-
- List<YangAtomicPath> targets = new ArrayList<>();
- YangNodeIdentifier nodeId;
- List<YangAugment> augments = getListOfAugments(parent);
- for (YangAugment augment : augments) {
- nodeId = augment.getTargetNode().get(0).getNodeIdentifier();
- augment.setSetterMethodName(getAugmentSetterName(augment));
- if (validateNodeIdentifierInSet(nodeId, targets)) {
- targets.add(augment.getTargetNode().get(0));
- }
- }
- return targets;
- }
-
- /* Returns list of augments.*/
- private static List<YangAugment> getListOfAugments(YangNode parent) {
- List<YangAugment> augments = new ArrayList<>();
- YangNode child = parent.getChild();
- while (child != null) {
- if (child instanceof YangAugment) {
- augments.add((YangAugment) child);
- }
- child = child.getNextSibling();
- }
- return augments;
- }
-
- /* Returns setter method name for augment.*/
- private static String getAugmentSetterName(YangAugment augment) {
- YangAtomicPath atomicPath = augment.getTargetNode().get(0);
- YangNode augmentedNode = atomicPath.getResolvedNode();
- String setterName = SET_METHOD_PREFIX + AUGMENTED
- + getCapitalCase(((JavaFileInfoContainer) augmentedNode.getParent())
- .getJavaFileInfo().getJavaName())
- + getCapitalCase(((JavaFileInfoContainer) augmentedNode)
- .getJavaFileInfo().getJavaName());
- return setterName;
- }
-
- /*Validates the set for duplicate names of node identifiers.*/
- private static boolean validateNodeIdentifierInSet(
- YangNodeIdentifier nodeId, List<YangAtomicPath> targets) {
- boolean isPresent = true;
- for (YangAtomicPath target : targets) {
- if (target.getNodeIdentifier().getName().equals(nodeId.getName())) {
- if (target.getNodeIdentifier().getPrefix() != null) {
- isPresent = !target.getNodeIdentifier().getPrefix()
- .equals(nodeId.getPrefix());
- } else {
- isPresent = nodeId.getPrefix() != null;
- }
- }
- }
- return isPresent;
- }
-
- /**
- * Adds resolved augmented node imports to manager class.
- *
- * @param parent parent node
- */
- public static void addResolvedAugmentedDataNodeImports(YangNode parent) {
- List<YangAtomicPath> targets = getSetOfNodeIdentifiers(parent);
- if (targets.isEmpty()) {
- return;
- }
-
- YangNode node = targets.get(0).getResolvedNode();
- if (node instanceof InvalidOpTypeHolder) {
- return;
- }
-
- TempJavaCodeFragmentFiles tempJavaCodeFragmentFiles = (
- (JavaCodeGeneratorInfo) parent)
- .getTempJavaCodeFragmentFiles();
- YangNode augmentedNode;
- JavaQualifiedTypeInfoTranslator typeInfo;
- String curNodeName;
- JavaFileInfoTranslator parentInfo = ((JavaFileInfoContainer) parent)
- .getJavaFileInfo();
- for (YangAtomicPath nodeId : targets) {
- augmentedNode = nodeId.getResolvedNode().getParent();
- curNodeName = getCurNodeName(augmentedNode, parentInfo
- .getPluginConfig());
-
- typeInfo =
- getQTypeInfoOfNode(
- augmentedNode, curNodeName + OP_PARAM,
- parentInfo.getPluginConfig());
-
- tempJavaCodeFragmentFiles.getServiceTempFiles()
- .getJavaImportData().addImportInfo(
- typeInfo, parentInfo.getJavaName(),
- parentInfo.getPackage());
- typeInfo =
- getQTypeInfoOfNode(
- augmentedNode, curNodeName, parentInfo
- .getPluginConfig());
-
- tempJavaCodeFragmentFiles.getServiceTempFiles()
- .getJavaImportData().addImportInfo(
- typeInfo, parentInfo.getJavaName(),
- parentInfo.getPackage());
- }
- }
-
- /**
- * Returns qualified type info of augmented node.
- *
- * @param augmentedNode augmented node
- * @param curNodeName current node name
- * @param pluginConfig plugin configurations
- * @return qualified type info of augmented node
- */
- private static JavaQualifiedTypeInfoTranslator getQTypeInfoOfNode(
- YangNode augmentedNode, String curNodeName, YangPluginConfig pluginConfig) {
- JavaQualifiedTypeInfoTranslator javaQualifiedTypeInfo =
- getQualifiedTypeInfoOfCurNode(augmentedNode,
- curNodeName);
- if (javaQualifiedTypeInfo.getPkgInfo() == null) {
- javaQualifiedTypeInfo.setPkgInfo(getNodesPackage(augmentedNode,
- pluginConfig));
- }
- return javaQualifiedTypeInfo;
- }
-
- /**
- * Validates if augmented node is imported in parent node.
- *
- * @param javaQualifiedTypeInfo qualified type info
- * @param importData import data
- * @return true if present in imports
- */
- private static boolean validateQualifiedInfoOfAugmentedNode(
- JavaQualifiedTypeInfoTranslator javaQualifiedTypeInfo,
- JavaImportData importData) {
- for (JavaQualifiedTypeInfoTranslator curImportInfo : importData
- .getImportSet()) {
- if (curImportInfo.getClassInfo()
- .contentEquals(javaQualifiedTypeInfo.getClassInfo())) {
- return curImportInfo.getPkgInfo()
- .contentEquals(javaQualifiedTypeInfo.getPkgInfo());
- }
- }
- return true;
- }
-
- /**
- * Return augmented class name for data methods in manager and service.
- *
- * @param augmentedNode augmented node
- * @param parent parent node
- * @return augmented class name for data methods in manager and service
- */
- static String getAugmentedClassNameForDataMethods(YangNode augmentedNode,
- YangNode parent) {
- String curNodeName;
- JavaQualifiedTypeInfoTranslator javaQualifiedTypeInfo;
- JavaFileInfoTranslator parentInfo = ((JavaFileInfoContainer) parent)
- .getJavaFileInfo();
- YangPluginConfig pluginConfig = parentInfo.getPluginConfig();
- TempJavaServiceFragmentFiles tempJavaServiceFragmentFiles = (
- (JavaCodeGeneratorInfo) parent).getTempJavaCodeFragmentFiles()
- .getServiceTempFiles();
- curNodeName = getCurNodeName(augmentedNode, pluginConfig);
-
- javaQualifiedTypeInfo = getQTypeInfoOfNode(augmentedNode,
- getCapitalCase(curNodeName),
- parentInfo.getPluginConfig());
- if (validateQualifiedInfoOfAugmentedNode(javaQualifiedTypeInfo,
- tempJavaServiceFragmentFiles
- .getJavaImportData())) {
- return javaQualifiedTypeInfo.getClassInfo();
- } else {
- return javaQualifiedTypeInfo.getPkgInfo() + PERIOD +
- javaQualifiedTypeInfo.getClassInfo();
- }
- }
-
- //Returns class name of current node
- static String getCurNodeName(YangNode node, YangPluginConfig config) {
- if (((JavaFileInfoContainer) node).getJavaFileInfo()
- .getJavaName() != null) {
- return getCapitalCase(((JavaFileInfoContainer) node)
- .getJavaFileInfo()
- .getJavaName());
- } else {
- return getCapitalCase(getCamelCase(node.getName(), config
- .getConflictResolver()));
- }
- }
-
- /**
- * Checks if the type name is leafref and returns the effective type name.
- *
- * @param attributeName name of the current type
- * @param attributeType effective type
- * @return name of the effective type
- */
- public static String isTypeNameLeafref(String attributeName,
- YangType<?> attributeType) {
- if (attributeName.equalsIgnoreCase(LEAFREF)) {
- YangLeafRef leafRef = (YangLeafRef) attributeType.getDataTypeExtendedInfo();
- if (leafRef != null && !leafRef.isInGrouping()) {
- return attributeType.getDataTypeName();
- }
- }
- return attributeName;
- // TODO handle union scenario, having multiple leafref.
- }
-
- /**
- * Checks if the type is leafref and returns the effective type.
- *
- * @param attributeType current type
- * @return effective type
- */
- public static YangType isTypeLeafref(YangType<?> attributeType) {
- if (attributeType.getDataType() == YangDataTypes.LEAFREF) {
- YangLeafRef leafRef = (YangLeafRef) attributeType
- .getDataTypeExtendedInfo();
- if (!leafRef.isInGrouping()) {
- return leafRef.getEffectiveDataType();
- }
- }
- return attributeType;
- }
-
-}
\ No newline at end of file
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaIdentifierSyntax.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaIdentifierSyntax.java
deleted file mode 100644
index 5bf97f3..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/JavaIdentifierSyntax.java
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava.utils;
-
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangRevision;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
-import org.onosproject.yangutils.utils.io.YangToJavaNamingConflictUtil;
-
-import java.io.File;
-import java.io.IOException;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.getParentNodeInGenCode;
-import static org.onosproject.yangutils.utils.UtilConstants.COLON;
-import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_BASE_PKG;
-import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.HYPHEN;
-import static org.onosproject.yangutils.utils.UtilConstants.JAVA_KEY_WORDS;
-import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
-import static org.onosproject.yangutils.utils.UtilConstants.QUOTES;
-import static org.onosproject.yangutils.utils.UtilConstants.REGEX_FOR_FIRST_DIGIT;
-import static org.onosproject.yangutils.utils.UtilConstants.REGEX_WITH_ALL_SPECIAL_CHAR;
-import static org.onosproject.yangutils.utils.UtilConstants.REVISION_PREFIX;
-import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
-import static org.onosproject.yangutils.utils.UtilConstants.UNDER_SCORE;
-import static org.onosproject.yangutils.utils.UtilConstants.VERSION_PREFIX;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.addPackageInfo;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.createDirectories;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getAbsolutePackagePath;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getJavaPackageFromPackagePath;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getPackageDirPathFromJavaJPackage;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getPrefixForIdentifier;
-
-/**
- * Represents an utility Class for translating the name from YANG to java convention.
- */
-public final class JavaIdentifierSyntax {
-
- private static final int INDEX_ZERO = 0;
- private static final int INDEX_ONE = 1;
- private static final int VALUE_CHECK = 10;
- private static final String ZERO = "0";
- private static final String DATE_FORMAT = "yyyy-MM-dd";
-
- /**
- * Create instance of java identifier syntax.
- */
- private JavaIdentifierSyntax() {
- }
-
- /**
- * Returns the root package string.
- *
- * @param version YANG version
- * @param nameSpace name space of the module
- * @param revision revision of the module defined
- * @param resolver object of YANG to java naming conflict util
- * @return the root package string
- */
- public static String getRootPackage(byte version, String nameSpace,
- YangRevision revision,
- YangToJavaNamingConflictUtil resolver) {
-
- StringBuilder pkg = new StringBuilder(DEFAULT_BASE_PKG)
- .append(PERIOD)
- .append(getYangVersion(version))
- .append(PERIOD)
- .append(getPkgFromNameSpace(nameSpace, resolver));
- if (revision != null) {
- pkg.append(PERIOD)
- .append(getYangRevisionStr(revision.getRevDate()));
- }
- return pkg.toString().toLowerCase();
- }
-
-
- /**
- * Returns version.
- *
- * @param ver YANG version
- * @return version
- */
- private static String getYangVersion(byte ver) {
- return VERSION_PREFIX + ver;
- }
-
- /**
- * Returns package name from name space.
- *
- * @param nameSpace name space of YANG module
- * @param resolver object of YANG to java naming conflict util
- * @return java package name as per java rules
- */
- private static String getPkgFromNameSpace(String nameSpace,
- YangToJavaNamingConflictUtil resolver) {
-
- ArrayList<String> pkgArr = new ArrayList<>();
- nameSpace = nameSpace.replace(QUOTES, EMPTY_STRING);
- String properNameSpace = nameSpace.replaceAll
- (REGEX_WITH_ALL_SPECIAL_CHAR, COLON);
- String[] nameSpaceArr = properNameSpace.split(COLON);
-
- Collections.addAll(pkgArr, nameSpaceArr);
- return getPkgFrmArr(pkgArr, resolver);
- }
-
- /**
- * Returns revision string array.
- *
- * @param date YANG module revision
- * @return revision string
- */
- private static String getYangRevisionStr(Date date) {
- SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
- String dateInString = sdf.format(date);
- String[] revisionArr = dateInString.split(HYPHEN);
-
- StringBuilder rev = new StringBuilder(REVISION_PREFIX)
- .append(revisionArr[INDEX_ZERO]);
-
- for (int i = INDEX_ONE; i < revisionArr.length; i++) {
- Integer val = Integer.parseInt(revisionArr[i]);
- if (val < VALUE_CHECK) {
- rev.append(ZERO);
- }
- rev.append(val);
- }
- return rev.toString();
- }
-
- /**
- * Returns the package string.
- *
- * @param pkgArr package array
- * @param conflictResolver object of YANG to java naming conflict util
- * @return package string
- */
- private static String getPkgFrmArr(ArrayList<String> pkgArr, YangToJavaNamingConflictUtil conflictResolver) {
-
- StringBuilder pkg = new StringBuilder();
- int size = pkgArr.size();
- int i = 0;
- for (String member : pkgArr) {
- boolean presenceOfKeyword = JAVA_KEY_WORDS.contains(member.toLowerCase());
- if (presenceOfKeyword || member.matches(REGEX_FOR_FIRST_DIGIT)) {
- String prefix = getPrefixForIdentifier(conflictResolver);
- member = prefix + member;
- }
- pkg.append(member);
- if (i != size - 1) {
- pkg.append(PERIOD);
- }
- i++;
- }
- return pkg.toString();
- }
-
- /**
- * Returns enum's java name.
- *
- * @param name enum's name
- * @return enum's java name
- */
- public static String getEnumJavaAttribute(String name) {
-
- name = name.replaceAll(REGEX_WITH_ALL_SPECIAL_CHAR, COLON);
- String[] strArray = name.split(COLON);
- StringBuilder output = new StringBuilder();
- if (strArray[0].isEmpty()) {
- List<String> stringArrangement = new ArrayList<>();
- stringArrangement.addAll(Arrays.asList(strArray).subList(1, strArray.length));
- strArray = stringArrangement.toArray(new String[stringArrangement.size()]);
- }
- for (int i = 0; i < strArray.length; i++) {
- if (i > 0 && i < strArray.length) {
- output.append(UNDER_SCORE);
- }
- output.append(strArray[i]);
- }
- return output.toString();
- }
-
- /**
- * Creates a package structure with package info java file if not present.
- *
- * @param yangNode YANG node for which code is being generated
- * @throws IOException any IO exception
- */
- public static void createPackage(YangNode yangNode)
- throws IOException {
- if (!(yangNode instanceof JavaFileInfoContainer)) {
- throw new TranslatorException("current node must have java file info " +
- yangNode.getName() + " in " +
- yangNode.getLineNumber() + " at " +
- yangNode.getCharPosition() +
- " in " + yangNode.getFileName());
- }
- String pkgInfo;
- JavaFileInfoTranslator javaFileInfo = ((JavaFileInfoContainer) yangNode)
- .getJavaFileInfo();
- String pkg = getAbsolutePackagePath(javaFileInfo.getBaseCodeGenPath(),
- javaFileInfo.getPackageFilePath());
- JavaFileInfoTranslator parentInfo;
- if (!doesPackageExist(pkg)) {
- try {
- File pack = createDirectories(pkg);
- YangNode parent = getParentNodeInGenCode(yangNode);
- if (parent != null) {
- parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
- pkgInfo = parentInfo.getJavaName();
- addPackageInfo(pack, pkgInfo, getJavaPackageFromPackagePath(pkg),
- true);
- } else {
- pkgInfo = javaFileInfo.getJavaName();
- addPackageInfo(pack, pkgInfo, getJavaPackageFromPackagePath(pkg),
- false);
- }
- } catch (IOException e) {
- throw new IOException("failed to create package-info file");
- }
- }
- }
-
- /**
- * Checks if the package directory structure created.
- *
- * @param pkg Package to check if it is created
- * @return existence status of package
- */
- static boolean doesPackageExist(String pkg) {
- File pkgDir = new File(getPackageDirPathFromJavaJPackage(pkg));
- File pkgWithFile = new File(pkgDir + SLASH + "package-info.java");
- return pkgDir.exists() && pkgWithFile.isFile();
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodBodyTypes.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodBodyTypes.java
deleted file mode 100644
index 8df3345..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodBodyTypes.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava.utils;
-
-/**
- * Represents method body types.
- */
-enum MethodBodyTypes {
-
- //Getter method body.
- GETTER,
-
- //Setter method body.
- SETTER,
-
- //Build method body.
- BUILD,
-
- //Constructor method body.
- CONSTRUCTOR,
-
- //Default constructor method body.
- DEFAULT_CONSTRUCTOR,
-
- //Hash code method body.
- HASH_CODE,
-
- //To string method body.
- TO_STRING,
-
- //Equals method body.
- EQUALS,
-
- //add to list method body.
- ADD_TO_LIST,
-
- //Augment map getter for full map.
- AUGMENTED_MAP_GETTER,
-
- //Augment map getter for value.
- AUGMENTED_MAP_GET_VALUE,
-
- //Augment map add
- AUGMENTED_MAP_ADD,
-
- //Manager methods
- MANAGER_METHODS,
-
- //Of method.
- OF_METHOD,
-
- //Hash code method
- HASH_CODE_METHOD,
-
- //Equals method.
- EQUALS_METHOD,
-
- //To string method
- TO_STRING_METHOD,
-
- //Enum method int value.
- ENUM_METHOD_INT_VALUE,
-
- //Enum method string value.
- ENUM_METHOD_STRING_VALUE
-
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodClassTypes.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodClassTypes.java
deleted file mode 100644
index 0e19388..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodClassTypes.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava.utils;
-
-/**
- * Represents java method types for classes.
- */
-enum MethodClassTypes {
-
- //Method for interface files.
- INTERFACE_TYPE,
-
- //Method for implementation classes.
- CLASS_TYPE
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java
deleted file mode 100644
index e179903..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGenerator.java
+++ /dev/null
@@ -1,2112 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava.utils;
-
-import org.onosproject.yangutils.datamodel.InvalidOpTypeHolder;
-import org.onosproject.yangutils.datamodel.RpcNotificationContainer;
-import org.onosproject.yangutils.datamodel.YangAppDataStructure;
-import org.onosproject.yangutils.datamodel.YangAtomicPath;
-import org.onosproject.yangutils.datamodel.YangCompilerAnnotation;
-import org.onosproject.yangutils.datamodel.YangDataStructure;
-import org.onosproject.yangutils.datamodel.YangEnum;
-import org.onosproject.yangutils.datamodel.YangEnumeration;
-import org.onosproject.yangutils.datamodel.YangIdentity;
-import org.onosproject.yangutils.datamodel.YangIdentityRef;
-import org.onosproject.yangutils.datamodel.YangLeafRef;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-import org.onosproject.yangutils.utils.io.impl.JavaDocGen;
-
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.IDENTITYREF;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_EVENT_SUBJECT_CLASS;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
-import static org.onosproject.yangutils.translator.tojava.utils.BracketType.OPEN_CLOSE_BRACKET;
-import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.EIGHT_SPACE;
-import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.FOUR_SPACE;
-import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.TWELVE_SPACE;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getAugmentedClassNameForDataMethods;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getCurNodeName;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getSetOfNodeIdentifiers;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getEnumJavaAttribute;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.AUGMENTED_MAP_ADD;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.AUGMENTED_MAP_GET_VALUE;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.GETTER;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.MANAGER_METHODS;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.SETTER;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodBodyTypes.TO_STRING;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodClassTypes.CLASS_TYPE;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodClassTypes.INTERFACE_TYPE;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.brackets;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getBitSetAttr;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getCatchSubString;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getCompareToString;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getExceptionThrowString;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getForLoopString;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getGreaterThanCondition;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getIfConditionBegin;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getLeafFlagSetString;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getLesserThanCondition;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getListAttribute;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getNewInstance;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getNewLineAndSpace;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getOmitNullValueString;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getOpenCloseParaWithValue;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getOverRideString;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getParseFromStringMethod;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getPatternQuoteString;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getQuotedString;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getReturnOfSubString;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getReturnString;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getSetValueParaCondition;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getStringBuilderAttr;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getToStringCall;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getTrySubString;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getTwoParaEqualsString;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.ifAndAndCondition;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.ifConditionForIntInTypeDefConstructor;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.ifEqualEqualCondition;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodBody;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodClose;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodSignature;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodSignatureClose;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.multiAttrMethodSignature;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.signatureClose;
-import static org.onosproject.yangutils.utils.UtilConstants.ADD;
-import static org.onosproject.yangutils.utils.UtilConstants.ADD_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.AND;
-import static org.onosproject.yangutils.utils.UtilConstants.APPEND;
-import static org.onosproject.yangutils.utils.UtilConstants.ARRAY_LIST_INIT;
-import static org.onosproject.yangutils.utils.UtilConstants.AUGMENTED;
-import static org.onosproject.yangutils.utils.UtilConstants.BASE64;
-import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
-import static org.onosproject.yangutils.utils.UtilConstants.BITS;
-import static org.onosproject.yangutils.utils.UtilConstants.BIT_SET;
-import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE;
-import static org.onosproject.yangutils.utils.UtilConstants.BUILD;
-import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
-import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_LOWER_CASE;
-import static org.onosproject.yangutils.utils.UtilConstants.BUILD_FOR_FILTER;
-import static org.onosproject.yangutils.utils.UtilConstants.CASE;
-import static org.onosproject.yangutils.utils.UtilConstants.CLASS;
-import static org.onosproject.yangutils.utils.UtilConstants.CLASS_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
-import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
-import static org.onosproject.yangutils.utils.UtilConstants.COLON;
-import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
-import static org.onosproject.yangutils.utils.UtilConstants.COMPARE_TO;
-import static org.onosproject.yangutils.utils.UtilConstants.DECODE;
-import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
-import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_CAPS;
-import static org.onosproject.yangutils.utils.UtilConstants.DIAMOND_CLOSE_BRACKET;
-import static org.onosproject.yangutils.utils.UtilConstants.DIAMOND_OPEN_BRACKET;
-import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
-import static org.onosproject.yangutils.utils.UtilConstants.ELSE;
-import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.ENCODE_TO_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.ENUM;
-import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
-import static org.onosproject.yangutils.utils.UtilConstants.EQUALS_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.EXTEND;
-import static org.onosproject.yangutils.utils.UtilConstants.FALSE;
-import static org.onosproject.yangutils.utils.UtilConstants.FOR;
-import static org.onosproject.yangutils.utils.UtilConstants.FOR_TYPE_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
-import static org.onosproject.yangutils.utils.UtilConstants.FROM_STRING_METHOD_NAME;
-import static org.onosproject.yangutils.utils.UtilConstants.FROM_STRING_PARAM_NAME;
-import static org.onosproject.yangutils.utils.UtilConstants.GET;
-import static org.onosproject.yangutils.utils.UtilConstants.GET_DECODER;
-import static org.onosproject.yangutils.utils.UtilConstants.GET_ENCODER;
-import static org.onosproject.yangutils.utils.UtilConstants.GET_METHOD_PREFIX;
-import static org.onosproject.yangutils.utils.UtilConstants.GOOGLE_MORE_OBJECT_METHOD_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.HASH;
-import static org.onosproject.yangutils.utils.UtilConstants.HASH_CODE_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.IF;
-import static org.onosproject.yangutils.utils.UtilConstants.INSTANCE_OF;
-import static org.onosproject.yangutils.utils.UtilConstants.INT;
-import static org.onosproject.yangutils.utils.UtilConstants.IS_EMPTY;
-import static org.onosproject.yangutils.utils.UtilConstants.IS_SELECT_LEAF;
-import static org.onosproject.yangutils.utils.UtilConstants.KEYS;
-import static org.onosproject.yangutils.utils.UtilConstants.LEAF;
-import static org.onosproject.yangutils.utils.UtilConstants.LEAF_IDENTIFIER;
-import static org.onosproject.yangutils.utils.UtilConstants.LINKED_HASH_MAP;
-import static org.onosproject.yangutils.utils.UtilConstants.LINKED_HASH_SET;
-import static org.onosproject.yangutils.utils.UtilConstants.LONG;
-import static org.onosproject.yangutils.utils.UtilConstants.MAX_RANGE;
-import static org.onosproject.yangutils.utils.UtilConstants.MIN_RANGE;
-import static org.onosproject.yangutils.utils.UtilConstants.NEG_ONE;
-import static org.onosproject.yangutils.utils.UtilConstants.NEW;
-import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
-import static org.onosproject.yangutils.utils.UtilConstants.NOT;
-import static org.onosproject.yangutils.utils.UtilConstants.NULL;
-import static org.onosproject.yangutils.utils.UtilConstants.OBJ;
-import static org.onosproject.yangutils.utils.UtilConstants.OBJECT;
-import static org.onosproject.yangutils.utils.UtilConstants.OBJECT_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.OF;
-import static org.onosproject.yangutils.utils.UtilConstants.OF_CAPS;
-import static org.onosproject.yangutils.utils.UtilConstants.ONE;
-import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CLOSE_BRACKET_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
-import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
-import static org.onosproject.yangutils.utils.UtilConstants.OPERATION_TYPE_ATTRIBUTE;
-import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
-import static org.onosproject.yangutils.utils.UtilConstants.OTHER;
-import static org.onosproject.yangutils.utils.UtilConstants.OVERRIDE;
-import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
-import static org.onosproject.yangutils.utils.UtilConstants.PRIORITY_QUEUE;
-import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
-import static org.onosproject.yangutils.utils.UtilConstants.PROCESS_SUBTREE_FILTERING;
-import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
-import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
-import static org.onosproject.yangutils.utils.UtilConstants.PUT;
-import static org.onosproject.yangutils.utils.UtilConstants.QUESTION_MARK;
-import static org.onosproject.yangutils.utils.UtilConstants.QUOTES;
-import static org.onosproject.yangutils.utils.UtilConstants.RETURN;
-import static org.onosproject.yangutils.utils.UtilConstants.RPC_INPUT_VAR_NAME;
-import static org.onosproject.yangutils.utils.UtilConstants.SCHEMA_NAME;
-import static org.onosproject.yangutils.utils.UtilConstants.SELECT_ALL_CHILD;
-import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
-import static org.onosproject.yangutils.utils.UtilConstants.SET_METHOD_PREFIX;
-import static org.onosproject.yangutils.utils.UtilConstants.SET_SELECT_LEAF;
-import static org.onosproject.yangutils.utils.UtilConstants.SET_VALUE_PARA;
-import static org.onosproject.yangutils.utils.UtilConstants.SIXTEEN_SPACE_INDENTATION;
-import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
-import static org.onosproject.yangutils.utils.UtilConstants.SPLIT_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.SQUARE_BRACKETS;
-import static org.onosproject.yangutils.utils.UtilConstants.STATIC;
-import static org.onosproject.yangutils.utils.UtilConstants.STRING_BUILDER_VAR;
-import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
-import static org.onosproject.yangutils.utils.UtilConstants.SUBTREE_FILTERED;
-import static org.onosproject.yangutils.utils.UtilConstants.SUFFIX_S;
-import static org.onosproject.yangutils.utils.UtilConstants.SWITCH;
-import static org.onosproject.yangutils.utils.UtilConstants.THIS;
-import static org.onosproject.yangutils.utils.UtilConstants.TMP_VAL;
-import static org.onosproject.yangutils.utils.UtilConstants.TO_CAPS;
-import static org.onosproject.yangutils.utils.UtilConstants.TO_STRING_METHOD;
-import static org.onosproject.yangutils.utils.UtilConstants.TRIM_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.TRUE;
-import static org.onosproject.yangutils.utils.UtilConstants.TWELVE_SPACE_INDENTATION;
-import static org.onosproject.yangutils.utils.UtilConstants.VALIDATE_RANGE;
-import static org.onosproject.yangutils.utils.UtilConstants.VALUE;
-import static org.onosproject.yangutils.utils.UtilConstants.VALUE_CAPS;
-import static org.onosproject.yangutils.utils.UtilConstants.VALUE_LEAF;
-import static org.onosproject.yangutils.utils.UtilConstants.VALUE_LEAF_SET;
-import static org.onosproject.yangutils.utils.UtilConstants.VOID;
-import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_INFO;
-import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_INFO_LOWER_CASE;
-import static org.onosproject.yangutils.utils.UtilConstants.ZERO;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILD_METHOD;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.CONSTRUCTOR;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.DEFAULT_CONSTRUCTOR;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.FROM_METHOD;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.MANAGER_SETTER_METHOD;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.OF_METHOD;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.SETTER_METHOD;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.TYPE_CONSTRUCTOR;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateForAddAugmentation;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateForBuilderMethod;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateForGetAugmentation;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateForGetMethodWithAttribute;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.generateForValidatorMethod;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getSmallCase;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
-
-/**
- * Represents generator for methods of generated files based on the file type.
- */
-public final class MethodsGenerator {
- private static final String BIT_NAMES_VAR = "bitNames";
- private static final String BIT_NAME_VAR = "bitName";
-
- /**
- * Creates an instance of method generator.
- */
- private MethodsGenerator() {
- }
-
- /**
- * Returns the methods strings for builder interface.
- *
- * @param name attribute name
- * @return method string for builder interface
- */
- public static String parseBuilderInterfaceBuildMethodString(String name) {
- return getJavaDoc(BUILD_METHOD, name, false, null) +
- getBuildForInterface(name);
- }
-
- /**
- * Returns getter string.
- *
- * @param attr attribute info
- * @param genType generated java files
- * @return getter string
- */
- public static String getGetterString(JavaAttributeInfo attr, int genType) {
-
- String returnType = getReturnType(attr);
- String attributeName = attr.getAttributeName();
- String appDataStructure = null;
- StringBuilder builder = new StringBuilder();
- if (attr.getCompilerAnnotation() != null) {
- YangDataStructure data = getYangDataStructure(
- attr.getCompilerAnnotation());
- if (data != null) {
- appDataStructure = data.name();
- }
- }
- if (genType == GENERATE_SERVICE_AND_MANAGER) {
- builder.append(generateForGetMethodWithAttribute(returnType))
- .append(getGetterForInterface(
- attributeName, returnType, attr.isListAttr(),
- genType, attr.getCompilerAnnotation()));
-
- return builder.toString();
- }
-
- builder.append(getJavaDoc(GETTER_METHOD, attributeName, attr
- .isListAttr(), appDataStructure))
- .append(getGetterForInterface(
- attributeName, returnType, attr.isListAttr(),
- genType, attr.getCompilerAnnotation()));
-
- return builder.toString();
- }
-
- /**
- * Returns setter string.
- *
- * @param attr attribute info
- * @param className java class name
- * @param genType generated java files
- * @return setter string
- */
- public static String getSetterString(JavaAttributeInfo attr,
- String className, int genType) {
-
- String attrType = getReturnType(attr);
- String attributeName = attr.getAttributeName();
- JavaDocGen.JavaDocType type;
- StringBuilder builder = new StringBuilder();
- if (genType == GENERATE_SERVICE_AND_MANAGER) {
- type = MANAGER_SETTER_METHOD;
- } else {
- type = SETTER_METHOD;
- }
-
- String appDataStructure = null;
- YangDataStructure ds = getYangDataStructure(
- attr.getCompilerAnnotation());
- if (ds != null) {
- appDataStructure = ds.name();
- }
- builder.append(getJavaDoc(type, attributeName, attr.isListAttr(),
- appDataStructure))
- .append(getSetterForInterface(attributeName, attrType, className,
- attr.isListAttr(), genType,
- attr.getCompilerAnnotation()));
- return builder.toString();
- }
-
- /**
- * Returns constructor method string.
- *
- * @param name class name
- * @return constructor string
- */
- private static String getConstructorString(String name) {
- return getJavaDoc(CONSTRUCTOR, name, false, null);
- }
-
- /**
- * Returns default constructor method string.
- *
- * @param name class name
- * @param modifierType modifier type
- * @return default constructor string
- */
- public static String getDefaultConstructorString(String name,
- String modifierType) {
- return getJavaDoc(DEFAULT_CONSTRUCTOR, name, false, null)
- + getDefaultConstructor(name, modifierType) + NEW_LINE;
- }
-
- /**
- * Returns build method string.
- *
- * @param name class name
- * @param isRoot true if root node
- * @return build string
- */
- public static String getBuildString(String name, boolean isRoot) {
- return FOUR_SPACE_INDENTATION + OVERRIDE + NEW_LINE +
- getBuild(name, isRoot);
- }
-
- /**
- * Returns the getter method strings for class file.
- *
- * @param attr attribute info
- * @param generatedJavaFiles for the type of java file being generated
- * @return getter method for class
- */
- public static String getGetterForClass(JavaAttributeInfo attr,
- int generatedJavaFiles) {
-
- String attrQualifiedType = getReturnType(attr);
- String attributeName = attr.getAttributeName();
-
- if (!attr.isListAttr()) {
- return getGetter(attrQualifiedType, attributeName,
- generatedJavaFiles);
- }
- String attrParam = getListAttribute(attrQualifiedType,
- attr.getCompilerAnnotation());
- return getGetter(attrParam, attributeName, generatedJavaFiles);
- }
-
- /**
- * Returns getter for attribute.
- *
- * @param type return type
- * @param name attribute name
- * @param genType generated java files
- * @return getter for attribute
- */
- static String getGetter(String type, String name, int genType) {
- StringBuilder builder = new StringBuilder();
- if (genType == GENERATE_SERVICE_AND_MANAGER) {
- //Append method signature.
- builder.append(methodSignature(getCapitalCase(name), GET,
- PUBLIC, null, type, null,
- CLASS_TYPE))
- //Append method body.
- .append(methodBody(MANAGER_METHODS, null, null,
- EIGHT_SPACE_INDENTATION, null,
- type, false, null))
- .append(signatureClose())
- //Append method close.
- .append(methodClose(FOUR_SPACE));
- return builder.toString();
- }
- builder.append(methodSignature(name, EMPTY_STRING,
- PUBLIC, null, type, null,
- CLASS_TYPE))
- //Append method body.
- .append(methodBody(GETTER, name, name,
- EIGHT_SPACE_INDENTATION, null,
- type, false, null))
- .append(signatureClose())
- //Append method close.
- .append(methodClose(FOUR_SPACE));
- return builder.toString();
- }
-
- /**
- * Returns the setter method strings for class file.
- *
- * @param attr attribute info
- * @param className name of the class
- * @param generatedJavaFiles generated java files
- * @return setter method for class
- */
- public static String getSetterForClass(JavaAttributeInfo attr,
- String className,
- int generatedJavaFiles) {
- String attrQualifiedType = getReturnType(attr);
- String attributeName = attr.getAttributeName();
- boolean isTypeNull = false;
- if (attr.getAttributeType() == null) {
- isTypeNull = true;
- }
- if (!attr.isListAttr()) {
- return getSetter(className, attributeName, attrQualifiedType,
- generatedJavaFiles, isTypeNull, false);
- }
- String attrParam = getListAttribute(attrQualifiedType,
- attr.getCompilerAnnotation());
- return getSetter(className, attributeName, attrParam,
- generatedJavaFiles, isTypeNull, true);
- }
-
- /**
- * Returns setter for attribute.
- *
- * @param className class name
- * @param name attribute name
- * @param type return type
- * @param isTypeNull if attribute type is null
- * @param isList true if leaf-list
- * @return setter for attribute
- */
- private static String getSetter(String className, String name, String type,
- int genType,
- boolean isTypeNull, boolean isList) {
- StringBuilder builder = new StringBuilder();
- if (genType == GENERATE_SERVICE_AND_MANAGER) {
- //Append method signature.
- builder.append(methodSignature(getCapitalCase(name),
- SET_METHOD_PREFIX,
- PUBLIC, name, VOID, type,
- CLASS_TYPE))
- //Append method body.
- .append(methodBody(MANAGER_METHODS, null, null,
- EIGHT_SPACE_INDENTATION, null, null,
- false, null))
- .append(methodClose(FOUR_SPACE));
- return builder.toString();
- }
- if (genType == GENERATE_EVENT_SUBJECT_CLASS) {
- builder.append(methodSignature(name, EMPTY_STRING, PUBLIC, name, VOID,
- type, CLASS_TYPE))
-
- //Append method body.
- .append(methodBody(SETTER, name, name,
- EIGHT_SPACE_INDENTATION, null, null,
- false, null))
- .append(methodClose(FOUR_SPACE));
- return builder.toString();
- }
- builder.append(methodSignature(name, EMPTY_STRING,
- PUBLIC, name, getCapitalCase(className) +
- BUILDER, type, CLASS_TYPE));
- if (!isTypeNull && !isList) {
- builder.append(getLeafFlagSetString(name, VALUE_LEAF, EIGHT_SPACE_INDENTATION,
- SET_METHOD_PREFIX)).append(signatureClose());
- } else {
- builder.append(EMPTY_STRING);
- }
- //Append method body.
- builder.append(methodBody(SETTER, name, name,
- EIGHT_SPACE_INDENTATION, null, null,
- true, null))
- //Append method close.
- .append(methodClose(FOUR_SPACE));
- return builder.toString();
- }
-
- /**
- * Returns the setter method strings for class file.
- *
- * @param attr attribute info
- * @return setter method for class
- */
- static String getSetterForTypeDefClass(JavaAttributeInfo attr) {
-
- String attrQualifiedType = getReturnType(attr);
- String attributeName = attr.getAttributeName();
- return getTypeDefSetter(attrQualifiedType, attributeName);
- }
-
- /**
- * Returns type def's setter for attribute.
- *
- * @param type data type
- * @param name attribute name
- * @return setter for type def's attribute
- */
- private static String getTypeDefSetter(String type, String name) {
- return methodSignature(getCapitalCase(name), SET_METHOD_PREFIX, PUBLIC,
- name, VOID, type, CLASS_TYPE) +
- methodBody(SETTER, name, name, EIGHT_SPACE_INDENTATION, null,
- null, false, null) + methodClose(FOUR_SPACE);
- }
-
- /**
- * Returns the getter method strings for interface file.
- *
- * @param yangName name of the attribute
- * @param returnType return type of attribute
- * @param isList is list attribute
- * @param genType generated java files
- * @param annotation compiler annotation
- * @return getter method for interface
- */
- static String getGetterForInterface(String yangName, String returnType,
- boolean isList,
- int genType,
- YangCompilerAnnotation annotation) {
- if (!isList) {
- return getGetterInterfaceString(returnType, yangName,
- genType);
- }
- String listAttr = getListAttribute(returnType, annotation);
- return getGetterInterfaceString(listAttr, yangName, genType);
- }
-
- /**
- * Returns getter for attribute in interface.
- *
- * @param returnType return type
- * @param yangName attribute name
- * @return getter for interface
- */
- private static String getGetterInterfaceString(String returnType,
- String yangName,
- int genType) {
- switch (genType) {
- case GENERATE_SERVICE_AND_MANAGER:
- return getGetMethodWithArgument(returnType, yangName);
- default:
- return methodSignature(yangName, EMPTY_STRING, null,
- null, returnType, null, INTERFACE_TYPE);
- }
- }
-
- /**
- * Returns the setter method strings for interface file.
- *
- * @param attrName name of the attribute
- * @param attrType return type of attribute
- * @param className name of the java class being generated
- * @param isList is list attribute
- * @param genType generated java files
- * @param annotation compiler annotations
- * @return setter method for interface
- */
- static String getSetterForInterface(String attrName, String attrType,
- String className,
- boolean isList, int genType,
- YangCompilerAnnotation annotation) {
- if (!isList) {
- return getSetterInterfaceString(className, attrName, attrType,
- genType);
- }
-
- String listAttr = getListAttribute(attrType, annotation);
- return getSetterInterfaceString(className, attrName, listAttr, genType);
- }
-
- /**
- * Returns setter string for interface.
- *
- * @param name class name
- * @param attrName attribute name
- * @param attrType attribute type
- * @return setter string
- */
- private static String getSetterInterfaceString(String name,
- String attrName,
- String attrType,
- int genType) {
- if (genType == GENERATE_SERVICE_AND_MANAGER) {
- return methodSignature(getCapitalCase(attrName),
- SET_METHOD_PREFIX,
- null, attrName, VOID, attrType +
- OP_PARAM, INTERFACE_TYPE);
- }
- return methodSignature(attrName, EMPTY_STRING, null,
- attrName, name + BUILDER, attrType, INTERFACE_TYPE);
- }
-
- /**
- * Returns return type for attribute.
- *
- * @param attr attribute info
- * @return return type
- */
- private static String getReturnType(JavaAttributeInfo attr) {
- StringBuilder builder = new StringBuilder();
-
- if (attr.isQualifiedName() &&
- attr.getImportInfo().getPkgInfo() != null) {
- builder.append(attr.getImportInfo().getPkgInfo()).append(PERIOD);
- }
- builder.append(attr.getImportInfo().getClassInfo());
-
- if (attr.getAttributeType() != null &&
- attr.getAttributeType().getDataType() == IDENTITYREF) {
- return CLASS_STRING + DIAMOND_OPEN_BRACKET +
- QUESTION_MARK + SPACE + EXTEND + SPACE +
- builder.toString() + DIAMOND_CLOSE_BRACKET;
- }
- return builder.toString();
- }
-
- /**
- * Returns the build method strings for interface file.
- *
- * @param yangName name of the interface
- * @return build method for interface
- */
- static String getBuildForInterface(String yangName) {
- return methodSignature(BUILD, EMPTY_STRING, null, null,
- yangName, null, INTERFACE_TYPE);
- }
-
- /**
- * Returns constructor string for impl class.
- *
- * @param yangName class name
- * @param isRootNode if root node
- * @return constructor string
- */
- static String getConstructorStart(String yangName,
- boolean isRootNode) {
- StringBuilder builder = new StringBuilder(
- getConstructorString(yangName));
-
- String name = getCapitalCase(yangName);
- String returnType = DEFAULT_CAPS + name;
- if (isRootNode) {
- returnType = name + OP_PARAM;
- }
- builder.append(methodSignature(
- returnType, EMPTY_STRING, PROTECTED, BUILDER_LOWER_CASE + OBJECT,
- null, name + BUILDER, CLASS_TYPE));
- return builder.toString();
- }
-
- /**
- * Returns the constructor strings for class file.
- *
- * @param attr attribute info
- * @param genType generated java files
- * @return constructor for class
- */
- public static String getConstructor(JavaAttributeInfo attr, int genType) {
- String attrName = attr.getAttributeName();
- String attrCaps = getCapitalCase(attrName);
- switch (genType) {
- case GENERATE_SERVICE_AND_MANAGER:
- return methodBody(MethodBodyTypes.CONSTRUCTOR, attrName,
- attrCaps, EIGHT_SPACE_INDENTATION, GET, null,
- false, null);
- default:
- return methodBody(MethodBodyTypes.CONSTRUCTOR, attrName,
- attrName, EIGHT_SPACE_INDENTATION, EMPTY_STRING,
- null, false, null);
- }
- }
-
- /**
- * Returns the rpc strings for service interface.
- *
- * @param rpcName name of the rpc
- * @param input name of input
- * @param output name of output
- * @return rpc method string
- */
- public static String getRpcServiceMethod(String rpcName, String input,
- String output) {
- String inputVal = null;
- if (input != null) {
- inputVal = RPC_INPUT_VAR_NAME;
- }
- return methodSignature(rpcName, EMPTY_STRING, null,
- inputVal, output, input, INTERFACE_TYPE) +
- NEW_LINE;
- }
-
- /**
- * Returns the build method strings for class file.
- *
- * @param yangName class name
- * @param isRootNode if root node
- * @return build method string for class
- */
- static String getBuild(String yangName, boolean isRootNode) {
- String type = DEFAULT_CAPS + yangName;
- if (isRootNode) {
- type = yangName + OP_PARAM;
- }
- return methodSignature(BUILD, EMPTY_STRING, PUBLIC, null,
- yangName, null,
- CLASS_TYPE) +
- methodBody(MethodBodyTypes.BUILD, type, BUILD,
- EIGHT_SPACE_INDENTATION, EMPTY_STRING,
- null, false, null) +
- methodClose(FOUR_SPACE);
- }
-
- /**
- * Returns the Default constructor strings for class file.
- *
- * @param name name of the class
- * @param modifierType modifier type for default constructor
- * @return Default constructor for class
- */
- private static String getDefaultConstructor(String name,
- String modifierType) {
- return methodSignature(name, EMPTY_STRING, modifierType, null,
- null, null, CLASS_TYPE) +
- methodClose(FOUR_SPACE);
- }
-
- /**
- * Returns to string method's open strings.
- *
- * @return string method's open string
- */
- static String getToStringMethodOpen() {
- StringBuilder builder = new StringBuilder(getOverRideString());
- builder.append(methodSignature(TO_STRING_METHOD, EMPTY_STRING,
- PUBLIC, null, STRING_DATA_TYPE, null,
- CLASS_TYPE));
- builder.append(getReturnString(GOOGLE_MORE_OBJECT_METHOD_STRING,
- EIGHT_SPACE_INDENTATION)).append(NEW_LINE)
- .append(getOmitNullValueString());
- return builder.toString();
- }
-
- /**
- * Returns to string method's close string.
- *
- * @return to string method close string
- */
- static String getToStringMethodClose() {
- return TWELVE_SPACE_INDENTATION + PERIOD + TO_STRING_METHOD +
- brackets(OPEN_CLOSE_BRACKET, null, null) + signatureClose() +
- methodClose(FOUR_SPACE);
- }
-
- /**
- * Returns to string method for class.
- *
- * @param attr java attribute
- * @return to string method for class
- */
- public static String getToStringMethod(JavaAttributeInfo attr) {
- return methodBody(TO_STRING, attr.getAttributeName(), null,
- TWELVE_SPACE_INDENTATION, null, null, false, null);
- }
-
- /**
- * Returns from string method's open string.
- *
- * @param className name of the class
- * @return from string method's open string
- */
- static String getFromStringMethodSignature(String className) {
- return getJavaDoc(FROM_METHOD, className, false, null) +
- methodSignature(FROM_STRING_METHOD_NAME, EMPTY_STRING, PUBLIC +
- SPACE + STATIC, FROM_STRING_PARAM_NAME,
- className, STRING_DATA_TYPE,
- CLASS_TYPE);
- }
-
- /**
- * Return from string method's close string.
- *
- * @return from string method's close string
- */
- static String getFromStringMethodClose() {
- return methodClose(FOUR_SPACE);
- }
-
- /**
- * Return from string method's body string.
- *
- * @param attr attribute info
- * @param fromAttr attribute info for the from string wrapper
- * type
- * @return from string method's body string
- */
- public static String getFromStringMethod(JavaAttributeInfo attr,
- JavaAttributeInfo fromAttr) {
-
- return EIGHT_SPACE_INDENTATION + getTrySubString() +
- getNewLineAndSpace(TWELVE_SPACE_INDENTATION) +
- getParsedSubString(attr, fromAttr) +
- getReturnOfSubString() + EIGHT_SPACE_INDENTATION +
- getCatchSubString(attr.getCurHolderOrCount());
- }
-
- /**
- * Returns sub string with parsed statement for union's from string method.
- *
- * @param attr attribute info
- * @return sub string with parsed statement for union's from string method
- */
- private static String getParsedSubString(JavaAttributeInfo attr,
- JavaAttributeInfo fromStringAttr) {
-
- String targetDataType = getReturnType(attr);
- YangDataTypes types = fromStringAttr.getAttributeType()
- .getDataType();
- StringBuilder method = new StringBuilder();
- switch (types) {
- case BITS:
- return targetDataType + SPACE + TMP_VAL + SPACE + EQUAL +
- SPACE + getCapitalCase(attr.getAttributeName()) +
- PERIOD + FROM_STRING_METHOD_NAME +
- getOpenCloseParaWithValue(FROM_STRING_PARAM_NAME) +
- signatureClose();
- case BINARY:
- return method.append(targetDataType).append(SPACE).append(TMP_VAL)
- .append(SPACE).append(EQUAL).append(SPACE).append(
- geStringConverterForBinary(FROM_STRING_PARAM_NAME))
- .append(signatureClose()).toString();
- default:
- return targetDataType + SPACE + TMP_VAL + SPACE + EQUAL +
- SPACE + getParseFromStringMethod(
- targetDataType, fromStringAttr.getAttributeType()) +
- getOpenCloseParaWithValue(FROM_STRING_PARAM_NAME) +
- signatureClose();
- }
- }
-
- /**
- * Returns from string converter for binary type.
- *
- * @param var variable name
- * @return to string method body
- */
- private static String geStringConverterForBinary(String var) {
- StringBuilder builder = new StringBuilder();
- return builder.append(BASE64).append(PERIOD)
- .append(GET_DECODER).append(OPEN_CLOSE_BRACKET_STRING).append(PERIOD)
- .append(DECODE).append(getOpenCloseParaWithValue(var)).toString();
- }
-
- /**
- * Returns to string converter for binary type.
- *
- * @param var variable name
- * @return to string method body
- */
- private static String getToStringForBinary(String var) {
- StringBuilder builder = new StringBuilder();
- return builder.append(BASE64).append(PERIOD)
- .append(GET_ENCODER).append(OPEN_CLOSE_BRACKET_STRING)
- .append(PERIOD).append(ENCODE_TO_STRING)
- .append(getOpenCloseParaWithValue(var)).toString();
- }
-
- /**
- * Returns hash code method open strings.
- *
- * @return hash code method open string
- */
- static String getHashCodeMethodOpen() {
- String line;
- StringBuilder builder = new StringBuilder(getOverRideString());
- builder.append(methodSignature(HASH_CODE_STRING, EMPTY_STRING, PUBLIC,
- null, INT, null, CLASS_TYPE));
- line = getReturnString(OBJECT_STRING + SUFFIX_S + PERIOD + HASH +
- OPEN_PARENTHESIS, EIGHT_SPACE_INDENTATION);
- builder.append(line);
- return builder.toString();
- }
-
- /**
- * Returns hash code methods close string.
- *
- * @param hashcodeString hash code string
- * @return to hash code method close string
- */
- static String getHashCodeMethodClose(String hashcodeString) {
- String[] array = {SPACE, COMMA};
- hashcodeString = trimAtLast(hashcodeString, array);
- return hashcodeString + CLOSE_PARENTHESIS + signatureClose() +
- methodClose(FOUR_SPACE);
- }
-
- /**
- * Returns hash code method for class.
- *
- * @param attr attribute info
- * @return hash code method
- */
- public static String getHashCodeMethod(JavaAttributeInfo attr) {
- return attr.getAttributeName() + COMMA + SPACE;
- }
-
- /**
- * Returns equals method open strings.
- *
- * @param className class name
- * @return equals method open string
- */
- static String getEqualsMethodOpen(String className) {
- return getOverRideString() +
- methodSignature(EQUALS_STRING, EMPTY_STRING, PUBLIC, OBJ,
- BOOLEAN_DATA_TYPE, OBJECT_STRING,
- CLASS_TYPE) +
- getEqualsMethodsCommonIfCondition() +
- getEqualsMethodsSpecificIfCondition(className);
- }
-
- /**
- * Returns equal methods if condition string.
- *
- * @return if condition string
- */
- private static String getEqualsMethodsCommonIfCondition() {
- return getIfConditionBegin(EIGHT_SPACE_INDENTATION, THIS + SPACE +
- EQUAL + EQUAL + SPACE + OBJ) + getReturnString(
- TRUE, TWELVE_SPACE_INDENTATION) + signatureClose()
- + methodClose(EIGHT_SPACE);
- }
-
- /**
- * Returns if condition for specific class object in equals method.
- *
- * @param className class name
- * @return if condition string
- */
- private static String getEqualsMethodsSpecificIfCondition(String className) {
- return EIGHT_SPACE_INDENTATION + IF + SPACE + OPEN_PARENTHESIS + OBJ +
- INSTANCE_OF + className + CLOSE_PARENTHESIS + SPACE +
- OPEN_CURLY_BRACKET + NEW_LINE + TWELVE_SPACE_INDENTATION +
- className + SPACE + OTHER + SPACE + EQUAL + SPACE +
- OPEN_PARENTHESIS + className + CLOSE_PARENTHESIS + SPACE + OBJ +
- SEMI_COLON + NEW_LINE + TWELVE_SPACE_INDENTATION + RETURN +
- NEW_LINE;
- }
-
- /**
- * Returns equals methods close string.
- *
- * @param equalMethodString equal method string
- * @return equals method close string
- */
- static String getEqualsMethodClose(String equalMethodString) {
- String[] array = {NEW_LINE, AND, AND, SPACE};
- equalMethodString = trimAtLast(equalMethodString, array) +
- signatureClose();
- return equalMethodString + methodClose(EIGHT_SPACE) +
- getReturnString(FALSE, EIGHT_SPACE_INDENTATION) +
- signatureClose() + methodClose(FOUR_SPACE);
- }
-
- /**
- * Returns equals method for class.
- *
- * @param attr attribute info
- * @return equals method
- */
- public static String getEqualsMethod(JavaAttributeInfo attr) {
- String attributeName = attr.getAttributeName();
- if (attributeName.contains(OPERATION_TYPE_ATTRIBUTE)) {
- return SIXTEEN_SPACE_INDENTATION + OBJECT_STRING + SUFFIX_S +
- NEW_LINE + SIXTEEN_SPACE_INDENTATION +
- PERIOD + EQUALS_STRING + OPEN_PARENTHESIS + attributeName +
- COMMA + NEW_LINE + SIXTEEN_SPACE_INDENTATION + SPACE + OTHER
- + PERIOD + attributeName + CLOSE_PARENTHESIS + SPACE + AND +
- AND;
- }
- return SIXTEEN_SPACE_INDENTATION + OBJECT_STRING + SUFFIX_S +
- PERIOD + EQUALS_STRING + OPEN_PARENTHESIS + attributeName +
- COMMA + SPACE + OTHER + PERIOD + attributeName +
- CLOSE_PARENTHESIS + SPACE + AND + AND;
- }
-
- /**
- * Returns of method's string and java doc for special type.
- *
- * @param attr attribute info
- * @param className class name
- * @return of method's string and java doc for special type
- */
-
- public static String getOfMethodStringAndJavaDoc(JavaAttributeInfo attr,
- String className) {
- String attrType = getReturnType(attr);
- String attrName = attr.getAttributeName();
-
- return getJavaDoc(OF_METHOD, className + FOR_TYPE_STRING + attrName,
- false, null) + getOfMethodString(attrType, className);
- }
-
- /**
- * Returns of method's string.
- *
- * @param type data type
- * @param name class name
- * @return of method's string
- */
- private static String getOfMethodString(String type, String name) {
- return methodSignature(OF, EMPTY_STRING, PUBLIC + SPACE + STATIC,
- VALUE, name, type, CLASS_TYPE) +
- methodBody(MethodBodyTypes.OF_METHOD, name, null,
- EIGHT_SPACE_INDENTATION, EMPTY_STRING, null, false, null) +
- methodClose(FOUR_SPACE);
- }
-
- /**
- * Returns string and java doc for constructor of type class.
- *
- * @param attr attribute info
- * @param className class name
- * @param genType generate file type
- * @param count type count
- * @return string and java doc for constructor of type class
- */
- public static String getTypeConstructorStringAndJavaDoc(
- JavaAttributeInfo attr, String className, int genType, int count) {
- String attrType = getReturnType(attr);
- String attrName = attr.getAttributeName();
- return getJavaDoc(TYPE_CONSTRUCTOR, attrName, false, null) +
- getTypeConstructorString(attrType, attrName, className,
- genType, count);
- }
-
- /**
- * Returns string and java doc for constructor of type class.
- *
- * @param attr1 first attribute info
- * @param attr2 second attribute info
- * @param genType class name
- * @param type conflict validate type
- * @param addFirst whether int came first or uInt came first
- * @param count type count
- * @return string and java doc for constructor of type class
- */
- public static String getTypeConstructorStringAndJavaDoc(
- JavaAttributeInfo attr1, JavaAttributeInfo attr2, String genType,
- ValidatorTypeForUnionTypes type, boolean addFirst, int count) {
-
- String attrType = getReturnType(attr1);
- String attrName1 = "";
- String attrName2 = "";
- if (attr1 != null) {
- if (addFirst) {
- attrName1 = attr1.getAttributeName();
- } else {
- attrName2 = attr1.getAttributeName();
- }
- }
- if (attr2 != null) {
- if (addFirst) {
- attrName2 = attr2.getAttributeName();
- } else {
- attrName1 = attr2.getAttributeName();
- }
- }
-
- String appDataStructure = null;
- if (attr1 != null && attr1.getCompilerAnnotation() != null) {
- appDataStructure =
- attr1.getCompilerAnnotation().getYangAppDataStructure()
- .getDataStructure().name();
- }
- String doc;
- if (attrName1.isEmpty()) {
- doc = attrName2;
- } else {
- doc = attrName1;
- }
- return getJavaDoc(TYPE_CONSTRUCTOR, doc, false, appDataStructure) +
- getTypeConstructorString(attrType, attrName1,
- attrName2, genType,
- type, addFirst, count);
- }
-
- /**
- * Returns type constructor string.
- *
- * @param type data type
- * @param name attribute name
- * @param className class name
- * @param genType generated file type
- * @param count type count
- * @return type constructor string
- */
- private static String getTypeConstructorString(String type, String name,
- String className, int genType, int count) {
- StringBuilder builder = new StringBuilder();
- builder.append(
- methodSignature(className, EMPTY_STRING, PUBLIC, name,
- null, type, CLASS_TYPE));
- if (genType == GENERATE_UNION_CLASS) {
- builder.append(EIGHT_SPACE_INDENTATION).append(SET_VALUE_PARA)
- .append(PERIOD).append(SET_METHOD_PREFIX).append(
- getOpenCloseParaWithValue(count + EMPTY_STRING))
- .append(signatureClose());
- }
- builder.append(methodBody(SETTER, name, null, EIGHT_SPACE_INDENTATION,
- EMPTY_STRING, null, false, null))
- .append(methodClose(FOUR_SPACE));
- return builder.toString();
- }
-
- /**
- * Returns type constructor string.
- *
- * @param type data type
- * @param attr1 attribute attr1
- * @param className class attr1
- * @param count type count
- * @return type constructor string
- */
- private static String getTypeConstructorString(
- String type, String attr1, String attr2, String className,
- ValidatorTypeForUnionTypes validatorType, boolean addInt, int count) {
- StringBuilder constructor = new StringBuilder(
- methodSignature(className, EMPTY_STRING, PUBLIC, attr1,
- null, type, CLASS_TYPE))
- .append(EIGHT_SPACE_INDENTATION).append(SET_VALUE_PARA)
- .append(PERIOD).append(SET_METHOD_PREFIX).append(
- getOpenCloseParaWithValue(count + EMPTY_STRING))
- .append(signatureClose())
- .append(ifConditionForIntInTypeDefConstructor(validatorType,
- addInt, attr1))
- .append(methodBody(SETTER, attr1, null,
- TWELVE_SPACE_INDENTATION, EMPTY_STRING,
- null, false, attr1));
- String str = EIGHT_SPACE_INDENTATION + CLOSE_CURLY_BRACKET +
- ELSE + OPEN_CURLY_BRACKET + NEW_LINE;
- constructor.append(str)
- .append(methodBody(SETTER, attr2, null,
- TWELVE_SPACE_INDENTATION, EMPTY_STRING,
- null, false, attr1))
- .append(methodClose(FOUR_SPACE))
- .append(methodClose(EIGHT_SPACE));
-
- return constructor.toString();
- }
-
- /**
- * Returns interface of add augmentation.
- *
- * @param className class name
- * @return interface of add augmentation
- */
- static String getAddAugmentInfoMethodInterface(String className) {
- StringBuilder builder = new StringBuilder(generateForAddAugmentation(className));
- LinkedHashMap<String, String> map = new LinkedHashMap<>();
- map.put(VALUE, OBJECT_STRING);
- map.put(CLASS + OBJECT_STRING, CLASS_STRING);
- builder.append(multiAttrMethodSignature(ADD_STRING + YANG_AUGMENTED_INFO,
- null, null, className, map,
- INTERFACE_TYPE));
- return builder.toString();
- }
-
- /**
- * Returns implementation of add augmentation.
- *
- * @param className class name
- * @return implementation of add augmentation
- */
- static String getAddAugmentInfoMethodImpl(String className) {
- StringBuilder builder = new StringBuilder(getOverRideString());
- LinkedHashMap<String, String> map = new LinkedHashMap<>();
- map.put(VALUE, OBJECT_STRING);
- map.put(CLASS + OBJECT_STRING, CLASS_STRING);
- builder.append(multiAttrMethodSignature(ADD_STRING + YANG_AUGMENTED_INFO,
- null, PUBLIC,
- className, map, CLASS_TYPE))
- .append(methodBody(AUGMENTED_MAP_ADD, null, null,
- EIGHT_SPACE_INDENTATION, null, null, false, null))
- .append(getReturnString(THIS, EIGHT_SPACE_INDENTATION))
- .append(signatureClose())
- .append(methodClose(FOUR_SPACE));
- return builder.toString();
- }
-
- /**
- * Returns interface of get YANG augment info.
- *
- * @return interface of get YANG augment info
- */
- static String getYangAugmentInfoInterface() {
- return generateForGetAugmentation() +
- methodSignature(YANG_AUGMENTED_INFO_LOWER_CASE, EMPTY_STRING,
- null, CLASS + OBJECT_STRING,
- OBJECT_STRING, CLASS_STRING, INTERFACE_TYPE);
- }
-
- /**
- * Returns implementation of get YANG augment info.
- *
- * @return implementation of get YANG augment info
- */
- static String getYangAugmentInfoImpl() {
- return getOverRideString() +
- methodSignature(YANG_AUGMENTED_INFO_LOWER_CASE, EMPTY_STRING,
- PUBLIC, CLASS + OBJECT_STRING, OBJECT_STRING,
- CLASS_STRING, CLASS_TYPE) +
- methodBody(AUGMENTED_MAP_GET_VALUE, null, null,
- EIGHT_SPACE_INDENTATION, null, null, false, null) +
- methodClose(FOUR_SPACE);
- }
-
- /**
- * Returns enum's constructor.
- *
- * @param className enum's class name
- * @return enum's constructor
- */
- static String getEnumsConstructor(String className) {
- StringBuilder builder = new StringBuilder(
- getJavaDoc(TYPE_CONSTRUCTOR, className, false, null));
- String clsName = getSmallCase(className);
- LinkedHashMap<String, String> map = new LinkedHashMap<>();
- map.put(clsName, INT);
- map.put(SCHEMA_NAME, STRING_DATA_TYPE);
- builder.append(multiAttrMethodSignature(className, EMPTY_STRING,
- EMPTY_STRING, null,
- map, CLASS_TYPE))
- .append(methodBody(SETTER, clsName, EMPTY_STRING,
- EIGHT_SPACE_INDENTATION, EMPTY_STRING,
- EMPTY_STRING, false, null))
- .append(methodBody(SETTER, SCHEMA_NAME, EMPTY_STRING,
- EIGHT_SPACE_INDENTATION, EMPTY_STRING,
- EMPTY_STRING, false, null))
- .append(methodClose(FOUR_SPACE));
-
- return builder.toString();
- }
-
- /**
- * Returns of method for enum class.
- *
- * @param className class name
- * @param type method body type
- * @return of method
- */
- static String getEnumsOfValueMethod(String className,
- YangEnumeration enumeration,
- MethodBodyTypes type) {
- String name = getCapitalCase(className);
- StringBuilder builder = new StringBuilder(getJavaDoc(
- OF_METHOD, name + SPACE + FOR,
- false, null));
- //Switch statement.
- String sw = EIGHT_SPACE_INDENTATION + SWITCH + SPACE +
- getOpenCloseParaWithValue(VALUE) +
- methodSignatureClose(CLASS_TYPE);
- String str;
- switch (type) {
- case ENUM_METHOD_INT_VALUE:
- builder.append(getEnumValueMethodSignature(name, INT))
- .append(sw);
- for (YangEnum yangEnum : enumeration.getEnumSet()) {
- str = getEnumJavaAttribute(yangEnum.getNamedValue())
- .toUpperCase();
- builder.append(getEnumValueMethodCases(
- EMPTY_STRING + yangEnum.getValue(), str, name));
- }
- break;
- case ENUM_METHOD_STRING_VALUE:
- builder.append(getEnumValueMethodSignature(name,
- STRING_DATA_TYPE))
- .append(sw);
- for (YangEnum yangEnum : enumeration.getEnumSet()) {
- str = getEnumJavaAttribute(yangEnum.getNamedValue())
- .toUpperCase();
- builder.append(getEnumValueMethodCases(
- QUOTES + yangEnum.getNamedValue() + QUOTES, str,
- name));
- }
- break;
- default:
- return null;
- }
-
- String method = TWELVE_SPACE_INDENTATION + DEFAULT + SPACE + COLON +
- NEW_LINE;
- builder.append(method)
- .append(getExceptionThrowString(SIXTEEN_SPACE_INDENTATION))
- .append(methodClose(EIGHT_SPACE))
- .append(methodClose(FOUR_SPACE));
-
- return builder.toString();
- }
-
- /**
- * Returns enum value method signature.
- *
- * @param name method name
- * @param type param type
- * @return enum value method signature
- */
- private static String getEnumValueMethodSignature(String name, String type) {
- return methodSignature(OF, EMPTY_STRING, PUBLIC + SPACE +
- STATIC, VALUE, name, type, CLASS_TYPE);
- }
-
- /**
- * Returns enum value method's cases.
- *
- * @param caseType case type
- * @param value return value
- * @param name name of class
- * @return enum value method's cases
- */
- private static String getEnumValueMethodCases(String caseType, String value,
- String name) {
- return TWELVE_SPACE_INDENTATION + CASE + SPACE + caseType +
- COLON + NEW_LINE + getReturnString(name,
- SIXTEEN_SPACE_INDENTATION) +
- PERIOD + value + signatureClose();
- }
-
- /**
- * Returns augmented data getter and setter methods for service class.
- *
- * @param parent parent node
- * @return augmented data getter and setter methods for service class
- */
- static String getAugmentsDataMethodForService(YangNode parent) {
- List<YangAtomicPath> targets = getSetOfNodeIdentifiers(parent);
- if (targets.isEmpty()) {
- return EMPTY_STRING;
- }
- YangNode first = targets.get(0).getResolvedNode();
- //If target path is for notification then no need to generate get/set
- // for that augment in service class.
- if (first instanceof InvalidOpTypeHolder) {
- return EMPTY_STRING;
- }
- YangNode augmentedNode;
- String curNodeName;
- String method;
- StringBuilder methods = new StringBuilder();
- String parentName;
- String returnType;
- YangNode methodNode;
- YangPluginConfig pluginConfig =
- ((JavaFileInfoContainer) parent).getJavaFileInfo()
- .getPluginConfig();
- for (YangAtomicPath nodeId : targets) {
- augmentedNode = nodeId.getResolvedNode().getParent();
- methodNode = nodeId.getResolvedNode();
- if (((JavaFileInfoContainer) methodNode).getJavaFileInfo()
- .getJavaName() != null) {
- curNodeName =
- ((JavaFileInfoContainer) methodNode).getJavaFileInfo()
- .getJavaName();
- } else {
- curNodeName = getCapitalCase(
- getCamelCase(methodNode.getName(),
- pluginConfig.getConflictResolver()));
- }
- returnType =
- getAugmentedClassNameForDataMethods(augmentedNode, parent);
- parentName = getCurNodeName(augmentedNode,
- pluginConfig);
- method = generateForGetMethodWithAttribute(returnType) +
- getGetMethodWithArgument(returnType, AUGMENTED +
- parentName + getCapitalCase(curNodeName)) + NEW_LINE;
- methods.append(method);
-
- method = getJavaDoc(MANAGER_SETTER_METHOD,
- AUGMENTED + getCapitalCase(parentName) +
- getCapitalCase(curNodeName), false,
- null) +
- getSetterForInterface(getSmallCase(AUGMENTED) + parentName +
- getCapitalCase(curNodeName),
- returnType, parentName, false,
- GENERATE_SERVICE_AND_MANAGER, null) +
- NEW_LINE;
- methods.append(method);
- }
- return methods.toString();
- }
-
- /**
- * Returns validator method for range in union class.
- *
- * @param type type
- * @return validator method for range in union class
- */
- static String getRangeValidatorMethodForUnion(String type) {
- String newType;
- if (type.contentEquals(BIG_INTEGER)) {
- newType = LONG;
- } else {
- newType = INT;
- }
- StringBuilder builder = new StringBuilder(generateForValidatorMethod());
- String var = getSmallCase(BIG_INTEGER);
- LinkedHashMap<String, String> map = new LinkedHashMap<>();
- map.put(MIN_RANGE, type);
- map.put(MAX_RANGE, type);
- map.put(VALUE, newType);
- builder.append(multiAttrMethodSignature(VALIDATE_RANGE, EMPTY_STRING,
- PRIVATE, BOOLEAN_DATA_TYPE, map,
- CLASS_TYPE));
- if (type.contentEquals(BIG_INTEGER)) {
- //Create new instance of big integer.
- builder.append(getNewInstance(BIG_INTEGER, var, EIGHT_SPACE_INDENTATION,
- QUOTES + SPACE + QUOTES + SPACE +
- ADD + SPACE + VALUE))
- //Add return string.
- .append(getReturnString(var, EIGHT_SPACE_INDENTATION))
- //Add compareTo string
- .append(getCompareToString())
- //Add && condition.
- .append(ifAndAndCondition(
- //Add == condition
- ifEqualEqualCondition(
- getOpenCloseParaWithValue(MIN_RANGE), ONE),
- var))
- //Add compareTo string.
- .append(getCompareToString())
- //Add == condition.
- .append(ifEqualEqualCondition(
- getOpenCloseParaWithValue(MAX_RANGE), ONE))
- .append(signatureClose());
- } else {
- builder.append(getReturnString(VALUE, EIGHT_SPACE_INDENTATION))
- .append(getGreaterThanCondition())
- .append(ifAndAndCondition(MIN_RANGE, VALUE))
- .append(getLesserThanCondition())
- .append(MAX_RANGE)
- .append(signatureClose());
- }
- builder.append(methodClose(FOUR_SPACE));
- return builder.toString();
- }
-
- //Get method with arguments.
- private static String getGetMethodWithArgument(String returnType,
- String yangName) {
- return methodSignature(getCapitalCase(yangName), GET_METHOD_PREFIX,
- null, getSmallCase(returnType),
- returnType, returnType + OP_PARAM,
- INTERFACE_TYPE);
- }
-
- /**
- * Returns add to list method interface.
- *
- * @param attr java attribute
- * @param className name of the class
- * @return add to list method interface
- */
- public static String getAddToListMethodInterface(JavaAttributeInfo attr,
- String className) {
-
- String methodName = ADD_STRING + TO_CAPS + getCapitalCase(
- attr.getAttributeName());
- String retType = getReturnType(attr);
- YangDataStructure struct = getYangDataStructure(attr.getCompilerAnnotation());
- if (struct != null) {
- switch (struct) {
- case MAP:
- Map<String, String> param = new LinkedHashMap<>();
- param.put(attr.getAttributeName() + KEYS, retType + KEYS);
- param.put(attr.getAttributeName() + VALUE_CAPS, retType);
- return multiAttrMethodSignature(methodName, null, null,
- className + BUILDER, param,
- INTERFACE_TYPE);
- default:
- return methodSignature(methodName, null, null, ADD_STRING + TO_CAPS,
- className + BUILDER, retType,
- INTERFACE_TYPE);
- }
- }
- return methodSignature(methodName, null, null, ADD_STRING + TO_CAPS,
- className + BUILDER, getReturnType(attr),
- INTERFACE_TYPE);
- }
-
- /**
- * Returns YANG data structure from java attribute.
- *
- * @param annotation compiler annotation
- * @return YANG data structure from java attribute
- */
- public static YangDataStructure getYangDataStructure(
- YangCompilerAnnotation annotation) {
- if (annotation != null) {
- YangAppDataStructure data = annotation.getYangAppDataStructure();
- if (data != null) {
- return data.getDataStructure();
- }
- }
- return null;
- }
-
- /**
- * Returns add to list method impl.
- *
- * @param attr java attribute
- * @param name class name
- * @return add to list method impl
- */
- public static String getAddToListMethodImpl(JavaAttributeInfo attr,
- String name) {
- String attrName = attr.getAttributeName();
- String retString = getOverRideString();
- String methodName = ADD_STRING + TO_CAPS + getCapitalCase(attrName);
- StringBuilder builder = new StringBuilder(retString);
- String retType = getReturnType(attr);
- YangDataStructure struct = getYangDataStructure(attr.getCompilerAnnotation());
- if (struct != null) {
- switch (struct) {
- case MAP:
- Map<String, String> param = new LinkedHashMap<>();
- param.put(attr.getAttributeName() + KEYS, retType + KEYS);
- param.put(attr.getAttributeName() + VALUE_CAPS, retType);
- builder.append(multiAttrMethodSignature(methodName,
- null, PUBLIC,
- name + BUILDER, param,
- CLASS_TYPE))
- .append(getIfConditionForAddToListMethod(attr));
- retString = EIGHT_SPACE_INDENTATION + attrName + PERIOD +
- PUT + getOpenCloseParaWithValue(
- attrName + KEYS + COMMA + SPACE + attrName +
- VALUE_CAPS);
- break;
- default:
- builder.append(methodSignature(methodName,
- null, PUBLIC,
- ADD_STRING + TO_CAPS,
- name + BUILDER, retType,
- CLASS_TYPE))
- .append(getIfConditionForAddToListMethod(attr));
- retString = EIGHT_SPACE_INDENTATION + attrName + PERIOD + ADD_STRING +
- OPEN_PARENTHESIS + ADD_STRING + TO_CAPS + CLOSE_PARENTHESIS;
-
- }
- } else {
- builder.append(methodSignature(ADD_STRING + TO_CAPS +
- getCapitalCase(attrName),
- null, PUBLIC, ADD_STRING + TO_CAPS,
- name + BUILDER, retType,
- CLASS_TYPE))
- .append(getIfConditionForAddToListMethod(attr));
- retString = EIGHT_SPACE_INDENTATION + attrName + PERIOD + ADD_STRING +
- OPEN_PARENTHESIS + ADD_STRING + TO_CAPS + CLOSE_PARENTHESIS;
- }
- builder.append(retString)
- .append(signatureClose())
- .append(getReturnString(THIS, EIGHT_SPACE_INDENTATION))
- .append(signatureClose())
- .append(methodClose(FOUR_SPACE));
- return builder.toString();
-
- }
-
- // Returns if condition for add to list method.
-
- private static String getIfConditionForAddToListMethod(JavaAttributeInfo attr) {
- String name = attr.getAttributeName();
- String type;
- YangDataStructure struct = getYangDataStructure(attr.getCompilerAnnotation());
- if (struct != null) {
- switch (struct) {
- case QUEUE:
- type = PRIORITY_QUEUE;
- break;
-
- case LIST:
- type = ARRAY_LIST_INIT;
- break;
-
- case MAP:
- type = LINKED_HASH_MAP;
- break;
-
- case SET:
- type = LINKED_HASH_SET;
- break;
-
- default:
- type = ARRAY_LIST_INIT;
- break;
-
- }
- } else {
- type = ARRAY_LIST_INIT;
- }
- return getIfConditionBegin(EIGHT_SPACE_INDENTATION, name + SPACE + EQUAL +
- EQUAL + SPACE + NULL) + TWELVE_SPACE_INDENTATION +
- name + SPACE + EQUAL + SPACE +
- NEW + SPACE + type + signatureClose() + methodClose(
- EIGHT_SPACE);
- }
-
- /**
- * Returns builder method for class.
- *
- * @param name name of class
- * @return builder method for class
- */
- static String builderMethod(String name) {
- return generateForBuilderMethod(name) +
- methodSignature(BUILDER_LOWER_CASE,
- EMPTY_STRING, PUBLIC + SPACE +
- STATIC, null, name + BUILDER, null, CLASS_TYPE) +
- getReturnString(NEW + SPACE + name + BUILDER,
- EIGHT_SPACE_INDENTATION) +
- brackets(OPEN_CLOSE_BRACKET, null, null) + signatureClose() +
- methodClose(FOUR_SPACE);
- }
-
- /**
- * Returns is value set interface.
- *
- * @return is value set interface
- */
- static String isLeafValueSetInterface() {
- String method = "\n /**\n" +
- " * Checks if the leaf value is set.\n" +
- " *\n" +
- " * @param leaf leaf whose value status needs to checked\n" +
- " * @return result of leaf value set in object\n" +
- " */\n";
- return method + methodSignature(VALUE_LEAF_SET, EMPTY_STRING, null,
- LEAF, BOOLEAN_DATA_TYPE,
- LEAF_IDENTIFIER, INTERFACE_TYPE);
- }
-
- /**
- * Returns is select leaf set interface.
- *
- * @return is select leaf set interface
- */
- static String isSelectLeafSetInterface() {
- String method = "\n /**\n" +
- " * Checks if the leaf is set to be a selected leaf.\n" +
- " *\n" +
- " * @param leaf if leaf needs to be selected\n" +
- " * @return result of leaf value set in object\n" +
- " */\n";
- return method + methodSignature(IS_SELECT_LEAF, EMPTY_STRING, null,
- LEAF, BOOLEAN_DATA_TYPE, LEAF_IDENTIFIER,
- INTERFACE_TYPE);
- }
-
- /**
- * Returns set select leaf set interface.
- *
- * @param name node name
- * @return set select leaf set interface
- */
- static String setSelectLeafSetInterface(String name) {
- String method = " /**\n" +
- " * Set a leaf to be selected.\n" +
- " *\n" +
- " * @param leaf leaf needs to be selected\n" +
- " * @return builder object for select leaf\n" +
- " */\n";
- return method + methodSignature(SET_SELECT_LEAF, EMPTY_STRING,
- null, LEAF, name +
- BUILDER, LEAF_IDENTIFIER,
- INTERFACE_TYPE) + NEW_LINE;
- }
-
- /**
- * Returns leaf identifier interface enum signature.
- *
- * @param name name of node
- * @return leaf identifier interface enum signature
- */
- static String getInterfaceLeafIdEnumSignature(String name) {
- String start = "\n /**\n" +
- " * Identify the leaf of " + name + PERIOD + NEW_LINE +
- " */\n";
- return start + FOUR_SPACE_INDENTATION + PUBLIC + SPACE + ENUM + SPACE +
- LEAF_IDENTIFIER + SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
- }
-
- /**
- * Returns setter for select leaf.
- *
- * @param name name of node
- * @return setter for select leaf
- */
- static String getSetterForSelectLeaf(String name) {
- return "\n" +
- " " + OVERRIDE + "\n" +
- " public " + name + BUILDER +
- " selectLeaf(LeafIdentifier leaf) {\n" +
- " selectLeafFlags.set(leaf.getLeafIndex());\n" +
- " return this;\n" +
- " }\n";
- }
-
- /**
- * Generates fromString code for bits.
- *
- * @return generated fromString code for bits.
- */
- private static String getFromStringForBits(String bitClassName) {
- /* generate code will look like this.
- public static BitSet fromString(String valInString) {
- BitSet tmpVal = new BitSet();
- String[] bitNames = valInString.trim().split(Pattern.quote(" "));
- for (String bitName : bitNames) {
- Bits bits = of(bitName);
- if (bits != null) {
- tmpVal.set(bits.bits());
- }
- }
- if (tmpVal.isEmpty()) {
- throw new NoSuchElementException("no such element found in bits");
- }
- return tmpVal;
- }*/
- StringBuilder sBuild = new StringBuilder();
- sBuild.append(methodSignature(FROM_STRING_METHOD_NAME, null,
- PUBLIC + SPACE + STATIC,
- FROM_STRING_PARAM_NAME,
- BIT_SET, STRING_DATA_TYPE, CLASS_TYPE))
- .append(EIGHT_SPACE_INDENTATION)
- .append(getBitSetAttr(EMPTY_STRING));
- // Split the input string and check each bit name falls in configured yang file
- sBuild.append(EIGHT_SPACE_INDENTATION).append(STRING_DATA_TYPE)
- .append(SQUARE_BRACKETS).append(SPACE).append(BIT_NAMES_VAR)
- .append(SPACE).append(EQUAL).append(SPACE).append(FROM_STRING_PARAM_NAME)
- .append(PERIOD).append(TRIM_STRING).append(OPEN_CLOSE_BRACKET_STRING)
- .append(PERIOD).append(SPLIT_STRING).append(getOpenCloseParaWithValue(
- getPatternQuoteString(SPACE))).append(signatureClose()).append(
- getForLoopString(EIGHT_SPACE_INDENTATION, STRING_DATA_TYPE, BIT_NAME_VAR,
- BIT_NAMES_VAR));
-
- String small = getSmallCase(bitClassName);
- sBuild.append(TWELVE_SPACE_INDENTATION).append(bitClassName).append(
- SPACE).append(small).append(SPACE).append(EQUAL).append(
- SPACE).append(OF).append(
- getOpenCloseParaWithValue(BIT_NAME_VAR)).append(signatureClose());
- String condition = small + SPACE + NOT + EQUAL + SPACE + NULL;
- sBuild.append(getIfConditionBegin(TWELVE_SPACE_INDENTATION, condition))
- .append(SIXTEEN_SPACE_INDENTATION)
- .append(TMP_VAL).append(PERIOD).append(SET_METHOD_PREFIX)
- .append(OPEN_PARENTHESIS)
- .append(small).append(PERIOD).append(small).append(
- OPEN_CLOSE_BRACKET_STRING).append(CLOSE_PARENTHESIS)
- .append(signatureClose()).append(methodClose(TWELVE_SPACE))
- .append(methodClose(EIGHT_SPACE));
-
- condition = TMP_VAL + PERIOD + IS_EMPTY;
- sBuild.append(getIfConditionBegin(EIGHT_SPACE_INDENTATION, condition));
- sBuild.append(getExceptionThrowString(TWELVE_SPACE_INDENTATION))
- .append(methodClose(EIGHT_SPACE))
- .append(getReturnString(TMP_VAL, EIGHT_SPACE_INDENTATION))
- .append(signatureClose()).append(methodClose(FOUR_SPACE));
- return sBuild.toString();
- }
-
-
- /**
- * Returns to string method for typedef.
- *
- * @param attr attribute name
- * @return to string method for typedef
- */
- static String getToStringForType(String attr, YangType type) {
- StringBuilder builder = new StringBuilder(getOverRideString())
- .append(methodSignature(TO_STRING_METHOD, null, PUBLIC, null,
- STRING_DATA_TYPE, null, CLASS_TYPE));
- builder.append(getReturnString(
- getToStringForSpecialType(type, attr), EIGHT_SPACE_INDENTATION))
- .append(signatureClose()).append(methodClose(FOUR_SPACE));
- return builder.toString();
- }
-
- /**
- * Returns to string method body for type class.
- *
- * @param type type of attribute
- * @param name @return to string method body for typedef class
- */
- private static String getToStringForSpecialType(YangType type, String name) {
- switch (type.getDataType()) {
- case INT8:
- case INT16:
- case INT32:
- case INT64:
- case UINT8:
- case UINT16:
- case UINT32:
- return STRING_DATA_TYPE + PERIOD + VALUE + OF_CAPS +
- getOpenCloseParaWithValue(name);
-
- case BINARY:
- return getToStringCall(getToStringForBinary(name));
-
- case BITS:
- return getCapitalCase(name) + PERIOD +
- TO_STRING_METHOD + getOpenCloseParaWithValue(name);
-
- case BOOLEAN:
- case EMPTY:
- return name + SPACE + QUESTION_MARK + SPACE + getQuotedString(TRUE)
- + SPACE + COLON + SPACE + getQuotedString(FALSE);
-
- case LEAFREF:
- YangLeafRef<?> lri = (YangLeafRef<?>) type.getDataTypeExtendedInfo();
- YangType<?> rt = lri.isInGrouping() ? null : lri
- .getEffectiveDataType();
- return rt == null ? getToStringCall(name) :
- getToStringForSpecialType(rt, name);
-
- case IDENTITYREF:
- YangIdentityRef ir = (YangIdentityRef) type
- .getDataTypeExtendedInfo();
- YangIdentity identity = ir.getReferredIdentity();
- String idName = getCamelCase(identity.getName(), null);
- return getCapitalCase(idName) + PERIOD + idName + TO_CAPS +
- STRING_DATA_TYPE + OPEN_CLOSE_BRACKET_STRING;
- case ENUMERATION:
- case INSTANCE_IDENTIFIER:
- case UINT64:
- case DECIMAL64:
- case DERIVED:
- case UNION:
- return getToStringCall(name);
-
- default:
- return name;
- }
- }
-
- /**
- * Returns union class's to string method.
- *
- * @param types list of types
- * @return union class's to string method
- */
- static String getUnionToStringMethod(List<YangType<?>> types) {
-
- StringBuilder builder = new StringBuilder(getOverRideString());
- builder.append(methodSignature(TO_STRING_METHOD, null, PUBLIC, null,
- STRING_DATA_TYPE, null, CLASS_TYPE));
- for (YangType type : types) {
- builder.append(getIfConditionBegin(
- EIGHT_SPACE_INDENTATION, getSetValueParaCondition(
- types.indexOf(type)))).append(getReturnString(
- getToStringForSpecialType(type,
- getCamelCase(type.getDataTypeName(), null)),
- TWELVE_SPACE_INDENTATION))
- .append(signatureClose()).append(methodClose(EIGHT_SPACE));
- }
- builder.append(getReturnString(NULL, EIGHT_SPACE_INDENTATION)).append(signatureClose())
- .append(methodClose(FOUR_SPACE));
- return builder.toString();
- }
-
- /**
- * Returns from string method for bits class.
- *
- * @param className bits class name
- * @return from string method for bits class
- */
- static String getBitSetEnumClassFromString(String className) {
- return getJavaDoc(FROM_METHOD, className, false, null) +
- getFromStringForBits(className);
- }
-
- /**
- * Returns to string method for bits type.
- *
- * @param className class name
- * @param enumeration enumeration
- * @return to string method
- */
- static String getBitSetEnumClassToString(String className,
- YangEnumeration enumeration) {
-
- StringBuilder builder = new StringBuilder();
- builder.append(methodSignature(TO_STRING_METHOD, null,
- PUBLIC + SPACE + STATIC, BITS,
- STRING_DATA_TYPE, BIT_SET, CLASS_TYPE))
- .append(getStringBuilderAttr(EMPTY_STRING, EIGHT_SPACE_INDENTATION));
- String condition;
- String name;
- for (YangEnum yangEnum : enumeration.getEnumSet()) {
- name = yangEnum.getNamedValue();
- condition = BITS + PERIOD + GET + OPEN_PARENTHESIS +
- className + PERIOD + getEnumJavaAttribute(name).toUpperCase()
- + PERIOD + getSmallCase(className)
- + OPEN_CLOSE_BRACKET_STRING + CLOSE_PARENTHESIS;
-
-
- builder.append(getIfConditionBegin(
- EIGHT_SPACE_INDENTATION, condition))
- .append(TWELVE_SPACE_INDENTATION).append(STRING_BUILDER_VAR).append(
- PERIOD).append(APPEND).append(OPEN_PARENTHESIS)
- .append(getQuotedString(name)).append(CLOSE_PARENTHESIS)
- .append(signatureClose())
- .append(TWELVE_SPACE_INDENTATION).append(STRING_BUILDER_VAR).append(
- PERIOD).append(APPEND).append(OPEN_PARENTHESIS)
- .append(getQuotedString(SPACE)).append(CLOSE_PARENTHESIS)
- .append(signatureClose()).append(methodClose(EIGHT_SPACE));
- }
- builder.append(getReturnString(STRING_BUILDER_VAR, EIGHT_SPACE_INDENTATION))
- .append(PERIOD).append(TO_STRING_METHOD)
- .append(OPEN_CLOSE_BRACKET_STRING).append(signatureClose())
- .append(methodClose(FOUR_SPACE));
- return builder.toString();
- }
-
- /**
- * Returns to string method for enum class.
- *
- * @return to string method for enum class
- */
- static String getToStringForEnumClass() {
- StringBuilder builder = new StringBuilder(getOverRideString());
- builder.append(methodSignature(TO_STRING_METHOD, EMPTY_STRING,
- PUBLIC, null, STRING_DATA_TYPE, null,
- CLASS_TYPE));
- builder.append(getReturnString(SCHEMA_NAME, EIGHT_SPACE_INDENTATION))
- .append(signatureClose()).append(methodClose(FOUR_SPACE));
- return builder.toString();
- }
-
- /**
- * Returns is filter content match interface.
- *
- * @param name name of node
- * @return is filter content match interface
- */
- static String processSubtreeFilteringInterface(String name) {
- String method = " /**\n" +
- " * Checks if the passed " + name +
- " maps the content match query condition.\n" +
- " *\n" +
- " * @param " + getSmallCase(name) + SPACE +
- getSmallCase(name) + SPACE + "being passed to check" +
- " for" +
- " content match\n" +
- " * @param isSelectAllSchemaChild is select all schema child\n" +
- " * @return match result\n" +
- " */\n";
- LinkedHashMap<String, String> map = new LinkedHashMap<>();
- map.put(getSmallCase(name), name);
- map.put(SELECT_ALL_CHILD, BOOLEAN_DATA_TYPE);
-
- return method + multiAttrMethodSignature(PROCESS_SUBTREE_FILTERING,
- EMPTY_STRING, EMPTY_STRING,
- name, map, INTERFACE_TYPE);
- }
-
- /**
- * Returns build method for subtree filtering in class.
- *
- * @param node YANG node
- * @return build method for subtree filtering in class
- */
- static String generateBuildMethodForSubTree(YangNode node) {
- String name = getCapitalCase(node.getJavaClassNameOrBuiltInType());
- StringBuilder builder = new StringBuilder(getJavaDoc(BUILD_METHOD,
- name, false, null));
- String def = DEFAULT_CAPS + name;
- if (node instanceof RpcNotificationContainer) {
- def = name + OP_PARAM;
- }
- builder.append(methodSignature(BUILD_FOR_FILTER, null, PUBLIC, null,
- name, null, CLASS_TYPE))
- .append(EIGHT_SPACE_INDENTATION).append(SUBTREE_FILTERED)
- .append(SPACE).append(EQUAL).append(SPACE).append(TRUE)
- .append(signatureClose()).append(methodBody(
- MethodBodyTypes.BUILD, def, null, EIGHT_SPACE_INDENTATION,
- null, null, false, null)).append(methodClose(FOUR_SPACE));
- return builder.toString();
- }
-
- /**
- * To string method for identity.
- *
- * @param name name of identity
- * @return to string method
- */
- public static String getToStringMethodForIdentity(String name) {
- StringBuilder builder = new StringBuilder(NEW_LINE);
- builder.append(getJavaDoc(GETTER_METHOD, name, false, null));
- String returnVal = getQuotedString(name);
- String methodName = getCamelCase(name, null) + TO_CAPS + STRING_DATA_TYPE;
- builder.append(methodSignature(methodName, null, PUBLIC + SPACE + STATIC,
- null, STRING_DATA_TYPE, null, CLASS_TYPE))
- .append(getReturnString(returnVal, EIGHT_SPACE_INDENTATION))
- .append(signatureClose()).append(methodClose(FOUR_SPACE));
- return builder.toString();
- }
-
- /**
- * Returns from string method for identity class.
- *
- * @param name name of identity
- * @param schemaName schema name
- * @return from string method
- */
- public static String getFromStringMethodForIdentity(String name,
- String schemaName) {
- StringBuilder builder = new StringBuilder(NEW_LINE);
- builder.append(getJavaDoc(FROM_METHOD, name, false, null));
- String caps = getCapitalCase(name);
- String returnVal = caps + PERIOD + CLASS;
- String cond = getTwoParaEqualsString(FROM_STRING_PARAM_NAME,
- getQuotedString(schemaName));
- builder.append(methodSignature(FROM_STRING_METHOD_NAME, null,
- PUBLIC + SPACE + STATIC,
- FROM_STRING_PARAM_NAME, CLASS_STRING,
- STRING_DATA_TYPE, CLASS_TYPE))
- .append(getIfConditionBegin(EIGHT_SPACE_INDENTATION, cond))
- .append(getReturnString(returnVal, TWELVE_SPACE_INDENTATION))
- .append(signatureClose()).append(methodClose(EIGHT_SPACE))
- .append(getExceptionThrowString(EIGHT_SPACE_INDENTATION))
- .append(methodClose(FOUR_SPACE));
- return builder.toString();
- }
-
- /**
- * Returns compare to method for key class.
- *
- * @param attrs attribute list
- * @param className class name
- * @return compare to method
- */
- public static String getCompareToForKeyClass(
- List<JavaAttributeInfo> attrs, String className) {
-
- StringBuilder builder = new StringBuilder(getOverRideString());
- builder.append(methodSignature(COMPARE_TO, null, PUBLIC, VALUE, INT,
- className, CLASS_TYPE));
- String cond;
- String attrName;
- String para;
- StringBuilder space = new StringBuilder();
- List<String> spaces = new ArrayList<>();
- int count = 1;
- for (JavaAttributeInfo attr : attrs) {
- attrName = attr.getAttributeName();
- para = VALUE + PERIOD + attrName;
- cond = getTwoParaEqualsString(attrName, para);
- if (count == 1) {
- space.append(EIGHT_SPACE_INDENTATION);
- } else {
- space.append(FOUR_SPACE_INDENTATION);
- }
- spaces.add(space.toString());
- count++;
- builder.append(getIfConditionBegin(space.toString(), cond));
- }
- space.append(FOUR_SPACE_INDENTATION);
- builder.append(getReturnString(ZERO, space.toString()))
- .append(signatureClose());
- for (int i = spaces.size() - 1; i >= 0; i--) {
- builder.append(spaces.get(i)).append(CLOSE_CURLY_BRACKET)
- .append(NEW_LINE);
- }
- builder.append(getReturnString(NEG_ONE, EIGHT_SPACE_INDENTATION))
- .append(signatureClose()).append(methodClose(FOUR_SPACE));
- return builder.toString();
- }
-
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/StringGenerator.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/StringGenerator.java
deleted file mode 100644
index e44d55b..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/StringGenerator.java
+++ /dev/null
@@ -1,1347 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava.utils;
-
-import org.onosproject.yangutils.datamodel.YangCompilerAnnotation;
-import org.onosproject.yangutils.datamodel.YangDataStructure;
-import org.onosproject.yangutils.datamodel.YangIdentity;
-import org.onosproject.yangutils.datamodel.YangIdentityRef;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BOOLEAN;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.DECIMAL64;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.EMPTY;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.INT16;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.INT32;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.INT64;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.INT8;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.UINT16;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.UINT32;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.UINT64;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.UINT8;
-import static org.onosproject.yangutils.translator.tojava.utils.BracketType.OPEN_CLOSE_BRACKET;
-import static org.onosproject.yangutils.translator.tojava.utils.BracketType.OPEN_CLOSE_BRACKET_WITH_VALUE;
-import static org.onosproject.yangutils.translator.tojava.utils.BracketType.OPEN_CLOSE_BRACKET_WITH_VALUE_AND_RETURN_TYPE;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodClassTypes.CLASS_TYPE;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangDataStructure;
-import static org.onosproject.yangutils.utils.UtilConstants.ADD_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.AND;
-import static org.onosproject.yangutils.utils.UtilConstants.APPEND;
-import static org.onosproject.yangutils.utils.UtilConstants.APP_INSTANCE;
-import static org.onosproject.yangutils.utils.UtilConstants.AT;
-import static org.onosproject.yangutils.utils.UtilConstants.BIG_DECIMAL;
-import static org.onosproject.yangutils.utils.UtilConstants.BIG_INTEGER;
-import static org.onosproject.yangutils.utils.UtilConstants.BITSET;
-import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE;
-import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_WRAPPER;
-import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
-import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_LOWER_CASE;
-import static org.onosproject.yangutils.utils.UtilConstants.BYTE;
-import static org.onosproject.yangutils.utils.UtilConstants.BYTE_WRAPPER;
-import static org.onosproject.yangutils.utils.UtilConstants.CATCH;
-import static org.onosproject.yangutils.utils.UtilConstants.CHECK_NOT_NULL_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.CLASS;
-import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
-import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
-import static org.onosproject.yangutils.utils.UtilConstants.COLON;
-import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
-import static org.onosproject.yangutils.utils.UtilConstants.COMPARE_TO;
-import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_CAPS;
-import static org.onosproject.yangutils.utils.UtilConstants.DIAMOND_CLOSE_BRACKET;
-import static org.onosproject.yangutils.utils.UtilConstants.DIAMOND_OPEN_BRACKET;
-import static org.onosproject.yangutils.utils.UtilConstants.DOUBLE;
-import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
-import static org.onosproject.yangutils.utils.UtilConstants.ELSE;
-import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
-import static org.onosproject.yangutils.utils.UtilConstants.EQUALS_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.EXCEPTION;
-import static org.onosproject.yangutils.utils.UtilConstants.EXCEPTION_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.EXCEPTION_VAR;
-import static org.onosproject.yangutils.utils.UtilConstants.EXTEND;
-import static org.onosproject.yangutils.utils.UtilConstants.FALSE;
-import static org.onosproject.yangutils.utils.UtilConstants.FOR;
-import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
-import static org.onosproject.yangutils.utils.UtilConstants.FROM_STRING_METHOD_NAME;
-import static org.onosproject.yangutils.utils.UtilConstants.GET;
-import static org.onosproject.yangutils.utils.UtilConstants.GOOGLE_MORE_OBJECT_METHOD_STATIC_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.IF;
-import static org.onosproject.yangutils.utils.UtilConstants.IMPLEMENTS;
-import static org.onosproject.yangutils.utils.UtilConstants.IMPORT;
-import static org.onosproject.yangutils.utils.UtilConstants.IN;
-import static org.onosproject.yangutils.utils.UtilConstants.INT;
-import static org.onosproject.yangutils.utils.UtilConstants.INTEGER_WRAPPER;
-import static org.onosproject.yangutils.utils.UtilConstants.INT_MAX_RANGE;
-import static org.onosproject.yangutils.utils.UtilConstants.INT_MIN_RANGE;
-import static org.onosproject.yangutils.utils.UtilConstants.KEYS;
-import static org.onosproject.yangutils.utils.UtilConstants.LEAF_IDENTIFIER;
-import static org.onosproject.yangutils.utils.UtilConstants.LIST;
-import static org.onosproject.yangutils.utils.UtilConstants.LONG;
-import static org.onosproject.yangutils.utils.UtilConstants.LONG_MAX_RANGE;
-import static org.onosproject.yangutils.utils.UtilConstants.LONG_MIN_RANGE;
-import static org.onosproject.yangutils.utils.UtilConstants.LONG_WRAPPER;
-import static org.onosproject.yangutils.utils.UtilConstants.MAP;
-import static org.onosproject.yangutils.utils.UtilConstants.MORE_OBJ_ATTR;
-import static org.onosproject.yangutils.utils.UtilConstants.NEW;
-import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
-import static org.onosproject.yangutils.utils.UtilConstants.OBJECT;
-import static org.onosproject.yangutils.utils.UtilConstants.OBJECT_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.OF;
-import static org.onosproject.yangutils.utils.UtilConstants.OMIT_NULL_VALUE_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CLOSE_BRACKET_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
-import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
-import static org.onosproject.yangutils.utils.UtilConstants.OVERRIDE;
-import static org.onosproject.yangutils.utils.UtilConstants.PARSE_BOOLEAN;
-import static org.onosproject.yangutils.utils.UtilConstants.PARSE_BYTE;
-import static org.onosproject.yangutils.utils.UtilConstants.PARSE_INT;
-import static org.onosproject.yangutils.utils.UtilConstants.PARSE_LONG;
-import static org.onosproject.yangutils.utils.UtilConstants.PARSE_SHORT;
-import static org.onosproject.yangutils.utils.UtilConstants.PATTERN;
-import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
-import static org.onosproject.yangutils.utils.UtilConstants.PUT;
-import static org.onosproject.yangutils.utils.UtilConstants.QUEUE;
-import static org.onosproject.yangutils.utils.UtilConstants.QUOTES;
-import static org.onosproject.yangutils.utils.UtilConstants.QUOTE_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.RETURN;
-import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
-import static org.onosproject.yangutils.utils.UtilConstants.SET;
-import static org.onosproject.yangutils.utils.UtilConstants.SET_VALUE_PARA;
-import static org.onosproject.yangutils.utils.UtilConstants.SHORT;
-import static org.onosproject.yangutils.utils.UtilConstants.SHORT_MAX_RANGE;
-import static org.onosproject.yangutils.utils.UtilConstants.SHORT_MIN_RANGE;
-import static org.onosproject.yangutils.utils.UtilConstants.SHORT_WRAPPER;
-import static org.onosproject.yangutils.utils.UtilConstants.SIXTEEN_SPACE_INDENTATION;
-import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
-import static org.onosproject.yangutils.utils.UtilConstants.STRING_BUILDER;
-import static org.onosproject.yangutils.utils.UtilConstants.STRING_BUILDER_VAR;
-import static org.onosproject.yangutils.utils.UtilConstants.THIS;
-import static org.onosproject.yangutils.utils.UtilConstants.THROW_NEW;
-import static org.onosproject.yangutils.utils.UtilConstants.TMP_VAL;
-import static org.onosproject.yangutils.utils.UtilConstants.TO_STRING_METHOD;
-import static org.onosproject.yangutils.utils.UtilConstants.TRY;
-import static org.onosproject.yangutils.utils.UtilConstants.TWELVE_SPACE_INDENTATION;
-import static org.onosproject.yangutils.utils.UtilConstants.TWENTY_SPACE_INDENTATION;
-import static org.onosproject.yangutils.utils.UtilConstants.UINT8_MAX_RANGE;
-import static org.onosproject.yangutils.utils.UtilConstants.UINT8_MIN_RANGE;
-import static org.onosproject.yangutils.utils.UtilConstants.UINT_MAX_RANGE;
-import static org.onosproject.yangutils.utils.UtilConstants.UINT_MIN_RANGE;
-import static org.onosproject.yangutils.utils.UtilConstants.ULONG_MAX_RANGE;
-import static org.onosproject.yangutils.utils.UtilConstants.ULONG_MIN_RANGE;
-import static org.onosproject.yangutils.utils.UtilConstants.VALIDATE_RANGE;
-import static org.onosproject.yangutils.utils.UtilConstants.VALUE;
-import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_INFO_MAP;
-import static org.onosproject.yangutils.utils.UtilConstants.YANG_UTILS_TODO;
-import static org.onosproject.yangutils.utils.UtilConstants.ZERO;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
-
-/**
- * Represents string generator for translator.
- */
-public final class StringGenerator {
-
- private static final Set<YangDataTypes> PRIMITIVE_TYPES =
- new HashSet<>(Arrays.asList(INT8, INT16, INT32, INT64, UINT8,
- UINT16, UINT32, UINT64, DECIMAL64,
- BOOLEAN, EMPTY));
-
- // No instantiation.
- private StringGenerator() {
- }
-
- /**
- * Returns compare to string.
- *
- * @return compare to string
- */
- static String getCompareToString() {
- return PERIOD + COMPARE_TO;
- }
-
- /**
- * Returns lesser than and equals condition.
- *
- * @return lesser than and equals condition
- */
- static String getLesserThanCondition() {
- return SPACE + DIAMOND_OPEN_BRACKET + EQUAL + SPACE;
- }
-
- /**
- * Returns greater than and equals condition.
- *
- * @return greater than and equals condition
- */
- static String getGreaterThanCondition() {
- return SPACE + DIAMOND_CLOSE_BRACKET + EQUAL + SPACE;
- }
-
- /**
- * Returns && conditional string.
- *
- * @param cond1 condition one
- * @param cond2 condition two
- * @return && conditional string
- */
- static String ifAndAndCondition(String cond1, String cond2) {
- return cond1 + SPACE + AND + AND + SPACE + cond2;
- }
-
- /**
- * Returns equal equal conditional string.
- *
- * @param cond1 condition one
- * @param cond2 condition two
- * @return equal equal conditional string
- */
- static String ifEqualEqualCondition(String cond1, String cond2) {
- return cond1 + SPACE + EQUAL + EQUAL + SPACE + cond2;
- }
-
- /**
- * Returns new instance string.
- *
- * @param returnType return type
- * @param varName variable name
- * @param space spaces
- * @param value value
- * @return new instance string
- */
- static String getNewInstance(String returnType, String varName,
- String space, String value) {
- return space + returnType + SPACE + varName + SPACE + EQUAL + SPACE +
- NEW + SPACE + returnType + getOpenCloseParaWithValue(value) +
- signatureClose();
- }
-
- /**
- * Returns return string.
- *
- * @param value value to be returned
- * @param space spaces
- * @return return string
- */
- static String getReturnString(String value, String space) {
- return space + RETURN + SPACE + value;
- }
-
- /**
- * Returns illegal argument exception string.
- *
- * @param space indentation
- * @return illegal argument exception string
- */
- static String getExceptionThrowString(String space) {
- return space + THROW_NEW + EXCEPTION_STRING;
- }
-
- /**
- * Returns new line string with spaces.
- *
- * @param space spaces
- * @return new line string with spaces
- */
- static String getNewLineAndSpace(String space) {
- return NEW_LINE + space;
- }
-
- /**
- * Returns method close string.
- *
- * @param type indentation type
- * @return method close string
- */
- public static String methodClose(IndentationType type) {
- switch (type) {
- case EIGHT_SPACE:
- return EIGHT_SPACE_INDENTATION + CLOSE_CURLY_BRACKET +
- NEW_LINE;
- case TWELVE_SPACE:
- return TWELVE_SPACE_INDENTATION + CLOSE_CURLY_BRACKET +
- NEW_LINE;
- case SIXTEEN_SPACE:
- return SIXTEEN_SPACE_INDENTATION + CLOSE_CURLY_BRACKET +
- NEW_LINE;
- case TWENTY_SPACE:
- return TWENTY_SPACE_INDENTATION + CLOSE_CURLY_BRACKET +
- NEW_LINE;
- case TWENTY_EIGHT_SPACE:
- return TWENTY_SPACE_INDENTATION + EIGHT_SPACE_INDENTATION +
- CLOSE_CURLY_BRACKET + NEW_LINE;
- case TWENTY_FOUR_SPACE:
- return TWENTY_SPACE_INDENTATION + FOUR_SPACE_INDENTATION +
- CLOSE_CURLY_BRACKET + NEW_LINE;
- case FOUR_SPACE:
- return FOUR_SPACE_INDENTATION + CLOSE_CURLY_BRACKET +
- NEW_LINE;
- default:
- return CLOSE_CURLY_BRACKET + NEW_LINE;
- }
- }
-
- /**
- * Returns body of the method.
- *
- * @param type type of method body
- * @param paraName parameter name
- * @param methodName method name
- * @param space space to be given before body
- * @param prefix prefix for internal method
- * @param paramType parameter type
- * @param isBuilderSetter is for builder setter
- * @param setterVal value to set in setter
- * @return body of the method
- */
- static String methodBody(MethodBodyTypes type, String paraName,
- String methodName,
- String space, String prefix,
- String paramType, boolean isBuilderSetter, String setterVal) {
- StringBuilder builder = new StringBuilder();
- String body;
- switch (type) {
- case GETTER:
- return getReturnString(paraName, space);
- case SETTER:
- if (setterVal == null) {
- setterVal = paraName;
- }
- body = space + THIS + PERIOD + paraName + SPACE + EQUAL + SPACE +
- setterVal + signatureClose();
- builder.append(body);
- if (isBuilderSetter) {
- body = getReturnString(THIS + signatureClose(), space);
- builder.append(body);
- }
- return builder.toString();
- case BUILD:
- return getReturnString(
- NEW + SPACE + paraName + getOpenCloseParaWithValue(
- THIS) + signatureClose(), space);
- case CONSTRUCTOR:
- return space + paraName + SPACE +
- EQUAL + SPACE + BUILDER_LOWER_CASE + OBJECT + PERIOD +
- prefix + methodName +
- brackets(OPEN_CLOSE_BRACKET, null, null) +
- signatureClose();
- case DEFAULT_CONSTRUCTOR:
- return EMPTY_STRING;
- case AUGMENTED_MAP_ADD:
- return space + YANG_AUGMENTED_INFO_MAP +
- PERIOD + PUT + OPEN_PARENTHESIS + CLASS +
- OBJECT_STRING + COMMA + SPACE + VALUE +
- CLOSE_PARENTHESIS + signatureClose();
- case AUGMENTED_MAP_GET_VALUE:
- return getReturnString(
- YANG_AUGMENTED_INFO_MAP + PERIOD + GET + getOpenCloseParaWithValue(
- CLASS + OBJECT_STRING) + signatureClose(), space);
- case AUGMENTED_MAP_GETTER:
- return getReturnString(YANG_AUGMENTED_INFO_MAP +
- signatureClose(), space);
- case MANAGER_METHODS:
- body = space + YANG_UTILS_TODO + NEW_LINE;
- builder.append(body);
- if (paramType != null) {
- body = getReturnString(parseTypeForReturnValue(paramType),
- space);
- builder.append(body)
- .append(signatureClose());
- }
- return builder.toString();
- case OF_METHOD:
- return getReturnString(
- NEW + SPACE + paraName + getOpenCloseParaWithValue(
- VALUE) + signatureClose(), space);
- case TO_STRING:
- return getToStringMethodsAddString(space, paraName) + paraName +
- CLOSE_PARENTHESIS;
- case EQUALS_METHOD:
- default:
- return null;
- }
- }
-
- /**
- * Returns to string method's add string.
- *
- * @param space indentation
- * @param paraName parameter name
- * @return to string method's add string
- */
- static String getToStringMethodsAddString(String space, String paraName) {
- return space + PERIOD + ADD_STRING + OPEN_PARENTHESIS +
- getQuotedString(paraName) + COMMA + SPACE;
- }
-
- /**
- * Returns end of line.
- *
- * @return end of line
- */
- static String signatureClose() {
- return SEMI_COLON + NEW_LINE;
- }
-
-
- /**
- * Returns value assignment.
- *
- * @return value assignment
- */
- static String valueAssign(String param, String value, String indentation) {
- return indentation + param + SPACE + EQUAL + SPACE + value +
- signatureClose();
- }
-
- /**
- * Returns method signature close for method class type.
- *
- * @param type method class type
- * @return method signature close for method class type
- */
- static String methodSignatureClose(MethodClassTypes type) {
- switch (type) {
- case INTERFACE_TYPE:
- return signatureClose();
- case CLASS_TYPE:
- return SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
- default:
- return null;
- }
- }
-
- /**
- * Returns method param.
- *
- * @param type type of param
- * @param name name of param
- * @return method param
- */
- private static String methodParam(String type, String name) {
- return type + SPACE + name;
- }
-
- /**
- * Returns comma followed by a space.
- *
- * @return comma followed by a space
- */
- private static String commaWithSpace() {
- return COMMA + SPACE;
- }
-
- /**
- * Returns bracket string for the given type.
- *
- * @param type bracket type
- * @param value value to be added in brackets
- * @param returnType returns type to be added for value
- * @return bracket for the given type.
- */
- static String brackets(BracketType type, String value,
- String returnType) {
- String ret = EMPTY_STRING;
- switch (type) {
- case OPEN_CLOSE_BRACKET:
- return OPEN_PARENTHESIS + CLOSE_PARENTHESIS;
- case OPEN_CLOSE_BRACKET_WITH_VALUE:
- return OPEN_PARENTHESIS + value + CLOSE_PARENTHESIS;
- case OPEN_CLOSE_BRACKET_WITH_VALUE_AND_RETURN_TYPE:
- if (returnType != null) {
- ret = returnType + SPACE;
- }
- return OPEN_PARENTHESIS + ret + value +
- CLOSE_PARENTHESIS;
- case OPEN_BRACKET_WITH_VALUE:
- ret = EMPTY_STRING;
- if (returnType != null) {
- ret = returnType + SPACE;
- }
- return OPEN_PARENTHESIS + ret + value +
- COMMA;
- case CLOSE_BRACKET_WITH_VALUE:
- ret = EMPTY_STRING;
- if (returnType != null) {
- ret = returnType + SPACE;
- }
- return SPACE + ret + value +
- CLOSE_PARENTHESIS;
- case OPEN_CLOSE_DIAMOND:
- return DIAMOND_OPEN_BRACKET + DIAMOND_CLOSE_BRACKET;
- case OPEN_CLOSE_DIAMOND_WITH_VALUE:
- return DIAMOND_OPEN_BRACKET + value + DIAMOND_CLOSE_BRACKET;
- default:
- return null;
- }
- }
-
- /**
- * Returns method signature for multi attribute methods.
- *
- * @param methodName method name
- * @param prefix prefix for method
- * @param modifier modifier for method
- * @param methodReturnType method's return type
- * @param params parameters
- * @param type type of method
- * @return method signature for multi attribute methods
- */
- static String multiAttrMethodSignature(String methodName, String
- prefix, String modifier, String methodReturnType,
- Map<String, String> params,
- MethodClassTypes type) {
- StringBuilder methodBuilder = new StringBuilder(FOUR_SPACE_INDENTATION);
- String method = EMPTY_STRING;
- if (modifier != null) {
- method = modifier + SPACE;
- }
- methodBuilder.append(method);
- if (prefix == null) {
- prefix = EMPTY_STRING;
- }
- if (methodReturnType != null) {
- method = methodReturnType + SPACE + prefix + methodName;
- } else {
- method = prefix + methodName;
- }
- //Append method beginning.
- methodBuilder.append(method)
- .append(OPEN_PARENTHESIS);
- for (Map.Entry<String, String> param : params.entrySet()) {
- methodBuilder.append(methodParam(param.getValue(), param.getKey()));
- methodBuilder.append(commaWithSpace());
- }
- String para = methodBuilder.toString();
- String[] array = {SPACE, COMMA};
- para = trimAtLast(para, array);
- methodBuilder = new StringBuilder(para)
- .append(CLOSE_PARENTHESIS)
- .append(methodSignatureClose(type));
-
- return methodBuilder.toString();
- }
-
- /**
- * Returns method signature for interface and implementation classes.
- *
- * @param methodName name of the method
- * @param prefix prefix which needs to be added for method
- * @param modifier modifier which needs to be added for method
- * @param paraVal value which needs to be added as parameter
- * @param methodReturnType returns type to be added for method
- * @param paraReturnType return type to be added for parameter
- * @param type method class type
- * @return method signature for interface and implementation classes
- */
- static String methodSignature(
- String methodName, String prefix, String modifier, String paraVal,
- String methodReturnType, String paraReturnType,
- MethodClassTypes type) {
- StringBuilder methodBuilder = new StringBuilder(FOUR_SPACE_INDENTATION);
- String method = EMPTY_STRING;
- if (modifier != null) {
- method = modifier + SPACE;
- }
- if (prefix == null) {
- prefix = EMPTY_STRING;
- }
- methodBuilder.append(method);
- if (methodReturnType != null) {
- method = methodReturnType + SPACE + prefix + methodName;
- } else {
- method = prefix + methodName;
- }
- //Append method beginning.
- methodBuilder.append(method);
-
- if (paraVal != null) {
- methodBuilder.append(brackets(
- OPEN_CLOSE_BRACKET_WITH_VALUE_AND_RETURN_TYPE,
- paraVal, paraReturnType));
- } else {
- methodBuilder.append(brackets(OPEN_CLOSE_BRACKET, null,
- null));
- }
-
- methodBuilder.append(methodSignatureClose(type));
-
- return methodBuilder.toString();
- }
-
- /**
- * Returns list attribute.
- *
- * @param attrType attribute type
- * @param compilerAnnotation compiler annotations
- * @return list attribute
- */
-
- static String getListAttribute(String attrType,
- YangCompilerAnnotation compilerAnnotation) {
- String listAttr;
- YangDataStructure ds = getYangDataStructure(compilerAnnotation);
- if (ds != null) {
- switch (ds) {
- case QUEUE: {
- listAttr = QUEUE + DIAMOND_OPEN_BRACKET + attrType +
- DIAMOND_CLOSE_BRACKET;
- break;
- }
- case SET: {
- listAttr = SET + DIAMOND_OPEN_BRACKET + attrType +
- DIAMOND_CLOSE_BRACKET;
- break;
- }
- case LIST: {
- listAttr = getListString() + attrType +
- DIAMOND_CLOSE_BRACKET;
- break;
- }
- case MAP:
- listAttr = MAP + DIAMOND_OPEN_BRACKET + attrType + KEYS +
- COMMA + attrType + DIAMOND_CLOSE_BRACKET;
- break;
- default: {
- listAttr = getListString() + attrType +
- DIAMOND_CLOSE_BRACKET;
- }
- }
- } else {
- listAttr = getListString() + attrType + DIAMOND_CLOSE_BRACKET;
- }
- return listAttr;
- }
-
- /**
- * Returns getters for value and select leaf.
- *
- * @return getters for value and select leaf
- */
- static String getIsValueLeafSet() {
- return "\n" +
- " @Override\n" +
- " public boolean isLeafValueSet(LeafIdentifier leaf) {\n" +
- " return valueLeafFlags.get(leaf.getLeafIndex());\n" +
- " }\n" +
- "\n";
- }
-
- /**
- * Returns is select leaf set.
- *
- * @return is select leaf set
- */
- static String getIsSelectLeafSet() {
- return " @Override\n" +
- " public boolean isSelectLeaf(LeafIdentifier leaf) {\n" +
- " return selectLeafFlags.get(leaf.getLeafIndex());\n" +
- " }\n";
- }
-
- /**
- * Returns getter methods for operation attributes.
- *
- * @return getter methods for operation attributes
- */
- static String getValueLeafGetters() {
- return "\n" +
- " /**\n" +
- " * Returns the valueLeafFlags.\n" +
- " *\n" +
- " * @return value of valueLeafFlags\n" +
- " */\n" +
- " public BitSet getValueLeafFlags() {\n" +
- " return valueLeafFlags;\n" +
- " }\n" +
- "\n";
- }
-
- /**
- * Returns getter methods for operation attributes.
- *
- * @return getter methods for operation attributes
- */
- static String getSelectLeafGetters() {
- return " /**\n" +
- " * Returns the selectLeafFlags.\n" +
- " *\n" +
- " * @return value of selectLeafFlags\n" +
- " */\n" +
- " public BitSet getSelectLeafFlags() {\n" +
- " return selectLeafFlags;\n" +
- " }\n" +
- "\n";
- }
-
- /**
- * Returns interface leaf identifier enum method.
- *
- * @return interface leaf identifier enum method
- */
- static String getInterfaceLeafIdEnumMethods() {
- return "\n\n private int leafIndex;\n" +
- "\n" +
- " public int getLeafIndex() {\n" +
- " return leafIndex;\n" +
- " }\n" +
- "\n" +
- " LeafIdentifier(int value) {\n" +
- " this.leafIndex = value;\n" +
- " }\n" +
- " }\n";
- }
-
- /**
- * Returns if condition string for typedef constructor.
- *
- * @param type type of conflict
- * @param addFirst true int/long need to be added first
- * @param val value to set
- * @return if condition string for typedef constructor
- */
- static String ifConditionForIntInTypeDefConstructor(ValidatorTypeForUnionTypes type,
- boolean addFirst, String val) {
- String condition =
- EIGHT_SPACE_INDENTATION + IF + SPACE + OPEN_PARENTHESIS +
- VALIDATE_RANGE + OPEN_PARENTHESIS;
-
- switch (type) {
- case INT_TYPE_CONFLICT:
- if (addFirst) {
- condition = condition + INT_MIN_RANGE + COMMA + SPACE +
- INT_MAX_RANGE + COMMA + SPACE + val;
- } else {
- condition = condition + UINT_MIN_RANGE + COMMA + SPACE +
- UINT_MAX_RANGE + COMMA + SPACE + val;
- }
- break;
- case LONG_TYPE_CONFLICT:
- if (addFirst) {
- condition = condition + LONG_MIN_RANGE + COMMA + SPACE +
- LONG_MAX_RANGE + COMMA + SPACE + val;
- } else {
- condition = condition + ULONG_MIN_RANGE + COMMA + SPACE +
- ULONG_MAX_RANGE + COMMA + SPACE + val;
- }
- break;
- case SHORT_TYPE_CONFLICT:
- if (addFirst) {
- condition = condition + SHORT_MIN_RANGE + COMMA + SPACE +
- SHORT_MAX_RANGE + COMMA + SPACE + val;
- } else {
- condition = condition + UINT8_MIN_RANGE + COMMA + SPACE +
- UINT8_MAX_RANGE + COMMA + SPACE + val;
- }
- break;
- default:
- return null;
- }
-
- return condition + CLOSE_PARENTHESIS + CLOSE_PARENTHESIS + SPACE +
- OPEN_CURLY_BRACKET + NEW_LINE;
- }
-
- /**
- * Returns from string method parsed string.
- *
- * @param targetDataType target data type
- * @param yangType YANG type
- * @return parsed string
- */
- static String getParseFromStringMethod(String targetDataType,
- YangType<?> yangType) {
-
- YangDataTypes type = yangType.getDataType();
- switch (type) {
- case INT8:
- return BYTE_WRAPPER + PERIOD + PARSE_BYTE;
-
- case INT16:
- return SHORT_WRAPPER + PERIOD + PARSE_SHORT;
-
- case INT32:
- return INTEGER_WRAPPER + PERIOD + PARSE_INT;
-
- case INT64:
- return LONG_WRAPPER + PERIOD + PARSE_LONG;
-
- case UINT8:
- return SHORT_WRAPPER + PERIOD + PARSE_SHORT;
-
- case UINT16:
- return INTEGER_WRAPPER + PERIOD + PARSE_INT;
-
- case UINT32:
- return LONG_WRAPPER + PERIOD + PARSE_LONG;
-
- case UINT64:
- return NEW + SPACE + BIG_INTEGER;
-
- case DECIMAL64:
- return NEW + SPACE + BIG_DECIMAL;
-
- case INSTANCE_IDENTIFIER:
- case STRING:
- return EMPTY_STRING;
- case EMPTY:
- case BOOLEAN:
- return BOOLEAN_WRAPPER + PERIOD + PARSE_BOOLEAN;
-
- case ENUMERATION:
- return targetDataType + PERIOD + OF;
-
- case IDENTITYREF:
- YangIdentityRef ir = (YangIdentityRef) yangType
- .getDataTypeExtendedInfo();
- YangIdentity identity = ir.getReferredIdentity();
- return getCapitalCase(getCamelCase(identity.getName(), null))
- + PERIOD + FROM_STRING_METHOD_NAME;
- case DERIVED:
- case UNION:
- return targetDataType + PERIOD + FROM_STRING_METHOD_NAME;
-
- default:
- throw new TranslatorException(
- "Given data type is not supported. " +
- yangType.getDataTypeName() + " in " +
- yangType.getLineNumber() + " at " +
- yangType.getCharPosition() + " in " +
- yangType.getFileName());
- }
- }
-
- /**
- * Returns sub string with catch statement for union's from string method.
- *
- * @param attrHolder attribute holder/count for from string
- * @return sub string with catch statement for union's from string method
- */
- static String getCatchSubString(String attrHolder) {
- StringBuilder builder = new StringBuilder();
- builder.append(CLOSE_CURLY_BRACKET).append(SPACE).append(CATCH)
- .append(SPACE).append(
- brackets(OPEN_CLOSE_BRACKET_WITH_VALUE_AND_RETURN_TYPE, EXCEPTION_VAR,
- EXCEPTION)).append(SPACE).append(OPEN_CURLY_BRACKET)
- .append(NEW_LINE);
- if (attrHolder != null) {
- builder.append(getExceptionThrowString(TWELVE_SPACE_INDENTATION));
- }
- builder.append(EIGHT_SPACE_INDENTATION).append(CLOSE_CURLY_BRACKET);
- return builder.toString();
- }
-
- /**
- * Returns sub string with return statement for union's from string method.
- *
- * @return sub string with return statement for union's from string method
- */
- static String getReturnOfSubString() {
- return getReturnString(OF, TWELVE_SPACE_INDENTATION) +
- getOpenCloseParaWithValue(TMP_VAL) + signatureClose();
- }
-
- /**
- * Returns sub string with try statement for union's from string method.
- *
- * @return sub string with try statement for union's from string method
- */
- static String getTrySubString() {
- return TRY + SPACE + OPEN_CURLY_BRACKET;
- }
-
- /*
- * Returns omit null value string.
- *
- * @return omit null value string
- */
- static String getOmitNullValueString() {
- return TWELVE_SPACE_INDENTATION + PERIOD + OMIT_NULL_VALUE_STRING +
- NEW_LINE;
- }
-
- /**
- * Returns collection's iterator method.
- *
- * @param indentation indentation
- * @param loopVar loop variable
- * @param collection collection
- * @return collection's iterator method
- */
- static String getCollectionIteratorForLoopBegin(String indentation,
- String loopVar,
- String collection) {
- return indentation + FOR + SPACE + OPEN_PARENTHESIS + loopVar + SPACE +
- COLON + SPACE + collection + CLOSE_PARENTHESIS + SPACE +
- OPEN_CURLY_BRACKET + NEW_LINE;
- }
-
- /**
- * Returns if else condition's signature.
- *
- * @param indentation indentation
- * @param condition conditions
- * @return if else condition's signature
- */
- static String getElseIfConditionBegin(String indentation,
- String condition) {
- return indentation + CLOSE_CURLY_BRACKET + ELSE +
- getIfConditionBegin(EMPTY_STRING, condition);
- }
-
- /**
- * Returns if condition's signature.
- *
- * @param indentation indentation
- * @param condition conditions
- * @return if condition's signature
- */
- static String getIfConditionBegin(String indentation, String condition) {
- return indentation + IF + SPACE + getOpenCloseParaWithValue(condition) +
- methodSignatureClose(CLASS_TYPE);
- }
-
- /**
- * Returns true, if the data type is primitive; false otherwise.
- *
- * @param dataType data type
- * @return true if the data type is primitive; false otherwise
- */
- public static boolean isPrimitiveDataType(YangDataTypes dataType) {
- return PRIMITIVE_TYPES.contains(dataType);
- }
-
- /**
- * Returns list string.
- *
- * @return list string
- */
- private static String getListString() {
- return LIST + DIAMOND_OPEN_BRACKET;
- }
-
- /**
- * Returns override string.
- *
- * @return override string
- */
- public static String getOverRideString() {
- return NEW_LINE + FOUR_SPACE_INDENTATION + OVERRIDE + NEW_LINE;
- }
-
- /**
- * Returns value leaf flag setter.
- *
- * @param name name of leaf
- * @param flag flag to set values
- * @param indentation indentation
- * @param prefix prefix of method
- * @return value leaf flag setter
- */
- static String getLeafFlagSetString(String name, String flag, String indentation, String prefix) {
- return indentation + flag + PERIOD + prefix +
- getOpenCloseParaWithValue(LEAF_IDENTIFIER + PERIOD + name
- .toUpperCase() + ".getLeafIndex()");
- }
-
- /*Provides string to return for type.*/
- private static String parseTypeForReturnValue(String type) {
- switch (type) {
- case BYTE:
- case INT:
- case SHORT:
- case LONG:
- case DOUBLE:
- return ZERO;
- case BOOLEAN_DATA_TYPE:
- return FALSE;
- default:
- return null;
- }
- }
-
- /**
- * Returns check not null string.
- *
- * @param name attribute name
- * @return check not null string
- */
- static String getCheckNotNull(String name) {
- return EIGHT_SPACE_INDENTATION + CHECK_NOT_NULL_STRING +
- OPEN_PARENTHESIS + name + COMMA + SPACE + name +
- CLOSE_PARENTHESIS + SEMI_COLON + NEW_LINE;
- }
-
- /**
- * Returns definition close string.
- *
- * @return definition close string
- */
- private static String defCloseString() {
- return SPACE + OPEN_CURLY_BRACKET + NEW_LINE;
- }
-
- /**
- * Returns default class definition for java file when extends a
- * interface.
- *
- * @param classType class type
- * @param name name of class
- * @param modifier modifier for class
- * @param extend extends class name
- * @return class definition
- */
- static String getDefaultDefinitionWithExtends(String classType,
- String name, String
- modifier,
- String extend) {
- String mod = EMPTY_STRING;
- if (modifier != null) {
- mod = modifier + SPACE;
- }
- return mod + classType + SPACE + name + SPACE + EXTEND + SPACE
- + extend + defCloseString();
- }
-
- /**
- * Returns default class definition for java file when implements a
- * interface.
- *
- * @param classType class type
- * @param name name of class
- * @param modifier modifier for class
- * @param impl implements class name
- * @return class definition
- */
- static String getDefaultDefinitionWithImpl(String classType,
- String name, String
- modifier,
- String impl) {
- String mod = EMPTY_STRING;
- if (modifier != null) {
- mod = modifier + SPACE;
- }
- return mod + classType + SPACE + name + SPACE + IMPLEMENTS +
- SPACE + impl + defCloseString();
- }
-
- /**
- * Returns default class definition for java file.
- *
- * @param classType class type
- * @param name name of class
- * @param modifier modifier for class
- * @return class definition
- */
- static String getDefaultDefinition(String classType,
- String name, String modifier) {
- String mod = EMPTY_STRING;
- if (modifier != null) {
- mod = modifier + SPACE;
- }
- return mod + classType + SPACE + name + defCloseString();
- }
-
- /**
- * Returns class definition for implements.
- *
- * @param classType class type
- * @param name name of class
- * @param modifier modifier
- * @param implClass implements class
- * @return class definition
- */
- static String getDefinitionWithImplements(String classType, String name,
- String modifier, String
- implClass) {
- String mod = EMPTY_STRING;
- if (modifier != null) {
- mod = modifier + SPACE;
- }
- return mod + classType + SPACE + name + SPACE + IMPLEMENTS + SPACE +
- implClass + defCloseString();
- }
-
- /**
- * Returns string for service class.
- *
- * @param name1 name of even listener class
- * @param name2 name of even class
- * @return listener service string for service class
- */
- static String getEventExtendsString(String name1, String type,
- String name2) {
- StringBuilder builder = new StringBuilder();
- builder.append(type).append(DIAMOND_OPEN_BRACKET).append(name1)
- .append(COMMA).append(SPACE).append(name2).append
- (DIAMOND_CLOSE_BRACKET);
- return builder.toString();
- }
-
- /**
- * Returns import string.
- *
- * @param pkg package
- * @param cls class
- * @return import string
- */
- public static String getImportString(String pkg, String cls) {
- StringBuilder builder = new StringBuilder()
- .append(IMPORT).append(pkg).append(PERIOD).append(cls)
- .append(signatureClose());
- return builder.toString();
- }
-
- /**
- * Returns static modifier string.
- *
- * @param modifier modifier
- * @return static modifier string
- */
- static String getSpecificModifier(String modifier, String keyWord) {
- return new StringBuilder(modifier).append(SPACE).append(keyWord)
- .toString();
- }
-
- /**
- * Returns builder string for class definition.
- *
- * @param yangName class name
- * @return builder string for class definition
- */
- static String getBuilderImplStringClassDef(String yangName) {
- return new StringBuilder(yangName).append(PERIOD).append(yangName)
- .append(BUILDER).toString();
- }
-
- /**
- * Returns default name string.
- *
- * @param yangName class name
- * @return default name string
- */
- static String getDefaultName(String yangName) {
- return new StringBuilder(DEFAULT_CAPS).append(yangName).toString();
- }
-
- /**
- * Returns suffixed name string.
- *
- * @param yangName class name
- * @param suffix suffix to append to name
- * @return suffixed name string
- */
- static String getSuffixedName(String yangName, String suffix) {
- return new StringBuilder(yangName).append(suffix).toString();
- }
-
- /**
- * Returns error msg string.
- *
- * @param msg message
- * @param name name of node
- * @param line line number
- * @param position char position
- * @param fileName file name
- * @return error message string
- */
- static String getErrorMsg(String msg, String name, int line, int position,
- String fileName) {
- return new StringBuilder().append(msg).append(name).append(IN)
- .append(line).append(AT).append(position).append(IN)
- .append(fileName).toString();
- }
-
- /**
- * Returns string builder attribute string;
- *
- * @param init first param to be appended to string builder
- * @param space indentation space
- * @return string builder attribute
- */
- static String getStringBuilderAttr(String init, String space) {
- StringBuilder builder = new StringBuilder(space);
- builder.append(STRING_BUILDER).append(SPACE).append(STRING_BUILDER_VAR)
- .append(SPACE).append(EQUAL).append(SPACE).append(NEW)
- .append(SPACE).append(STRING_BUILDER).append(
- getOpenCloseParaWithValue(getQuotedString(init)))
- .append(signatureClose());
- return builder.toString();
- }
-
- /**
- * Returns quoted string.
- *
- * @param name name to be quoted
- * @return quoted string
- */
- static String getQuotedString(String name) {
- return QUOTES + name + QUOTES;
- }
-
- /**
- * Returns string builder's append string.
- *
- * @param append data to be append
- * @param space indentation
- * @return string builder's append string
- */
- static String getStringBuilderAppendString(String append, String space) {
- return space + STRING_BUILDER_VAR + PERIOD + APPEND + OPEN_PARENTHESIS +
- append + CLOSE_PARENTHESIS + signatureClose();
- }
-
- /**
- * Returns pattern quote string.
- *
- * @param type type for pattern is needed
- * @return pattern quote string
- */
- static String getPatternQuoteString(String type) {
- return PATTERN + PERIOD + QUOTE_STRING + getOpenCloseParaWithValue(
- getQuotedString(type));
- }
-
- /**
- * Returns bitset attribute.
- *
- * @param indentation indentation
- * @return bitset attribute
- */
- static String getBitSetAttr(String indentation) {
- StringBuilder builder = new StringBuilder(indentation);
- return builder.append(BITSET).append(SPACE).append(TMP_VAL)
- .append(SPACE).append(EQUAL).append(SPACE).append(NEW)
- .append(SPACE).append(BITSET).append(OPEN_CLOSE_BRACKET_STRING)
- .append(signatureClose()).toString();
- }
-
- /**
- * Returns for loop string
- *
- * @param space indentation
- * @param type data type
- * @param var variable
- * @param data data variable/collection
- * @return for loop string
- */
- static String getForLoopString(String space, String type, String var,
- String data) {
- return space + FOR + SPACE + OPEN_PARENTHESIS + type + SPACE + var +
- SPACE + COLON + SPACE + data + CLOSE_PARENTHESIS +
- methodSignatureClose(CLASS_TYPE);
- }
-
- /**
- * Returns set value parameter's get string for union to string method.
- *
- * @param count count of type
- * @return get string
- */
- static String getSetValueParaCondition(int count) {
- return SET_VALUE_PARA + PERIOD + GET + getOpenCloseParaWithValue(
- count + EMPTY_STRING);
- }
-
- /**
- * Returns more object attr for union to string method.
- *
- * @param name name of generate class
- * @return more object attr for union to string method
- */
- static String getMoreObjectAttr(String name) {
- String cls = name + PERIOD + CLASS;
- StringBuilder attr = new StringBuilder(EIGHT_SPACE_INDENTATION);
- String[] array = {NEW_LINE};
- attr.append(MORE_OBJ_ATTR).append(GOOGLE_MORE_OBJECT_METHOD_STATIC_STRING)
- .append(getOpenCloseParaWithValue(cls)).append(NEW_LINE)
- .append(FOUR_SPACE_INDENTATION).append(trimAtLast(
- getOmitNullValueString(), array)).append(signatureClose());
- return attr.toString();
- }
-
- /**
- * Returns to string call.
- *
- * @param name name of attribute
- * @return to string call for attribute
- */
- static String getToStringCall(String name) {
- return name + PERIOD +
- TO_STRING_METHOD + OPEN_CLOSE_BRACKET_STRING;
- }
-
- /**
- * Returns value in brackets.
- *
- * @param name value
- * @return value in brackets
- */
- static String getOpenCloseParaWithValue(String name) {
- return brackets(OPEN_CLOSE_BRACKET_WITH_VALUE, name, null);
- }
-
- /**
- * Returns equals comparision.
- *
- * @param para1 param
- * @param para2 param
- * @return equals comparision
- */
- static String getTwoParaEqualsString(String para1, String para2) {
- return para1 + PERIOD + EQUALS_STRING + getOpenCloseParaWithValue(para2);
- }
-
- /**
- * Returns equal equal condition.
- *
- * @param para param
- * @param val value
- * @return equal equal condition
- */
- static String getEqualEqualString(String para, String val) {
- return para + SPACE + EQUAL + EQUAL + SPACE + val;
- }
-
- /**
- * Returns app instance method call.
- *
- * @param name attr name
- * @return app instance method call
- */
- static String getAppInstanceAttrString(String name) {
- return APP_INSTANCE + PERIOD + name + OPEN_CLOSE_BRACKET_STRING;
- }
-
- /**
- * Returns qualified name.
- *
- * @param pkg package
- * @param cls class info
- * @return qualified name
- */
- static String getQualifiedString(String pkg, String cls) {
- return pkg + PERIOD + cls;
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/SubtreeFilteringMethodsGenerator.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/SubtreeFilteringMethodsGenerator.java
deleted file mode 100644
index d4904ae..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/SubtreeFilteringMethodsGenerator.java
+++ /dev/null
@@ -1,1242 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava.utils;
-
-import org.onosproject.yangutils.datamodel.RpcNotificationContainer;
-import org.onosproject.yangutils.datamodel.YangAugment;
-import org.onosproject.yangutils.datamodel.YangCase;
-import org.onosproject.yangutils.datamodel.YangChoice;
-import org.onosproject.yangutils.datamodel.YangDataStructure;
-import org.onosproject.yangutils.datamodel.YangLeafRef;
-import org.onosproject.yangutils.datamodel.YangLeavesHolder;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoContainer;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
-
-import java.io.IOException;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.IDENTITYREF;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.LEAFREF;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_LEAF_MASK;
-import static org.onosproject.yangutils.translator.tojava.GeneratedTempFileType.FILTER_CONTENT_MATCH_FOR_NODES_MASK;
-import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.EIGHT_SPACE;
-import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.FOUR_SPACE;
-import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.SIXTEEN_SPACE;
-import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.TWELVE_SPACE;
-import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.TWENTY_EIGHT_SPACE;
-import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.TWENTY_FOUR_SPACE;
-import static org.onosproject.yangutils.translator.tojava.utils.IndentationType.TWENTY_SPACE;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaFileGeneratorUtils.getDataFromTempFileHandle;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodClassTypes.CLASS_TYPE;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getYangDataStructure;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getAppInstanceAttrString;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getElseIfConditionBegin;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getEqualEqualString;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getForLoopString;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getIfConditionBegin;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getLeafFlagSetString;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getNewInstance;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getOpenCloseParaWithValue;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getReturnString;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getTwoParaEqualsString;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.methodClose;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.multiAttrMethodSignature;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.signatureClose;
-import static org.onosproject.yangutils.translator.tojava.utils.TranslatorUtils.getBeanFiles;
-import static org.onosproject.yangutils.utils.UtilConstants.ADD_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.AND_OPERATION;
-import static org.onosproject.yangutils.utils.UtilConstants.APP_INSTANCE;
-import static org.onosproject.yangutils.utils.UtilConstants.BIT_SET;
-import static org.onosproject.yangutils.utils.UtilConstants.BOOLEAN_DATA_TYPE;
-import static org.onosproject.yangutils.utils.UtilConstants.BREAK;
-import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
-import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_LOWER_CASE;
-import static org.onosproject.yangutils.utils.UtilConstants.BUILD_FOR_FILTER;
-import static org.onosproject.yangutils.utils.UtilConstants.CLASS_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
-import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
-import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
-import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT;
-import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_CAPS;
-import static org.onosproject.yangutils.utils.UtilConstants.DIAMOND_CLOSE_BRACKET;
-import static org.onosproject.yangutils.utils.UtilConstants.DIAMOND_OPEN_BRACKET;
-import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
-import static org.onosproject.yangutils.utils.UtilConstants.ELSE;
-import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.ENTRY;
-import static org.onosproject.yangutils.utils.UtilConstants.ENTRY_SET;
-import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
-import static org.onosproject.yangutils.utils.UtilConstants.EQUALS_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.EXTEND;
-import static org.onosproject.yangutils.utils.UtilConstants.FALSE;
-import static org.onosproject.yangutils.utils.UtilConstants.FLAG;
-import static org.onosproject.yangutils.utils.UtilConstants.GET;
-import static org.onosproject.yangutils.utils.UtilConstants.GET_KEY;
-import static org.onosproject.yangutils.utils.UtilConstants.GET_VALUE;
-import static org.onosproject.yangutils.utils.UtilConstants.INSTANCE;
-import static org.onosproject.yangutils.utils.UtilConstants.IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG;
-import static org.onosproject.yangutils.utils.UtilConstants.IS_EMPTY;
-import static org.onosproject.yangutils.utils.UtilConstants.IS_SELECT_ALL_SCHEMA_CHILD_FLAG;
-import static org.onosproject.yangutils.utils.UtilConstants.KEYS;
-import static org.onosproject.yangutils.utils.UtilConstants.LEAF_IDENTIFIER;
-import static org.onosproject.yangutils.utils.UtilConstants.MAP;
-import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
-import static org.onosproject.yangutils.utils.UtilConstants.NOT;
-import static org.onosproject.yangutils.utils.UtilConstants.NULL;
-import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CLOSE_BRACKET_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
-import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
-import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM;
-import static org.onosproject.yangutils.utils.UtilConstants.OR_OPERATION;
-import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
-import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
-import static org.onosproject.yangutils.utils.UtilConstants.PROCESS_CHILD_NODE_STF_PARAM;
-import static org.onosproject.yangutils.utils.UtilConstants.PROCESS_LEAF_LIST_STF_PARAM;
-import static org.onosproject.yangutils.utils.UtilConstants.PROCESS_LEAF_STF_PARAM;
-import static org.onosproject.yangutils.utils.UtilConstants.PROCESS_SUBTREE_FILTERING;
-import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
-import static org.onosproject.yangutils.utils.UtilConstants.QUESTION_MARK;
-import static org.onosproject.yangutils.utils.UtilConstants.RESULT;
-import static org.onosproject.yangutils.utils.UtilConstants.SELECT_ALL_CHILD;
-import static org.onosproject.yangutils.utils.UtilConstants.SELECT_ALL_CHILD_SCHEMA_PARAM;
-import static org.onosproject.yangutils.utils.UtilConstants.SELECT_LEAF;
-import static org.onosproject.yangutils.utils.UtilConstants.SELECT_OR_CONTAINMENT_NODE_PARAM;
-import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
-import static org.onosproject.yangutils.utils.UtilConstants.SET_METHOD_PREFIX;
-import static org.onosproject.yangutils.utils.UtilConstants.SIXTEEN_SPACE_INDENTATION;
-import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
-import static org.onosproject.yangutils.utils.UtilConstants.STF_BUILDER_PARAM;
-import static org.onosproject.yangutils.utils.UtilConstants.SUBTREE_FILTERED;
-import static org.onosproject.yangutils.utils.UtilConstants.SUBTREE_FILTERING_RESULT_BUILDER;
-import static org.onosproject.yangutils.utils.UtilConstants.THIRTY_TWO_SPACE_INDENTATION;
-import static org.onosproject.yangutils.utils.UtilConstants.TO;
-import static org.onosproject.yangutils.utils.UtilConstants.TRUE;
-import static org.onosproject.yangutils.utils.UtilConstants.TWELVE_SPACE_INDENTATION;
-import static org.onosproject.yangutils.utils.UtilConstants.TWENTY_EIGHT_SPACE_INDENTATION;
-import static org.onosproject.yangutils.utils.UtilConstants.TWENTY_FOUR_SPACE_INDENTATION;
-import static org.onosproject.yangutils.utils.UtilConstants.TWENTY_SPACE_INDENTATION;
-import static org.onosproject.yangutils.utils.UtilConstants.TWO;
-import static org.onosproject.yangutils.utils.UtilConstants.VALUE_LEAF;
-import static org.onosproject.yangutils.utils.UtilConstants.VALUE_LEAF_SET;
-import static org.onosproject.yangutils.utils.UtilConstants.ZERO;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
-
-/**
- * Represents generator for subtree filtering methods of generated files
- * based on the file type.
- */
-public final class SubtreeFilteringMethodsGenerator {
-
- /**
- * private to make it a util.
- */
- private SubtreeFilteringMethodsGenerator() {
- }
-
- /**
- * Returns process sub tree for choice interface class.
- *
- * @param node choice node
- * @return process sub tree for choice interface class
- */
- static String getProcessSubTreeForChoiceInterface(YangNode node) {
- if (!(node instanceof YangChoice)) {
- throw new TranslatorException("process sub tree for interface is " +
- "only allowed in choice " +
- "node.");
- }
- JavaFileInfoTranslator info = ((JavaCodeGeneratorInfo) node)
- .getJavaFileInfo();
-
- String name = info.getJavaName();
- String returnType = getCapitalCase(name);
-
- String javadoc = "\n /**\n" +
- " * Applications need not to implement process subtree " +
- "of " + name + "\n * it will be overridden by " +
- "corresponding case class.\n" +
- " *\n" +
- " * @param " + APP_INSTANCE + SPACE +
- APP_INSTANCE + SPACE + "being passed to check" +
- " for" +
- " content match\n" +
- " * @param isSelectAllSchemaChild is select all schema child\n" +
- " * @return match result\n" +
- " */\n";
- StringBuilder builder = new StringBuilder(javadoc);
- Map<String, String> param = new LinkedHashMap<>();
- param.put(APP_INSTANCE, returnType);
- param.put(SELECT_ALL_CHILD_SCHEMA_PARAM, BOOLEAN_DATA_TYPE);
- builder.append(multiAttrMethodSignature(PROCESS_SUBTREE_FILTERING, null,
- DEFAULT, returnType, param,
- CLASS_TYPE))
- .append(getReturnString(NULL, EIGHT_SPACE_INDENTATION))
- .append(signatureClose()).append(methodClose(FOUR_SPACE));
- return builder.toString();
- }
-
- /**
- * Returns is filter content match for leaf.
- *
- * @param javaAttributeInfo java attribute
- * @param type data type
- * @return is filter content match for leaf
- */
- public static String getSubtreeFilteringForLeaf(
- JavaAttributeInfo javaAttributeInfo, YangType<?> type) {
- String attrQualifiedType;
- String attributeName = javaAttributeInfo.getAttributeName();
- attrQualifiedType = getIfFilterContentMatchMethodImpl(attributeName,
- type);
- /* if (valueLeafFlags.get(LeafIdentifier.LEAF.getLeafIndex())) {
- * if (appInstance.leaf() != leaf()) {
- * return false;
- * } else {
- * subTreeFilteringResultBuilder.leaf(appInstance.leaf());
- * }
- * } else if (selectLeafFlags.get(LeafIdentifier.LEAF.getLeafIndex()) ||
- * isSelectAllSchemaChild) {
- * isAnySelectOrContainmentNode = true;
- * subTreeFilteringResultBuilder.leaf(appInstance.leaf());
- * }*/
-
-/* if (isSubTreeFiltered && !appInstance.isLeafValueSet(
- LeafIdentifier.LEAF2)) {
- subTreeFilteringResultBuilder.leaf2(leaf2());
- } else {
- return false;
- }*/
- String condition = SUBTREE_FILTERED + SPACE + AND_OPERATION + SPACE + NOT +
- APP_INSTANCE + PERIOD + VALUE_LEAF_SET +
- getOpenCloseParaWithValue(
- LEAF_IDENTIFIER + PERIOD + attributeName.toUpperCase());
- return getIfConditionBegin(EIGHT_SPACE_INDENTATION, getLeafFlagSetString(
- attributeName, VALUE_LEAF, EMPTY_STRING, GET)) +
- getIfConditionBegin(TWELVE_SPACE_INDENTATION, attrQualifiedType) +
- getIfConditionBegin(SIXTEEN_SPACE_INDENTATION, condition) +
- TWENTY_SPACE_INDENTATION + SUBTREE_FILTERING_RESULT_BUILDER +
- PERIOD + attributeName + getOpenCloseParaWithValue(
- attributeName + OPEN_CLOSE_BRACKET_STRING) + signatureClose() +
- SIXTEEN_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + ELSE +
- OPEN_CURLY_BRACKET + NEW_LINE + getReturnString(
- FALSE, TWENTY_SPACE_INDENTATION) + signatureClose() +
- SIXTEEN_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + NEW_LINE +
- TWELVE_SPACE_INDENTATION + CLOSE_CURLY_BRACKET + ELSE +
- OPEN_CURLY_BRACKET + NEW_LINE +
- getSubTreeBuilderCallString(SIXTEEN_SPACE_INDENTATION, attributeName,
- TWELVE_SPACE) +
- getElseIfConditionBegin(EIGHT_SPACE_INDENTATION, getLeafFlagSetString(
- attributeName, SELECT_LEAF, EMPTY_STRING, GET) + SPACE +
- OR_OPERATION + SPACE + IS_SELECT_ALL_SCHEMA_CHILD_FLAG) +
- getSelectOrContainmentAssignString() +
- getSubTreeBuilderCallString(TWELVE_SPACE_INDENTATION, attributeName,
- EIGHT_SPACE);
- }
-
- private static String getSubTreeBuilderCallString(String indent, String
- name, IndentationType type) {
- return indent + SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + name +
- getOpenCloseParaWithValue(APP_INSTANCE + PERIOD + name +
- OPEN_CLOSE_BRACKET_STRING) +
- signatureClose() + methodClose(type);
- }
-
- private static String getAttrTypeForFcmWhenPrimitiveDataType(
- String attributeName) {
- return/* TODO: Need to check if we can expose the value leaf flag in
- interface.
- NOT + APP_INSTANCE + PERIOD + GET_VALUE_LEAF_FLAGS +
- OPEN_PARENTHESIS + CLOSE_PARENTHESIS +
- GET_METHOD_PREFIX + OPEN_PARENTHESIS + LEAF_IDENTIFIER +
- PERIOD + attributeName.toUpperCase() + PERIOD
- + GET_LEAF_INDEX + OR_OPERATION +*/
- APP_INSTANCE + PERIOD + attributeName + OPEN_PARENTHESIS +
- CLOSE_PARENTHESIS + SPACE + NOT + EQUAL + SPACE +
- attributeName + OPEN_PARENTHESIS +
- CLOSE_PARENTHESIS;
- }
-
- private static String attrTypeForFcmWhenNonPrimitiveDataTypes(String name) {
- /*
- * appInstance.name() == null || name().equals(appInstance.name())
- */
- return getEqualEqualString(StringGenerator.getAppInstanceAttrString(name), NULL) +
- SPACE + OR_OPERATION + SPACE + NOT + OPEN_PARENTHESIS +
- getTwoParaEqualsString(name + OPEN_CLOSE_BRACKET_STRING,
- StringGenerator.getAppInstanceAttrString(name))
- + CLOSE_PARENTHESIS;
- }
-
- private static String getIfFilterContentMatchMethodImpl(
- String name, YangType dataType) {
- String attrQualifiedType;
- if (dataType.getDataType().isPrimitiveDataType()) {
- attrQualifiedType = getAttrTypeForFcmWhenPrimitiveDataType(name);
- } else if (dataType.getDataType() == LEAFREF) {
-
- // When leafref in grouping.
- if (((YangLeafRef) dataType.getDataTypeExtendedInfo())
- .isInGrouping()) {
- attrQualifiedType = attrTypeForFcmWhenNonPrimitiveDataTypes(name);
- } else {
- YangType type = ((YangLeafRef) dataType.getDataTypeExtendedInfo())
- .getEffectiveDataType();
- if (type.getDataType().isPrimitiveDataType()) {
- attrQualifiedType = getAttrTypeForFcmWhenPrimitiveDataType(name);
- } else {
- attrQualifiedType = attrTypeForFcmWhenNonPrimitiveDataTypes(
- name);
- }
- }
- } else {
- attrQualifiedType = attrTypeForFcmWhenNonPrimitiveDataTypes(name);
- }
- return attrQualifiedType;
- }
-
- /**
- * Returns is filter content match for leaf.
- *
- * @param javaAttributeInfo java attribute
- * @return is filter content match for leaf
- */
- public static String getSubtreeFilteringForLeafList(
- JavaAttributeInfo javaAttributeInfo) {
- return getSubtreeFilteringForList(javaAttributeInfo, true, null);
- }
-
- /**
- * Returns is filter content match for child node.
- *
- * @param curNode current node
- * @param path path of temp file
- * @return is filter content match for child node
- */
- static String getProcessChildNodeSubtreeFiltering(YangNode curNode, String path)
- throws IOException {
- /* Generate code will look like this.
- private boolean processChildNodesSubTreeFiltering(Link
- appInstance, LinkBuilder subTreeFilteringResultBuilder,
- Boolean isAnySelectOrContainmentNode, boolean isSelectAllSchemaChild) {
- if (isSelectAllSchemaChild) {
- for (Areas areas : appInstance.areas()) {
- subTreeFilteringResultBuilder.addToAreas(areas);
- }
- } else if (areas() != null) {
- isAnySelectOrContainmentNode = true;
- if (!areas().isEmpty()) {
- if (appInstance.areas() != null && !appInstance.areas().isEmpty()) {
- for (Areas areas : areas()) {
- for (Areas areas2 : appInstance.areas()) {
- Areas result = areas.processSubtreeFiltering(areas2, false);
- if (result != null) {
- subTreeFilteringResultBuilder.addToAreas(result);
- }
- }
- }
- }
- } else {
- if (appInstance.areas() != null && !appInstance.areas().isEmpty()) {
- for (Areas areas : appInstance.areas()) {
- subTreeFilteringResultBuilder.addToAreas(areas);
- }
- }
- }
- }
-
- return true;
- }*/
- return getProcessStfMethods(PROCESS_CHILD_NODE_STF_PARAM, curNode,
- path,
- FILTER_CONTENT_MATCH_FOR_NODES_MASK);
- }
-
- /**
- * Returns is filter content match for leaf list.
- *
- * @param curNode current node
- * @param path path of temp file
- * @return is filter content match for leaf list
- */
- static String getProcessLeafListSubtreeFiltering(YangNode curNode, String path)
- throws IOException {
- /* Generate code will look like this.
- private boolean processLeafListSubTreeFiltering(Link appInstance, LinkBuilder subTreeFilteringResultBuilder,
- Boolean isAnySelectOrContainmentNode, boolean isSelectAllSchemaChild) {
- if (isSelectAllSchemaChild) {
- for (String portId : appInstance.portId()) {
- subTreeFilteringResultBuilder.addToPortId(portId);
- }
- } else if (portId() != null) {
- if (!portId().isEmpty()) {
- if (appInstance.portId() == null || appInstance.portId().isEmpty()) {
- return false;
- }
- for (String portId : portId()) {
- boolean flag = false;
- for (String portId2 : appInstance.portId()) {
- if (portId.equals(portId2)) {
- flag = true;
- subTreeFilteringResultBuilder.addToPortId(portId2);
- break;
- }
- }
- if (!flag) {
- return false;
- }
- }
- } else {
- isAnySelectOrContainmentNode = true;
- if (appInstance.portId() != null && !appInstance.portId().isEmpty()) {
- for (String portId : appInstance.portId()) {
- subTreeFilteringResultBuilder.addToPortId(portId);
- }
- }
- }
- }
-
- return true;
- }*/
- return getProcessStfMethods(PROCESS_LEAF_LIST_STF_PARAM, curNode, path,
- FILTER_CONTENT_MATCH_FOR_LEAF_LIST_MASK);
- }
-
- /**
- * Returns is filter content match for leaf.
- *
- * @param curNode current node
- * @param path path of temp file
- * @return is filter content match for leaf
- */
- static String getProcessLeafSubtreeFiltering(YangNode curNode, String path)
- throws IOException {
- /* Generate code will look like this.
- private boolean processLeafSubtreeFiltering(Link appInstance, LinkBuilder subTreeFilteringResultBuilder,
- Boolean isAnySelectOrContainmentNode, boolean isSelectAllSchemaChild) {
- if (valueLeafFlags.get(LeafIdentifier.PORT.getLeafIndex())) {
- if (appInstance.port() != port()) {
- return false;
- } else {
- subTreeFilteringResultBuilder.port(appInstance.port());
- }
- } else if (selectLeafFlags.get(LeafIdentifier.PORT.getLeafIndex()) || isSelectAllSchemaChild) {
- isAnySelectOrContainmentNode = true;
- subTreeFilteringResultBuilder.port(appInstance.port());
- }
-
- return true;
- }*/
- return getProcessStfMethods(PROCESS_LEAF_STF_PARAM, curNode, path,
- FILTER_CONTENT_MATCH_FOR_LEAF_MASK);
- }
-
- /**
- * Returns is filter content match for leaf.
- *
- * @param curNode current node
- * @return is filter content match for leaf
- */
- static String getProcessSubtreeFilteringStart(YangNode curNode) {
-
- /* Generate code will look like this.
- public Link processSubtreeFiltering(Link appInstance, boolean isSelectAllSchemaChild) {
- LinkBuilder subTreeFilteringResultBuilder = new LinkBuilder();
- Boolean isAnySelectOrContainmentNode = false;
- */
- StringBuilder builder = new StringBuilder();
- JavaFileInfoTranslator javaFileInfo =
- ((JavaFileInfoContainer) curNode).getJavaFileInfo();
- String instance = APP_INSTANCE;
- String name = getCapitalCase(javaFileInfo.getJavaName());
- String builderNamePrefix = getCapitalCase(javaFileInfo.getJavaName());
- String caseName = getNameOfClassForIfCase(curNode);
- String returnType;
- if (curNode instanceof RpcNotificationContainer) {
- returnType = name + OP_PARAM;
- } else {
- returnType = DEFAULT_CAPS + name;
- }
- if (caseName != null) {
- instance = INSTANCE;
- name = caseName;
- }
-
- String javadoc = "\n /**\n" +
- " * Checks if the passed " + name + " maps the content " +
- "match query condition.\n" +
- " *\n" +
- " * @param " + instance + SPACE + instance + SPACE +
- "being passed to check for content match\n" +
- " * @param isSelectAllSchemaChild is select all schema " +
- "child\n" +
- " * @return match result\n" +
- " */\n";
- Map<String, String> param = new LinkedHashMap<>();
- param.put(instance, name);
- param.put(SELECT_ALL_CHILD_SCHEMA_PARAM, BOOLEAN_DATA_TYPE);
- builder.append(javadoc)
- .append(multiAttrMethodSignature(PROCESS_SUBTREE_FILTERING, null,
- PUBLIC, returnType, param,
- CLASS_TYPE));
-
- builder.append(getNewInstance(builderNamePrefix + BUILDER,
- SUBTREE_FILTERING_RESULT_BUILDER,
- EIGHT_SPACE_INDENTATION, EMPTY_STRING));
- builder.append(getNewInstance(BIT_SET,
- IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG,
- EIGHT_SPACE_INDENTATION, EMPTY_STRING));
- if (caseName != null) {
- builder.append(getCaseCastString(javaFileInfo, instance, curNode));
- }
-
- return builder.toString();
- }
-
- /**
- * Returns all process sub tree method implementations.
- *
- * @param methodName method name
- * @param curNode current node
- * @param path path for temporary file
- * @param file temp file
- * @return method implementations
- * @throws IOException when fails to fetch data from temp files
- */
- private static String getProcessStfMethods(
- String methodName, YangNode curNode, String path, int file)
- throws IOException {
- StringBuilder builder = new StringBuilder(EMPTY_STRING);
- JavaFileInfoTranslator javaFileInfo =
- ((JavaFileInfoContainer) curNode).getJavaFileInfo();
- String instance = APP_INSTANCE;
- String name = getCapitalCase(javaFileInfo.getJavaName());
- String builderNamePrefix = getCapitalCase(javaFileInfo.getJavaName());
- String caseName = getNameOfClassForIfCase(curNode);
- if (caseName != null) {
- instance = INSTANCE;
- name = caseName;
- }
-
- Map<String, String> param = new LinkedHashMap<>();
- param.put(instance, name);
- param.put(STF_BUILDER_PARAM, builderNamePrefix + BUILDER);
- param.put(SELECT_OR_CONTAINMENT_NODE_PARAM, BIT_SET);
- param.put(SELECT_ALL_CHILD_SCHEMA_PARAM, BOOLEAN_DATA_TYPE);
-
- builder.append(multiAttrMethodSignature(methodName, null,
- PRIVATE, BOOLEAN_DATA_TYPE, param, CLASS_TYPE));
-
- if (caseName != null) {
- builder.append(getCaseCastString(javaFileInfo, instance, curNode));
- }
- builder.append(getDataFromTempFileHandle(file,
- getBeanFiles(curNode), path))
- .append(getReturnString(TRUE, EIGHT_SPACE_INDENTATION)).append(
- signatureClose()).append(methodClose(FOUR_SPACE))
- .append(NEW_LINE);
- return builder.toString();
- }
-
- /**
- * Returns the body for process subtree filtering.
- *
- * @param curNode node for which the code is being generated
- * @return body of subtree filtering
- */
- static String getProcessSubtreeFunctionBody(YangNode curNode) {
- StringBuilder builder = new StringBuilder();
-
- /* if (!processLeafSubtreeFiltering(appInstance, subTreeFilteringResultBuilder,
- isAnySelectOrContainmentNode, isSelectAllSchemaChild)) {
- return null;
- }
- if (!processLeafListSubTreeFiltering(appInstance, subTreeFilteringResultBuilder,
- isAnySelectOrContainmentNode, isSelectAllSchemaChild)) {
- return null;
- }
- if (!processChildNodesSubTreeFiltering(appInstance, subTreeFilteringResultBuilder,
- isAnySelectOrContainmentNode, isSelectAllSchemaChild)) {
- return null;
- }
- */
- if (curNode instanceof YangLeavesHolder) {
- YangLeavesHolder holder = (YangLeavesHolder) curNode;
- if (!holder.getListOfLeaf().isEmpty()) {
- builder.append(getInnerStfMethodClass(PROCESS_LEAF_STF_PARAM));
- }
- if (!holder.getListOfLeafList().isEmpty()) {
- builder.append(getInnerStfMethodClass(PROCESS_LEAF_LIST_STF_PARAM));
- }
- }
- if (curNode.getChild() != null) {
- builder.append(getInnerStfMethodClass(PROCESS_CHILD_NODE_STF_PARAM));
- }
-
- return builder.toString();
- }
-
- //Method calls for process subtree filtering method.
- private static String getInnerStfMethodClass(String name) {
- StringBuilder builder = new StringBuilder()
- .append(getIfConditionBegin(EIGHT_SPACE_INDENTATION,
- getMethodCallsConditionsForStfMethods(name)))
- .append(getReturnString(NULL, TWELVE_SPACE_INDENTATION)).append(
- signatureClose()).append(methodClose(EIGHT_SPACE));
- return builder.toString();
- }
-
- // Condition for if check in process sub tree method.
- private static String getMethodCallsConditionsForStfMethods(String name) {
- return NOT + name + getOpenCloseParaWithValue(getConditionString());
- }
-
- //variable call for conditional method call
- private static String getConditionString() {
- return APP_INSTANCE + COMMA + SPACE + SUBTREE_FILTERING_RESULT_BUILDER +
- COMMA + SPACE + SELECT_OR_CONTAINMENT_NODE_PARAM + COMMA + SPACE +
- SELECT_ALL_CHILD;
- }
-
- /**
- * Returns is filter content match for node.
- *
- * @param attr attribute info
- * @param node YANG node
- * @return is filter content match for node
- */
- public static String getSubtreeFilteringForNode(JavaAttributeInfo attr, YangNode node) {
- boolean isList = attr.isListAttr();
- if (isList) {
- return getSubtreeFilteringForList(attr, false, node);
- } else {
- return getSubtreeFilteringForChildNode(attr, node);
- }
- }
-
- /**
- * Returns is filter content match close.
- *
- * @param name name of class
- * @return is filter content match close
- */
- static String getProcessSubTreeFilteringEnd(String name) {
- /* generate code will look like this.
- if (!isSelectAllSchemaChild && !isAnySelectOrContainmentNode) {
- return processSubtreeFiltering(appInstance, true);
- }
- return subTreeFilteringResultBuilder.build();
- */
-
- StringBuilder builder = new StringBuilder();
- String cond1 = NOT + IS_SELECT_ALL_SCHEMA_CHILD_FLAG + SPACE + AND_OPERATION +
- SPACE + NOT + IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG +
- PERIOD + GET + getOpenCloseParaWithValue(ZERO);
- String call = PROCESS_SUBTREE_FILTERING + getOpenCloseParaWithValue(
- APP_INSTANCE + COMMA + SPACE + TRUE);
- builder.append(getIfConditionBegin(EIGHT_SPACE_INDENTATION, cond1))
- .append(getReturnString(call, TWELVE_SPACE_INDENTATION))
- .append(signatureClose()).append(methodClose(EIGHT_SPACE));
-
- call = getOpenCloseParaWithValue(name) + SPACE +
- SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + BUILD_FOR_FILTER +
- OPEN_CLOSE_BRACKET_STRING;
- builder.append(getReturnString(call, EIGHT_SPACE_INDENTATION))
- .append(signatureClose()).append(methodClose(FOUR_SPACE))
- .append(NEW_LINE);
- return builder.toString();
- }
-
- /**
- * Returns filter content match for child nodes.
- *
- * @param attr attribute to be added
- * @param node YANG node
- * @return filter content match for child nodes
- */
- private static String getSubtreeFilteringForChildNode(JavaAttributeInfo attr,
- YangNode node) {
- StringBuilder builder = new StringBuilder();
- String name = attr.getAttributeName();
- String clsInfo = attr.getImportInfo()
- .getClassInfo();
- String type = DEFAULT_CAPS + attr.getImportInfo()
- .getClassInfo();
- if (attr.isQualifiedName()) {
- type = attr.getImportInfo().getPkgInfo() + PERIOD +
- type;
- clsInfo = attr.getImportInfo().getPkgInfo() + PERIOD +
- clsInfo;
- }
- String classCast = getOpenCloseParaWithValue(type) + SPACE;
- String cast = getOpenCloseParaWithValue(classCast + name);
- if (node != null && node instanceof YangChoice) {
- cast = name;
- }
-
- String resultString = cast + NEW_LINE + TWENTY_EIGHT_SPACE_INDENTATION +
- PERIOD + PROCESS_SUBTREE_FILTERING + OPEN_PARENTHESIS
- + APP_INSTANCE + PERIOD + name + OPEN_CLOSE_BRACKET_STRING
- + COMMA + SPACE + FALSE + CLOSE_PARENTHESIS + SEMI_COLON +
- NEW_LINE;
-
- String cond1 = name + OPEN_CLOSE_BRACKET_STRING + SPACE + NOT + EQUAL +
- SPACE + NULL + SPACE + OR_OPERATION + SPACE + SELECT_ALL_CHILD;
- builder.append(getIfConditionBegin(EIGHT_SPACE_INDENTATION, cond1))
- .append(getSelectOrContainmentAssignString());
-
- builder.append(getIfConditionBegin(TWELVE_SPACE_INDENTATION,
- getAppInstanceCondition(name, NOT)));
-
- String assignment = SIXTEEN_SPACE_INDENTATION + clsInfo + SPACE + RESULT +
- SPACE + EQUAL + SPACE + NULL + signatureClose();
-
- builder.append(assignment)
- .append(getIfConditionBegin(SIXTEEN_SPACE_INDENTATION,
- SELECT_ALL_CHILD));
-/*
- result = ((DefaultInterfaces)(DefaultInterfaces.builder()
- .build())).processSubtreeFiltering(appInstance.interfaces(),
- true);*/
-
- assignment = getDummyObjectCreation(node, name, clsInfo, type,
- classCast, false, false);
- builder.append(assignment).append(SIXTEEN_SPACE_INDENTATION).append(
- CLOSE_CURLY_BRACKET).append(ELSE).append(OPEN_CURLY_BRACKET)
- .append(NEW_LINE);
-
- assignment = TWENTY_SPACE_INDENTATION + RESULT + SPACE + EQUAL + SPACE
- + resultString;
- cond1 = RESULT + SPACE + NOT + EQUAL + SPACE + NULL;
-
- builder.append(assignment).append(methodClose(SIXTEEN_SPACE))
- .append(getIfConditionBegin(SIXTEEN_SPACE_INDENTATION, cond1));
-
- assignment = TWENTY_SPACE_INDENTATION + SUBTREE_FILTERING_RESULT_BUILDER +
- PERIOD + name + getOpenCloseParaWithValue(RESULT) +
- signatureClose();
- builder.append(assignment).append(methodClose(SIXTEEN_SPACE)).append(
- TWELVE_SPACE_INDENTATION).append(CLOSE_CURLY_BRACKET)
- .append(getSubTreeFilteredCondition(name)).append(methodClose(EIGHT_SPACE));
- return builder.toString();
- }
-
- private static String getAppInstanceCondition(String name, String condition) {
- return APP_INSTANCE + PERIOD + name + OPEN_CLOSE_BRACKET_STRING + SPACE +
- condition + EQUAL + SPACE + NULL;
- }
-
- private static String getSelectOrContainmentAssignString() {
- return TWELVE_SPACE_INDENTATION + IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG +
- PERIOD + SET_METHOD_PREFIX + getOpenCloseParaWithValue(ZERO) +
- signatureClose();
- }
-
- /**
- * Returns filter content match for list types.
- *
- * @param javaAttributeInfo attribute information
- * @param isLeafList if for leaf list
- * @param node YANG node
- * @return filter content match for list types
- */
- private static String getSubtreeFilteringForList(
- JavaAttributeInfo javaAttributeInfo, boolean isLeafList,
- YangNode node) {
- StringBuilder builder = new StringBuilder();
- String caps = getCapitalCase(javaAttributeInfo.getAttributeName());
- String name = javaAttributeInfo.getAttributeName();
- String type = javaAttributeInfo.getImportInfo().getClassInfo();
- if (javaAttributeInfo.getAttributeType() != null && javaAttributeInfo
- .getAttributeType().getDataType() == IDENTITYREF) {
- type = CLASS_STRING + DIAMOND_OPEN_BRACKET +
- QUESTION_MARK + SPACE + EXTEND + SPACE +
- type + DIAMOND_CLOSE_BRACKET;
- }
-
- YangDataStructure struct = getYangDataStructure
- (javaAttributeInfo.getCompilerAnnotation());
-
- boolean isMap = false;
- if (struct != null && struct == YangDataStructure.MAP) {
- isMap = true;
- }
-
- String clsInfo = DEFAULT_CAPS + type;
- if (javaAttributeInfo.isQualifiedName()) {
- if (javaAttributeInfo.getAttributeType() != null && javaAttributeInfo
- .getAttributeType().getDataType() == IDENTITYREF) {
- type = CLASS_STRING + DIAMOND_OPEN_BRACKET +
- QUESTION_MARK + SPACE + EXTEND + SPACE +
- javaAttributeInfo.getImportInfo().getPkgInfo() + PERIOD +
- type + DIAMOND_CLOSE_BRACKET;
- } else {
- type = javaAttributeInfo.getImportInfo().getPkgInfo() + PERIOD +
- type;
- }
- clsInfo = javaAttributeInfo.getImportInfo().getPkgInfo() + PERIOD +
- clsInfo;
- }
-
- String classCast = getOpenCloseParaWithValue(clsInfo) + SPACE;
- String cast = getOpenCloseParaWithValue(classCast + name);
-
- if (node != null && node instanceof YangChoice) {
- cast = name;
- }
- String validPass;
- //If map is in DS then need to pass name.getValue() to processSubTree.
- if (isMap) {
- validPass = name + TWO + PERIOD + GET_VALUE;
- } else {
- validPass = name + TWO;
- }
- String resultString = cast + NEW_LINE + TWENTY_EIGHT_SPACE_INDENTATION +
- PERIOD + PROCESS_SUBTREE_FILTERING + OPEN_PARENTHESIS +
- validPass + COMMA + SPACE + FALSE + CLOSE_PARENTHESIS + SEMI_COLON +
- NEW_LINE;
- /*
- * If select all schema child
- */
- String forCondition;
- String mapEntry;
- String para;
- //If map is there in DS the for loop should run for map entry.
- if (!isMap) {
- forCondition = getForLoopString(SIXTEEN_SPACE_INDENTATION, type, name,
- getAppInstanceAttrString(name));
- } else {
- mapEntry = MAP + PERIOD + ENTRY + DIAMOND_OPEN_BRACKET + type +
- KEYS + COMMA + SPACE + type + DIAMOND_CLOSE_BRACKET + SPACE;
- para = getAppInstanceAttrString(name) + PERIOD + ENTRY_SET;
- forCondition = getForLoopString(SIXTEEN_SPACE_INDENTATION,
- mapEntry, name, para);
- }
- builder.append(getIfConditionBegin(EIGHT_SPACE_INDENTATION,
- IS_SELECT_ALL_SCHEMA_CHILD_FLAG))
- .append(getIfConditionBegin(TWELVE_SPACE_INDENTATION,
- getAppInstanceCondition(name, NOT)))
- .append(forCondition);
- String assignment;
- String result;
- //If map is added then while creating dummy object need to used name
- // .getValue() and to add the result in subTreeBuilder need to pass
- // using key and value, key will be name.getKey() and value will be
- // result.
- if (isMap) {
- result = getOpenCloseParaWithValue(name + PERIOD + GET_KEY + COMMA +
- SPACE + RESULT);
- } else {
- result = getOpenCloseParaWithValue(RESULT);
- }
- if (!isLeafList) {
- builder.append(TWENTY_SPACE_INDENTATION).append(type).append(SPACE)
- .append(RESULT).append(signatureClose());
- assignment = getDummyObjectCreation(node, name, type, clsInfo,
- classCast, true, isMap);
- builder.append(assignment);
- assignment = TWENTY_SPACE_INDENTATION +
- SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING +
- getCapitalCase(TO) + caps + result +
- signatureClose();
- builder.append(assignment);
- } else {
- assignment = TWENTY_SPACE_INDENTATION +
- SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING +
- getCapitalCase(TO) + caps + getOpenCloseParaWithValue(name) +
- signatureClose();
- builder.append(assignment);
- }
- builder.append(methodClose(SIXTEEN_SPACE))
- .append(TWELVE_SPACE_INDENTATION).append(CLOSE_CURLY_BRACKET);
-
-/* } else {
- if (isSubTreeFiltered && leafList2() != null) {
- subTreeFilteringResultBuilder.addToLeafList2(leafList2());
- }
- }*/
- builder.append(getSubTreeFilteredCondition(name));
-
- String cond = name + OPEN_CLOSE_BRACKET_STRING + SPACE + NOT + EQUAL +
- SPACE + NULL;
-
- //If need to explicitly participate in query
- builder.append(getElseIfConditionBegin(EIGHT_SPACE_INDENTATION, cond));
-
- if (!isLeafList) {
- builder.append(getSelectOrContainmentAssignString());
- }
-
- //If there is any parameter in the query condition
- cond = NOT + name + OPEN_CLOSE_BRACKET_STRING + PERIOD + IS_EMPTY;
- builder.append(getIfConditionBegin(TWELVE_SPACE_INDENTATION, cond));
-
- if (isLeafList) {
- cond = getAppInstanceCondition(name, EQUAL) + SPACE + OR_OPERATION +
- SPACE + APP_INSTANCE + PERIOD + name +
- OPEN_CLOSE_BRACKET_STRING + PERIOD + IS_EMPTY;
- /*
- * If there is no app instance to perform content match
- */
- builder.append(getIfConditionBegin(SIXTEEN_SPACE_INDENTATION, cond))
- .append(getReturnString(FALSE, TWENTY_SPACE_INDENTATION))
- .append(signatureClose())
- .append(methodClose(SIXTEEN_SPACE))
- // for instance iterator
- .append(getForLoopString(SIXTEEN_SPACE_INDENTATION, type, name,
- name + OPEN_CLOSE_BRACKET_STRING));
-
- assignment = TWENTY_SPACE_INDENTATION + BOOLEAN_DATA_TYPE + SPACE +
- FLAG + SPACE + EQUAL + SPACE + FALSE + signatureClose();
- builder.append(assignment)
- // for app instance iterator
- .append(getForLoopString(TWENTY_SPACE_INDENTATION, type,
- name + TWO,
- getAppInstanceAttrString(name)));
-
- cond = name + PERIOD + EQUALS_STRING
- + OPEN_PARENTHESIS + name + TWO + CLOSE_PARENTHESIS;
- //the content match leaf list attribute value matches
- builder.append(getIfConditionBegin(TWENTY_FOUR_SPACE_INDENTATION,
- cond));
-
- assignment = TWENTY_EIGHT_SPACE_INDENTATION + FLAG + SPACE + EQUAL +
- SPACE + TRUE + SEMI_COLON + NEW_LINE;
- builder.append(assignment);
- assignment = TWENTY_EIGHT_SPACE_INDENTATION +
- SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING +
- getCapitalCase(TO) + caps + getOpenCloseParaWithValue(name + TWO) +
- signatureClose();
- builder.append(assignment).append(TWENTY_EIGHT_SPACE_INDENTATION)
- .append(BREAK).append(signatureClose())
- //the content match leaf list attribute value matches
- .append(methodClose(TWENTY_FOUR_SPACE))
- // for app instance iterator
- .append(methodClose(TWENTY_SPACE))
- //if the content match failed
- .append(getIfConditionBegin(TWENTY_SPACE_INDENTATION, NOT +
- FLAG))
- .append(getReturnString(FALSE, TWENTY_FOUR_SPACE_INDENTATION))
- .append(signatureClose()).append(methodClose(TWENTY_SPACE))// if flag == false
- .append(methodClose(SIXTEEN_SPACE)); // for instance iterator
-
- } else {
- cond = getAppInstanceCondition(name, NOT) + SPACE + AND_OPERATION +
- SPACE + NOT + getAppInstanceAttrString(name) +
- PERIOD + IS_EMPTY;
- //Same here for loop for map entry.
- if (!isMap) {
- forCondition = getForLoopString(TWENTY_SPACE_INDENTATION, type,
- name + TWO,
- getAppInstanceAttrString(name));
- } else {
- mapEntry = MAP + PERIOD + ENTRY + DIAMOND_OPEN_BRACKET + type +
- KEYS + COMMA + SPACE + type + DIAMOND_CLOSE_BRACKET + SPACE;
- para = getAppInstanceAttrString(name) + PERIOD + ENTRY_SET;
- forCondition = getForLoopString(TWENTY_SPACE_INDENTATION,
- mapEntry, name + TWO, para);
- }
- String forCondition2;
- //Same here for loop for map entry.
- if (!isMap) {
- forCondition2 = getForLoopString(SIXTEEN_SPACE_INDENTATION, type, name,
- name + OPEN_CLOSE_BRACKET_STRING);
- } else {
- mapEntry = MAP + PERIOD + ENTRY + DIAMOND_OPEN_BRACKET + type +
- KEYS + COMMA + SPACE + type + DIAMOND_CLOSE_BRACKET + SPACE;
- para = name + OPEN_CLOSE_BRACKET_STRING + PERIOD + ENTRY_SET;
- forCondition2 = getForLoopString(SIXTEEN_SPACE_INDENTATION,
- mapEntry, name, para);
- }
- /*if there is any app instance entry*/
- builder.append(getIfConditionBegin(SIXTEEN_SPACE_INDENTATION,
- cond))
- //loop all the app instance(s)
- .append(forCondition2)
- .append(forCondition);
-
-
- assignment = TWENTY_EIGHT_SPACE_INDENTATION + type + SPACE +
- RESULT + SPACE + EQUAL + SPACE + resultString;
- builder.append(assignment);
- cond = RESULT + SPACE + NOT + EQUAL + SPACE + NULL;
- builder.append(getIfConditionBegin(TWENTY_EIGHT_SPACE_INDENTATION, cond));
-
- //If map is added then while creating dummy object need to used name
- // .getValue() and to add the result in subTreeBuilder need to pass
- // using key and value, key will be name.getKey() and value will be
- // result.
- if (isMap) {
- result = getOpenCloseParaWithValue(name + TWO + PERIOD + GET_KEY +
- COMMA +
- SPACE + RESULT);
- } else {
- result = getOpenCloseParaWithValue(RESULT);
- }
- assignment = THIRTY_TWO_SPACE_INDENTATION +
- SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING +
- getCapitalCase(TO) + caps + result + signatureClose();
- builder.append(assignment).append(methodClose(TWENTY_EIGHT_SPACE))
- //loop all the app instance(s)
- .append(methodClose(TWENTY_FOUR_SPACE))
- //loop all the query condition instance(s)
- .append(methodClose(TWENTY_SPACE))
- .append(SIXTEEN_SPACE_INDENTATION).append(CLOSE_CURLY_BRACKET)
- .append(getSubTreeFilteredCondition(name));
- //if there is any app instance entry
- }
-
- cond = TWELVE_SPACE_INDENTATION + CLOSE_CURLY_BRACKET
- + ELSE + OPEN_CURLY_BRACKET + NEW_LINE;
- builder.append(cond);
-
- if (isLeafList) {
- builder.append(getSelectOrContainmentAssignString());
- }
-
- //need to pass name.getKey() and name.getValue() while adding to
- // subtree builder.
- if (!isMap) {
- forCondition = getForLoopString(SIXTEEN_SPACE_INDENTATION, type,
- name, getAppInstanceAttrString(name));
- } else {
- mapEntry = MAP + PERIOD + ENTRY + DIAMOND_OPEN_BRACKET + type +
- KEYS + COMMA + SPACE + type + DIAMOND_CLOSE_BRACKET + SPACE;
- para = getAppInstanceAttrString(name) + PERIOD + ENTRY_SET;
- forCondition = getForLoopString(SIXTEEN_SPACE_INDENTATION,
- mapEntry, name, para);
- }
- cond = getAppInstanceCondition(name, NOT) + SPACE + AND_OPERATION +
- SPACE + NOT + getAppInstanceAttrString(name) + PERIOD + IS_EMPTY;
- builder.append(getIfConditionBegin(SIXTEEN_SPACE_INDENTATION, cond))
- .append(forCondition);
- if (isMap) {
- result = getOpenCloseParaWithValue(name + PERIOD + GET_KEY + COMMA +
- SPACE + name + PERIOD +
- GET_VALUE);
- } else {
- result = getOpenCloseParaWithValue(name);
- }
- assignment = TWENTY_FOUR_SPACE_INDENTATION +
- SUBTREE_FILTERING_RESULT_BUILDER + PERIOD + ADD_STRING +
- getCapitalCase(TO) + caps + result + signatureClose();
- builder.append(assignment).append(methodClose(TWENTY_SPACE))// Close collection Iteration loop
- // close if condition
- .append(methodClose(SIXTEEN_SPACE))
- .append(methodClose(TWELVE_SPACE))// close else condition
- .append(methodClose(EIGHT_SPACE));// close else if condition
-
- return builder.toString();
- }
-
- public static String getAugmentableSubTreeFiltering() {
- return " if (yangAugmentedInfoMap.isEmpty()) {\n" +
- " java.util.Set<Map.Entry<Class<?>, Object>> " +
- "augment =" +
- " appInstance.yangAugmentedInfoMap().entrySet();\n" +
- " if (augment != null && !augment.isEmpty()) {\n" +
- " java.util.Iterator<Map.Entry<Class<?>, " +
- "Object>> augItr =" +
- " augment.iterator();\n" +
- " while (augItr.hasNext()) {\n" +
- " Map.Entry<Class<?>, Object> aug =" +
- " augItr.next();\n" +
- " Class<?> augClass = aug.getKey();\n" +
- " String augClassName = augClass.getName();\n" +
- " int index = augClassName.lastIndexOf('.');\n" +
- " String classPackage = augClassName.substring(0, index) +\n" +
- " \".\" + \"Default\" + augClass.getSimpleName() + \"$\"\n" +
- " + augClass.getSimpleName() + \"Builder\";\n" +
- " ClassLoader classLoader = augClass.getClassLoader();\n" +
- " try {\n" +
- " Class<?> builderClass;\n" +
- " builderClass = classLoader.loadClass(classPackage);\n" +
- " Object builderObj = builderClass.newInstance();\n" +
- " java.lang.reflect.Method method = " +
- "builderClass.getMethod(\"build\");\n" +
- " Object defaultObj = method.invoke(builderObj);\n" +
- " Class<?> defaultClass = defaultObj.getClass();\n" +
- " method = defaultClass.getMethod(" +
- "\"processSubtreeFiltering\", augClass, boolean.class);\n" +
- " Object result = method.invoke(" +
- "defaultObj, aug.getValue(), true);\n" +
- " subTreeFilteringResultBuilder." +
- "addYangAugmentedInfo(result, augClass);\n" +
- " } catch (ClassNotFoundException | InstantiationException\n" +
- " | NoSuchMethodException |\n" +
- " InvocationTargetException | IllegalAccessException e) {\n" +
- " }\n" +
- " }\n" +
- " }\n" +
- " } else {\n" +
- " java.util.Set<Map.Entry<Class<?>, Object>> augment = yangAugmentedInfoMap\n" +
- " .entrySet();\n" +
- " java.util.Iterator<Map.Entry<Class<?>, Object>> augItr = augment.iterator();\n" +
- " while (augItr.hasNext()) {\n" +
- " Map.Entry<Class<?>, Object> aug = augItr.next();\n" +
- " Class<?> augClass = aug.getKey();\n" +
- " Object appInstanceInfo = appInstance." +
- "yangAugmentedInfo(augClass);\n" +
- " if (appInstanceInfo == null) {\n" +
- " subTreeFilteringResultBuilder." +
- "addYangAugmentedInfo(aug.getValue(), aug.getKey());\n" +
- " } else {\n" +
- " Object processSubtreeFiltering;\n" +
- " try {\n" +
- " processSubtreeFiltering = " +
- "aug.getValue().getClass()\n" +
- " .getMethod(\"processSubtreeFiltering\"," +
- " aug.getKey(), boolean.class)\n" +
- " .invoke(aug.getValue(), appInstanceInfo, true);\n" +
- " if (processSubtreeFiltering != null) {\n" +
- " subTreeFilteringResultBuilder\n" +
- " .addYangAugmentedInfo(" +
- "processSubtreeFiltering, aug.getKey());\n" +
- " }\n" +
- " } catch (NoSuchMethodException | InvocationTargetException |\n" +
- " IllegalAccessException e) {\n" +
- " }\n" +
- " }\n" +
- " }\n" +
- " }\n";
- }
-
- private static String getSubTreeFilteredCondition(String name) {
- StringBuilder builder = new StringBuilder();
- String cond = SUBTREE_FILTERED + SPACE + AND_OPERATION + SPACE + name +
- OPEN_CLOSE_BRACKET_STRING + SPACE + NOT + EQUAL + SPACE + NULL;
-
- builder.append(ELSE).append(OPEN_CURLY_BRACKET).append(NEW_LINE)
- .append(getIfConditionBegin(SIXTEEN_SPACE_INDENTATION, cond))
- .append(TWENTY_SPACE_INDENTATION)
- .append(SUBTREE_FILTERING_RESULT_BUILDER).append(PERIOD)
- .append(name).append(getOpenCloseParaWithValue(name)).append(
- signatureClose()).append(SIXTEEN_SPACE_INDENTATION).append(
- CLOSE_CURLY_BRACKET).append(NEW_LINE).append(TWELVE_SPACE_INDENTATION)
- .append(CLOSE_CURLY_BRACKET).append(NEW_LINE);
- return builder.toString();
- }
-
- private static String getNameOfClassForIfCase(YangNode curNode) {
- String name = null;
- JavaFileInfoTranslator parentInfo;
- if (curNode instanceof YangCase) {
- YangNode parent = curNode.getParent();
- if (parent instanceof YangChoice) {
- parentInfo = ((JavaFileInfoContainer) parent).getJavaFileInfo();
- name = getCapitalCase(parentInfo.getJavaName());
- } else if (parent instanceof YangAugment) {
- parentInfo = ((JavaFileInfoContainer) ((YangAugment) parent)
- .getAugmentedNode()).getJavaFileInfo();
- if (parentInfo != null) {
- name = getCapitalCase(parentInfo.getJavaName());
- } else {
- name = getCapitalCase(getCamelCase(
- ((YangAugment) parent).getAugmentedNode().getName(),
- null));
- }
- }
- }
- return name;
- }
-
- private static String getCaseCastString(
- JavaFileInfoTranslator javaFileInfo, String instance, YangNode curNode) {
- if (curNode instanceof YangCase) {
- String caseName = DEFAULT_CAPS + getCapitalCase(
- javaFileInfo.getJavaName());
- return EIGHT_SPACE_INDENTATION + caseName + SPACE + APP_INSTANCE + SPACE +
- EQUAL + SPACE + OPEN_PARENTHESIS + caseName +
- CLOSE_PARENTHESIS + SPACE + instance + signatureClose();
- }
- return null;
- }
-
- private static String getDummyObjectCreation(YangNode node, String name,
- String clsInfo, String type,
- String classCast, boolean isList,
- boolean isMap) {
- String para = getAppInstanceAttrString(name);
- if (isList) {
- if (isMap) {
- para = name + PERIOD + GET_VALUE;
- } else {
- para = name;
- }
- }
- if (node != null && node instanceof YangChoice) {
- return getChoiceReflectionResult(name, clsInfo);
- }
- return TWENTY_SPACE_INDENTATION + RESULT + SPACE + EQUAL + SPACE +
- getOpenCloseParaWithValue(
- classCast + type + PERIOD + BUILDER_LOWER_CASE +
- OPEN_CLOSE_BRACKET_STRING + NEW_LINE +
- TWENTY_EIGHT_SPACE_INDENTATION + PERIOD +
- BUILD_FOR_FILTER + OPEN_CLOSE_BRACKET_STRING) +
- PERIOD + PROCESS_SUBTREE_FILTERING + getOpenCloseParaWithValue(
- para + COMMA + SPACE + TRUE) + signatureClose();
-
- }
-
- private static String getChoiceReflectionResult(String name, String returnType) {
- String call = "appInstance." + name + "()";
- return " Class<?>[] classArray = " + call + "" +
- ".getClass()" +
- ".getInterfaces();\n" +
- " Class<?> caseIntf = classArray[0];\n" +
- " try {\n" +
- " ClassLoader classLoader = this" +
- ".getClass().getClassLoader();\n" +
- " String className = \"Default\" + " +
- "caseIntf.getSimpleName();\n" +
- " className = caseIntf.getPackage()" +
- ".getName() + \".\" + className;\n" +
- " Class<?> caseClass = classLoader" +
- ".loadClass(className);\n" +
- " java.lang.reflect.Constructor<?> " +
- "constructor = caseClass.getDeclaredConstructor();\n" +
- " constructor.setAccessible(true);\n" +
- " Object obj1 = constructor" +
- ".newInstance();\n" +
- " java.lang.reflect.Method method =" +
- " caseClass.getMethod(\"builder\");\n" +
- " Object obj = method.invoke(obj1);\n" +
- " Class<?> builderClass = obj.getClass();\n" +
- " method = builderClass.getMethod(\"build\");\n" +
- " Object obj2 = method.invoke(obj);\n" +
- " Class<?> input = this.getClass()" +
- ".getMethod(" + "\"" + name + "\").getReturnType();\n" +
- " method = caseClass.getMethod" +
- "(\"processSubtreeFiltering\", input,\n" +
- " boolean.class);\n" +
- " result = (" + returnType + ") method.invoke" +
- "(obj2, " + call + ", true);\n" +
- " } catch (NoSuchMethodException | InstantiationException |\n" +
- " IllegalAccessException | " +
- "InvocationTargetException |\n" +
- " ClassNotFoundException e) {\n" +
- " e.printStackTrace();\n" +
- " }\n";
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/TranslatorErrorType.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/TranslatorErrorType.java
deleted file mode 100644
index 2871f16..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/TranslatorErrorType.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava.utils;
-
-/**
- * Represents translator error type.
- */
-public enum TranslatorErrorType {
- /**
- * Represents the invalid node for translation.
- */
- INVALID_TRANSLATION_NODE("Invalid node for translation"),
-
- /**
- * Represents the missing parent node.
- */
- MISSING_PARENT_NODE("Missing parent node to get current node's java " +
- "information"),
-
- /**
- * Represents the invalid parent node.
- */
- INVALID_PARENT_NODE("Invalid parent node to get current node's java " +
- "information"),
-
- /**
- * Represents the invalid holder of leaf.
- */
- INVALID_LEAF_HOLDER("Invalid holder of leaf"),
-
- /**
- * Represents the invalid child node.
- */
- INVALID_CHILD_NODE("Invalid child of node "),
-
- /**
- * Represents the invalid leaf list without JAVA information.
- */
- INVALID_LEAF_LIST("Leaf-list does not have java information"),
-
- /**
- * Represents the invalid leaf without JAVA information.
- */
- INVALID_LEAF("Leaf does not have java information"),
-
- /**
- * Represents the invalid node without JAVA information.
- */
- INVALID_NODE("Missing java file information to get the package details " +
- "of attribute corresponding to child node"),
-
- /**
- * Represents that code generation failed for a node at exit.
- */
- FAIL_AT_EXIT("Failed to generate code for "),
-
- /**
- * Represents that code generation preparation failed for a node at entry.
- */
- FAIL_AT_ENTRY("Failed to prepare generate code entry for ");
-
- // Prefix of an error type.
- private final String prefix;
-
- /**
- * Creates translator error type.
- *
- * @param p prefix string
- */
- TranslatorErrorType(String p) {
- prefix = p;
- }
-
- /**
- * Returns prefix for a given enum type.
- *
- * @return prefix
- */
- public String prefix() {
- return prefix;
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/TranslatorUtils.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/TranslatorUtils.java
deleted file mode 100644
index f854f99..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/TranslatorUtils.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava.utils;
-
-import org.onosproject.yangutils.datamodel.LocationInfo;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangSchemaNode;
-import org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorInfo;
-import org.onosproject.yangutils.translator.tojava.TempJavaBeanFragmentFiles;
-import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFilesContainer;
-import org.onosproject.yangutils.translator.tojava.TempJavaTypeFragmentFiles;
-
-import java.io.IOException;
-
-import static org.onosproject.yangutils.utils.UtilConstants.AT;
-import static org.onosproject.yangutils.utils.UtilConstants.IN;
-
-/**
- * Represents common translator utilities.
- */
-public final class TranslatorUtils {
-
- // No instantiation
- private TranslatorUtils() {
- }
-
- /**
- * Returns translator error message string with location information for
- * YANG schema node with localized message.
- *
- * @param errorType type of translator error
- * @param node YANG schema node
- * @param localizedMsg localized message
- * @return translator error message
- */
- public static String getErrorMsg(TranslatorErrorType errorType,
- YangSchemaNode node,
- String localizedMsg) {
- return getErrorMsg(errorType, node) + localizedMsg;
- }
-
- /**
- * Returns translator error message string with location information for
- * YANG schema node.
- *
- * @param errorType type of translator error
- * @param node YANG schema node
- * @return translator error message
- */
- public static String getErrorMsg(TranslatorErrorType errorType,
- YangSchemaNode node) {
- return errorType.prefix() + IN + node.getName() + getLocationMsg(node);
- }
-
- /**
- * Returns translator error message string with location information for
- * JAVA code generator info.
- *
- * @param errorType type of translator error
- * @param location node with location info
- * @return translator error message
- */
- public static String getErrorMsgForCodeGenerator(TranslatorErrorType errorType,
- LocationInfo location) {
- return errorType.prefix() + getLocationMsg(location);
- }
-
- /**
- * Returns location message string.
- *
- * @param location location info node
- * @return location message string
- */
- private static String getLocationMsg(LocationInfo location) {
- return AT + location.getLineNumber() + AT +
- location.getCharPosition() + IN + location.getFileName();
- }
-
- /**
- * Returns bean temp files for YANG node.
- *
- * @param curNode current YANG node
- * @return bean files
- */
- public static TempJavaBeanFragmentFiles getBeanFiles(YangNode curNode) {
- return ((TempJavaCodeFragmentFilesContainer) curNode)
- .getTempJavaCodeFragmentFiles().getBeanTempFiles();
- }
-
- /**
- * Returns bean temp files for JAVA code generator info.
- *
- * @param info JAVA code generator info
- * @return bean files
- */
- public static TempJavaBeanFragmentFiles getBeanFiles(JavaCodeGeneratorInfo
- info) {
- return info.getTempJavaCodeFragmentFiles().getBeanTempFiles();
- }
-
- /**
- * Returns type temp files for YANG node.
- *
- * @param curNode current YANG node
- * @return type files
- */
- public static TempJavaTypeFragmentFiles getTypeFiles(YangNode curNode) {
- return ((TempJavaCodeFragmentFilesContainer) curNode)
- .getTempJavaCodeFragmentFiles().getTypeTempFiles();
- }
-
- /**
- * Adds default constructor to a given YANG node.
- *
- * @param node YANG node
- * @param modifier modifier for constructor.
- * @param toAppend string which need to be appended with the class name
- * @return default constructor for class
- * @throws IOException when fails to append to file
- */
- static String addDefaultConstructor(YangNode node, String modifier,
- String toAppend)
- throws IOException {
- return ((TempJavaCodeFragmentFilesContainer) node)
- .getTempJavaCodeFragmentFiles()
- .addDefaultConstructor(modifier, toAppend);
- /*
- * TODO update addDefaultConstructor, it doesn't need YANG node as an
- * input.
- */
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/ValidatorTypeForUnionTypes.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/ValidatorTypeForUnionTypes.java
deleted file mode 100644
index 9ccceb1..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/ValidatorTypeForUnionTypes.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava.utils;
-
-/**
- * Validator types for union when there is conflict between two types.
- */
-public enum ValidatorTypeForUnionTypes {
-
- /**
- * When conflict is there for int32 and uInt16.
- */
- INT_TYPE_CONFLICT,
-
- /**
- * When conflict is there for int16 and uInt8.
- */
- SHORT_TYPE_CONFLICT,
-
- /**
- * When conflict is there for int64 and uInt32.
- */
- LONG_TYPE_CONFLICT
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/package-info.java b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/package-info.java
deleted file mode 100644
index 709e704..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/utils/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-/**
- * Translator's utils for YANG plugin.
- */
-package org.onosproject.yangutils.translator.tojava.utils;
diff --git a/generator/src/main/java/org/onosproject/yangutils/utils/UtilConstants.java b/generator/src/main/java/org/onosproject/yangutils/utils/UtilConstants.java
deleted file mode 100644
index cd359cd..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/utils/UtilConstants.java
+++ /dev/null
@@ -1,1941 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.utils;
-
-import java.io.File;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Represents utilities constants which are used while generating java files.
- */
-public final class UtilConstants {
-
- /**
- * JavaDocs for impl class.
- */
- public static final String IMPL_CLASS_JAVA_DOC =
- " * Represents the implementation of ";
-
- /**
- * JavaDocs for builder class.
- */
- public static final String BUILDER_CLASS_JAVA_DOC =
- " * Represents the builder implementation of ";
-
- /**
- * JavaDocs for interface class.
- */
- public static final String INTERFACE_JAVA_DOC =
- " * Abstraction of an entity which represents the functionality " +
- "of ";
-
- /**
- * JavaDocs for event.
- */
- public static final String EVENT_JAVA_DOC =
- " * Represents event implementation of ";
-
- /**
- * JavaDocs for op param class.
- */
- public static final String OP_PARAM_JAVA_DOC =
- " * Represents operation parameter implementation of ";
-
- /**
- * JavaDocs for event listener.
- */
- public static final String EVENT_LISTENER_JAVA_DOC =
- " * Abstraction for event listener of ";
-
- /**
- * JavaDocs for builder interface class.
- */
- public static final String BUILDER_INTERFACE_JAVA_DOC = " * Builder for ";
-
- /**
- * JavaDocs for enum class.
- */
- public static final String ENUM_CLASS_JAVADOC =
- " * Represents ENUM data of ";
-
- /**
- * JavaDocs for enum attribute.
- */
- public static final String ENUM_ATTRIBUTE_JAVADOC = " * Represents ";
-
- /**
- * JavaDocs for package info class.
- */
- public static final String PACKAGE_INFO_JAVADOC =
- " * Implementation of YANG node ";
-
- /**
- * JavaDocs for package info class.
- */
- public static final String PACKAGE_INFO_JAVADOC_OF_CHILD =
- "'s children nodes";
-
- /**
- * JavaDocs's first line.
- */
- public static final String JAVA_DOC_FIRST_LINE = "/**\n";
-
- /**
- * JavaDocs's last line.
- */
- public static final String JAVA_DOC_END_LINE = " */\n";
-
- /**
- * JavaDocs's param annotation.
- */
- public static final String JAVA_DOC_PARAM = " * @param ";
-
- /**
- * JavaDocs's return annotation.
- */
- public static final String JAVA_DOC_RETURN = " * @return ";
-
- /**
- * JavaDocs's description for setter method.
- */
- public static final String JAVA_DOC_SETTERS =
- " * Returns the builder object of ";
-
- /**
- * JavaDocs's description for add to list method.
- */
- public static final String JAVA_DOC_ADD_TO_LIST = " * Adds to the list of ";
-
- /**
- * JavaDocs's description for setter method.
- */
- public static final String JAVA_DOC_MANAGER_SETTERS =
- " * Sets the value to attribute ";
-
- /**
- * JavaDocs's description for OF method.
- */
- public static final String JAVA_DOC_OF = " * Returns the object of ";
-
- /**
- * JavaDocs's description for typedef' setter method.
- */
- public static final String JAVA_DOC_SETTERS_COMMON =
- " * Sets the value of ";
-
- /**
- * JavaDocs's description for getter method.
- */
- public static final String JAVA_DOC_GETTERS = " * Returns the attribute ";
-
- /**
- * JavaDocs's description for getter method.
- */
- public static final String JAVA_DOC_FOR_VALIDATOR =
- " * Validates if value is in given range.";
-
- /**
- * JavaDocs's description for getter method.
- */
- public static final String JAVA_DOC_FOR_VALIDATOR_RETURN =
- " true if value is in range";
-
- /**
- * JavaDocs's description for constructor.
- */
- public static final String JAVA_DOC_CONSTRUCTOR =
- " * Creates an instance of ";
-
- /**
- * JavaDocs's description for build method.
- */
- public static final String JAVA_DOC_BUILD = " * Builds object of ";
-
- /**
- * JavaDocs's statement for builder object.
- */
- public static final String BUILDER_OBJECT = "builder object of ";
-
- /**
- * JavaDocs's statement for rpc method.
- */
- public static final String JAVA_DOC_RPC = " * Service interface of ";
-
- /**
- * JavaDocs's statement for rpc's input string.
- */
- public static final String RPC_INPUT_STRING = "input of service interface ";
-
- /**
- * JavaDocs's statement for rpc's output string.
- */
- public static final String RPC_OUTPUT_STRING =
- "output of service interface ";
-
- /**
- * Static attribute for new line.
- */
- public static final String NEW_LINE = "\n";
-
- /**
- * Static attribute for default.
- */
- public static final String DEFAULT = "default";
-
- /**
- * Static attribute for default.
- */
- public static final String DEFAULT_CAPS = "Default";
-
- /**
- * Static attribute for java code generation for sbi.
- */
- public static final String SBI = "sbi";
-
- /**
- * Static attribute for multiple new line.
- */
- public static final String MULTIPLE_NEW_LINE = "\n\n";
-
- /**
- * Static attribute for empty line.
- */
- public static final String EMPTY_STRING = "";
-
- /**
- * Static attribute for new line with asterisk.
- */
- public static final String NEW_LINE_ASTERISK = " *\n";
-
- /**
- * Static attribute for period.
- */
- public static final String PERIOD = ".";
-
- /**
- * Static attribute for lib.
- */
- public static final String LIB = "lib__";
-
- /**
- * Static attribute for lib path.
- */
- public static final String LIB_PATH = "//lib:";
-
- /**
- * Static attribute for output.
- */
- public static final String OUT = "__output";
-
- /**
- * Static attribute for period.
- */
- public static final String ENTRY = "Entry";
-
- /**
- * Static attribute for period.
- */
- public static final String ENTRY_SET = "entrySet()";
-
- /**
- * Static attribute for compare to.
- */
- public static final String COMPARE_TO = "compareTo";
-
- /**
- * Static attribute for parse byte.
- */
- public static final String PARSE_BYTE = "parseByte";
-
- /**
- * Static attribute for parse boolean.
- */
- public static final String PARSE_BOOLEAN = "parseBoolean";
-
- /**
- * Static attribute for parse short.
- */
- public static final String PARSE_SHORT = "parseShort";
-
- /**
- * Static attribute for parse int.
- */
- public static final String PARSE_INT = "parseInt";
-
- /**
- * Static attribute for parse long.
- */
- public static final String PARSE_LONG = "parseLong";
-
- /**
- * Static attribute for base64.
- */
- public static final String BASE64 = "Base64";
-
- /**
- * Static attribute for getEncoder.
- */
- public static final String GET_ENCODER = "getEncoder";
-
- /**
- * Static attribute for encodeToString.
- */
- public static final String ENCODE_TO_STRING = "encodeToString";
-
- /**
- * Static attribute for getDecoder.
- */
- public static final String GET_DECODER = "getDecoder";
-
- /**
- * Static attribute for decode.
- */
- public static final String DECODE = "decode";
-
- /**
- * Static attribute for omit null value.
- */
- public static final String OMIT_NULL_VALUE_STRING = "omitNullValues()";
-
- /**
- * Static attribute for underscore.
- */
- public static final String UNDER_SCORE = "_";
-
- /**
- * Static attribute for semi-colan.
- */
- public static final String SEMI_COLON = ";";
-
- /**
- * Static attribute for hyphen.
- */
- public static final String HYPHEN = "-";
-
- /**
- * Static attribute for space.
- */
- public static final String SPACE = " ";
- /**
- * Static attribute for space.
- */
- public static final String TWO = "2";
- /**
- * Static attribute for space.
- */
- public static final String FLAG = "flag";
- /**
- * Static attribute for result.
- */
- public static final String RESULT = "result";
-
- /**
- * Static attribute for isSelectAllSchemaChild.
- */
- public static final String SELECT_ALL_CHILD = "isSelectAllSchemaChild";
-
- /**
- * Static attribute for schema name.
- */
- public static final String SCHEMA_NAME = "schemaName";
-
- /**
- * Static attribute for validateRange.
- */
- public static final String VALIDATE_RANGE = "validateRange";
-
- /**
- * Static attribute for minRange.
- */
- public static final String MIN_RANGE = "minRange";
-
- /**
- * Static attribute for maxRange.
- */
- public static final String MAX_RANGE = "maxRange";
-
- /**
- * Static attribute for minRange.
- */
- public static final String SHORT_MIN_RANGE_ATTR =
- "static final int INT16_MIN_RANGE = -32768;\n";
-
- /**
- * Static attribute for minRange.
- */
- public static final String SHORT_MIN_RANGE = "INT16_MIN_RANGE";
-
- /**
- * Static attribute for minRange.
- */
- public static final String SHORT_MAX_RANGE = "INT16_MAX_RANGE";
-
- /**
- * Static attribute for maxRange.
- */
- public static final String SHORT_MAX_RANGE_ATTR =
- "static final int INT16_MAX_RANGE = 32767;";
-
-
- /**
- * Static attribute for minRange.
- */
- public static final String UINT8_MIN_RANGE_ATTR =
- "static final int UINT8_MIN_RANGE = 0;\n";
-
- /**
- * Static attribute for maxRange.
- */
- public static final String UINT8_MAX_RANGE_ATTR =
- "static final int UINT8_MAX_RANGE = 32767;";
-
-
- /**
- * Static attribute for minRange.
- */
- public static final String UINT8_MIN_RANGE = "UINT8_MIN_RANGE";
-
- /**
- * Static attribute for maxRange.
- */
- public static final String UINT8_MAX_RANGE = "UINT8_MAX_RANGE";
-
- /**
- * Static attribute for minRange.
- */
- public static final String INT_MIN_RANGE_ATTR =
- "static final int INT32_MIN_RANGE = -2147483648;\n";
-
- /**
- * Static attribute for minRange.
- */
- public static final String INT_MIN_RANGE = "INT32_MIN_RANGE";
-
- /**
- * Static attribute for minRange.
- */
- public static final String INT_MAX_RANGE = "INT32_MAX_RANGE";
-
- /**
- * Static attribute for maxRange.
- */
- public static final String INT_MAX_RANGE_ATTR =
- "static final int INT32_MAX_RANGE = 2147483647;";
-
-
- /**
- * Static attribute for minRange.
- */
- public static final String UINT_MIN_RANGE_ATTR =
- "static final int UINT16_MIN_RANGE = 0;\n";
-
- /**
- * Static attribute for maxRange.
- */
- public static final String UINT_MAX_RANGE_ATTR =
- "static final int UINT16_MAX_RANGE = 2147483647;";
-
-
- /**
- * Static attribute for minRange.
- */
- public static final String UINT_MIN_RANGE = "UINT16_MIN_RANGE";
-
- /**
- * Static attribute for maxRange.
- */
- public static final String UINT_MAX_RANGE = "UINT16_MAX_RANGE";
-
- /**
- * Static attribute for minRange.
- */
- public static final String LONG_MIN_RANGE_ATTR =
- "static final BigInteger INT64_MIN_RANGE =" +
- " new BigInteger(\"-9223372036854775808\");\n";
-
- /**
- * Static attribute for maxRange.
- */
- public static final String LONG_MAX_RANGE_ATTR =
- "static final BigInteger INT64_MAX_RANGE =" +
- " new BigInteger(\"9223372036854775807\");";
-
- /**
- * Static attribute for minRange.
- */
- public static final String LONG_MIN_RANGE = "INT64_MIN_RANGE";
-
- /**
- * Static attribute for maxRange.
- */
- public static final String LONG_MAX_RANGE = "INT64_MAX_RANGE";
-
- /**
- * Static attribute for minRange.
- */
- public static final String ULONG_MIN_RANGE_ATTR =
- "static final BigInteger UINT32_MIN_RANGE =" +
- " new BigInteger(\"0\");\n";
-
- /**
- * Static attribute for maxRange.
- */
- public static final String ULONG_MAX_RANGE_ATTR =
- "static final BigInteger UINT32_MAX_RANGE =" +
- " new BigInteger(\"9223372036854775807\");";
-
-
- /**
- * Static attribute for minRange.
- */
- public static final String ULONG_MIN_RANGE = "UINT32_MIN_RANGE";
-
- /**
- * Static attribute for maxRange.
- */
- public static final String ULONG_MAX_RANGE = "UINT32_MAX_RANGE";
-
- /**
- * Static attribute for subject.
- */
- public static final String SUBJECT = "Subject";
-
- /**
- * Static attribute for ListenerService.
- */
- public static final String LISTENER_SERVICE = "ListenerService";
-
- /**
- * Static attribute for listener package.
- */
- public static final String ONOS_EVENT_PKG = "org.onosproject.event";
-
- /**
- * Static attribute for colon.
- */
- public static final String COLON = ":";
-
- /**
- * Static attribute for caret.
- */
- public static final String CARET = "^";
-
- /**
- * Static attribute for input string.
- */
- public static final String INPUT = "input";
-
- /**
- * Static attribute for output string.
- */
- public static final String OUTPUT = "output";
-
- /**
- * Static attribute for current string.
- */
- public static final String CURRENT = "current";
-
- /**
- * Static attribute for leafref string.
- */
- public static final String LEAFREF = "leafref";
-
- /**
- * Static attribute for output variable of rpc.
- */
- public static final String RPC_INPUT_VAR_NAME = "inputVar";
-
- /**
- * Static attribute for new line.
- */
- public static final String EQUAL = "=";
-
- /**
- * Static attribute for slash syntax.
- */
- public static final String SLASH = File.separator;
-
- /**
- * Static attribute for add syntax.
- */
- public static final String ADD = "+";
-
- /**
- * Static attribute for quotes.
- */
- public static final String QUOTES = "\"";
-
- /**
- * Static attribute for zero.
- */
- public static final String ZERO = "0";
-
- /**
- * Static attribute for ampersand.
- */
- public static final String AND = "&";
-
- /**
- * Static attribute for comma.
- */
- public static final String COMMA = ",";
-
- /**
- * Static attribute for class.
- */
- public static final String CLASS_STRING = "Class";
-
- /**
- * Static attribute for put.
- */
- public static final String PUT = "put";
-
- /**
- * Static attribute for get.
- */
- public static final String GET = "get";
-
- /**
- * Static attribute for slash character.
- */
- public static final char CHAR_OF_SLASH = '/';
-
- /**
- * Static attribute for open square bracket character.
- */
- public static final char CHAR_OF_OPEN_SQUARE_BRACKET = '[';
-
- /**
- * Static attribute for slash string.
- */
- public static final String SLASH_FOR_STRING = "/";
-
- /**
- * Static attribute for open square bracket.
- */
- public static final String OPEN_SQUARE_BRACKET = "[";
-
- /**
- * Static attribute for ancestor accessor.
- */
- public static final String ANCESTOR = "..";
-
- /**
- * Static attribute for ancestor accessor along with path.
- */
- public static final String SLASH_ANCESTOR = "../";
-
- /**
- * Static attribute for add syntax.
- */
- public static final String ADD_STRING = "add";
-
- /**
- * Static attribute for key syntax.
- */
- public static final String KEYS = "Keys";
-
- /**
- * Static attribute for key syntax.
- */
- public static final String GET_KEY = "getKey()";
-
- /**
- * Static attribute for key syntax.
- */
- public static final String GET_VALUE = "getValue()";
-
- /**
- * Static attribute for -1 to syntax.
- */
- public static final String NEG_ONE = "-1";
-
- /**
- * Static attribute for Comparable to syntax.
- */
- public static final String COMPARABLE = "Comparable";
-
- /**
- * Static attribute for string trim syntax.
- */
- public static final String TRIM_STRING = "trim";
-
- /**
- * Static attribute for string split syntax.
- */
- public static final String SPLIT_STRING = "split";
-
- /**
- * Static attribute for Pattern.
- */
- public static final String PATTERN = "Pattern";
-
- /**
- * Static attribute for Quote.
- */
- public static final String QUOTE_STRING = "quote";
-
- /**
- * Static attribute for from syntax.
- */
- public static final String FROM_STRING_METHOD_NAME = "fromString";
-
- /**
- * Static attribute for check not null syntax.
- */
- public static final String CHECK_NOT_NULL_STRING = "checkNotNull";
-
- /**
- * Static attribute for hash code syntax.
- */
- public static final String HASH_CODE_STRING = "hashCode";
-
- /**
- * Static attribute for equals syntax.
- */
- public static final String EQUALS_STRING = "equals";
-
- /**
- * Static attribute for object.
- */
- public static final String OBJECT_STRING = "Object";
-
- /**
- * Static attribute for instance of syntax.
- */
- public static final String INSTANCE_OF = " instanceof ";
-
- /**
- * Static attribute for value syntax.
- */
- public static final String VALUE = "value";
-
- /**
- * Static attribute for value syntax.
- */
- public static final String VALUE_CAPS = "Value";
-
- /**
- * Static attribute for suffix s.
- */
- public static final String SUFFIX_S = "s";
-
- /**
- * Static attribute for string builder var.
- */
- public static final String STRING_BUILDER_VAR = "sBuild";
- /**
- * Static attribute for string builder var.
- */
- public static final String APPEND = "append";
-
- /**
- * Static attribute for if.
- */
- public static final String IF = "if";
-
- /**
- * Static attribute for of.
- */
- public static final String OF = "of";
- /**
- * Static attribute for of.
- */
- public static final String OF_CAPS = "Of";
-
- /**
- * Static attribute for other.
- */
- public static final String OTHER = "other";
-
- /**
- * Static attribute for obj syntax.
- */
- public static final String OBJ = "obj";
-
- /**
- * Static attribute for hash syntax.
- */
- public static final String HASH = "hash";
-
- /**
- * Static attribute for to syntax.
- */
- public static final String TO = "to";
-
- /**
- * Static attribute for to syntax.
- */
- public static final String TO_CAPS = "To";
-
- /**
- * Static attribute for true syntax.
- */
- public static final String TRUE = "true";
-
- /**
- * Static attribute for false syntax.
- */
- public static final String FALSE = "false";
-
- /**
- * Static attribute for org.
- */
- public static final String ORG = "org";
-
- /**
- * Static attribute for temp.
- */
- public static final String TEMP = "Temp";
-
- /**
- * Static attribute for YANG file directory.
- */
- public static final String YANG_RESOURCES = "yang/resources";
-
- /**
- * Static attribute for diamond close bracket syntax.
- */
- public static final String DIAMOND_OPEN_BRACKET = "<";
-
- /**
- * Static attribute for diamond close bracket syntax.
- */
- public static final String DIAMOND_CLOSE_BRACKET = ">";
-
- /**
- * Static attribute for event type.
- */
- public static final String EVENT_TYPE = ".Type";
-
- /**
- * Static attribute for exception syntax.
- */
- public static final String EXCEPTION = "Exception";
-
- /**
- * Static attribute for exception variable syntax.
- */
- public static final String EXCEPTION_VAR = "e";
-
- /**
- * Static attribute for open parenthesis syntax.
- */
- public static final String OPEN_PARENTHESIS = "(";
-
- /**
- * Static attribute for switch syntax.
- */
- public static final String SWITCH = "switch";
-
- /**
- * Static attribute for case syntax.
- */
- public static final String CASE = "case";
-
- /**
- * Static attribute for temp val syntax.
- */
- public static final String TMP_VAL = "tmpVal";
-
- /**
- * Static attribute for close curly bracket syntax.
- */
- public static final String ELSE = " else ";
-
- /**
- * From string parameter name.
- */
- public static final String FROM_STRING_PARAM_NAME = "valInString";
-
- /**
- * Static attribute for close parenthesis syntax.
- */
- public static final String CLOSE_PARENTHESIS = ")";
-
- /**
- * Static attribute for empty parameter function call.
- */
- public static final String OPEN_CLOSE_BRACKET_STRING = "()";
-
- /**
- * Static attribute for empty parameter function call.
- */
- public static final String OPEN_CLOSE_DIAMOND_STRING = "<>";
-
- /**
- * Static attribute for open curly bracket syntax.
- */
- public static final String OPEN_CURLY_BRACKET = "{";
-
- /**
- * Static attribute for close curly bracket syntax.
- */
- public static final String CLOSE_CURLY_BRACKET = "}";
-
- /**
- * Static attribute for square brackets syntax.
- */
- public static final String SQUARE_BRACKETS = "[]";
-
- /**
- * Static attribute for getter method prefix.
- */
- public static final String GET_METHOD_PREFIX = "get";
-
- /**
- * Static attribute for setter method prefix.
- */
- public static final String SET_METHOD_PREFIX = "set";
-
- /**
- * Static attribute for op param.
- */
- public static final String OP_PARAM = "OpParam";
-
-
- /**
- * Static attribute for is filter content match method prefix.
- */
- public static final String PROCESS_SUBTREE_FILTERING =
- "processSubtreeFiltering";
-
- /**
- * variable name of the subtree filtering result builder.
- */
- public static final String SUBTREE_FILTERING_RESULT_BUILDER =
- "subTreeFilteringResultBuilder";
-
- /**
- * variable name of the subtree filtering result flag.
- */
- public static final String IS_ANY_SELECT_OR_CONTAINMENT_NODE_FLAG =
- "isAnySelectOrContainmentNode";
-
- /**
- * variable name of the subtree filtering to select all child.
- */
- public static final String IS_SELECT_ALL_SCHEMA_CHILD_FLAG =
- "isSelectAllSchemaChild";
-
- /**
- * Static attribute for break prefix.
- */
- public static final String BREAK = "break";
-
- /**
- * Static attribute for isEmpty.
- */
- public static final String IS_EMPTY = "isEmpty()";
- /**
- * Static attribute for exception string in bits enum class.
- */
- public static final String EXCEPTION_STRING = "IllegalArgumentException" +
- "(\"not a valid input element\");\n";
-
- /**
- * Static attribute for priority queue.
- */
- public static final String PRIORITY_QUEUE = "java.util.PriorityQueue<>()";
-
- /**
- * Static attribute for linked hash set.
- */
- public static final String LINKED_HASH_SET = "java.util.LinkedHashSet<>()";
-
- /**
- * Static attribute for priority queue.
- */
- public static final String LINKED_HASH_MAP = "java.util.LinkedHashMap<>()";
-
- /**
- * Static attribute for "throw new ".
- */
- public static final String THROW_NEW = "throw new ";
-
- /**
- * Static attribute for is isLeafValueSet method prefix.
- */
- public static final String VALUE_LEAF_SET = "isLeafValueSet";
-
- /**
- * Static attribute for is valueLeafFlags method prefix.
- */
- public static final String VALUE_LEAF = "valueLeafFlags";
-
- /**
- * Static attribute for is selectLeafFlags method prefix.
- */
- public static final String SELECT_LEAF = "selectLeafFlags";
-
- /**
- * Static attribute for is isSelectLeaf method prefix.
- */
- public static final String IS_SELECT_LEAF = "isSelectLeaf";
-
- /**
- * Static attribute for is selectLeaf method prefix.
- */
- public static final String SET_SELECT_LEAF = "selectLeaf";
-
- /**
- * Static attribute for is LeafIdentifier enum prefix.
- */
- public static final String LEAF_IDENTIFIER = "LeafIdentifier";
- /**
- * Static attribute for is leaf.
- */
- public static final String LEAF = "leaf";
-
- /**
- * Static attribute for four space indentation.
- */
- public static final String FOUR_SPACE_INDENTATION = " ";
-
- /**
- * Static attribute for not syntax.
- */
- public static final String NOT = "!";
-
- /**
- * Static attribute for try syntax.
- */
- public static final String TRY = "try";
-
- /**
- * Static attribute for catch syntax.
- */
- public static final String CATCH = "catch";
-
- /**
- * Static attribute for eight space indentation.
- */
- public static final String EIGHT_SPACE_INDENTATION =
- FOUR_SPACE_INDENTATION + FOUR_SPACE_INDENTATION;
-
- /**
- * Static attribute for twelve space indentation.
- */
- public static final String TWELVE_SPACE_INDENTATION =
- EIGHT_SPACE_INDENTATION + FOUR_SPACE_INDENTATION;
-
- /**
- * Static attribute for sixteen space indentation.
- */
- public static final String SIXTEEN_SPACE_INDENTATION =
- TWELVE_SPACE_INDENTATION + FOUR_SPACE_INDENTATION;
-
- /**
- * Static attribute for twenty space indentation.
- */
- public static final String TWENTY_SPACE_INDENTATION =
- SIXTEEN_SPACE_INDENTATION + FOUR_SPACE_INDENTATION;
-
- /**
- * Static attribute for twenty four space indentation.
- */
- public static final String TWENTY_FOUR_SPACE_INDENTATION =
- TWENTY_SPACE_INDENTATION + FOUR_SPACE_INDENTATION;
-
- /**
- * Static attribute for twenty eight space indentation.
- */
- public static final String TWENTY_EIGHT_SPACE_INDENTATION =
- TWENTY_FOUR_SPACE_INDENTATION + FOUR_SPACE_INDENTATION;
-
- /**
- * Static attribute for thirty two space indentation.
- */
- public static final String THIRTY_TWO_SPACE_INDENTATION =
- TWENTY_EIGHT_SPACE_INDENTATION + FOUR_SPACE_INDENTATION;
-
- /**
- * Static attribute for generated code path.
- */
- public static final String YANG_GEN_DIR = "src/main/java/";
-
- /**
- * Static attribute for base package.
- */
- public static final String DEFAULT_BASE_PKG = "org.onosproject.yang.gen";
-
- /**
- * Static attribute for YANG date prefix.
- */
- public static final String REVISION_PREFIX = "rev";
-
- /**
- * Static attribute for YANG automatic prefix for identifiers with keywords
- * and beginning with digits.
- */
- public static final String YANG_AUTO_PREFIX = "yangAutoPrefix";
-
- /**
- * Static attribute for YANG version prefix.
- */
- public static final String VERSION_PREFIX = "v";
-
- /**
- * Static attribute for private modifier.
- */
- public static final String PRIVATE = "private";
-
- /**
- * Static attribute for public modifier.
- */
- public static final String PUBLIC = "public";
-
- /**
- * Static attribute for abstract modifier.
- */
- public static final String ABSTRACT = "abstract";
-
- /**
- * Static attribute for protected modifier.
- */
- public static final String PROTECTED = "protected";
-
- /**
- * Void java type.
- */
- public static final String VOID = "void";
-
- /**
- * String built in java type.
- */
- public static final String STRING_DATA_TYPE = "String";
-
- /**
- * String built in java type.
- */
- public static final String STRING_BUILDER = "StringBuilder";
- /**
- * Java.lang.* packages.
- */
- public static final String JAVA_LANG = "java.lang";
-
- /**
- * Java.math.* packages.
- */
- public static final String JAVA_MATH = "java.math";
-
- /**
- * Boolean built in java type.
- */
- public static final String BOOLEAN_DATA_TYPE = "boolean";
-
- /**
- * BigInteger built in java type.
- */
- public static final String BIG_INTEGER = "BigInteger";
-
- /**
- * BigDecimal built in java type.
- */
- public static final String BIG_DECIMAL = "BigDecimal";
-
- /**
- * BitSet built in java type.
- */
- public static final String BIT_SET = "BitSet";
-
- /**
- * Flag for subtree filtering in augment.
- */
- public static final String SUBTREE_FILTERED = "isSubTreeFiltered";
-
- /**
- * Augment map type.
- */
- public static final String AUGMENT_MAP_TYPE = "Map<Class<?>, Object>";
-
- /**
- * Byte java built in type.
- */
- public static final String BYTE = "byte";
-
- /**
- * Short java built in type.
- */
- public static final String SHORT = "short";
-
- /**
- * Int java built in type.
- */
- public static final String INT = "int";
-
- /**
- * Long java built in type.
- */
- public static final String LONG = "long";
-
- /**
- * Double java built in type.
- */
- public static final String DOUBLE = "double";
-
- /**
- * Boolean built in java wrapper type.
- */
- public static final String BOOLEAN_WRAPPER = "Boolean";
-
- /**
- * Byte java built in wrapper type.
- */
- public static final String BYTE_WRAPPER = "Byte";
-
- /**
- * Short java built in wrapper type.
- */
- public static final String SHORT_WRAPPER = "Short";
-
- /**
- * Integer java built in wrapper type.
- */
- public static final String INTEGER_WRAPPER = "Integer";
-
- /**
- * Long java built in wrapper type.
- */
- public static final String LONG_WRAPPER = "Long";
-
- /**
- * Static variable for question mark.
- */
- public static final String QUESTION_MARK = "?";
-
- /**
- * Static variable for forType string.
- */
- public static final String FOR_TYPE_STRING = " for type ";
-
- /**
- * List of keywords in java, this is used for checking if the input does not
- * contain these keywords.
- */
- public static final List<String> JAVA_KEY_WORDS =
- Arrays.asList("abstract", "assert", "boolean", "break", "byte",
- "case", "catch", "char", "class", "const", "continue",
- "default", "do", "double", "else", "extends", "false",
- "final", "finally", "float", "for", "goto", "if",
- "implements", "import", "instanceof", "enum", "int",
- "interface", "long", "native", "new", "null",
- "package", "private", "protected", "public", "return",
- "short", "static", "strictfp", "super", "switch",
- "synchronized", "this", "throw", "throws", "transient",
- "true", "try", "void", "volatile", "while", "list",
- "map", "arrayList", "hashMap", "linkedList", "notify",
- "notifyAll", "Method",
- "collections");
-
- /**
- * Static attribute for regex for all the special characters.
- */
- public static final String REGEX_WITH_ALL_SPECIAL_CHAR = "\\p{Punct}+";
-
- /**
- * Static attribute for regex for three special characters used in
- * identifier.
- */
- public static final String REGEX_FOR_IDENTIFIER_SPECIAL_CHAR = "[. _ -]+";
-
- /**
- * Static attribute for regex for period.
- */
- public static final String REGEX_FOR_PERIOD = "[.]";
-
- /**
- * Static attribute for regex for underscore.
- */
- public static final String REGEX_FOR_UNDERSCORE = "[_]";
-
- /**
- * Static attribute for regex for hyphen.
- */
- public static final String REGEX_FOR_HYPHEN = "[-]";
-
- /**
- * Static attribute for regex for digits.
- */
- public static final String REGEX_FOR_FIRST_DIGIT = "\\d.*";
-
- /**
- * Static attribute for regex with digits.
- */
- public static final String REGEX_WITH_DIGITS = "(?=\\d+)";
-
- /**
- * Static attribute for regex for single letter.
- */
- public static final String REGEX_FOR_SINGLE_LETTER = "[a-zA-Z]";
-
- /**
- * Static attribute for regex for digits with single letter.
- */
- public static final String REGEX_FOR_DIGITS_WITH_SINGLE_LETTER =
- "[0-9]+[a-zA-Z]";
-
- /**
- * Static attribute for regex with uppercase.
- */
- public static final String REGEX_WITH_UPPERCASE = "(?=\\p{Upper})";
-
- /**
- * Static attribute for regex for single capital case letter.
- */
- public static final String REGEX_WITH_SINGLE_CAPITAL_CASE = "[A-Z]";
-
- /**
- * Static attribute for regex for capital case letter with any number of
- * digits and small case letters.
- */
- public static final String
- REGEX_WITH_SINGLE_CAPITAL_CASE_AND_DIGITS_SMALL_CASES =
- "[A-Z][0-9a-z]+";
-
- /**
- * Static attribute for regex for any string ending with service.
- */
- public static final String REGEX_FOR_ANY_STRING_ENDING_WITH_SERVICE =
- ".+Service";
-
- /**
- * Static attribute for class syntax.
- */
- public static final String CLASS = "class";
-
- /**
- * Static attribute for builder syntax.
- */
- public static final String BUILDER = "Builder";
-
- /**
- * Static attribute for builder syntax.
- */
- public static final String BUILDER_LOWER_CASE = "builder";
-
- /**
- * Static attribute for service syntax.
- */
- public static final String SERVICE = "Service";
-
- /**
- * Static attribute for interface syntax.
- */
- public static final String INTERFACE = "interface";
-
- /**
- * Static attribute for enum syntax.
- */
- public static final String ENUM = "enum";
-
- /**
- * Static attribute for type syntax.
- */
- public static final String TYPE = "Type";
-
- /**
- * Static attribute for static syntax.
- */
- public static final String STATIC = "static";
-
- /**
- * Static attribute for final syntax.
- */
- public static final String FINAL = "final";
-
- /**
- * Static attribute for package syntax.
- */
- public static final String PACKAGE = "package";
-
- /**
- * Static attribute for import syntax.
- */
- public static final String IMPORT = "import ";
-
- /**
- * Static attribute for null syntax.
- */
- public static final String NULL = "null";
-
- /**
- * Static attribute for return syntax.
- */
- public static final String RETURN = "return";
-
- /**
- * Static attribute for java new syntax.
- */
- public static final String NEW = "new";
-
- /**
- * Static attribute for java new syntax.
- */
- public static final String TO_STRING_METHOD = "toString";
-
- /**
- * Static attribute for this syntax.
- */
- public static final String THIS = "this";
-
- /**
- * Static attribute for implements syntax.
- */
- public static final String IMPLEMENTS = "implements";
-
- /**
- * Static attribute for extends syntax.
- */
- public static final String EXTEND = "extends";
-
- /**
- * Static attribute for service interface suffix syntax.
- */
- public static final String SERVICE_METHOD_STRING = "Service";
-
- /**
- * For event file generation.
- */
- public static final String EVENT_STRING = "Event";
-
- /**
- * For event listener file generation.
- */
- public static final String EVENT_LISTENER_STRING = "EventListener";
-
- /**
- * For event subject file generation.
- */
- public static final String EVENT_SUBJECT_NAME_SUFFIX = "EventSubject";
-
- /**
- * Static attribute for build method syntax.
- */
- public static final String BUILD = "build";
-
- /**
- * Static attribute for build for filter in augment method syntax.
- */
- public static final String BUILD_FOR_FILTER = "buildForFilter";
-
- /**
- * Static attribute for object.
- */
- public static final String OBJECT = "Object";
-
- /**
- * Static attribute for app instance.
- */
- public static final String APP_INSTANCE = "appInstance";
-
- /**
- * Static attribute for instance.
- */
- public static final String INSTANCE = "instance";
-
- /**
- * Static attribute for override annotation.
- */
- public static final String OVERRIDE = "@Override";
-
- /**
- * Static attribute for collections.
- */
- public static final String COLLECTION_IMPORTS = "java.util";
-
- /**
- * Static attribute for reflect.
- */
- public static final String REFLECT_IMPORTS = "java.lang.reflect";
-
- /**
- * Static attribute for map.
- */
- public static final String MAP = "Map";
-
- /**
- * Static attribute for hash map.
- */
- public static final String HASH_MAP = "HashMap";
-
-
- /**
- * Static attribute for more object import package.
- */
- public static final String GOOGLE_MORE_OBJECT_IMPORT_PKG =
- "com.google.common.base";
-
- /**
- * Static attribute for more object import class.
- */
- public static final String GOOGLE_MORE_OBJECT_IMPORT_CLASS =
- "MoreObjects";
-
- /**
- * Static attribute for more object import class.
- */
- public static final String MORE_OBJ_ATTR =
- "MoreObjects.ToStringHelper helper = ";
-
- /**
- * Static attribute for to string method.
- */
- public static final String GOOGLE_MORE_OBJECT_METHOD_STRING =
- "MoreObjects.toStringHelper(getClass())";
-
- /**
- * Static attribute for to string method.
- */
- public static final String GOOGLE_MORE_OBJECT_METHOD_STATIC_STRING =
- "MoreObjects.toStringHelper";
-
- /**
- * Static attribute for java utilities import package.
- */
- public static final String JAVA_UTIL_PKG = "java.util";
-
- /**
- * Static attribute for java utilities import package.
- */
- public static final String JAVA_UTIL_REGEX_PKG = "java.util.regex";
-
- /**
- * Static attribute for java utilities import package.
- */
- public static final String SET_VALUE_PARA = "setValue";
-
- /**
- * Static attribute for Method.
- */
- public static final String METHOD = "Method";
-
- /**
- * Static attribute for bitset.
- */
- public static final String BITSET = "BitSet";
-
- /**
- * Static attribute for java utilities objects import class.
- */
- public static final String JAVA_UTIL_OBJECTS_IMPORT_CLASS = "Objects";
-
- /**
- * Static attribute for AugmentedInfo class.
- */
- public static final String YANG_AUGMENTED_INFO = "YangAugmentedInfo";
-
- /**
- * Static attribute for AugmentedInfo class.
- */
- public static final String YANG_AUGMENTED_INFO_LOWER_CASE =
- "yangAugmentedInfo";
-
- /**
- * Static attribute for AugmentedInfo class.
- */
- public static final String YANG_AUGMENTED_INFO_MAP =
- "yangAugmentedInfoMap";
-
- /**
- * Static attribute for augmented.
- */
- public static final String AUGMENTED = "Augmented";
-
- /**
- * Static attribute for list.
- */
- public static final String LIST = "List";
-
- /**
- * Static attribute for queue.
- */
- public static final String QUEUE = "Queue";
-
- /**
- * Static attribute for set.
- */
- public static final String SET = "Set";
-
- /**
- * Comment to be added for auto generated impl methods.
- */
- public static final String YANG_UTILS_TODO =
- "//TODO: YANG utils generated code";
-
- /**
- * Static attribute for AbstractEvent.
- */
- public static final String ABSTRACT_EVENT = "AbstractEvent";
-
- /**
- * Static attribute for EventListener.
- */
- public static final String EVENT_LISTENER = "EventListener";
-
- /**
- * Static attribute for or operator.
- */
- public static final String OR_OPERATION = "||";
-
- /**
- * Static attribute for or operator.
- */
- public static final String AND_OPERATION = "&&";
-
- /**
- * Static attribute for YANG file error.
- */
- public static final String YANG_FILE_ERROR = "YANG file error : ";
-
- /**
- * Static attribute for unsupported error information.
- */
- public static final String UNSUPPORTED_YANG_CONSTRUCT =
- " is not supported.";
-
- /**
- * Static attribute for "is invalid" information.
- */
- public static final String IS_INVALID = " is invalid.";
-
- /**
- * Static attribute for data model tree error information.
- */
- public static final String INVALID_TREE = "Internal datamodel error: " +
- "Datamodel tree is not correct";
-
- /**
- * Static attribute for currently unsupported error information.
- */
- public static final String CURRENTLY_UNSUPPORTED =
- " is not supported in current version, please check wiki" +
- " for YANG utils road map.";
-
- /**
- * Static attribute for leaf ref target node error information.
- */
- public static final String LEAFREF_ERROR = "YANG file error: The target" +
- " node, in the leafref path ";
-
- /**
- * Static attribute for leaf holder error information.
- */
- public static final String LEAF_HOLDER_ERROR = "Referred node should be of" +
- " type leaves holder in ";
-
- /**
- * Static attribute for invalid resolve entity error information.
- */
- public static final String INVALID_RESOLVED_ENTITY = "Data Model " +
- "Exception: Entity to resolved is other than type/uses";
-
- /**
- * Static attribute for invalid resolve entity error information.
- */
- public static final String INVALID_ENTITY = "Data Model Exception: Entity " +
- "to resolved is other than identityref";
-
- /**
- * Static attribute for invalid state error information.
- */
- public static final String INVALID_LINKER_STATE = "Data Model Exception: " +
- "Unsupported, linker state";
-
- /**
- * Static attribute for leaf ref resolve entity error information.
- */
- public static final String FAILED_TO_FIND_LEAD_INFO_HOLDER = "YANG file " +
- "error: Unable to find base leaf/leaf-list for given leafref path ";
-
- /**
- * Static attribute for compiler annotation resolve entity error
- * information.
- */
- public static final String FAILED_TO_FIND_ANNOTATION = "Failed to link " +
- "compiler annotation ";
-
- /**
- * Static attribute for failed to link entity error information.
- */
- public static final String FAILED_TO_LINK = "Failed to link ";
-
- /**
- * Static attribute for un-resolve entity error information.
- */
- public static final String UNRESOLVABLE = "Data Model Exception: Entity " +
- "to resolved is not Resolvable";
-
- /**
- * Static attribute for invalid resolve entity error information.
- */
- public static final String LINKER_ERROR = "Data Model Exception: Entity" +
- " to resolved is other than type/uses/if-feature/leafref/base/identityref";
-
- /**
- * Static attribute for invalid resolve entity error information.
- */
- public static final String INVALID_TARGET = "Invalid target node type ";
- /**
- * Static attribute for typedef linker error information.
- */
- public static final String TYPEDEF_LINKER_ERROR =
- "YANG file error: Unable to find base typedef for given type";
-
- /**
- * Static attribute for grouping linker error information.
- */
- public static final String GROUPING_LINKER_ERROR =
- "YANG file error: Unable to find base grouping for given uses";
-
- /**
- * Static attribute for if-feature linker error information.
- */
- public static final String FEATURE_LINKER_ERROR =
- "YANG file error: Unable to find feature for given if-feature";
-
- /**
- * Static attribute for leafref linker error information.
- */
- public static final String LEAFREF_LINKER_ERROR =
- "YANG file error: Unable to find base leaf/leaf-list for given " +
- "leafref";
-
- /**
- * Static attribute for base linker error information.
- */
- public static final String BASE_LINKER_ERROR =
- "YANG file error: Unable to find base identity for given base";
-
- /**
- * Static attribute for identityref linker error information.
- */
- public static final String IDENTITYREF_LINKER_ERROR =
- "YANG file error: Unable to find base identity for given base";
-
- /**
- * Static attribute for jar.
- */
- public static final String JAR = "jar";
-
- /**
- * Static attribute for for.
- */
- public static final String FOR = "for";
-
- /**
- * Static attribute for InvocationTargetException.
- */
- public static final String INVOCATION_TARGET_EXCEPTION =
- "InvocationTargetException";
- /**
- * Static attribute for arrayList.
- */
- public static final String ARRAY_LIST_INIT = "ArrayList<>()";
-
- /**
- * Static attribute for arrayList import.
- */
- public static final String ARRAY_LIST_IMPORT =
- IMPORT + COLLECTION_IMPORTS + ".ArrayList;\n";
-
- /**
- * Static attribute for unused keyword.
- */
- public static final String UNUSED = "UNUSED";
-
- /**
- * Static attribute for 1 keyword.
- */
- public static final String ONE = "1";
-
- /**
- * Static attribute for YANG node operation type class.
- */
- public static final String OPERATION_TYPE_CLASS =
- "OnosYangOpType";
-
- /**
- * Static attribute for YANG node operation type attribute.
- */
- public static final String OPERATION_TYPE_ATTRIBUTE =
- "OpType";
-
- /**
- * Static attribute for input keyword to be suffixed with rpc name.
- */
- public static final String INPUT_KEYWORD = "_input";
-
- /**
- * Static attribute for output keyword to be suffixed with rpc name.
- */
- public static final String OUTPUT_KEYWORD = "_output";
-
- /**
- * Static attribute for event class.
- */
- public static final String EVENT_CLASS = "event class";
-
- /**
- * Static attribute for typedef class.
- */
- public static final String TYPEDEF_CLASS = "typedef class";
-
- /**
- * Static attribute for impl class.
- */
- public static final String IMPL_CLASS = "impl class";
-
- /**
- * Static attribute for union class.
- */
- public static final String UNION_CLASS = "union class";
-
- /**
- * Static attribute for enum class.
- */
- public static final String ENUM_CLASS = "enum class";
-
- /**
- * Static attribute for rpc class.
- */
- public static final String RPC_CLASS = "rpc class";
-
- /**
- * Static attribute for builder class.
- */
- public static final String BUILDER_CLASS = "builder class";
-
- /**
- * Static attribute for builder interface.
- */
- public static final String BUILDER_INTERFACE = "builder interface";
-
- /**
- * Static attribute for bits.
- */
- public static final String BITS = "bits";
-
- /**
- * Static attribute for YANG.
- */
- public static final String YANG = "yang";
-
- /**
- * Static attribute for error msg.
- */
- public static final String ERROR_MSG_FOR_GEN_CODE = "please check whether " +
- "multiple yang" + " files has same module/submodule" +
- " \"name\" and \"namespace\"" + "or You may have generated code of" +
- " previous build present in your directory.";
-
- /**
- * Static attribute for error msg.
- */
- public static final String ERROR_MSG_JAVA_IDENTITY = "Expected java " +
- "identity instance node ";
-
- /**
- * Static attribute for error msg.
- */
- public static final String ERROR_MSG_FOR_AUGMENT_LINKING = "Augment " +
- "linking does not support linking when path contains " +
- "notification/grouping for path: ";
-
- /**
- * Static attribute for error msg.
- */
- public static final String VERSION_ERROR = "Onos-yang-tools " +
- "does not support maven version below \"3.3.9\" , your current " +
- "version is ";
-
- /**
- * Static attribute for in.
- */
- public static final String IN = " in ";
-
- /**
- * Static attribute for at.
- */
- public static final String AT = " at ";
-
- /**
- * Static param for processChildNodesSubTreeFiltering.
- */
- public static final String PROCESS_CHILD_NODE_STF_PARAM =
- "processChildNodesSubTreeFiltering";
-
- /**
- * Static param for processLeafListSubTreeFiltering.
- */
- public static final String PROCESS_LEAF_LIST_STF_PARAM =
- "processLeafListSubTreeFiltering";
- /**
- * Static param for processLeafListSubTreeFiltering.
- */
- public static final String PROCESS_LEAF_STF_PARAM =
- "processLeafSubtreeFiltering";
- /**
- * Static param for subTreeFilteringResultBuilder.
- */
- public static final String STF_BUILDER_PARAM =
- "subTreeFilteringResultBuilder";
-
- /**
- * Static param for isAnySelectOrContainmentNode.
- */
- public static final String SELECT_OR_CONTAINMENT_NODE_PARAM =
- "isAnySelectOrContainmentNode";
- /**
- * Static param for isSelectAllSchemaChild.
- */
- public static final String SELECT_ALL_CHILD_SCHEMA_PARAM =
- "isSelectAllSchemaChild";
-
- //File type extension for java classes.
- public static final String JAVA_FILE_EXTENSION = ".java";
-
- /**
- * Static param for typedef.
- */
- public static final String HOLDER_TYPE_DEF = "typedef";
-
- /**
- * Static param for last.
- */
- public static final String LAST = "last";
-
- // No instantiation.
- private UtilConstants() {
- }
-
- /**
- * Represents operation type.
- */
- public enum Operation {
- /**
- * Represents add operation.
- */
- ADD,
-
- /**
- * Represents remove operation.
- */
- REMOVE
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/utils/io/YangPluginConfig.java b/generator/src/main/java/org/onosproject/yangutils/utils/io/YangPluginConfig.java
deleted file mode 100644
index f02ed1a..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/utils/io/YangPluginConfig.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.utils.io;
-
-import javax.tools.JavaCompiler;
-import javax.tools.StandardJavaFileManager;
-import javax.tools.ToolProvider;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import static org.onosproject.yangutils.utils.io.impl.YangFileScanner.getJavaFiles;
-
-/**
- * Representation of plugin configurations required for YANG utils.
- */
-public final class YangPluginConfig {
-
- /**
- * Contains the code generation directory.
- */
- private String codeGenDir;
-
- /**
- * Contains information of naming conflicts that can be resolved.
- */
- private YangToJavaNamingConflictUtil conflictResolver;
-
- /**
- * Java code generation is for sbi.
- */
- private String codeGenerateForSbi;
-
- /**
- * Path to generate the resource files, which will be used by the plugin
- * to add it as part of the resource, implicitly by the path location, or
- * some explicit way to add to bundle.
- */
- private String resourceGenDir;
-
- /**
- * Creates an object for YANG plugin config.
- */
- public YangPluginConfig() {
- }
-
- /**
- * Returns the string for code generation.
- *
- * @return returns the string for code generation.
- */
- public String getCodeGenerateForSbi() {
- return codeGenerateForSbi;
- }
-
- /**
- * Sets the string sbi or nbi for code generation.
- *
- * @param codeGenerateForSbi generation is for sbi
- */
- public void setCodeGenerateForSbi(String codeGenerateForSbi) {
- this.codeGenerateForSbi = codeGenerateForSbi;
- }
-
- /**
- * Sets the path of the java code where it has to be generated.
- *
- * @param codeGenDir path of the directory
- */
- public void setCodeGenDir(String codeGenDir) {
- this.codeGenDir = codeGenDir;
- }
-
- /**
- * Returns the code generation directory path.
- *
- * @return code generation directory
- */
- public String getCodeGenDir() {
- return codeGenDir;
- }
-
- /**
- * Sets the object.
- *
- * @param conflictResolver object of the class
- */
- public void setConflictResolver(YangToJavaNamingConflictUtil conflictResolver) {
- this.conflictResolver = conflictResolver;
- }
-
- /**
- * Returns the object.
- *
- * @return object of the class
- */
- public YangToJavaNamingConflictUtil getConflictResolver() {
- return conflictResolver;
- }
-
-
- public String resourceGenDir() {
- return resourceGenDir;
- }
-
- public void resourceGenDir(String resourceGenDir) {
- this.resourceGenDir = resourceGenDir;
- }
-
- /**
- * TODO: delete me, it is not part of config, it needs to be updated for
- * test scripts
- * Compiles the generated code for unit tests.
- *
- * @param dir1 directory path
- * @throws IOException when generated code has compilation errors.
- */
- @SuppressWarnings("unchecked")
- public static void compileCode(String dir1) throws IOException {
- String classpath = System.getProperty("java.class.path");
- List<String> optionList = new ArrayList<>();
- optionList.addAll(Arrays.asList("-classpath", classpath));
-
- List<String> files = getJavaFiles(dir1);
- JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
- StandardJavaFileManager manager = compiler.getStandardFileManager(null, null, null);
- Iterable fileObjects = manager.getJavaFileObjectsFromStrings(files);
- JavaCompiler.CompilationTask task = compiler.getTask(null, null,
- null, optionList, null,
- fileObjects);
-
- boolean failOnError = !task.call();
- manager.close();
- if (failOnError) {
- throw new IOException("Yang Error : compilation errors in " +
- "generated code.");
- }
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/utils/io/YangToJavaNamingConflictUtil.java b/generator/src/main/java/org/onosproject/yangutils/utils/io/YangToJavaNamingConflictUtil.java
deleted file mode 100644
index 4ae6b0d..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/utils/io/YangToJavaNamingConflictUtil.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.utils.io;
-
-/**
- * Representation of YANG to java naming conflict resolver util.
- */
-public final class YangToJavaNamingConflictUtil {
-
- /**
- * Contains the replacement value for a period.
- */
- private String replacementForPeriodInIdentifier;
-
- /**
- * Contains the replacement value for an underscore.
- */
- private String replacementForUnderscoreInIdentifier;
-
- /**
- * Contains the replacement value for a hyphen.
- */
- private String replacementForHyphenInIdentifier;
-
- /**
- * Contains the prefix value for adding with the identifier.
- */
- private String prefixForIdentifier;
-
- /**
- * Creates an object for YANG to java naming conflict util.
- */
- public YangToJavaNamingConflictUtil() {
- }
-
- /**
- * Sets the replacement value for a period.
- *
- * @param periodReplacement replacement value for period
- */
- public void setReplacementForPeriod(String periodReplacement) {
- replacementForPeriodInIdentifier = periodReplacement;
- }
-
- /**
- * Returns the replaced period value.
- *
- * @return replaced period
- */
- public String getReplacementForPeriod() {
- return replacementForPeriodInIdentifier;
- }
-
- /**
- * Sets the replacement value for a hyphen.
- *
- * @param hyphenReplacement replacement value for hyphen
- */
- public void setReplacementForHyphen(String hyphenReplacement) {
- replacementForHyphenInIdentifier = hyphenReplacement;
- }
-
- /**
- * Returns the replaced hyphen value.
- *
- * @return replaced hyphen
- */
- public String getReplacementForHyphen() {
- return replacementForHyphenInIdentifier;
- }
-
- /**
- * Sets the replacement value for an underscore.
- *
- * @param underscoreReplacement replacement value for underscore
- */
- public void setReplacementForUnderscore(String underscoreReplacement) {
- replacementForUnderscoreInIdentifier = underscoreReplacement;
- }
-
- /**
- * Returns the replaced underscore value.
- *
- * @return replaced underscore
- */
- public String getReplacementForUnderscore() {
- return replacementForUnderscoreInIdentifier;
- }
-
- /**
- * Sets the prefix value for adding with the identifier.
- *
- * @param prefix prefix for identifier
- */
- public void setPrefixForIdentifier(String prefix) {
- prefixForIdentifier = prefix;
- }
-
- /**
- * Returns the prefix for identifier.
- *
- * @return prefix for identifier
- */
- public String getPrefixForIdentifier() {
- return prefixForIdentifier;
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/utils/io/impl/CopyrightHeader.java b/generator/src/main/java/org/onosproject/yangutils/utils/io/impl/CopyrightHeader.java
deleted file mode 100644
index 8b55768..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/utils/io/impl/CopyrightHeader.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.utils.io.impl;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Calendar;
-
-import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
-
-/**
- * Represents the license header for the generated files.
- */
-public final class CopyrightHeader {
-
- private static final int EOF = -1;
- private static final String COPYRIGHT_HEADER_FILE = "CopyrightHeader.txt";
- private static final String COPYRIGHTS_FIRST_LINE = "/*\n * Copyright " + Calendar.getInstance().get(Calendar.YEAR)
- + "-present Open Networking Laboratory\n";
- private static final String TEMP_FILE = "temp.txt";
-
- /**
- * Creates an instance of copyright header.
- */
- private CopyrightHeader() {
- }
-
- /**
- * parses Copyright to the temporary file.
- *
- * @return string of file.
- * @throws IOException when fails to get the copyright header
- */
- public static String parseCopyrightHeader() throws IOException {
-
- File temp = new File(TEMP_FILE);
-
- try {
- InputStream stream = CopyrightHeader.class.getClassLoader()
- .getResourceAsStream(COPYRIGHT_HEADER_FILE);
- OutputStream out = new FileOutputStream(temp);
-
- int index;
- out.write(COPYRIGHTS_FIRST_LINE.getBytes());
- while ((index = stream.read()) != EOF) {
- out.write(index);
- }
- out.close();
- stream.close();
- return getStringFileContent(temp);
- } catch (IOException e) {
- throw new IOException("failed to parse the Copyright header");
- } finally {
- temp.delete();
- }
- }
-
- /**
- * Converts it to string.
- *
- * @param toAppend file to be converted.
- * @return string of file.
- * @throws IOException when fails to convert to string
- */
- private static String getStringFileContent(File toAppend) throws IOException {
-
- FileReader fileReader = new FileReader(toAppend);
- BufferedReader bufferReader = new BufferedReader(fileReader);
- try {
- StringBuilder stringBuilder = new StringBuilder();
- String line = bufferReader.readLine();
-
- while (line != null) {
- stringBuilder.append(line);
- stringBuilder.append(NEW_LINE);
- line = bufferReader.readLine();
- }
- return stringBuilder.toString();
- } finally {
- fileReader.close();
- bufferReader.close();
- }
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/utils/io/impl/FileSystemUtil.java b/generator/src/main/java/org/onosproject/yangutils/utils/io/impl/FileSystemUtil.java
deleted file mode 100644
index cc721ed..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/utils/io/impl/FileSystemUtil.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.utils.io.impl;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.List;
-
-import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
-import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
-import static org.onosproject.yangutils.utils.UtilConstants.MULTIPLE_NEW_LINE;
-import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
-import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
-
-/**
- * Represents utility to handle file system operations.
- */
-public final class FileSystemUtil {
-
- /**
- * Creates an instance of file system util.
- */
- private FileSystemUtil() {
- }
-
- /**
- * Reads the contents from source file and append its contents to append file.
- *
- * @param toAppend destination file in which the contents of source file is appended
- * @param srcFile source file from which data is read and added to to append file
- * @throws IOException any IO errors
- */
- static void appendFileContents(File toAppend, File srcFile)
- throws IOException {
- updateFileHandle(srcFile, readAppendFile(toAppend.toString(),
- FOUR_SPACE_INDENTATION), false);
- }
-
- /**
- * Reads file and convert it to string.
- *
- * @param toAppend file to be converted
- * @param spaces spaces to be appended
- * @return string of file
- * @throws IOException when fails to convert to string
- */
- public static String readAppendFile(String toAppend, String spaces)
- throws IOException {
-
- FileReader fileReader = new FileReader(toAppend);
- BufferedReader bufferReader = new BufferedReader(fileReader);
- try {
- StringBuilder stringBuilder = new StringBuilder();
- String line = bufferReader.readLine();
-
- while (line != null) {
- switch (line) {
- case SPACE:
- case EMPTY_STRING:
- case EIGHT_SPACE_INDENTATION:
- case MULTIPLE_NEW_LINE:
- stringBuilder.append(NEW_LINE);
- break;
- case FOUR_SPACE_INDENTATION:
- stringBuilder.append(EMPTY_STRING);
- break;
- default:
- String append = spaces + line;
- stringBuilder.append(append);
- stringBuilder.append(NEW_LINE);
- break;
- }
- line = bufferReader.readLine();
- }
- return stringBuilder.toString();
- } finally {
- fileReader.close();
- bufferReader.close();
- }
- }
-
- /**
- * Updates the generated file handle.
- *
- * @param inputFile input file
- * @param contentTobeAdded content to be appended to the file
- * @param isClose when close of file is called.
- * @throws IOException if the named file exists but is a directory rather than a regular file, does not exist but
- * cannot be created, or cannot be opened for any other reason
- */
- static void updateFileHandle(File inputFile, String contentTobeAdded, boolean isClose)
- throws IOException {
-
- List<FileWriter> fileWriterStore = new ArrayList<>();
-
- FileWriter fileWriter = new FileWriter(inputFile, true);
- fileWriterStore.add(fileWriter);
- PrintWriter outputPrintWriter = new PrintWriter(fileWriter, true);
- if (!isClose) {
- outputPrintWriter.write(contentTobeAdded);
- outputPrintWriter.flush();
- outputPrintWriter.close();
- } else {
- for (FileWriter curWriter : fileWriterStore) {
- curWriter.flush();
- curWriter.close();
- }
- }
- }
-
- /**
- * Closes the file handle for temporary file.
- *
- * @param file file to be closed
- * @param toBeDeleted flag to indicate if file needs to be deleted
- * @throws IOException when failed to close the file handle
- */
- public static void closeFile(File file, boolean toBeDeleted)
- throws IOException {
-
- if (file != null) {
- updateFileHandle(file, null, true);
- if (toBeDeleted) {
- boolean deleted = file.delete();
- if (!deleted) {
- throw new IOException("Failed to delete temporary file " + file.getName());
- }
- }
- }
- }
-
- /**
- * Closes the file handle for temporary file with file deletion.
- *
- * @param file file to be closed
- * @throws IOException when failed to close the file handle
- */
- public static void closeFile(File file) throws IOException {
-
- if (file != null) {
- updateFileHandle(file, null, true);
- boolean deleted = file.delete();
- if (!deleted) {
- throw new IOException("Failed to delete temporary file " +
- file.getName());
- }
- }
- }
- // TODO follow coding guidelines in remaining of this file.
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/utils/io/impl/JavaDocGen.java b/generator/src/main/java/org/onosproject/yangutils/utils/io/impl/JavaDocGen.java
deleted file mode 100644
index 8c8e794..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/utils/io/impl/JavaDocGen.java
+++ /dev/null
@@ -1,910 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.utils.io.impl;
-
-import static org.onosproject.yangutils.utils.UtilConstants.ADD_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
-import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_CLASS_JAVA_DOC;
-import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_INTERFACE_JAVA_DOC;
-import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_LOWER_CASE;
-import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_OBJECT;
-import static org.onosproject.yangutils.utils.UtilConstants.CLASS;
-import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
-import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.ENUM_ATTRIBUTE_JAVADOC;
-import static org.onosproject.yangutils.utils.UtilConstants.ENUM_CLASS_JAVADOC;
-import static org.onosproject.yangutils.utils.UtilConstants.EVENT_JAVA_DOC;
-import static org.onosproject.yangutils.utils.UtilConstants.EVENT_LISTENER_JAVA_DOC;
-import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
-import static org.onosproject.yangutils.utils.UtilConstants.FROM_STRING_METHOD_NAME;
-import static org.onosproject.yangutils.utils.UtilConstants.FROM_STRING_PARAM_NAME;
-import static org.onosproject.yangutils.utils.UtilConstants.IMPL_CLASS_JAVA_DOC;
-import static org.onosproject.yangutils.utils.UtilConstants.INPUT;
-import static org.onosproject.yangutils.utils.UtilConstants.INTERFACE_JAVA_DOC;
-import static org.onosproject.yangutils.utils.UtilConstants.JAVA_DOC_ADD_TO_LIST;
-import static org.onosproject.yangutils.utils.UtilConstants.JAVA_DOC_BUILD;
-import static org.onosproject.yangutils.utils.UtilConstants.JAVA_DOC_CONSTRUCTOR;
-import static org.onosproject.yangutils.utils.UtilConstants.JAVA_DOC_END_LINE;
-import static org.onosproject.yangutils.utils.UtilConstants.JAVA_DOC_FIRST_LINE;
-import static org.onosproject.yangutils.utils.UtilConstants.JAVA_DOC_FOR_VALIDATOR;
-import static org.onosproject.yangutils.utils.UtilConstants.JAVA_DOC_FOR_VALIDATOR_RETURN;
-import static org.onosproject.yangutils.utils.UtilConstants.JAVA_DOC_GETTERS;
-import static org.onosproject.yangutils.utils.UtilConstants.JAVA_DOC_MANAGER_SETTERS;
-import static org.onosproject.yangutils.utils.UtilConstants.JAVA_DOC_OF;
-import static org.onosproject.yangutils.utils.UtilConstants.JAVA_DOC_PARAM;
-import static org.onosproject.yangutils.utils.UtilConstants.JAVA_DOC_RETURN;
-import static org.onosproject.yangutils.utils.UtilConstants.JAVA_DOC_RPC;
-import static org.onosproject.yangutils.utils.UtilConstants.JAVA_DOC_SETTERS;
-import static org.onosproject.yangutils.utils.UtilConstants.JAVA_DOC_SETTERS_COMMON;
-import static org.onosproject.yangutils.utils.UtilConstants.KEYS;
-import static org.onosproject.yangutils.utils.UtilConstants.LIST;
-import static org.onosproject.yangutils.utils.UtilConstants.MAP;
-import static org.onosproject.yangutils.utils.UtilConstants.MAX_RANGE;
-import static org.onosproject.yangutils.utils.UtilConstants.MIN_RANGE;
-import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
-import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE_ASTERISK;
-import static org.onosproject.yangutils.utils.UtilConstants.OBJECT;
-import static org.onosproject.yangutils.utils.UtilConstants.OBJECT_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.OF;
-import static org.onosproject.yangutils.utils.UtilConstants.OP_PARAM_JAVA_DOC;
-import static org.onosproject.yangutils.utils.UtilConstants.PACKAGE_INFO_JAVADOC;
-import static org.onosproject.yangutils.utils.UtilConstants.PACKAGE_INFO_JAVADOC_OF_CHILD;
-import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
-import static org.onosproject.yangutils.utils.UtilConstants.QUEUE;
-import static org.onosproject.yangutils.utils.UtilConstants.RPC_INPUT_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.RPC_OUTPUT_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.SET;
-import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
-import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
-import static org.onosproject.yangutils.utils.UtilConstants.TO_CAPS;
-import static org.onosproject.yangutils.utils.UtilConstants.VALIDATE_RANGE;
-import static org.onosproject.yangutils.utils.UtilConstants.VALUE;
-import static org.onosproject.yangutils.utils.UtilConstants.VALUE_CAPS;
-import static org.onosproject.yangutils.utils.UtilConstants.VOID;
-import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_INFO;
-import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUGMENTED_INFO_LOWER_CASE;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getSmallCase;
-
-/**
- * Represents javadoc for the generated classes.
- */
-public final class JavaDocGen {
-
- /**
- * Creates an instance of java doc gen.
- */
- private JavaDocGen() {
- }
-
- /**
- * Returns java docs.
- *
- * @param type java doc type
- * @param name name of the YangNode
- * @param isList is list attribute
- * @param compilerAnnotation compiler annotations for user defined data type
- * @return javaDocs.
- */
- public static String getJavaDoc(JavaDocType type, String name, boolean isList,
- String compilerAnnotation) {
-
- name = YangIoUtils.getSmallCase(name);
- switch (type) {
- case DEFAULT_CLASS: {
- return generateForClass(name, isList);
- }
- case BUILDER_CLASS: {
- return generateForBuilderClass(name);
- }
- case OPERATION_CLASS: {
- return generateForOpParamClass(name);
- }
- case OPERATION_BUILDER_CLASS: {
- return generateForOpParamClass(name);
- }
- case INTERFACE: {
- return generateForInterface(name);
- }
- case BUILDER_INTERFACE: {
- return generateForBuilderInterface(name);
- }
- case PACKAGE_INFO: {
- return generateForPackage(name, isList);
- }
- case GETTER_METHOD: {
- return generateForGetters(name, isList, compilerAnnotation);
- }
- case TYPE_DEF_SETTER_METHOD: {
- return generateForTypeDefSetter(name);
- }
- case SETTER_METHOD: {
- return generateForSetters(name, isList, compilerAnnotation);
- }
- case MANAGER_SETTER_METHOD: {
- return generateForManagerSetters(name, isList, compilerAnnotation);
- }
- case OF_METHOD: {
- return generateForOf(name);
- }
- case DEFAULT_CONSTRUCTOR: {
- return generateForDefaultConstructors(name);
- }
- case BUILD_METHOD: {
- return generateForBuild(name);
- }
- case TYPE_CONSTRUCTOR: {
- return generateForTypeConstructor(name);
- }
- case FROM_METHOD: {
- return generateForFromString(name);
- }
- case ENUM_CLASS: {
- return generateForEnum(name);
- }
- case ENUM_ATTRIBUTE: {
- return generateForEnumAttr(name);
- }
- case RPC_INTERFACE: {
- return generateForRpcService(name);
- }
- case RPC_MANAGER: {
- return generateForClass(name, false);
- }
- case EVENT: {
- return generateForEvent(name);
- }
- case EVENT_LISTENER: {
- return generateForEventListener(name);
- }
- case EVENT_SUBJECT_CLASS: {
- return generateForClass(name, false);
- }
- case ADD_TO_LIST: {
- return generateForAddToList(name, compilerAnnotation);
- }
- default: {
- return generateForConstructors(name);
- }
- }
- }
-
- /**
- * Generates javaDocs for enum's attributes.
- *
- * @param name attribute name
- * @return javaDocs
- */
- private static String generateForEnumAttr(String name) {
- return getJavaDocForClass(name, ENUM_ATTRIBUTE_JAVADOC,
- FOUR_SPACE_INDENTATION);
- }
-
- /**
- * Generates javaDocs for inner class enum's attributes.
- *
- * @param name attribute name
- * @return javaDocs
- */
- public static String enumJavaDocForInnerClass(String name) {
- return getJavaDocForClass(name, ENUM_ATTRIBUTE_JAVADOC,
- EIGHT_SPACE_INDENTATION);
- }
-
- /**
- * Generates javaDocs for rpc method.
- *
- * @param rpcName name of the rpc
- * @param inputName name of input
- * @param outputName name of output
- * @return javaDocs of rpc method
- */
- public static String generateJavaDocForRpc(String rpcName, String inputName,
- String outputName) {
-
- String javadoc = getJavaDocStartLine(rpcName, JAVA_DOC_RPC) +
- getJavaDocEmptyAsteriskLine();
- if (!inputName.equals(EMPTY_STRING)) {
- javadoc = javadoc + getInputString(inputName, rpcName);
- }
- if (!outputName.equals(VOID)) {
- javadoc = javadoc + getOutputString(getSmallCase(outputName),
- rpcName);
- }
- return javadoc + getJavaDocEndLine();
- }
-
- /**
- * Returns output string of rpc.
- *
- * @param outputName name of output
- * @param rpcName name of rpc
- * @return javaDocs for output string of rpc
- */
- private static String getOutputString(String outputName, String rpcName) {
- return FOUR_SPACE_INDENTATION + JAVA_DOC_RETURN + outputName + SPACE +
- RPC_OUTPUT_STRING + rpcName + NEW_LINE;
- }
-
- /**
- * Returns input string of rpc.
- *
- * @param inputName name of input
- * @param rpcName name of rpc
- * @return javaDocs for input string of rpc
- */
- private static String getInputString(String inputName, String rpcName) {
- if (inputName.isEmpty()) {
- return null;
- } else {
- return FOUR_SPACE_INDENTATION + JAVA_DOC_PARAM + inputName +
- SPACE + RPC_INPUT_STRING + rpcName + NEW_LINE;
- }
- }
-
- /**
- * Generates javaDoc for the interface.
- *
- * @param interfaceName interface name
- * @return javaDocs
- */
- private static String generateForRpcService(String interfaceName) {
- return getJavaDocForClass(interfaceName, INTERFACE_JAVA_DOC, EMPTY_STRING);
- }
-
- /**
- * Generates javaDoc for the event.
- *
- * @param name event class name
- * @return javaDocs
- */
- private static String generateForEvent(String name) {
- return getJavaDocForClass(name, EVENT_JAVA_DOC, EMPTY_STRING);
- }
-
- /**
- * Generates javaDoc for the event listener.
- *
- * @param name event class name
- * @return javaDocs
- */
- private static String generateForEventListener(String name) {
- return getJavaDocForClass(name, EVENT_LISTENER_JAVA_DOC, EMPTY_STRING);
- }
-
- /**
- * Generates javaDocs for getter method.
- *
- * @param attribute attribute
- * @param isList is list attribute
- * @param compilerAnnotation compiler annotation
- * @return javaDocs
- */
- private static String generateForGetters(String attribute, boolean isList,
- String compilerAnnotation) {
-
- String getter = getJavaDocStartLine(attribute, JAVA_DOC_GETTERS) +
- getJavaDocEmptyAsteriskLine() +
- FOUR_SPACE_INDENTATION + JAVA_DOC_RETURN + attribute + SPACE;
-
- getter = getParamForAnnotation(getter, compilerAnnotation, isList) +
- attribute + NEW_LINE + getJavaDocEndLine();
- return getter;
- }
-
- /**
- * Generates javaDocs for setter method.
- *
- * @param attribute attribute
- * @param isList is list attribute
- * @param compilerAnnotation compiler annotation
- * @return javaDocs
- */
- private static String generateForSetters(String attribute, boolean isList,
- String compilerAnnotation) {
-
- String setter = getJavaDocStartLine(attribute, JAVA_DOC_SETTERS) +
- getJavaDocEmptyAsteriskLine() +
- FOUR_SPACE_INDENTATION + JAVA_DOC_PARAM + attribute + SPACE;
- setter = getParamForAnnotation(setter, compilerAnnotation, isList) +
- attribute + NEW_LINE + getJavaDocReturnLine(attribute)
- + getJavaDocEndLine();
- return setter;
- }
-
- /**
- * Generates javaDocs for setter method.
- *
- * @param attribute attribute
- * @param isList is list attribute
- * @param compilerAnnotation compiler annotation
- * @return javaDocs
- */
- private static String generateForManagerSetters(String attribute, boolean isList,
- String compilerAnnotation) {
- String setter = getJavaDocStartLine(attribute, JAVA_DOC_MANAGER_SETTERS) +
- getJavaDocEmptyAsteriskLine() +
- FOUR_SPACE_INDENTATION + JAVA_DOC_PARAM + attribute + SPACE;
- setter = getParamForAnnotation(setter, compilerAnnotation, isList) +
- attribute + NEW_LINE + getJavaDocEndLine();
- return setter;
- }
-
- private static String getParamForAnnotation(
- String setter, String compilerAnnotation, boolean isList) {
- String attributeParam;
- if (compilerAnnotation != null) {
- compilerAnnotation = compilerAnnotation.toLowerCase();
- compilerAnnotation = getCapitalCase(compilerAnnotation);
- switch (compilerAnnotation) {
- case QUEUE: {
- attributeParam = QUEUE.toLowerCase() + SPACE + OF + SPACE;
- setter = setter + attributeParam;
- break;
- }
- case SET: {
- attributeParam = SET.toLowerCase() + SPACE + OF + SPACE;
- setter = setter + attributeParam;
- break;
- }
- case LIST: {
- attributeParam = LIST.toLowerCase() + SPACE + OF + SPACE;
- setter = setter + attributeParam;
- break;
- }
- case MAP:
- attributeParam = MAP.toLowerCase() + SPACE + OF + SPACE;
- setter = setter + attributeParam;
- break;
- default: {
-
- }
- }
- } else if (isList) {
- attributeParam = LIST.toLowerCase() + SPACE + OF + SPACE;
- setter = setter + attributeParam;
- } else {
- setter = setter + VALUE + SPACE + OF + SPACE;
- }
- return setter;
- }
-
- /**
- * Generates javaDocs for of method.
- *
- * @param attribute attribute
- * @return javaDocs
- */
- private static String generateForOf(String attribute) {
- return getJavaDocStartLine(attribute, JAVA_DOC_OF) +
- getJavaDocEmptyAsteriskLine() +
- getJavaDocParamLine(attribute, VALUE) +
- getJavaDocReturnLine(attribute) +
- getJavaDocEndLine();
- }
-
- /**
- * Generates javaDocs for from method.
- *
- * @param attribute attribute
- * @return javaDocs
- */
- private static String generateForFromString(String attribute) {
- return getJavaDocStartLine(attribute, JAVA_DOC_OF
- + attribute + SPACE + FROM_STRING_METHOD_NAME + SPACE + INPUT +
- SPACE + STRING_DATA_TYPE + SPACE) +
- getJavaDocEmptyAsteriskLine() +
- getJavaDocParamLine(INPUT + SPACE + STRING_DATA_TYPE,
- FROM_STRING_PARAM_NAME) +
- getJavaDocReturnLine(attribute) +
- getJavaDocEndLine();
- }
-
- /**
- * Generates javaDocs for typedef setter method.
- *
- * @param attribute attribute
- * @return javaDocs
- */
- private static String generateForTypeDefSetter(String attribute) {
- return getJavaDocStartLine(attribute, JAVA_DOC_SETTERS_COMMON) +
- getJavaDocEmptyAsteriskLine() +
- getJavaDocParamLine(attribute, VALUE) +
- getJavaDocEndLine();
- }
-
- /**
- * Generates javaDocs for the impl class.
- *
- * @param className class name
- * @param isForDefaultClass if javadoc is for default class
- * @return javaDocs
- */
- private static String generateForClass(String className, boolean isForDefaultClass) {
- return getJavaDocForDefaultClass(className, IMPL_CLASS_JAVA_DOC,
- EMPTY_STRING, isForDefaultClass);
- }
-
- private static String addFlagJavaDoc() {
- return " *\n" +
- " * <p>\n" +
- " * valueLeafFlags identify the leafs whose value are " +
- "explicitly set\n" +
- " * Applicable in protocol edit and query operation.\n" +
- " * </p>\n" +
- " *\n" +
- " * <p>\n" +
- " * selectLeafFlags identify the leafs to be selected, in" +
- " a query operation.\n" +
- " * </p>\n" +
- " *\n" +
- " * <p>\n" +
- " * Operation type specify the node specific operation in" +
- " protocols like NETCONF.\n" +
- " * Applicable in protocol edit operation, not applicable" +
- " in query operation.\n" +
- " * </p>\n";
- }
-
- /**
- * Generates javaDocs for enum.
- *
- * @param className enum class name
- * @return javaDocs
- */
- private static String generateForEnum(String className) {
- return getJavaDocForClass(className, ENUM_CLASS_JAVADOC, EMPTY_STRING);
- }
-
- /**
- * Generates javaDocs for the builder class.
- *
- * @param className class name
- * @return javaDocs
- */
- private static String generateForBuilderClass(String className) {
- return getJavaDocForClass(className, BUILDER_CLASS_JAVA_DOC,
- EMPTY_STRING);
- }
-
- /**
- * Generates javaDocs for the op param class.
- *
- * @param className class name
- * @return javaDocs
- */
- private static String generateForOpParamClass(String className) {
- return getJavaDocForClass(className, OP_PARAM_JAVA_DOC,
- EMPTY_STRING);
- }
-
- /**
- * Generates javaDoc for the interface.
- *
- * @param interfaceName interface name
- * @return javaDocs
- */
- private static String generateForInterface(String interfaceName) {
- return getJavaDocForClass(interfaceName, INTERFACE_JAVA_DOC,
- EMPTY_STRING);
- }
-
- /**
- * Generates javaDoc for the builder interface.
- *
- * @param builderForName builder for name
- * @return javaDocs
- */
- private static String generateForBuilderInterface(String builderForName) {
- return getJavaDocForClass(builderForName, BUILDER_INTERFACE_JAVA_DOC,
- EMPTY_STRING);
- }
-
- /**
- * Generates javaDocs for package-info.
- *
- * @param packageName package name
- * @param isChildNode is it child node
- * @return javaDocs
- */
- private static String generateForPackage(String packageName, boolean isChildNode) {
- if (isChildNode) {
- return getJavaDocForClass(
- packageName + PACKAGE_INFO_JAVADOC_OF_CHILD,
- PACKAGE_INFO_JAVADOC, EMPTY_STRING);
- }
- return getJavaDocForClass(packageName, PACKAGE_INFO_JAVADOC, EMPTY_STRING);
- }
-
- /**
- * Generates javaDocs for default constructor.
- *
- * @param className class name
- * @return javaDocs
- */
- private static String generateForDefaultConstructors(String className) {
- return getJavaDocStartLine(className, JAVA_DOC_CONSTRUCTOR) +
- getJavaDocEndLine();
- }
-
- /**
- * Generates javaDocs for constructor with parameters.
- *
- * @param className class name
- * @return javaDocs
- */
- private static String generateForConstructors(String className) {
- return getJavaDocStartLine(className, JAVA_DOC_CONSTRUCTOR) +
- getJavaDocEmptyAsteriskLine() +
- getJavaDocParamLine(BUILDER_OBJECT + className,
- BUILDER_LOWER_CASE + OBJECT) +
- getJavaDocEndLine();
- }
-
- /**
- * Generates javaDocs for build.
- *
- * @param buildName builder name
- * @return javaDocs
- */
- private static String generateForBuild(String buildName) {
- return getJavaDocStartLine(buildName, JAVA_DOC_BUILD) +
- getJavaDocEmptyAsteriskLine() +
- getJavaDocReturnLine(buildName) +
- getJavaDocEndLine();
- }
-
- /**
- * Generates javaDocs for type constructor.
- *
- * @param attribute attribute string
- * @return javaDocs for type constructor
- */
- private static String generateForTypeConstructor(String attribute) {
- return getJavaDocStartLine(attribute,
- JAVA_DOC_CONSTRUCTOR) +
- getJavaDocEmptyAsteriskLine() +
- getJavaDocParamLine(attribute, attribute) +
- getJavaDocEndLine();
- }
-
- /**
- * Generates javaDocs for add augmentation method.
- *
- * @param name builder class name
- * @return javaDocs
- */
- public static String generateForAddAugmentation(String name) {
- return getJavaDocStartLine(YANG_AUGMENTED_INFO_LOWER_CASE,
- JAVA_DOC_SETTERS_COMMON) +
- getJavaDocEmptyAsteriskLine() +
- getJavaDocParamLine(YANG_AUGMENTED_INFO_LOWER_CASE, VALUE) +
- getJavaDocParamLine(YANG_AUGMENTED_INFO_LOWER_CASE, CLASS +
- OBJECT_STRING) +
- getJavaDocReturnLine(name) + getJavaDocEndLine();
- }
-
- /**
- * Returns javadoc for get augmentation method.
- *
- * @return javadoc for get augmentation method
- */
- public static String generateForGetAugmentation() {
- return NEW_LINE + getJavaDocStartLine(YANG_AUGMENTED_INFO_LOWER_CASE,
- JAVA_DOC_GETTERS) +
- getJavaDocEmptyAsteriskLine() +
- getJavaDocParamLine(YANG_AUGMENTED_INFO_LOWER_CASE, CLASS +
- OBJECT_STRING) +
- getJavaDocReturnLine(YANG_AUGMENTED_INFO) +
- getJavaDocEndLine();
- }
-
- /**
- * Returns javadoc for validator method.
- *
- * @return javadoc for validator method
- */
- public static String generateForValidatorMethod() {
- return getJavaDocStartLine(VALIDATE_RANGE, JAVA_DOC_FOR_VALIDATOR) +
- getJavaDocEmptyAsteriskLine() +
- getJavaDocParamLine(MIN_RANGE, MIN_RANGE) +
- getJavaDocParamLine(MAX_RANGE, MIN_RANGE) +
- getJavaDocReturnLine(JAVA_DOC_FOR_VALIDATOR_RETURN) +
- getJavaDocEndLine();
- }
-
- /**
- * Generates javaDocs for type constructor.
- *
- * @param attribute attribute string
- * @return javaDocs for type constructor
- */
- public static String generateForGetMethodWithAttribute(String attribute) {
- attribute = getSmallCase(attribute);
- return getJavaDocStartLine(attribute, JAVA_DOC_GETTERS) +
- getJavaDocEmptyAsteriskLine() +
- getJavaDocParamLine(attribute, attribute) +
- getJavaDocReturnLine(attribute) +
- getJavaDocEndLine();
- }
-
- /**
- * Returns javaDocs for add to list method.
- *
- * @param attribute attribute
- * @param annotation compile annotation
- * @return javaDocs
- */
- private static String generateForAddToList(String attribute, String annotation) {
- StringBuilder javadoc = new StringBuilder();
- javadoc.append(getJavaDocStartLine(attribute, JAVA_DOC_ADD_TO_LIST))
- .append(getJavaDocEmptyAsteriskLine());
- if (annotation != null) {
- annotation = annotation.toLowerCase();
- annotation = getCapitalCase(annotation);
- switch (annotation) {
- case MAP:
- javadoc.append(getJavaDocParamLine(
- attribute, attribute + KEYS)).append(getJavaDocParamLine(
- attribute, attribute + VALUE_CAPS));
- break;
- default:
- javadoc.append(getJavaDocParamLine(
- attribute, ADD_STRING + TO_CAPS));
- break;
- }
- }
- javadoc.append(getJavaDocParamLine(
- attribute, ADD_STRING + TO_CAPS))
- .append(getJavaDocReturnLine(BUILDER_OBJECT + attribute))
- .append(getJavaDocEndLine());
- return javadoc.toString();
- }
-
- /**
- * Generates for builder method.
- *
- * @param attribute attribute
- * @return javaDocs
- */
- public static String generateForBuilderMethod(String attribute) {
- return getJavaDocStartLine(attribute + BUILDER, JAVA_DOC_GETTERS) +
- getJavaDocEmptyAsteriskLine() +
- getJavaDocReturnLine(attribute + BUILDER) +
- getJavaDocEndLine();
- }
-
- /**
- * Returns class javadoc.
- *
- * @param name name of class
- * @param type type of javadoc
- * @param indent indentation
- * @return class javadoc
- */
- private static String getJavaDocForClass(String name, String type,
- String indent) {
- return NEW_LINE + indent + JAVA_DOC_FIRST_LINE + indent + type +
- getSmallCase(name) + PERIOD + NEW_LINE + indent + JAVA_DOC_END_LINE;
- }
-
- /**
- * Returns class javadoc.
- *
- * @param name name of class
- * @param type type of javadoc
- * @param indent indentation
- * @param isForDefaultClass if javadoc is generated for default class
- * @return class javadoc
- */
- private static String getJavaDocForDefaultClass(String name, String type,
- String indent, boolean isForDefaultClass) {
- String append = addFlagJavaDoc();
- if (!isForDefaultClass) {
- append = EMPTY_STRING;
- }
- return NEW_LINE + indent + JAVA_DOC_FIRST_LINE + indent + type +
- getSmallCase(name) + PERIOD + NEW_LINE + indent + append +
- JAVA_DOC_END_LINE;
- }
-
- /**
- * Returns javadoc start line.
- *
- * @param name name of attribute
- * @param javaDoc type of javadoc
- * @return javadoc start line
- */
- private static String getJavaDocStartLine(String name, String javaDoc) {
- return FOUR_SPACE_INDENTATION + JAVA_DOC_FIRST_LINE +
- FOUR_SPACE_INDENTATION + javaDoc + getSmallCase(name) +
- PERIOD + NEW_LINE;
- }
-
- /**
- * Returns asterisk line.
- *
- * @return asterisk line
- */
- private static String getJavaDocEmptyAsteriskLine() {
- return FOUR_SPACE_INDENTATION + NEW_LINE_ASTERISK;
- }
-
- /**
- * Returns javadoc param line.
- *
- * @param name name of attribute
- * @return javadoc param line
- */
- private static String getJavaDocParamLine(String name, String paraName) {
- return FOUR_SPACE_INDENTATION + JAVA_DOC_PARAM +
- getSmallCase(paraName) + SPACE + VALUE + SPACE + OF + SPACE +
- getSmallCase(name) + NEW_LINE;
- }
-
- /**
- * Returns javadoc return line.
- *
- * @param name name of attribute
- * @return javadoc return line
- */
- private static String getJavaDocReturnLine(String name) {
- return FOUR_SPACE_INDENTATION + JAVA_DOC_RETURN + getSmallCase(name)
- + NEW_LINE;
- }
-
- /**
- * Returns javadoc end line.
- *
- * @return javadoc end line
- */
- private static String getJavaDocEndLine() {
- return FOUR_SPACE_INDENTATION + JAVA_DOC_END_LINE;
- }
-
-
- /**
- * JavaDocs types.
- */
- public enum JavaDocType {
-
- /**
- * For class.
- */
- DEFAULT_CLASS,
-
- /**
- * For builder class.
- */
- BUILDER_CLASS,
-
- /**
- * For interface.
- */
- INTERFACE,
-
- /**
- * For builder interface.
- */
- BUILDER_INTERFACE,
-
- /**
- * For package-info.
- */
- PACKAGE_INFO,
-
- /**
- * For getters.
- */
- GETTER_METHOD,
-
- /**
- * For rpc service.
- */
- RPC_INTERFACE,
-
- /**
- * For rpc manager.
- */
- RPC_MANAGER,
-
- /**
- * For event.
- */
- EVENT,
-
- /**
- * For event listener.
- */
- EVENT_LISTENER,
-
- /**
- * For setters.
- */
- SETTER_METHOD,
-
- /**
- * For type def's setters.
- */
- TYPE_DEF_SETTER_METHOD,
-
- /**
- * For of method.
- */
- OF_METHOD,
-
- /**
- * For default constructor.
- */
- DEFAULT_CONSTRUCTOR,
-
- /**
- * For constructor.
- */
- CONSTRUCTOR,
-
- /**
- * For from method.
- */
- FROM_METHOD,
-
- /**
- * For type constructor.
- */
- TYPE_CONSTRUCTOR,
-
- /**
- * For build.
- */
- BUILD_METHOD,
-
- /**
- * For enum.
- */
- ENUM_CLASS,
-
- /**
- * For enum's attributes.
- */
- ENUM_ATTRIBUTE,
-
- /**
- * For manager setters.
- */
- MANAGER_SETTER_METHOD,
-
- /**
- * For event subject.
- */
- EVENT_SUBJECT_CLASS,
-
- /**
- * For operation.
- */
- OPERATION_CLASS,
-
- /**
- * For operation builder.
- */
- OPERATION_BUILDER_CLASS,
-
- /**
- * For add to list.
- */
- ADD_TO_LIST,
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/utils/io/impl/YangFileScanner.java b/generator/src/main/java/org/onosproject/yangutils/utils/io/impl/YangFileScanner.java
deleted file mode 100644
index 9c994a8..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/utils/io/impl/YangFileScanner.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.utils.io.impl;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Stack;
-
-/**
- * Represents utility for searching the files in a directory.
- */
-public final class YangFileScanner {
-
- private static final String JAVA_FILE_EXTENSION = ".java";
- private static final String YANG_FILE_EXTENSION = ".yang";
-
- /**
- * Creates an instance of YANG file scanner.
- */
- private YangFileScanner() {
- }
-
- /**
- * Returns the list of java files.
- *
- * @param root specified directory
- * @return list of java files
- * @throws NullPointerException when no files are there.
- * @throws IOException when files get deleted while performing the
- * operations
- */
- public static List<String> getJavaFiles(String root) throws IOException {
- return getFiles(root, JAVA_FILE_EXTENSION);
- }
-
- /**
- * Returns the list of YANG file.
- *
- * @param root specified directory
- * @return list of YANG file information
- * @throws NullPointerException when no files are there
- * @throws IOException when files get deleted while performing the
- * operations
- */
- public static List<String> getYangFiles(String root) throws IOException {
- return getFiles(root, YANG_FILE_EXTENSION);
- }
-
- /**
- * Returns the list of required files.
- *
- * @param root specified directory
- * @param extension file extension
- * @return list of required files
- * @throws NullPointerException when no file is there
- * @throws IOException when files get deleted while performing the operations
- */
- private static List<String> getFiles(String root, String extension) throws IOException {
-
- List<String> store = new LinkedList<>();
- Stack<String> stack = new Stack<>();
- stack.push(root);
- File file;
- File[] fileList;
- try {
- while (!stack.empty()) {
- root = stack.pop();
- file = new File(root);
- fileList = file.listFiles();
- if ((fileList == null) || (fileList.length == 0)) {
- continue;
- }
- for (File current : fileList) {
- if (current.isDirectory()) {
- stack.push(current.toString());
- } else {
- String yangFile = current.getCanonicalPath();
- if (yangFile.endsWith(extension)) {
- store.add(yangFile);
- }
- }
- }
- }
- return store;
- } catch (IOException e) {
- throw new IOException("No File found of " + extension + " extension in " + root + " directory.");
- }
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/utils/io/impl/YangIoUtils.java b/generator/src/main/java/org/onosproject/yangutils/utils/io/impl/YangIoUtils.java
deleted file mode 100644
index 15051cb..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/utils/io/impl/YangIoUtils.java
+++ /dev/null
@@ -1,901 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.utils.io.impl;
-
-import org.apache.commons.io.FileUtils;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.utils.io.YangToJavaNamingConflictUtil;
-
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Stack;
-import java.util.regex.Pattern;
-
-import static java.lang.Integer.parseInt;
-import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
-import static org.onosproject.yangutils.utils.UtilConstants.COLON;
-import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
-import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.HYPHEN;
-import static org.onosproject.yangutils.utils.UtilConstants.JAVA_KEY_WORDS;
-import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
-import static org.onosproject.yangutils.utils.UtilConstants.ONE;
-import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
-import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
-import static org.onosproject.yangutils.utils.UtilConstants.ORG;
-import static org.onosproject.yangutils.utils.UtilConstants.PACKAGE;
-import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
-import static org.onosproject.yangutils.utils.UtilConstants.REGEX_FOR_DIGITS_WITH_SINGLE_LETTER;
-import static org.onosproject.yangutils.utils.UtilConstants.REGEX_FOR_FIRST_DIGIT;
-import static org.onosproject.yangutils.utils.UtilConstants.REGEX_FOR_HYPHEN;
-import static org.onosproject.yangutils.utils.UtilConstants.REGEX_FOR_IDENTIFIER_SPECIAL_CHAR;
-import static org.onosproject.yangutils.utils.UtilConstants.REGEX_FOR_PERIOD;
-import static org.onosproject.yangutils.utils.UtilConstants.REGEX_FOR_SINGLE_LETTER;
-import static org.onosproject.yangutils.utils.UtilConstants.REGEX_FOR_UNDERSCORE;
-import static org.onosproject.yangutils.utils.UtilConstants.REGEX_WITH_ALL_SPECIAL_CHAR;
-import static org.onosproject.yangutils.utils.UtilConstants.REGEX_WITH_DIGITS;
-import static org.onosproject.yangutils.utils.UtilConstants.REGEX_WITH_SINGLE_CAPITAL_CASE;
-import static org.onosproject.yangutils.utils.UtilConstants.REGEX_WITH_SINGLE_CAPITAL_CASE_AND_DIGITS_SMALL_CASES;
-import static org.onosproject.yangutils.utils.UtilConstants.REGEX_WITH_UPPERCASE;
-import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
-import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
-import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
-import static org.onosproject.yangutils.utils.UtilConstants.TEMP;
-import static org.onosproject.yangutils.utils.UtilConstants.TWELVE_SPACE_INDENTATION;
-import static org.onosproject.yangutils.utils.UtilConstants.UNDER_SCORE;
-import static org.onosproject.yangutils.utils.UtilConstants.UNUSED;
-import static org.onosproject.yangutils.utils.UtilConstants.YANG_AUTO_PREFIX;
-import static org.onosproject.yangutils.utils.io.impl.CopyrightHeader.parseCopyrightHeader;
-import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.appendFileContents;
-import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.updateFileHandle;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.PACKAGE_INFO;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
-
-/**
- * Represents common utility functionalities for code generation.
- */
-public final class YangIoUtils {
-
- private static final int LINE_SIZE = 118;
- private static final int SUB_LINE_SIZE = 116;
- private static final int SUB_SIZE = 60;
-
- /**
- * Creates an instance of YANG io utils.
- */
- private YangIoUtils() {
- }
-
- /**
- * Creates the directory structure.
- *
- * @param path directory path
- * @return directory structure
- * @throws IOException when fails to do IO operations
- */
- public static File createDirectories(String path)
- throws IOException {
- File generatedDir = new File(path);
- if (!generatedDir.exists()) {
- boolean isGenerated = generatedDir.mkdirs();
- if (!isGenerated) {
- throw new IOException("failed to generated directory " + path);
- }
- }
- return generatedDir;
- }
-
- /**
- * Adds package info file for the created directory.
- *
- * @param path directory path
- * @param classInfo class info for the package
- * @param pack package of the directory
- * @param isChildNode is it a child node
- * @throws IOException when fails to create package info file
- */
- public static void addPackageInfo(File path, String classInfo, String pack,
- boolean isChildNode) throws IOException {
-
- pack = parsePkg(pack);
- try {
-
- File packageInfo = new File(path + SLASH + "package-info.java");
- if (!packageInfo.exists()) {
- boolean isGenerated = packageInfo.createNewFile();
- if (!isGenerated) {
- throw new IOException("failed to generated package-info " +
- path);
- }
- }
- FileWriter fileWriter = new FileWriter(packageInfo);
- BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
-
- bufferedWriter.write(parseCopyrightHeader());
- //TODO: get the compiler annotations and pass the info
- bufferedWriter.write(getJavaDoc(PACKAGE_INFO, classInfo, isChildNode,
- null));
- String pkg = PACKAGE + SPACE + pack + SEMI_COLON;
- if (pkg.length() >= LINE_SIZE) {
- pkg = processModifications(pkg, LINE_SIZE);
- }
- bufferedWriter.write(pkg);
- bufferedWriter.close();
- fileWriter.close();
- } catch (IOException e) {
- throw new IOException("Exception occurred while creating package info" +
- " file.");
- }
- }
-
- /**
- * Parses package and returns updated package.
- *
- * @param pack package needs to be updated
- * @return updated package
- */
- public static String parsePkg(String pack) {
-
- if (pack.contains(ORG)) {
- String[] strArray = pack.split(ORG);
- if (strArray.length >= 3) {
- for (int i = 1; i < strArray.length; i++) {
- if (i == 1) {
- pack = ORG + strArray[1];
- } else {
- pack = pack + ORG + strArray[i];
- }
- }
- } else {
- pack = ORG + strArray[1];
- }
- }
-
- return pack;
- }
-
- /**
- * Cleans the generated directory if already exist in source folder.
- *
- * @param dir generated directory in previous build
- * @throws IOException when failed to delete directory
- */
- public static void deleteDirectory(String dir)
- throws IOException {
- File generatedDirectory = new File(dir);
- if (generatedDirectory.exists()) {
- try {
- FileUtils.deleteDirectory(generatedDirectory);
- } catch (IOException e) {
- throw new IOException(
- "Failed to delete the generated files in " +
- generatedDirectory + " directory");
- }
- }
- }
-
- /**
- * Searches and deletes generated temporary directories.
- *
- * @param root root directory
- * @throws IOException when fails to do IO operations.
- */
- public static void searchAndDeleteTempDir(String root)
- throws IOException {
- List<File> store = new LinkedList<>();
- Stack<String> stack = new Stack<>();
- stack.push(root);
-
- while (!stack.empty()) {
- root = stack.pop();
- File file = new File(root);
- File[] fileList = file.listFiles();
- if (fileList == null || fileList.length == 0) {
- continue;
- }
- for (File current : fileList) {
- if (current.isDirectory()) {
- stack.push(current.toString());
- if (current.getName().endsWith(HYPHEN + TEMP)) {
- store.add(current);
- }
- }
- }
- }
-
- for (File dir : store) {
- FileUtils.deleteDirectory(dir);
- }
- }
-
- /**
- * Removes extra char from the string.
- *
- * @param valueString string to be trimmed
- * @param removalString extra chars
- * @return new string
- */
- public static String trimAtLast(String valueString, String...
- removalString) {
- StringBuilder stringBuilder = new StringBuilder(valueString);
- String midString;
- int index;
- for (String remove : removalString) {
- midString = stringBuilder.toString();
- index = midString.lastIndexOf(remove);
- if (index != -1) {
- stringBuilder.deleteCharAt(index);
- }
- }
- return stringBuilder.toString();
- }
-
- /**
- * Replaces the last occurrence of a string with a given string.
- *
- * @param valueString string under operation
- * @param removalString string to be replaced
- * @param replacingString string with which replacement is to be done
- * @return new string
- */
- public static String replaceLast(String valueString, String removalString,
- String replacingString) {
- StringBuilder stringBuilder = new StringBuilder(valueString);
- int index = valueString.lastIndexOf(removalString);
- if (index != -1) {
- stringBuilder.replace(index, index + 1, replacingString);
- } else {
- stringBuilder.append(NEW_LINE + EIGHT_SPACE_INDENTATION + UNUSED +
- OPEN_PARENTHESIS + ONE +
- CLOSE_PARENTHESIS + SEMI_COLON);
- }
- return stringBuilder.toString();
-
- // TODO remove generation of ENUM if there is no leaf node.
- }
-
-
- /**
- * Returns the directory path of the package in canonical form.
- *
- * @param baseCodeGenPath base path where the generated files needs to be
- * put
- * @param pathOfJavaPkg java package of the file being generated
- * @return absolute path of the package in canonical form
- */
- public static String getDirectory(String baseCodeGenPath, String pathOfJavaPkg) {
-
- if (pathOfJavaPkg.charAt(pathOfJavaPkg.length() - 1) == File.separatorChar) {
- pathOfJavaPkg = trimAtLast(pathOfJavaPkg, SLASH);
- }
- String[] strArray = pathOfJavaPkg.split(SLASH);
- if (strArray[0].equals(EMPTY_STRING)) {
- return pathOfJavaPkg;
- } else {
- return baseCodeGenPath + SLASH + pathOfJavaPkg;
- }
- }
-
- /**
- * Returns the absolute path of the package in canonical form.
- *
- * @param baseCodeGenPath base path where the generated files needs to be
- * put
- * @param pathOfJavaPkg java package of the file being generated
- * @return absolute path of the package in canonical form
- */
- public static String getAbsolutePackagePath(String baseCodeGenPath,
- String pathOfJavaPkg) {
- return baseCodeGenPath + pathOfJavaPkg;
- }
-
- /**
- * Merges the temp java files to main java files.
- *
- * @param appendFile temp file
- * @param srcFile main file
- * @throws IOException when fails to append contents
- */
- public static void mergeJavaFiles(File appendFile, File srcFile)
- throws IOException {
- try {
- appendFileContents(appendFile, srcFile);
- } catch (IOException e) {
- throw new IOException("Failed to merge " + appendFile + " in " +
- srcFile);
- }
- }
-
- /**
- * Inserts data in the generated file.
- *
- * @param file file in which need to be inserted
- * @param data data which need to be inserted
- * @throws IOException when fails to insert into file
- */
- public static void insertDataIntoJavaFile(File file, String data)
- throws IOException {
- try {
- updateFileHandle(file, data, false);
- } catch (IOException e) {
- throw new IOException("Failed to insert in " + file + "file");
- }
- }
-
- /**
- * Validates a line size in given file whether it is having more then 120 characters.
- * If yes it will update and give a new file.
- *
- * @param dataFile file in which need to verify all lines.
- * @return updated file
- * @throws IOException when fails to do IO operations.
- */
- public static File validateLineLength(File dataFile)
- throws IOException {
- FileReader fileReader = new FileReader(dataFile);
- BufferedReader bufferReader = new BufferedReader(fileReader);
- try {
- StringBuilder stringBuilder = new StringBuilder();
- String line = bufferReader.readLine();
-
- while (line != null) {
- if (line.length() >= LINE_SIZE) {
- line = processModifications(line, LINE_SIZE);
- }
- stringBuilder.append(line);
- stringBuilder.append(NEW_LINE);
- line = bufferReader.readLine();
- }
- FileWriter writer = new FileWriter(dataFile);
- writer.write(stringBuilder.toString());
- writer.close();
- return dataFile;
- } finally {
- fileReader.close();
- bufferReader.close();
- }
- }
-
- /**
- * Resolves validation of line length by modifying the string.
- *
- * @param line current line string
- * @param lineSize line size for change
- * @return modified line string
- */
- private static String processModifications(String line, int lineSize) {
- int period = getArrayLength(line, PERIOD);
- int space = getArrayLength(line, SPACE);
- if (period > space) {
- return merge(getForPeriod(line), PERIOD, lineSize);
- }
- return merge(getForSpace(line), SPACE, lineSize);
- }
-
- /**
- * Returns count of pattern in line.
- *
- * @param line line string
- * @param pattern pattern followed in line
- * @return count of pattern in line
- */
- private static int getArrayLength(String line, String pattern) {
- String[] array = line.split(Pattern.quote(pattern));
- int len = array.length;
- if (pattern.equals(SPACE)) {
- for (String str : array) {
- if (str.equals(EMPTY_STRING)) {
- len--;
- }
- }
- }
- return len - 1;
- }
-
- /**
- * Returns array list of string in case of period.
- *
- * @param line line string
- * @return array list of string in case of period
- */
- private static ArrayList<String> getForPeriod(String line) {
- String[] array = line.split(Pattern.quote(PERIOD));
- return getSplitArray(array, PERIOD);
- }
-
- /**
- * Returns array list of string in case of space.
- *
- * @param line line string
- * @return array list of string in case of space
- */
- private static ArrayList<String> getForSpace(String line) {
- String[] array = line.split(SPACE);
- return getSplitArray(array, SPACE);
- }
-
- /**
- * Merges strings to form a new string.
- *
- * @param list list of strings
- * @param pattern pattern
- * @param lineSize line size
- * @return merged string
- */
- private static String merge(ArrayList<String> list, String pattern, int lineSize) {
- StringBuilder builder = new StringBuilder();
- StringBuilder fine = new StringBuilder();
- String append;
- String pre;
- String present = EMPTY_STRING;
- //Add one blank string in list to handle border limit cases.
- list.add(EMPTY_STRING);
- Iterator<String> listIt = list.iterator();
- ArrayList<String> arrayList = new ArrayList<>();
- int length;
- StringBuilder spaces = new StringBuilder();
- while (listIt.hasNext()) {
- pre = present;
- present = listIt.next();
- //check is present string is more than 80 char.
- if (present.length() > SUB_SIZE) {
- int period = getArrayLength(present, PERIOD);
- int space = getArrayLength(present, SPACE);
- if (period > space) {
- // in such case present string should be resolved.
- present = processModifications(present, SUB_SIZE);
- builder.append(present);
- }
- }
- length = builder.length();
- //If length of builder is less than the given length then append
- // it to builder.
- if (length <= lineSize) {
- //fill the space builder to provide proper indentation.
- if (present.equals(EMPTY_STRING)) {
- spaces.append(SPACE);
- }
- //append to builder
- builder.append(present);
- builder.append(pattern);
- fine.append(pre);
- //do not append pattern in case of empty strings.
- if (!pre.equals(EMPTY_STRING)) {
- fine.append(pattern);
- }
- } else {
- // now the length is more than given size so trim the pattern
- // for the string and add it to list,
- fine = getReplacedString(fine, pattern);
- arrayList.add(fine.toString());
- // clear all.
- builder.delete(0, length);
- fine.delete(0, fine.length());
- // append indentation
- if (pattern.contains(PERIOD)) {
- append = NEW_LINE + spaces +
- TWELVE_SPACE_INDENTATION +
- PERIOD;
- } else {
- append = NEW_LINE + spaces + TWELVE_SPACE_INDENTATION;
- }
- // builder needs to move one step forward to fine builder so
- // append present and pre strings to builder with pattern.
- builder.append(append);
- builder.append(pre);
- builder.append(pattern);
- builder.append(present);
- builder.append(pattern);
- fine.append(append);
- fine.append(pre);
- if (!pre.equals(EMPTY_STRING)) {
- fine.append(pattern);
- }
- }
- }
-
- builder = getReplacedString(builder, pattern);
-
- //need to remove extra string added from the builder.
- if (builder.toString().lastIndexOf(pattern) == builder.length() - 1) {
- builder = getReplacedString(builder, pattern);
- }
- arrayList.add(builder.toString());
- fine.delete(0, fine.length());
- for (String str : arrayList) {
- fine.append(str);
- }
- //No need to append extra spaces.
- if (pattern.equals(PERIOD)) {
- return fine.toString();
- }
- return spaces + fine.toString();
- }
-
- /**
- * Trims extra pattern strings for builder string.
- *
- * @param builder builder
- * @param pattern pattern
- * @return modified string
- */
- private static StringBuilder getReplacedString(StringBuilder builder, String
- pattern) {
- String temp = builder.toString();
- temp = trimAtLast(temp, pattern);
- int length = builder.length();
- builder.delete(0, length);
- builder.append(temp);
- return builder;
- }
-
- /**
- * Creates array list to process line string modification.
- *
- * @param array array of strings
- * @param pattern pattern
- * @return list to process line string modification
- */
- private static ArrayList<String> getSplitArray(String[] array, String pattern) {
- ArrayList<String> newArray = new ArrayList<>();
- int count = 0;
- String temp;
- for (String str : array) {
- if (!str.contains(OPEN_CURLY_BRACKET)) {
- if (str.length() >= SUB_LINE_SIZE) {
- count = getSplitString(str, newArray, count);
- } else {
- newArray.add(str);
- count++;
- }
- } else {
- if (newArray.isEmpty()) {
- newArray.add(str);
- } else {
- temp = newArray.get(count - 1);
- newArray.remove(count - 1);
- newArray.add(count - 1, temp + pattern + str);
- }
- }
- }
-
- return newArray;
- }
-
- private static int getSplitString(String str,
- ArrayList<String> newArray, int count) {
- String[] array = str.split(SPACE);
- for (String st : array) {
- newArray.add(st + SPACE);
- count++;
- }
- return count;
- }
-
- /**
- * Returns the java Package from package path.
- *
- * @param packagePath package path
- * @return java package
- */
- public static String getJavaPackageFromPackagePath(String packagePath) {
- return packagePath.replace(SLASH, PERIOD);
- }
-
- /**
- * Returns the directory path corresponding to java package.
- *
- * @param packagePath package path
- * @return java package
- */
- public static String getPackageDirPathFromJavaJPackage(String packagePath) {
- return packagePath.replace(PERIOD, SLASH);
- }
-
- /**
- * Returns the YANG identifier name as java identifier with first letter
- * in small.
- *
- * @param yangIdentifier identifier in YANG file.
- * @return corresponding java identifier
- */
- public static String getSmallCase(String yangIdentifier) {
- return yangIdentifier.substring(0, 1).toLowerCase() + yangIdentifier.substring(1);
- }
-
- /**
- * Returns the YANG identifier name as java identifier with first letter
- * in capital.
- *
- * @param yangIdentifier identifier in YANG file
- * @return corresponding java identifier
- */
- public static String getCapitalCase(String yangIdentifier) {
- yangIdentifier = yangIdentifier.substring(0, 1).toUpperCase() + yangIdentifier.substring(1);
- return restrictConsecutiveCapitalCase(yangIdentifier);
- }
-
- /**
- * Restricts consecutive capital cased string as a rule in camel case.
- *
- * @param consecCapitalCaseRemover which requires the restriction of consecutive capital case
- * @return string without consecutive capital case
- */
- private static String restrictConsecutiveCapitalCase(String consecCapitalCaseRemover) {
-
- for (int k = 0; k < consecCapitalCaseRemover.length(); k++) {
- if (k + 1 < consecCapitalCaseRemover.length()) {
- if (Character.isUpperCase(consecCapitalCaseRemover.charAt(k))) {
- if (Character.isUpperCase(consecCapitalCaseRemover.charAt(k + 1))) {
- consecCapitalCaseRemover = consecCapitalCaseRemover.substring(0, k + 1)
- + consecCapitalCaseRemover.substring(k + 1, k + 2).toLowerCase()
- + consecCapitalCaseRemover.substring(k + 2);
- }
- }
- }
- }
- return consecCapitalCaseRemover;
- }
-
- /**
- * Adds prefix, if the string begins with digit or is a java key word.
- *
- * @param camelCasePrefix string for adding prefix
- * @param conflictResolver object of YANG to java naming conflict util
- * @return prefixed camel case string
- */
- private static String addPrefix(String camelCasePrefix, YangToJavaNamingConflictUtil conflictResolver) {
-
- String prefix = getPrefixForIdentifier(conflictResolver);
- if (camelCasePrefix.matches(REGEX_FOR_FIRST_DIGIT)) {
- camelCasePrefix = prefix + camelCasePrefix;
- }
- if (JAVA_KEY_WORDS.contains(camelCasePrefix)) {
- camelCasePrefix = prefix + camelCasePrefix.substring(0, 1).toUpperCase()
- + camelCasePrefix.substring(1);
- }
- return camelCasePrefix;
- }
-
- /**
- * Applies the rule that a string does not end with a capitalized letter and capitalizes
- * the letter next to a number in an array.
- *
- * @param stringArray containing strings for camel case separation
- * @param conflictResolver object of YANG to java naming conflict util
- * @return camel case rule checked string
- */
- private static String applyCamelCaseRule(String[] stringArray,
- YangToJavaNamingConflictUtil conflictResolver) {
-
- String ruleChecker = stringArray[0].toLowerCase();
- int i;
- if (ruleChecker.matches(REGEX_FOR_FIRST_DIGIT)) {
- i = 0;
- ruleChecker = EMPTY_STRING;
- } else {
- i = 1;
- }
- for (; i < stringArray.length; i++) {
- if (i + 1 == stringArray.length) {
- if (stringArray[i].matches(REGEX_FOR_SINGLE_LETTER)
- || stringArray[i].matches(REGEX_FOR_DIGITS_WITH_SINGLE_LETTER)) {
- ruleChecker = ruleChecker + stringArray[i].toLowerCase();
- break;
- }
- }
- if (stringArray[i].matches(REGEX_FOR_FIRST_DIGIT)) {
- for (int j = 0; j < stringArray[i].length(); j++) {
- char letterCheck = stringArray[i].charAt(j);
- if (Character.isLetter(letterCheck)) {
- stringArray[i] = stringArray[i].substring(0, j)
- + stringArray[i].substring(j, j + 1).toUpperCase() + stringArray[i].substring(j + 1);
- break;
- }
- }
- ruleChecker = ruleChecker + stringArray[i];
- } else {
- ruleChecker = ruleChecker + stringArray[i].substring(0, 1).toUpperCase() + stringArray[i].substring(1);
- }
- }
- String ruleCheckerWithPrefix = addPrefix(ruleChecker, conflictResolver);
- return restrictConsecutiveCapitalCase(ruleCheckerWithPrefix);
- }
-
- /**
- * Resolves the conflict when input has upper case.
- *
- * @param stringArray containing strings for upper case conflict resolver
- * @param conflictResolver object of YANG to java naming conflict util
- * @return camel cased string
- */
- private static String upperCaseConflictResolver(String[] stringArray,
- YangToJavaNamingConflictUtil conflictResolver) {
-
- for (int l = 0; l < stringArray.length; l++) {
- String[] upperCaseSplitArray = stringArray[l].split(REGEX_WITH_UPPERCASE);
- for (int m = 0; m < upperCaseSplitArray.length; m++) {
- if (upperCaseSplitArray[m].matches(REGEX_WITH_SINGLE_CAPITAL_CASE)) {
- int check = m;
- while (check + 1 < upperCaseSplitArray.length) {
- if (upperCaseSplitArray[check + 1].matches(REGEX_WITH_SINGLE_CAPITAL_CASE)) {
- upperCaseSplitArray[check + 1] = upperCaseSplitArray[check + 1].toLowerCase();
- check = check + 1;
- } else if (upperCaseSplitArray[check + 1]
- .matches(REGEX_WITH_SINGLE_CAPITAL_CASE_AND_DIGITS_SMALL_CASES)) {
- upperCaseSplitArray[check + 1] = upperCaseSplitArray[check + 1].toLowerCase();
- break;
- } else {
- break;
- }
- }
- }
- }
- StringBuilder strBuilder = new StringBuilder();
- for (String element : upperCaseSplitArray) {
- strBuilder.append(element);
- }
- stringArray[l] = strBuilder.toString();
- }
- List<String> result = new ArrayList<>();
- for (String element : stringArray) {
- String[] capitalCaseSplitArray = element.split(REGEX_WITH_UPPERCASE);
- for (String letter : capitalCaseSplitArray) {
- String[] arrayForAddition = letter.split(REGEX_WITH_DIGITS);
- List<String> list = Arrays.asList(arrayForAddition);
- for (String str : list) {
- if (str != null && !str.isEmpty()) {
- result.add(str);
- }
- }
- }
- }
- stringArray = result.toArray(new String[result.size()]);
- return applyCamelCaseRule(stringArray, conflictResolver);
- }
-
- /**
- * Returns the YANG identifier name as java identifier.
- *
- * @param yangIdentifier identifier in YANG file
- * @param conflictResolver object of YANG to java naming conflict util
- * @return corresponding java identifier
- */
- public static String getCamelCase(String yangIdentifier, YangToJavaNamingConflictUtil conflictResolver) {
-
- if (conflictResolver != null) {
- String replacementForHyphen = conflictResolver.getReplacementForHyphen();
- String replacementForPeriod = conflictResolver.getReplacementForPeriod();
- String replacementForUnderscore = conflictResolver.getReplacementForUnderscore();
- if (replacementForPeriod != null) {
- yangIdentifier = yangIdentifier.replaceAll(REGEX_FOR_PERIOD,
- PERIOD + replacementForPeriod.toLowerCase() + PERIOD);
- }
- if (replacementForUnderscore != null) {
- yangIdentifier = yangIdentifier.replaceAll(REGEX_FOR_UNDERSCORE,
- UNDER_SCORE + replacementForUnderscore.toLowerCase() +
- UNDER_SCORE);
- }
- if (replacementForHyphen != null) {
- yangIdentifier = yangIdentifier.replaceAll(REGEX_FOR_HYPHEN,
- HYPHEN + replacementForHyphen.toLowerCase() + HYPHEN);
- }
- }
- yangIdentifier = yangIdentifier.replaceAll(REGEX_FOR_IDENTIFIER_SPECIAL_CHAR, COLON);
- String[] strArray = yangIdentifier.split(COLON);
- if (strArray[0].isEmpty()) {
- List<String> stringArrangement = new ArrayList<>();
- stringArrangement.addAll(Arrays.asList(strArray).subList(1, strArray.length));
- strArray = stringArrangement.toArray(new String[stringArrangement.size()]);
- }
- return upperCaseConflictResolver(strArray, conflictResolver);
- }
-
- /**
- * Prefix for adding with identifier and namespace, when it is a java keyword or starting with digits.
- *
- * @param conflictResolver object of YANG to java naming conflict util
- * @return prefix which needs to be added
- */
- public static String getPrefixForIdentifier(YangToJavaNamingConflictUtil conflictResolver) {
-
- String prefixForIdentifier = null;
- if (conflictResolver != null) {
- prefixForIdentifier = conflictResolver.getPrefixForIdentifier();
- }
- if (prefixForIdentifier != null) {
- prefixForIdentifier = prefixForIdentifier.replaceAll
- (REGEX_WITH_ALL_SPECIAL_CHAR, COLON);
- String[] strArray = prefixForIdentifier.split(COLON);
- try {
- if (strArray[0].isEmpty()) {
- List<String> stringArrangement = new ArrayList<>();
- stringArrangement.addAll(Arrays.asList(strArray).subList(1, strArray.length));
- strArray = stringArrangement.toArray(new String[stringArrangement.size()]);
- }
- prefixForIdentifier = strArray[0];
- for (int j = 1; j < strArray.length; j++) {
- prefixForIdentifier = prefixForIdentifier + strArray[j].substring(0, 1).toUpperCase() +
- strArray[j].substring(1);
- }
- } catch (ArrayIndexOutOfBoundsException outOfBoundsException) {
- throw new TranslatorException("The given prefix in pom.xml is invalid.");
- }
- } else {
- prefixForIdentifier = YANG_AUTO_PREFIX;
- }
- return prefixForIdentifier;
- }
-
- /**
- * Removes empty directory.
- *
- * @param path path to be checked
- */
- public static void removeEmptyDirectory(String path) {
- int index;
- while (path != null && !path.isEmpty()) {
- if (!removeDirectory(path)) {
- break;
- } else {
- index = path.lastIndexOf(SLASH);
- path = path.substring(0, index);
- }
- }
- }
-
- private static boolean removeDirectory(String path) {
- File dir = new File(path);
- boolean isDeleted = false;
- if (dir.isDirectory()) {
- File[] files = dir.listFiles();
- if (files != null && files.length == 0) {
- isDeleted = dir.delete();
- } else if (files != null && files.length == 1) {
- if ("package-info.java".equals(files[0].getName())
- || files[0].getName().endsWith("-temp")) {
- isDeleted = dir.delete();
- }
- }
- }
- return isDeleted;
- }
-
- /**
- * Converts string to integer number for maven version.
- *
- * @param ver version
- * @return int value of version
- */
- public static int getVersionValue(String ver) {
- String[] array = ver.split(Pattern.quote(PERIOD));
- StringBuilder builder = new StringBuilder();
- for (String str : array) {
- builder.append(str);
- }
- return parseInt(builder.toString());
- }
-}
diff --git a/generator/src/main/java/org/onosproject/yangutils/utils/io/impl/package-info.java b/generator/src/main/java/org/onosproject/yangutils/utils/io/impl/package-info.java
deleted file mode 100644
index a128fa2..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/utils/io/impl/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-/**
- * File system utilities implementation.
- */
-package org.onosproject.yangutils.utils.io.impl;
diff --git a/generator/src/main/java/org/onosproject/yangutils/utils/io/package-info.java b/generator/src/main/java/org/onosproject/yangutils/utils/io/package-info.java
deleted file mode 100644
index 856653e..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/utils/io/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-/**
- * File system utilities.
- */
-package org.onosproject.yangutils.utils.io;
diff --git a/generator/src/main/java/org/onosproject/yangutils/utils/package-info.java b/generator/src/main/java/org/onosproject/yangutils/utils/package-info.java
deleted file mode 100644
index 2123da0..0000000
--- a/generator/src/main/java/org/onosproject/yangutils/utils/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-/**
- * Utilities for YANG maven plugin.
- */
-package org.onosproject.yangutils.utils;
diff --git a/model/pom.xml b/model/pom.xml
index 0de560e..73403f1 100644
--- a/model/pom.xml
+++ b/model/pom.xml
@@ -21,7 +21,7 @@
<parent>
<groupId>org.onosproject</groupId>
- <artifactId>onos-yang-utils</artifactId>
+ <artifactId>onos-yang-tools</artifactId>
<version>1.12-SNAPSHOT</version>
</parent>
diff --git a/parser/pom.xml b/parser/pom.xml
deleted file mode 100644
index 993eb6a..0000000
--- a/parser/pom.xml
+++ /dev/null
@@ -1,136 +0,0 @@
-<!--
- ~ Copyright 2016-present Open Networking Laboratory
- ~
- ~ Licensed 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
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License 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.
- -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-yang-utils</artifactId>
- <version>1.12-SNAPSHOT</version>
- </parent>
-
- <artifactId>onos-yang-utils-parser</artifactId>
- <version>1.12-SNAPSHOT</version>
- <packaging>jar</packaging>
-
- <dependencies>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-yang-datamodel</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-yang-utils-generator</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.antlr</groupId>
- <artifactId>antlr4-runtime</artifactId>
- <version>4.5.3</version>
- </dependency>
-
- </dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.antlr</groupId>
- <artifactId>antlr4-maven-plugin</artifactId>
- <version>4.5</version>
- <executions>
- <execution>
- <phase>generate-sources</phase>
- <goals>
- <goal>antlr4</goal>
- </goals>
- </execution>
- </executions>
- <configuration>
- <sourceDirectory>src/main/resources</sourceDirectory>
- <outputDirectory>
- target/generated-sources/org/onosproject/yangutils/parser/antlrgencode
- </outputDirectory>
- <visitor>false</visitor>
- <listener>true</listener>
- </configuration>
- </plugin>
- <plugin>
- <artifactId>maven-clean-plugin</artifactId>
- <version>3.0.0</version>
- <executions>
- <execution>
- <id>Deleting auto-generated listener interfaces</id>
- <phase>generate-sources</phase>
- <goals>
- <goal>clean</goal>
- </goals>
- </execution>
- </executions>
- <configuration>
- <excludeDefaultDirectories>true</excludeDefaultDirectories>
- <filesets>
- <fileset>
- <directory>target</directory>
- <followSymlinks>false</followSymlinks>
- <useDefaultExcludes>true</useDefaultExcludes>
- <excludes>
- <exclude>
- **/generated-sources/org/onosproject/yangutils/parser/antlrgencode/GeneratedYangLexer.java
- </exclude>
- <exclude>
- **/generated-sources/org/onosproject/yangutils/parser/antlrgencode/GeneratedYang.tokens
- </exclude>
- <exclude>
- **/generated-sources/org/onosproject/yangutils/parser/antlrgencode/GeneratedYangParser.java
- </exclude>
- <exclude>
- **/generated-sources/org/onosproject/yangutils/parser/antlrgencode/GeneratedYangLexer.tokens
- </exclude>
- <exclude>
- **/generated-sources/org/onosproject/yangutils/parser/antlrgencode/YangLexer.java
- </exclude>
- <exclude>
- **/generated-sources/org/onosproject/yangutils/parser/antlrgencode/YangLexer.tokens
- </exclude>
- </excludes>
- </fileset>
- </filesets>
- <verbose>false</verbose>
- </configuration>
- </plugin>
-
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <version>3.0.2</version>
- <configuration>
- <skipIfEmpty>true</skipIfEmpty>
- </configuration>
- <executions>
- <execution>
- <id>default</id>
- <goals>
- <goal>test-jar</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
-</project>
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/YangUtilsParser.java b/parser/src/main/java/org/onosproject/yangutils/parser/YangUtilsParser.java
deleted file mode 100644
index ba119f6..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/YangUtilsParser.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser;
-
-import java.io.IOException;
-
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-
-/**
- * Abstraction of entity which provides parser service of YANG files for yangutils-maven-plugin.
- */
-public interface YangUtilsParser {
-
- /**
- * Returns the data model node. It is an entry function to initiate the YANG file parsing.
- *
- * @param file input YANG file
- * @return YangNode root node of the data model tree
- * @throws ParserException when fails to get the data model
- * @throws IOException when there is an exception in IO operation
- */
- YangNode getDataModel(String file) throws IOException, ParserException;
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/antlrgencode/GeneratedYangListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/antlrgencode/GeneratedYangListener.java
deleted file mode 100644
index 72e7995..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/antlrgencode/GeneratedYangListener.java
+++ /dev/null
@@ -1,1940 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-// Generated from GeneratedYang.g4 by ANTLR 4.5
-
-package org.onosproject.yangutils.parser.antlrgencode;
-
-import org.antlr.v4.runtime.tree.ParseTreeListener;
-
-/**
- * Represents ANTLR interfaces to be implemented by listener to traverse the parse tree.
- */
-public interface GeneratedYangListener extends ParseTreeListener {
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule yangfile.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterYangfile(GeneratedYangParser.YangfileContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule yangfile.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitYangfile(GeneratedYangParser.YangfileContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule moduleStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterModuleStatement(GeneratedYangParser.ModuleStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule moduleStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitModuleStatement(GeneratedYangParser.ModuleStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule moduleBody.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterModuleBody(GeneratedYangParser.ModuleBodyContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule moduleBody.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitModuleBody(GeneratedYangParser.ModuleBodyContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule moduleHeaderStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterModuleHeaderStatement(GeneratedYangParser.ModuleHeaderStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule moduleHeaderStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitModuleHeaderStatement(GeneratedYangParser.ModuleHeaderStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule linkageStatements.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterLinkageStatements(GeneratedYangParser.LinkageStatementsContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule linkageStatements.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitLinkageStatements(GeneratedYangParser.LinkageStatementsContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule metaStatements.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterMetaStatements(GeneratedYangParser.MetaStatementsContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule metaStatements.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitMetaStatements(GeneratedYangParser.MetaStatementsContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule revisionStatements.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterRevisionStatements(GeneratedYangParser.RevisionStatementsContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule revisionStatements.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitRevisionStatements(GeneratedYangParser.RevisionStatementsContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule bodyStatements.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterBodyStatements(GeneratedYangParser.BodyStatementsContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule bodyStatements.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitBodyStatements(GeneratedYangParser.BodyStatementsContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule yangVersionStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterYangVersionStatement(GeneratedYangParser.YangVersionStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule yangVersionStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitYangVersionStatement(GeneratedYangParser.YangVersionStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule namespaceStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterNamespaceStatement(GeneratedYangParser.NamespaceStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule namespaceStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitNamespaceStatement(GeneratedYangParser.NamespaceStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule prefixStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterPrefixStatement(GeneratedYangParser.PrefixStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule prefixStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitPrefixStatement(GeneratedYangParser.PrefixStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule importStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterImportStatement(GeneratedYangParser.ImportStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule importStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitImportStatement(GeneratedYangParser.ImportStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule importStatementBody.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterImportStatementBody(GeneratedYangParser.ImportStatementBodyContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule importStatementBody.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitImportStatementBody(GeneratedYangParser.ImportStatementBodyContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule revisionDateStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterRevisionDateStatement(GeneratedYangParser.RevisionDateStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule revisionDateStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitRevisionDateStatement(GeneratedYangParser.RevisionDateStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule includeStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterIncludeStatement(GeneratedYangParser.IncludeStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule includeStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitIncludeStatement(GeneratedYangParser.IncludeStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule organizationStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterOrganizationStatement(GeneratedYangParser.OrganizationStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule organizationStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitOrganizationStatement(GeneratedYangParser.OrganizationStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule contactStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterContactStatement(GeneratedYangParser.ContactStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule contactStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitContactStatement(GeneratedYangParser.ContactStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule descriptionStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterDescriptionStatement(GeneratedYangParser.DescriptionStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule descriptionStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitDescriptionStatement(GeneratedYangParser.DescriptionStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule referenceStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterReferenceStatement(GeneratedYangParser.ReferenceStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule referenceStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitReferenceStatement(GeneratedYangParser.ReferenceStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule revisionStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterRevisionStatement(GeneratedYangParser.RevisionStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule revisionStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitRevisionStatement(GeneratedYangParser.RevisionStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule revisionStatementBody.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterRevisionStatementBody(GeneratedYangParser.RevisionStatementBodyContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule revisionStatementBody.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitRevisionStatementBody(GeneratedYangParser.RevisionStatementBodyContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule subModuleStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterSubModuleStatement(GeneratedYangParser.SubModuleStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule subModuleStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitSubModuleStatement(GeneratedYangParser.SubModuleStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule submoduleBody.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterSubmoduleBody(GeneratedYangParser.SubmoduleBodyContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule submoduleBody.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitSubmoduleBody(GeneratedYangParser.SubmoduleBodyContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule submoduleHeaderStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterSubmoduleHeaderStatement(GeneratedYangParser.SubmoduleHeaderStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule submoduleHeaderStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitSubmoduleHeaderStatement(GeneratedYangParser.SubmoduleHeaderStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule belongstoStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterBelongstoStatement(GeneratedYangParser.BelongstoStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule belongstoStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitBelongstoStatement(GeneratedYangParser.BelongstoStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule belongstoStatementBody.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterBelongstoStatementBody(GeneratedYangParser.BelongstoStatementBodyContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule belongstoStatementBody.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitBelongstoStatementBody(GeneratedYangParser.BelongstoStatementBodyContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule extensionStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterExtensionStatement(GeneratedYangParser.ExtensionStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule extensionStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitExtensionStatement(GeneratedYangParser.ExtensionStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule extensionBody.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterExtensionBody(GeneratedYangParser.ExtensionBodyContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule extensionBody.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitExtensionBody(GeneratedYangParser.ExtensionBodyContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule argumentStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterArgumentStatement(GeneratedYangParser.ArgumentStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule argumentStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitArgumentStatement(GeneratedYangParser.ArgumentStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule argumentBody.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterArgumentBody(GeneratedYangParser.ArgumentBodyContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule argumentBody.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitArgumentBody(GeneratedYangParser.ArgumentBodyContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule yinElementStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterYinElementStatement(GeneratedYangParser.YinElementStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule yinElementStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitYinElementStatement(GeneratedYangParser.YinElementStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule identityStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterIdentityStatement(GeneratedYangParser.IdentityStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule identityStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitIdentityStatement(GeneratedYangParser.IdentityStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule identityBody.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterIdentityBody(GeneratedYangParser.IdentityBodyContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule identityBody.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitIdentityBody(GeneratedYangParser.IdentityBodyContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule baseStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterBaseStatement(GeneratedYangParser.BaseStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule baseStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitBaseStatement(GeneratedYangParser.BaseStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule featureStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterFeatureStatement(GeneratedYangParser.FeatureStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule featureStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitFeatureStatement(GeneratedYangParser.FeatureStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule featureBody.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterFeatureBody(GeneratedYangParser.FeatureBodyContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule featureBody.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitFeatureBody(GeneratedYangParser.FeatureBodyContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule dataDefStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterDataDefStatement(GeneratedYangParser.DataDefStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule dataDefStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitDataDefStatement(GeneratedYangParser.DataDefStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule ifFeatureStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterIfFeatureStatement(GeneratedYangParser.IfFeatureStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule ifFeatureStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitIfFeatureStatement(GeneratedYangParser.IfFeatureStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule unitsStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterUnitsStatement(GeneratedYangParser.UnitsStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule unitsStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitUnitsStatement(GeneratedYangParser.UnitsStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule typedefStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterTypedefStatement(GeneratedYangParser.TypedefStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule typedefStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitTypedefStatement(GeneratedYangParser.TypedefStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule typeStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterTypeStatement(GeneratedYangParser.TypeStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule typeStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitTypeStatement(GeneratedYangParser.TypeStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule typeBodyStatements.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterTypeBodyStatements(GeneratedYangParser.TypeBodyStatementsContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule typeBodyStatements.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitTypeBodyStatements(GeneratedYangParser.TypeBodyStatementsContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule numericalRestrictions.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterDecimal64Specification(GeneratedYangParser.Decimal64SpecificationContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule numericalRestrictions.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitDecimal64Specification(GeneratedYangParser.Decimal64SpecificationContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule numericalRestrictions.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterFractionDigitStatement(GeneratedYangParser.FractionDigitStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule
- * numericalRestrictions.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitFractionDigitStatement(GeneratedYangParser.FractionDigitStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule
- * numericalRestrictions.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterNumericalRestrictions(GeneratedYangParser.NumericalRestrictionsContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule numericalRestrictions.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitNumericalRestrictions(GeneratedYangParser.NumericalRestrictionsContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule rangeStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterRangeStatement(GeneratedYangParser.RangeStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule rangeStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitRangeStatement(GeneratedYangParser.RangeStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule commonStatements.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterCommonStatements(GeneratedYangParser.CommonStatementsContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule commonStatements.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitCommonStatements(GeneratedYangParser.CommonStatementsContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule stringRestrictions.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterStringRestrictions(GeneratedYangParser.StringRestrictionsContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule stringRestrictions.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitStringRestrictions(GeneratedYangParser.StringRestrictionsContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule lengthStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterLengthStatement(GeneratedYangParser.LengthStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule lengthStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitLengthStatement(GeneratedYangParser.LengthStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule patternStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterPatternStatement(GeneratedYangParser.PatternStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule patternStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitPatternStatement(GeneratedYangParser.PatternStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule defaultStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterDefaultStatement(GeneratedYangParser.DefaultStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule defaultStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitDefaultStatement(GeneratedYangParser.DefaultStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule enumSpecification.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterEnumSpecification(GeneratedYangParser.EnumSpecificationContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule enumSpecification.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitEnumSpecification(GeneratedYangParser.EnumSpecificationContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule enumStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterEnumStatement(GeneratedYangParser.EnumStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule enumStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitEnumStatement(GeneratedYangParser.EnumStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule enumStatementBody.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterEnumStatementBody(GeneratedYangParser.EnumStatementBodyContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule enumStatementBody.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitEnumStatementBody(GeneratedYangParser.EnumStatementBodyContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule leafrefSpecification.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterLeafrefSpecification(GeneratedYangParser.LeafrefSpecificationContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule leafrefSpecification.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitLeafrefSpecification(GeneratedYangParser.LeafrefSpecificationContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule pathStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterPathStatement(GeneratedYangParser.PathStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule pathStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitPathStatement(GeneratedYangParser.PathStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule requireInstanceStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterRequireInstanceStatement(GeneratedYangParser.RequireInstanceStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule requireInstanceStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitRequireInstanceStatement(GeneratedYangParser.RequireInstanceStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule instanceIdentifierSpecification.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterInstanceIdentifierSpecification(
- GeneratedYangParser.InstanceIdentifierSpecificationContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule instanceIdentifierSpecification.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitInstanceIdentifierSpecification(GeneratedYangParser.InstanceIdentifierSpecificationContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule identityrefSpecification.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterIdentityrefSpecification(GeneratedYangParser.IdentityrefSpecificationContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule identityrefSpecification.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitIdentityrefSpecification(GeneratedYangParser.IdentityrefSpecificationContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule unionSpecification.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterUnionSpecification(GeneratedYangParser.UnionSpecificationContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule unionSpecification.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitUnionSpecification(GeneratedYangParser.UnionSpecificationContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule bitsSpecification.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterBitsSpecification(GeneratedYangParser.BitsSpecificationContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule bitsSpecification.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitBitsSpecification(GeneratedYangParser.BitsSpecificationContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule bitStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterBitStatement(GeneratedYangParser.BitStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule bitStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitBitStatement(GeneratedYangParser.BitStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule bitBodyStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterBitBodyStatement(GeneratedYangParser.BitBodyStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule bitBodyStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitBitBodyStatement(GeneratedYangParser.BitBodyStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule positionStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterPositionStatement(GeneratedYangParser.PositionStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule positionStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitPositionStatement(GeneratedYangParser.PositionStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule statusStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterStatusStatement(GeneratedYangParser.StatusStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule statusStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitStatusStatement(GeneratedYangParser.StatusStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule configStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterConfigStatement(GeneratedYangParser.ConfigStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule configStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitConfigStatement(GeneratedYangParser.ConfigStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule mandatoryStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterMandatoryStatement(GeneratedYangParser.MandatoryStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule mandatoryStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitMandatoryStatement(GeneratedYangParser.MandatoryStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule presenceStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterPresenceStatement(GeneratedYangParser.PresenceStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule presenceStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitPresenceStatement(GeneratedYangParser.PresenceStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule orderedByStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterOrderedByStatement(GeneratedYangParser.OrderedByStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule orderedByStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitOrderedByStatement(GeneratedYangParser.OrderedByStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule mustStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterMustStatement(GeneratedYangParser.MustStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule mustStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitMustStatement(GeneratedYangParser.MustStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule errorMessageStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterErrorMessageStatement(GeneratedYangParser.ErrorMessageStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule errorMessageStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitErrorMessageStatement(GeneratedYangParser.ErrorMessageStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule errorAppTagStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterErrorAppTagStatement(GeneratedYangParser.ErrorAppTagStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule errorAppTagStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitErrorAppTagStatement(GeneratedYangParser.ErrorAppTagStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule minElementsStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterMinElementsStatement(GeneratedYangParser.MinElementsStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule minElementsStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitMinElementsStatement(GeneratedYangParser.MinElementsStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule maxElementsStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterMaxElementsStatement(GeneratedYangParser.MaxElementsStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule maxElementsStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitMaxElementsStatement(GeneratedYangParser.MaxElementsStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule valueStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterValueStatement(GeneratedYangParser.ValueStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule valueStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitValueStatement(GeneratedYangParser.ValueStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule groupingStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterGroupingStatement(GeneratedYangParser.GroupingStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule groupingStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitGroupingStatement(GeneratedYangParser.GroupingStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule containerStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterContainerStatement(GeneratedYangParser.ContainerStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule containerStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitContainerStatement(GeneratedYangParser.ContainerStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule leafStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterLeafStatement(GeneratedYangParser.LeafStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule leafStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitLeafStatement(GeneratedYangParser.LeafStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule leafListStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterLeafListStatement(GeneratedYangParser.LeafListStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule leafListStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitLeafListStatement(GeneratedYangParser.LeafListStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule listStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterListStatement(GeneratedYangParser.ListStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule listStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitListStatement(GeneratedYangParser.ListStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule keyStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterKeyStatement(GeneratedYangParser.KeyStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule keyStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitKeyStatement(GeneratedYangParser.KeyStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule uniqueStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterUniqueStatement(GeneratedYangParser.UniqueStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule uniqueStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitUniqueStatement(GeneratedYangParser.UniqueStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule choiceStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterChoiceStatement(GeneratedYangParser.ChoiceStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule choiceStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitChoiceStatement(GeneratedYangParser.ChoiceStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule shortCaseStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterShortCaseStatement(GeneratedYangParser.ShortCaseStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule shortCaseStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitShortCaseStatement(GeneratedYangParser.ShortCaseStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule caseStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterCaseStatement(GeneratedYangParser.CaseStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule caseStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitCaseStatement(GeneratedYangParser.CaseStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule anyxmlStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterAnyxmlStatement(GeneratedYangParser.AnyxmlStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule anyxmlStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitAnyxmlStatement(GeneratedYangParser.AnyxmlStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule usesStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterUsesStatement(GeneratedYangParser.UsesStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule usesStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitUsesStatement(GeneratedYangParser.UsesStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule refineStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterRefineStatement(GeneratedYangParser.RefineStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule refineStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitRefineStatement(GeneratedYangParser.RefineStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule refineContainerStatements.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterRefineContainerStatements(GeneratedYangParser.RefineContainerStatementsContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule refineContainerStatements.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitRefineContainerStatements(GeneratedYangParser.RefineContainerStatementsContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule refineLeafStatements.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterRefineLeafStatements(GeneratedYangParser.RefineLeafStatementsContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule refineLeafStatements.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitRefineLeafStatements(GeneratedYangParser.RefineLeafStatementsContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule refineLeafListStatements.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterRefineLeafListStatements(GeneratedYangParser.RefineLeafListStatementsContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule refineLeafListStatements.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitRefineLeafListStatements(GeneratedYangParser.RefineLeafListStatementsContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule refineListStatements.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterRefineListStatements(GeneratedYangParser.RefineListStatementsContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule refineListStatements.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitRefineListStatements(GeneratedYangParser.RefineListStatementsContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule refineChoiceStatements.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterRefineChoiceStatements(GeneratedYangParser.RefineChoiceStatementsContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule refineChoiceStatements.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitRefineChoiceStatements(GeneratedYangParser.RefineChoiceStatementsContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule refineCaseStatements.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterRefineCaseStatements(GeneratedYangParser.RefineCaseStatementsContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule refineCaseStatements.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitRefineCaseStatements(GeneratedYangParser.RefineCaseStatementsContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule refineAnyxmlStatements.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterRefineAnyxmlStatements(GeneratedYangParser.RefineAnyxmlStatementsContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule refineAnyxmlStatements.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitRefineAnyxmlStatements(GeneratedYangParser.RefineAnyxmlStatementsContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule augmentStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterAugmentStatement(GeneratedYangParser.AugmentStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule augmentStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitAugmentStatement(GeneratedYangParser.AugmentStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule whenStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterWhenStatement(GeneratedYangParser.WhenStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule whenStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitWhenStatement(GeneratedYangParser.WhenStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule rpcStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterRpcStatement(GeneratedYangParser.RpcStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule rpcStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitRpcStatement(GeneratedYangParser.RpcStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule inputStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterInputStatement(GeneratedYangParser.InputStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule inputStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitInputStatement(GeneratedYangParser.InputStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule outputStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterOutputStatement(GeneratedYangParser.OutputStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule outputStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitOutputStatement(GeneratedYangParser.OutputStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule notificationStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterNotificationStatement(GeneratedYangParser.NotificationStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule notificationStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitNotificationStatement(GeneratedYangParser.NotificationStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule deviationStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterDeviationStatement(GeneratedYangParser.DeviationStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule deviationStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitDeviationStatement(GeneratedYangParser.DeviationStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule deviateNotSupportedStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterDeviateNotSupportedStatement(GeneratedYangParser.DeviateNotSupportedStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule deviateNotSupportedStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitDeviateNotSupportedStatement(GeneratedYangParser.DeviateNotSupportedStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule deviateAddStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterDeviateAddStatement(GeneratedYangParser.DeviateAddStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule deviateAddStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitDeviateAddStatement(GeneratedYangParser.DeviateAddStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule deviateDeleteStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterDeviateDeleteStatement(GeneratedYangParser.DeviateDeleteStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule deviateDeleteStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitDeviateDeleteStatement(GeneratedYangParser.DeviateDeleteStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule deviateReplaceStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterDeviateReplaceStatement(GeneratedYangParser.DeviateReplaceStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule deviateReplaceStatement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitDeviateReplaceStatement(GeneratedYangParser.DeviateReplaceStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule string.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterString(GeneratedYangParser.StringContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule string.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitString(GeneratedYangParser.StringContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule identifier.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterIdentifier(GeneratedYangParser.IdentifierContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule identifier.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitIdentifier(GeneratedYangParser.IdentifierContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule version.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterVersion(GeneratedYangParser.VersionContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule version.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitVersion(GeneratedYangParser.VersionContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule range.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterRange(GeneratedYangParser.RangeContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule range.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitRange(GeneratedYangParser.RangeContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule dateArgumentString.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterDateArgumentString(GeneratedYangParser.DateArgumentStringContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule dateArgumentString.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitDateArgumentString(GeneratedYangParser.DateArgumentStringContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule length.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterLength(GeneratedYangParser.LengthContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule length.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitLength(GeneratedYangParser.LengthContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule path.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterPath(GeneratedYangParser.PathContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule path.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitPath(GeneratedYangParser.PathContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule position.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterPosition(GeneratedYangParser.PositionContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule position.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitPosition(GeneratedYangParser.PositionContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule status.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterStatus(GeneratedYangParser.StatusContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule status.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitStatus(GeneratedYangParser.StatusContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule config.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterConfig(GeneratedYangParser.ConfigContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule config.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitConfig(GeneratedYangParser.ConfigContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule mandatory.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterMandatory(GeneratedYangParser.MandatoryContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule mandatory.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitMandatory(GeneratedYangParser.MandatoryContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule ordered-by.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterOrderedBy(GeneratedYangParser.OrderedByContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule ordered-by.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitOrderedBy(GeneratedYangParser.OrderedByContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule min elements value.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterMinValue(GeneratedYangParser.MinValueContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule min elements value.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitMinValue(GeneratedYangParser.MinValueContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule max elements value.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterMaxValue(GeneratedYangParser.MaxValueContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule max elements value.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitMaxValue(GeneratedYangParser.MaxValueContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule key.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterKey(GeneratedYangParser.KeyContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule key.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitKey(GeneratedYangParser.KeyContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule unique.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterUnique(GeneratedYangParser.UniqueContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule unique.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitUnique(GeneratedYangParser.UniqueContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule refine.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterRefine(GeneratedYangParser.RefineContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule refine.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitRefine(GeneratedYangParser.RefineContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule augment.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterAugment(GeneratedYangParser.AugmentContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule augment.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitAugment(GeneratedYangParser.AugmentContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule augment.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterFraction(GeneratedYangParser.FractionContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule augment.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitFraction(GeneratedYangParser.FractionContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule deviation.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterDeviation(GeneratedYangParser.DeviationContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule deviation.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitDeviation(GeneratedYangParser.DeviationContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule deviation.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterValue(GeneratedYangParser.ValueContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule deviation.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitValue(GeneratedYangParser.ValueContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule yang construct.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterYangConstruct(GeneratedYangParser.YangConstructContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule yang construct.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitYangConstruct(GeneratedYangParser.YangConstructContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule compiler annotation statement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterCompilerAnnotationStatement(GeneratedYangParser.CompilerAnnotationStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule compiler annotation statement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitCompilerAnnotationStatement(GeneratedYangParser.CompilerAnnotationStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule compiler annotation body statement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterCompilerAnnotationBodyStatement(GeneratedYangParser.CompilerAnnotationBodyStatementContext
- currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule compiler annotation body statement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitCompilerAnnotationBodyStatement(GeneratedYangParser.CompilerAnnotationBodyStatementContext
- currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule app data structure statement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterAppDataStructureStatement(GeneratedYangParser.AppDataStructureStatementContext
- currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule app data structure statement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitAppDataStructureStatement(GeneratedYangParser.AppDataStructureStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule app data structure.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterAppDataStructure(GeneratedYangParser.AppDataStructureContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule app data strcuture.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitAppDataStructure(GeneratedYangParser.AppDataStructureContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule app extended statement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterAppExtendedStatement(GeneratedYangParser.AppExtendedStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule app extended statement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitAppExtendedStatement(GeneratedYangParser.AppExtendedStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule extended name.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterExtendedName(GeneratedYangParser.ExtendedNameContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule extended name.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitExtendedName(GeneratedYangParser.ExtendedNameContext currentContext);
-
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule
- * data structure key statement.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterDataStructureKeyStatement(GeneratedYangParser.DataStructureKeyStatementContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar rule
- * data structure key statement.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitDataStructureKeyStatement(GeneratedYangParser.DataStructureKeyStatementContext currentContext);
-
- /**
- * Enters a parse tree produced by GeneratedYangParser for grammar rule require instance.
- *
- * @param currentContext current context in the parsed tree
- */
- void enterRequireInstance(GeneratedYangParser.RequireInstanceContext currentContext);
-
- /**
- * Exits a parse tree produced by GeneratedYangParser for grammar require instance.
- *
- * @param currentContext current context in the parsed tree
- */
- void exitRequireInstance(GeneratedYangParser.RequireInstanceContext currentContext);
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/antlrgencode/package-info.java b/parser/src/main/java/org/onosproject/yangutils/parser/antlrgencode/package-info.java
deleted file mode 100644
index 747974e..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/antlrgencode/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-/**
- * ANTLR interfaces to be implemented by listener.
- */
-package org.onosproject.yangutils.parser.antlrgencode;
\ No newline at end of file
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/exceptions/ParserException.java b/parser/src/main/java/org/onosproject/yangutils/parser/exceptions/ParserException.java
deleted file mode 100644
index 8edff52..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/exceptions/ParserException.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.exceptions;
-
-/**
- * Represents base class for exceptions in parser operations.
- */
-public class ParserException extends RuntimeException {
-
- private static final long serialVersionUID = 20160211L;
- private transient int lineNumber;
- private transient int charPositionInLine;
- private transient String fileName;
-
- /**
- * Creates a new parser exception.
- */
- public ParserException() {
- super();
- }
-
- /**
- * Creates a new parser exception with given message.
- *
- * @param message the detail of exception in string
- */
- public ParserException(String message) {
- super(message);
- }
-
- /**
- * Creates a new parser exception from given message and cause.
- *
- * @param message the detail of exception in string
- * @param cause underlying cause of the error
- */
- public ParserException(final String message, final Throwable cause) {
- super(message, cause);
- }
-
- /**
- * Creates a new parser exception from cause.
- *
- * @param cause underlying cause of the error
- */
- public ParserException(final Throwable cause) {
- super(cause);
- }
-
- /**
- * Returns line number of the exception.
- *
- * @return line number of the exception
- */
- public int getLineNumber() {
- return this.lineNumber;
- }
-
- /**
- * Returns YANG file name of the exception.
- *
- * @return YANG file name of the exception
- */
- public String getFileName() {
- return this.fileName;
- }
-
- /**
- * Returns position of the exception.
- *
- * @return position of the exception
- */
- public int getCharPositionInLine() {
- return this.charPositionInLine;
- }
-
- /**
- * Sets line number of YANG file.
- *
- * @param line line number of YANG file
- */
- public void setLine(int line) {
- this.lineNumber = line;
- }
-
- /**
- * Sets position of exception.
- *
- * @param charPosition position of exception
- */
- public void setCharPosition(int charPosition) {
- this.charPositionInLine = charPosition;
- }
-
- /**
- * Sets file name in parser exception.
- *
- * @param fileName YANG file name
- */
- public void setFileName(String fileName) {
- this.fileName = fileName;
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/exceptions/package-info.java b/parser/src/main/java/org/onosproject/yangutils/parser/exceptions/package-info.java
deleted file mode 100644
index ec36b0d..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/exceptions/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-/**
- * Custom parser exceptions.
- */
-package org.onosproject.yangutils.parser.exceptions;
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/TreeWalkListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/TreeWalkListener.java
deleted file mode 100644
index 393f09e..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/TreeWalkListener.java
+++ /dev/null
@@ -1,1711 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl;
-
-import java.util.Stack;
-
-import org.antlr.v4.runtime.ParserRuleContext;
-import org.antlr.v4.runtime.tree.ErrorNode;
-import org.antlr.v4.runtime.tree.TerminalNode;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangListener;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.impl.listeners.AppDataStructureListener;
-import org.onosproject.yangutils.parser.impl.listeners.AppExtendedNameListener;
-import org.onosproject.yangutils.parser.impl.listeners.ArgumentListener;
-import org.onosproject.yangutils.parser.impl.listeners.AugmentListener;
-import org.onosproject.yangutils.parser.impl.listeners.BaseFileListener;
-import org.onosproject.yangutils.parser.impl.listeners.BaseListener;
-import org.onosproject.yangutils.parser.impl.listeners.BelongsToListener;
-import org.onosproject.yangutils.parser.impl.listeners.BitListener;
-import org.onosproject.yangutils.parser.impl.listeners.BitsListener;
-import org.onosproject.yangutils.parser.impl.listeners.CaseListener;
-import org.onosproject.yangutils.parser.impl.listeners.ChoiceListener;
-import org.onosproject.yangutils.parser.impl.listeners.CompilerAnnotationListener;
-import org.onosproject.yangutils.parser.impl.listeners.ConfigListener;
-import org.onosproject.yangutils.parser.impl.listeners.ContactListener;
-import org.onosproject.yangutils.parser.impl.listeners.ContainerListener;
-import org.onosproject.yangutils.parser.impl.listeners.DataStructureKeyListener;
-import org.onosproject.yangutils.parser.impl.listeners.Decimal64Listener;
-import org.onosproject.yangutils.parser.impl.listeners.DefaultListener;
-import org.onosproject.yangutils.parser.impl.listeners.DescriptionListener;
-import org.onosproject.yangutils.parser.impl.listeners.EnumListener;
-import org.onosproject.yangutils.parser.impl.listeners.EnumerationListener;
-import org.onosproject.yangutils.parser.impl.listeners.ErrorAppTagListener;
-import org.onosproject.yangutils.parser.impl.listeners.ErrorMessageListener;
-import org.onosproject.yangutils.parser.impl.listeners.ExtensionListener;
-import org.onosproject.yangutils.parser.impl.listeners.FeatureListener;
-import org.onosproject.yangutils.parser.impl.listeners.FractionDigitsListener;
-import org.onosproject.yangutils.parser.impl.listeners.GroupingListener;
-import org.onosproject.yangutils.parser.impl.listeners.IdentityListener;
-import org.onosproject.yangutils.parser.impl.listeners.IdentityRefListener;
-import org.onosproject.yangutils.parser.impl.listeners.IfFeatureListener;
-import org.onosproject.yangutils.parser.impl.listeners.ImportListener;
-import org.onosproject.yangutils.parser.impl.listeners.IncludeListener;
-import org.onosproject.yangutils.parser.impl.listeners.InputListener;
-import org.onosproject.yangutils.parser.impl.listeners.KeyListener;
-import org.onosproject.yangutils.parser.impl.listeners.LeafListListener;
-import org.onosproject.yangutils.parser.impl.listeners.LeafListener;
-import org.onosproject.yangutils.parser.impl.listeners.LeafrefListener;
-import org.onosproject.yangutils.parser.impl.listeners.LengthRestrictionListener;
-import org.onosproject.yangutils.parser.impl.listeners.ListListener;
-import org.onosproject.yangutils.parser.impl.listeners.MandatoryListener;
-import org.onosproject.yangutils.parser.impl.listeners.MaxElementsListener;
-import org.onosproject.yangutils.parser.impl.listeners.MinElementsListener;
-import org.onosproject.yangutils.parser.impl.listeners.ModuleListener;
-import org.onosproject.yangutils.parser.impl.listeners.MustListener;
-import org.onosproject.yangutils.parser.impl.listeners.NamespaceListener;
-import org.onosproject.yangutils.parser.impl.listeners.NotificationListener;
-import org.onosproject.yangutils.parser.impl.listeners.OrganizationListener;
-import org.onosproject.yangutils.parser.impl.listeners.OutputListener;
-import org.onosproject.yangutils.parser.impl.listeners.PathListener;
-import org.onosproject.yangutils.parser.impl.listeners.PatternRestrictionListener;
-import org.onosproject.yangutils.parser.impl.listeners.PositionListener;
-import org.onosproject.yangutils.parser.impl.listeners.PrefixListener;
-import org.onosproject.yangutils.parser.impl.listeners.PresenceListener;
-import org.onosproject.yangutils.parser.impl.listeners.RangeRestrictionListener;
-import org.onosproject.yangutils.parser.impl.listeners.ReferenceListener;
-import org.onosproject.yangutils.parser.impl.listeners.RequireInstanceListener;
-import org.onosproject.yangutils.parser.impl.listeners.RevisionDateListener;
-import org.onosproject.yangutils.parser.impl.listeners.RevisionListener;
-import org.onosproject.yangutils.parser.impl.listeners.RpcListener;
-import org.onosproject.yangutils.parser.impl.listeners.ShortCaseListener;
-import org.onosproject.yangutils.parser.impl.listeners.StatusListener;
-import org.onosproject.yangutils.parser.impl.listeners.SubModuleListener;
-import org.onosproject.yangutils.parser.impl.listeners.TypeDefListener;
-import org.onosproject.yangutils.parser.impl.listeners.TypeListener;
-import org.onosproject.yangutils.parser.impl.listeners.UnionListener;
-import org.onosproject.yangutils.parser.impl.listeners.UniqueListener;
-import org.onosproject.yangutils.parser.impl.listeners.UnitsListener;
-import org.onosproject.yangutils.parser.impl.listeners.UsesListener;
-import org.onosproject.yangutils.parser.impl.listeners.ValueListener;
-import org.onosproject.yangutils.parser.impl.listeners.VersionListener;
-import org.onosproject.yangutils.parser.impl.listeners.WhenListener;
-
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.handleUnsupportedYangConstruct;
-import static org.onosproject.yangutils.utils.UtilConstants.CURRENTLY_UNSUPPORTED;
-import static org.onosproject.yangutils.utils.UtilConstants.UNSUPPORTED_YANG_CONSTRUCT;
-
-/**
- * Represents ANTLR generates parse-tree. ANTLR generates a parse-tree listener interface that responds to events
- * triggered by the built-in tree walker. The methods in listener are just
- * callbacks. This class implements listener interface and generates the
- * corresponding data model tree.
- */
-public class TreeWalkListener implements GeneratedYangListener {
-
- // List of parsable node entries maintained in stack
- private Stack<Parsable> parsedDataStack = new Stack<>();
-
- // Parse tree root node
- private YangNode rootNode;
-
- // YANG file name.
- private String fileName;
-
- /**
- * Parent depth of grouping count for any node.
- */
- private int groupingDepth;
-
- /**
- * Parent depth of unsupported yang construct count for any node.
- */
- private int unsupportedYangConstructDepth;
-
- /**
- * Returns number of unsupported yang constructs parents, by a node, at any level.
- *
- * @return depth of unsupported yang constructs
- */
- public int getUnsupportedYangConstructDepth() {
- return unsupportedYangConstructDepth;
- }
-
- /**
- * Sets number of unsupported yang constructs by a node at any level.
- */
- private void increaseUnsupportedYangConstructDepth() {
- unsupportedYangConstructDepth++;
- }
-
- /**
- * Sets number of unsupported yang constructs by a node at any level.
- */
- private void decreaseUnsupportedYangConstructDepth() {
- unsupportedYangConstructDepth--;
- }
-
- /**
- * Returns number of grouping parents, by a node, at any level.
- *
- * @return depth of grouping
- */
- public int getGroupingDepth() {
- return groupingDepth;
- }
-
- /**
- * Sets number of grouping parents by a node at any level.
- */
- public void increaseGroupingDepth() {
- groupingDepth++;
- }
-
- /**
- * Sets number of grouping parents by a node at any level.
- */
- public void decreaseGroupingDepth() {
- groupingDepth--;
- }
-
- /**
- * Returns stack of parsable data.
- *
- * @return stack of parsable data
- */
- public Stack<Parsable> getParsedDataStack() {
- return parsedDataStack;
- }
-
- /**
- * Returns root node.
- *
- * @return rootNode of data model tree
- */
- public YangNode getRootNode() {
- return rootNode;
- }
-
- /**
- * Returns YANG file name.
- *
- * @return YANG file name
- */
- public String getFileName() {
- return fileName;
- }
-
- /**
- * Sets YANG file name.
- *
- * @param fileName YANG file name
- */
- public void setFileName(String fileName) {
- this.fileName = fileName;
- }
-
- /**
- * Set parsed data stack.
- *
- * @param parsedDataStack stack of parsable data objects
- */
- public void setParsedDataStack(Stack<Parsable> parsedDataStack) {
- this.parsedDataStack = parsedDataStack;
- }
-
- /**
- * Set root node.
- *
- * @param rootNode root node of data model tree
- */
- public void setRootNode(YangNode rootNode) {
- this.rootNode = rootNode;
- }
-
- @Override
- public void enterYangfile(GeneratedYangParser.YangfileContext ctx) {
- BaseFileListener.processYangFileEntry(this, ctx);
- }
-
- @Override
- public void exitYangfile(GeneratedYangParser.YangfileContext ctx) {
- BaseFileListener.processYangFileExit(this, ctx);
- }
-
- @Override
- public void enterModuleStatement(GeneratedYangParser.ModuleStatementContext ctx) {
- ModuleListener.processModuleEntry(this, ctx);
- }
-
- @Override
- public void exitModuleStatement(GeneratedYangParser.ModuleStatementContext ctx) {
- ModuleListener.processModuleExit(this, ctx);
- }
-
- @Override
- public void enterModuleBody(GeneratedYangParser.ModuleBodyContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitModuleBody(GeneratedYangParser.ModuleBodyContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterModuleHeaderStatement(GeneratedYangParser.ModuleHeaderStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitModuleHeaderStatement(GeneratedYangParser.ModuleHeaderStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterLinkageStatements(GeneratedYangParser.LinkageStatementsContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitLinkageStatements(GeneratedYangParser.LinkageStatementsContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterMetaStatements(GeneratedYangParser.MetaStatementsContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitMetaStatements(GeneratedYangParser.MetaStatementsContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterRevisionStatements(GeneratedYangParser.RevisionStatementsContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitRevisionStatements(GeneratedYangParser.RevisionStatementsContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterBodyStatements(GeneratedYangParser.BodyStatementsContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitBodyStatements(GeneratedYangParser.BodyStatementsContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterYangVersionStatement(GeneratedYangParser.YangVersionStatementContext ctx) {
- VersionListener.processVersionEntry(this, ctx);
- }
-
- @Override
- public void exitYangVersionStatement(GeneratedYangParser.YangVersionStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterNamespaceStatement(GeneratedYangParser.NamespaceStatementContext ctx) {
- NamespaceListener.processNamespaceEntry(this, ctx);
- }
-
- @Override
- public void exitNamespaceStatement(GeneratedYangParser.NamespaceStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterPrefixStatement(GeneratedYangParser.PrefixStatementContext ctx) {
- PrefixListener.processPrefixEntry(this, ctx);
- }
-
- @Override
- public void exitPrefixStatement(GeneratedYangParser.PrefixStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterImportStatement(GeneratedYangParser.ImportStatementContext ctx) {
- ImportListener.processImportEntry(this, ctx);
- }
-
- @Override
- public void exitImportStatement(GeneratedYangParser.ImportStatementContext ctx) {
- ImportListener.processImportExit(this, ctx);
- }
-
- @Override
- public void enterImportStatementBody(GeneratedYangParser.ImportStatementBodyContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitImportStatementBody(GeneratedYangParser.ImportStatementBodyContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterRevisionDateStatement(GeneratedYangParser.RevisionDateStatementContext ctx) {
- RevisionDateListener.processRevisionDateEntry(this, ctx);
- }
-
- @Override
- public void exitRevisionDateStatement(GeneratedYangParser.RevisionDateStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterIncludeStatement(GeneratedYangParser.IncludeStatementContext ctx) {
- IncludeListener.processIncludeEntry(this, ctx);
- }
-
- @Override
- public void exitIncludeStatement(GeneratedYangParser.IncludeStatementContext ctx) {
- IncludeListener.processIncludeExit(this, ctx);
- }
-
- @Override
- public void enterOrganizationStatement(GeneratedYangParser.OrganizationStatementContext ctx) {
- OrganizationListener.processOrganizationEntry(this, ctx);
- }
-
- @Override
- public void exitOrganizationStatement(GeneratedYangParser.OrganizationStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterContactStatement(GeneratedYangParser.ContactStatementContext ctx) {
- ContactListener.processContactEntry(this, ctx);
- }
-
- @Override
- public void exitContactStatement(GeneratedYangParser.ContactStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterDescriptionStatement(GeneratedYangParser.DescriptionStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- DescriptionListener.processDescriptionEntry(this, ctx);
- }
- }
-
- @Override
- public void exitDescriptionStatement(GeneratedYangParser.DescriptionStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterReferenceStatement(GeneratedYangParser.ReferenceStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- ReferenceListener.processReferenceEntry(this, ctx);
- }
- }
-
- @Override
- public void exitReferenceStatement(GeneratedYangParser.ReferenceStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterRevisionStatement(GeneratedYangParser.RevisionStatementContext ctx) {
- RevisionListener.processRevisionEntry(this, ctx);
- }
-
- @Override
- public void exitRevisionStatement(GeneratedYangParser.RevisionStatementContext ctx) {
- RevisionListener.processRevisionExit(this, ctx);
- }
-
- @Override
- public void enterRevisionStatementBody(GeneratedYangParser.RevisionStatementBodyContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitRevisionStatementBody(GeneratedYangParser.RevisionStatementBodyContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterSubModuleStatement(GeneratedYangParser.SubModuleStatementContext ctx) {
- SubModuleListener.processSubModuleEntry(this, ctx);
- }
-
- @Override
- public void exitSubModuleStatement(GeneratedYangParser.SubModuleStatementContext ctx) {
- SubModuleListener.processSubModuleExit(this, ctx);
- }
-
- @Override
- public void enterSubmoduleBody(GeneratedYangParser.SubmoduleBodyContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitSubmoduleBody(GeneratedYangParser.SubmoduleBodyContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterSubmoduleHeaderStatement(GeneratedYangParser.SubmoduleHeaderStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitSubmoduleHeaderStatement(GeneratedYangParser.SubmoduleHeaderStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterBelongstoStatement(GeneratedYangParser.BelongstoStatementContext ctx) {
- BelongsToListener.processBelongsToEntry(this, ctx);
- }
-
- @Override
- public void exitBelongstoStatement(GeneratedYangParser.BelongstoStatementContext ctx) {
- BelongsToListener.processBelongsToExit(this, ctx);
- }
-
- @Override
- public void enterBelongstoStatementBody(GeneratedYangParser.BelongstoStatementBodyContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitBelongstoStatementBody(GeneratedYangParser.BelongstoStatementBodyContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterExtensionStatement(GeneratedYangParser.ExtensionStatementContext ctx) {
- ExtensionListener.processExtensionEntry(this, ctx);
- }
-
- @Override
- public void exitExtensionStatement(GeneratedYangParser.ExtensionStatementContext ctx) {
- ExtensionListener.processExtensionExit(this, ctx);
- }
-
- @Override
- public void enterExtensionBody(GeneratedYangParser.ExtensionBodyContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitExtensionBody(GeneratedYangParser.ExtensionBodyContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterArgumentStatement(GeneratedYangParser.ArgumentStatementContext ctx) {
- ArgumentListener.processArgumentEntry(this, ctx);
- }
-
- @Override
- public void exitArgumentStatement(GeneratedYangParser.ArgumentStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterArgumentBody(GeneratedYangParser.ArgumentBodyContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitArgumentBody(GeneratedYangParser.ArgumentBodyContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterYinElementStatement(GeneratedYangParser.YinElementStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitYinElementStatement(GeneratedYangParser.YinElementStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterIdentityStatement(GeneratedYangParser.IdentityStatementContext ctx) {
- IdentityListener.processIdentityEntry(this, ctx);
- }
-
- @Override
- public void exitIdentityStatement(GeneratedYangParser.IdentityStatementContext ctx) {
- IdentityListener.processIdentityExit(this, ctx);
- }
-
- @Override
- public void enterIdentityBody(GeneratedYangParser.IdentityBodyContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitIdentityBody(GeneratedYangParser.IdentityBodyContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterBaseStatement(GeneratedYangParser.BaseStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- BaseListener.processBaseEntry(this, ctx);
- }
- }
-
- @Override
- public void exitBaseStatement(GeneratedYangParser.BaseStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterFeatureStatement(GeneratedYangParser.FeatureStatementContext ctx) {
- FeatureListener.processFeatureEntry(this, ctx);
- }
-
- @Override
- public void exitFeatureStatement(GeneratedYangParser.FeatureStatementContext ctx) {
- FeatureListener.processFeatureExit(this, ctx);
- }
-
- @Override
- public void enterFeatureBody(GeneratedYangParser.FeatureBodyContext ctx) {
- // do nothing
- }
-
- @Override
- public void exitFeatureBody(GeneratedYangParser.FeatureBodyContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterDataDefStatement(GeneratedYangParser.DataDefStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitDataDefStatement(GeneratedYangParser.DataDefStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterIfFeatureStatement(GeneratedYangParser.IfFeatureStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- IfFeatureListener.processIfFeatureEntry(this, ctx);
- }
- }
-
- @Override
- public void exitIfFeatureStatement(GeneratedYangParser.IfFeatureStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterUnitsStatement(GeneratedYangParser.UnitsStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- UnitsListener.processUnitsEntry(this, ctx);
- }
- }
-
- @Override
- public void exitUnitsStatement(GeneratedYangParser.UnitsStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterTypedefStatement(GeneratedYangParser.TypedefStatementContext ctx) {
- TypeDefListener.processTypeDefEntry(this, ctx);
- }
-
- @Override
- public void exitTypedefStatement(GeneratedYangParser.TypedefStatementContext ctx) {
- TypeDefListener.processTypeDefExit(this, ctx);
- }
-
- @Override
- public void enterTypeStatement(GeneratedYangParser.TypeStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- TypeListener.processTypeEntry(this, ctx);
- }
- }
-
- @Override
- public void exitTypeStatement(GeneratedYangParser.TypeStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- TypeListener.processTypeExit(this, ctx);
- }
- }
-
- @Override
- public void enterTypeBodyStatements(GeneratedYangParser.TypeBodyStatementsContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitTypeBodyStatements(GeneratedYangParser.TypeBodyStatementsContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterDecimal64Specification(GeneratedYangParser.Decimal64SpecificationContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- Decimal64Listener.processDecimal64Entry(this, ctx);
- }
- }
-
- @Override
- public void exitDecimal64Specification(GeneratedYangParser.Decimal64SpecificationContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- Decimal64Listener.processDecimal64Exit(this, ctx);
- }
- }
-
- @Override
- public void enterFractionDigitStatement(GeneratedYangParser.FractionDigitStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- FractionDigitsListener.processFractionDigitsEntry(this, ctx);
- }
- }
-
- @Override
- public void exitFractionDigitStatement(GeneratedYangParser.FractionDigitStatementContext currentContext) {
- // do nothing
- }
-
- @Override
- public void enterNumericalRestrictions(GeneratedYangParser.NumericalRestrictionsContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitNumericalRestrictions(GeneratedYangParser.NumericalRestrictionsContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterRangeStatement(GeneratedYangParser.RangeStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- RangeRestrictionListener.processRangeRestrictionEntry(this, ctx);
- }
- }
-
- @Override
- public void exitRangeStatement(GeneratedYangParser.RangeStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- RangeRestrictionListener.processRangeRestrictionExit(this, ctx);
- }
- }
-
- @Override
- public void enterCommonStatements(GeneratedYangParser.CommonStatementsContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitCommonStatements(GeneratedYangParser.CommonStatementsContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterStringRestrictions(GeneratedYangParser.StringRestrictionsContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitStringRestrictions(GeneratedYangParser.StringRestrictionsContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterLengthStatement(GeneratedYangParser.LengthStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- LengthRestrictionListener.processLengthRestrictionEntry(this, ctx);
- }
- }
-
- @Override
- public void exitLengthStatement(GeneratedYangParser.LengthStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- LengthRestrictionListener.processLengthRestrictionExit(this, ctx);
- }
- }
-
- @Override
- public void enterPatternStatement(GeneratedYangParser.PatternStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- PatternRestrictionListener.processPatternRestrictionEntry(this, ctx);
- }
- }
-
- @Override
- public void exitPatternStatement(GeneratedYangParser.PatternStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- PatternRestrictionListener.processPatternRestrictionExit(this, ctx);
- }
- }
-
- @Override
- public void enterDefaultStatement(GeneratedYangParser.DefaultStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- DefaultListener.processDefaultEntry(this, ctx);
- }
- }
-
- @Override
- public void exitDefaultStatement(GeneratedYangParser.DefaultStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterEnumSpecification(GeneratedYangParser.EnumSpecificationContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- EnumerationListener.processEnumerationEntry(this, ctx);
- }
- }
-
- @Override
- public void exitEnumSpecification(GeneratedYangParser.EnumSpecificationContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- EnumerationListener.processEnumerationExit(this, ctx);
- }
- }
-
- @Override
- public void enterEnumStatement(GeneratedYangParser.EnumStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- EnumListener.processEnumEntry(this, ctx);
- }
- }
-
- @Override
- public void exitEnumStatement(GeneratedYangParser.EnumStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- EnumListener.processEnumExit(this, ctx);
- }
- }
-
- @Override
- public void enterEnumStatementBody(GeneratedYangParser.EnumStatementBodyContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitEnumStatementBody(GeneratedYangParser.EnumStatementBodyContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterLeafrefSpecification(GeneratedYangParser.LeafrefSpecificationContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- LeafrefListener.processLeafrefEntry(this, ctx);
- }
- }
-
- @Override
- public void exitLeafrefSpecification(GeneratedYangParser.LeafrefSpecificationContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- LeafrefListener.processLeafrefExit(this, ctx);
- }
- }
-
- @Override
- public void enterPathStatement(GeneratedYangParser.PathStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- PathListener.processPathEntry(this, ctx);
- }
- }
-
- @Override
- public void exitPathStatement(GeneratedYangParser.PathStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterRequireInstanceStatement(GeneratedYangParser.RequireInstanceStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- RequireInstanceListener.processRequireInstanceEntry(this, ctx);
- }
- }
-
- @Override
- public void exitRequireInstanceStatement(GeneratedYangParser.RequireInstanceStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterInstanceIdentifierSpecification(GeneratedYangParser.InstanceIdentifierSpecificationContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitInstanceIdentifierSpecification(GeneratedYangParser.InstanceIdentifierSpecificationContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterIdentityrefSpecification(GeneratedYangParser.IdentityrefSpecificationContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- IdentityRefListener.processIdentityRefEntry(this, ctx);
- }
- }
-
- @Override
- public void exitIdentityrefSpecification(GeneratedYangParser.IdentityrefSpecificationContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- IdentityRefListener.processIdentityRefExit(this, ctx);
- }
- }
-
- @Override
- public void enterUnionSpecification(GeneratedYangParser.UnionSpecificationContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- UnionListener.processUnionEntry(this, ctx);
- }
- }
-
- @Override
- public void exitUnionSpecification(GeneratedYangParser.UnionSpecificationContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- UnionListener.processUnionExit(this, ctx);
- }
- }
-
- @Override
- public void enterBitsSpecification(GeneratedYangParser.BitsSpecificationContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- BitsListener.processBitsEntry(this, ctx);
- }
- }
-
- @Override
- public void exitBitsSpecification(GeneratedYangParser.BitsSpecificationContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- BitsListener.processBitsExit(this, ctx);
- }
- }
-
- @Override
- public void enterBitStatement(GeneratedYangParser.BitStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- BitListener.processBitEntry(this, ctx);
- }
- }
-
- @Override
- public void exitBitStatement(GeneratedYangParser.BitStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- BitListener.processBitExit(this, ctx);
- }
- }
-
- @Override
- public void enterBitBodyStatement(GeneratedYangParser.BitBodyStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitBitBodyStatement(GeneratedYangParser.BitBodyStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterPositionStatement(GeneratedYangParser.PositionStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- PositionListener.processPositionEntry(this, ctx);
- }
- }
-
- @Override
- public void exitPositionStatement(GeneratedYangParser.PositionStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterStatusStatement(GeneratedYangParser.StatusStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- StatusListener.processStatusEntry(this, ctx);
- }
- }
-
- @Override
- public void exitStatusStatement(GeneratedYangParser.StatusStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterConfigStatement(GeneratedYangParser.ConfigStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- ConfigListener.processConfigEntry(this, ctx);
- }
- }
-
- @Override
- public void exitConfigStatement(GeneratedYangParser.ConfigStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterMandatoryStatement(GeneratedYangParser.MandatoryStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- MandatoryListener.processMandatoryEntry(this, ctx);
- }
- }
-
- @Override
- public void exitMandatoryStatement(GeneratedYangParser.MandatoryStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterPresenceStatement(GeneratedYangParser.PresenceStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- PresenceListener.processPresenceEntry(this, ctx);
- }
- }
-
- @Override
- public void exitPresenceStatement(GeneratedYangParser.PresenceStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterOrderedByStatement(GeneratedYangParser.OrderedByStatementContext ctx) {
- handleUnsupportedYangConstruct(YangConstructType.ORDERED_BY_DATA, ctx, CURRENTLY_UNSUPPORTED, getFileName());
- }
-
- @Override
- public void exitOrderedByStatement(GeneratedYangParser.OrderedByStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterMustStatement(GeneratedYangParser.MustStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- MustListener.processMustEntry(this, ctx);
- }
- }
-
- @Override
- public void exitMustStatement(GeneratedYangParser.MustStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- MustListener.processMustExit(this, ctx);
- }
- }
-
- @Override
- public void enterErrorMessageStatement(GeneratedYangParser.ErrorMessageStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- ErrorMessageListener.processErrorMessageEntry(this, ctx);
- }
- }
-
- @Override
- public void exitErrorMessageStatement(GeneratedYangParser.ErrorMessageStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterErrorAppTagStatement(GeneratedYangParser.ErrorAppTagStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- ErrorAppTagListener.processErrorAppTagMessageEntry(this, ctx);
- }
- }
-
- @Override
- public void exitErrorAppTagStatement(GeneratedYangParser.ErrorAppTagStatementContext ctx) {
- //do nothing
- }
-
- @Override
- public void enterMinElementsStatement(GeneratedYangParser.MinElementsStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- MinElementsListener.processMinElementsEntry(this, ctx);
- }
- }
-
- @Override
- public void exitMinElementsStatement(GeneratedYangParser.MinElementsStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterMaxElementsStatement(GeneratedYangParser.MaxElementsStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- MaxElementsListener.processMaxElementsEntry(this, ctx);
- }
- }
-
- @Override
- public void exitMaxElementsStatement(GeneratedYangParser.MaxElementsStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterValueStatement(GeneratedYangParser.ValueStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- ValueListener.processValueEntry(this, ctx);
- }
- }
-
- @Override
- public void exitValueStatement(GeneratedYangParser.ValueStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterGroupingStatement(GeneratedYangParser.GroupingStatementContext ctx) {
- GroupingListener.processGroupingEntry(this, ctx);
- }
-
- @Override
- public void exitGroupingStatement(GeneratedYangParser.GroupingStatementContext ctx) {
- GroupingListener.processGroupingExit(this, ctx);
- }
-
- @Override
- public void enterContainerStatement(GeneratedYangParser.ContainerStatementContext ctx) {
- ContainerListener.processContainerEntry(this, ctx);
- }
-
- @Override
- public void exitContainerStatement(GeneratedYangParser.ContainerStatementContext ctx) {
- ContainerListener.processContainerExit(this, ctx);
- }
-
- @Override
- public void enterLeafStatement(GeneratedYangParser.LeafStatementContext ctx) {
- LeafListener.processLeafEntry(this, ctx);
- }
-
- @Override
- public void exitLeafStatement(GeneratedYangParser.LeafStatementContext ctx) {
- LeafListener.processLeafExit(this, ctx);
- }
-
- @Override
- public void enterLeafListStatement(GeneratedYangParser.LeafListStatementContext ctx) {
- LeafListListener.processLeafListEntry(this, ctx);
- }
-
- @Override
- public void exitLeafListStatement(GeneratedYangParser.LeafListStatementContext ctx) {
- LeafListListener.processLeafListExit(this, ctx);
- }
-
- @Override
- public void enterListStatement(GeneratedYangParser.ListStatementContext ctx) {
- ListListener.processListEntry(this, ctx);
- }
-
- @Override
- public void exitListStatement(GeneratedYangParser.ListStatementContext ctx) {
- ListListener.processListExit(this, ctx);
- }
-
- @Override
- public void enterKeyStatement(GeneratedYangParser.KeyStatementContext ctx) {
- KeyListener.processKeyEntry(this, ctx);
- }
-
- @Override
- public void exitKeyStatement(GeneratedYangParser.KeyStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterUniqueStatement(GeneratedYangParser.UniqueStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- UniqueListener.processUniqueEntry(this, ctx);
- }
- }
-
- @Override
- public void exitUniqueStatement(GeneratedYangParser.UniqueStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterChoiceStatement(GeneratedYangParser.ChoiceStatementContext ctx) {
- ChoiceListener.processChoiceEntry(this, ctx);
- }
-
- @Override
- public void exitChoiceStatement(GeneratedYangParser.ChoiceStatementContext ctx) {
- ChoiceListener.processChoiceExit(this, ctx);
- }
-
- @Override
- public void enterShortCaseStatement(GeneratedYangParser.ShortCaseStatementContext ctx) {
- ShortCaseListener.processShortCaseEntry(this, ctx);
- }
-
- @Override
- public void exitShortCaseStatement(GeneratedYangParser.ShortCaseStatementContext ctx) {
- ShortCaseListener.processShortCaseExit(this, ctx);
- }
-
- @Override
- public void enterCaseStatement(GeneratedYangParser.CaseStatementContext ctx) {
- CaseListener.processCaseEntry(this, ctx);
- }
-
- @Override
- public void exitCaseStatement(GeneratedYangParser.CaseStatementContext ctx) {
- CaseListener.processCaseExit(this, ctx);
- }
-
- @Override
- public void enterAnyxmlStatement(GeneratedYangParser.AnyxmlStatementContext ctx) {
- increaseUnsupportedYangConstructDepth();
- handleUnsupportedYangConstruct(YangConstructType.ANYXML_DATA, ctx, UNSUPPORTED_YANG_CONSTRUCT, getFileName());
- }
-
- @Override
- public void exitAnyxmlStatement(GeneratedYangParser.AnyxmlStatementContext ctx) {
- decreaseUnsupportedYangConstructDepth();
- }
-
- @Override
- public void enterUsesStatement(GeneratedYangParser.UsesStatementContext ctx) {
- UsesListener.processUsesEntry(this, ctx);
- }
-
- @Override
- public void exitUsesStatement(GeneratedYangParser.UsesStatementContext ctx) {
- UsesListener.processUsesExit(this, ctx);
- }
-
- @Override
- public void enterRefineStatement(GeneratedYangParser.RefineStatementContext ctx) {
- increaseUnsupportedYangConstructDepth();
- handleUnsupportedYangConstruct(YangConstructType.REFINE_DATA, ctx, UNSUPPORTED_YANG_CONSTRUCT, getFileName());
- }
-
- @Override
- public void exitRefineStatement(GeneratedYangParser.RefineStatementContext ctx) {
- decreaseUnsupportedYangConstructDepth();
- }
-
- @Override
- public void enterRefineContainerStatements(GeneratedYangParser.RefineContainerStatementsContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitRefineContainerStatements(GeneratedYangParser.RefineContainerStatementsContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterRefineLeafStatements(GeneratedYangParser.RefineLeafStatementsContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitRefineLeafStatements(GeneratedYangParser.RefineLeafStatementsContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterRefineLeafListStatements(GeneratedYangParser.RefineLeafListStatementsContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitRefineLeafListStatements(GeneratedYangParser.RefineLeafListStatementsContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterRefineListStatements(GeneratedYangParser.RefineListStatementsContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitRefineListStatements(GeneratedYangParser.RefineListStatementsContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterRefineChoiceStatements(GeneratedYangParser.RefineChoiceStatementsContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitRefineChoiceStatements(GeneratedYangParser.RefineChoiceStatementsContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterRefineCaseStatements(GeneratedYangParser.RefineCaseStatementsContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitRefineCaseStatements(GeneratedYangParser.RefineCaseStatementsContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterRefineAnyxmlStatements(GeneratedYangParser.RefineAnyxmlStatementsContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitRefineAnyxmlStatements(GeneratedYangParser.RefineAnyxmlStatementsContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterAugmentStatement(GeneratedYangParser.AugmentStatementContext ctx) {
- AugmentListener.processAugmentEntry(this, ctx);
- }
-
- @Override
- public void exitAugmentStatement(GeneratedYangParser.AugmentStatementContext ctx) {
- AugmentListener.processAugmentExit(this, ctx);
- }
-
- @Override
- public void enterWhenStatement(GeneratedYangParser.WhenStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- WhenListener.processWhenEntry(this, ctx);
- }
- }
-
- @Override
- public void exitWhenStatement(GeneratedYangParser.WhenStatementContext ctx) {
- if (getUnsupportedYangConstructDepth() == 0) {
- WhenListener.processWhenExit(this, ctx);
- }
- }
-
- @Override
- public void enterRpcStatement(GeneratedYangParser.RpcStatementContext ctx) {
- RpcListener.processRpcEntry(this, ctx);
- }
-
- @Override
- public void exitRpcStatement(GeneratedYangParser.RpcStatementContext ctx) {
- RpcListener.processRpcExit(this, ctx);
- }
-
- @Override
- public void enterInputStatement(GeneratedYangParser.InputStatementContext ctx) {
- InputListener.processInputEntry(this, ctx);
- }
-
- @Override
- public void exitInputStatement(GeneratedYangParser.InputStatementContext ctx) {
- InputListener.processInputExit(this, ctx);
- }
-
- @Override
- public void enterOutputStatement(GeneratedYangParser.OutputStatementContext ctx) {
- OutputListener.processOutputEntry(this, ctx);
- }
-
- @Override
- public void exitOutputStatement(GeneratedYangParser.OutputStatementContext ctx) {
- OutputListener.processOutputExit(this, ctx);
- }
-
- @Override
- public void enterNotificationStatement(GeneratedYangParser.NotificationStatementContext ctx) {
- NotificationListener.processNotificationEntry(this, ctx);
- }
-
- @Override
- public void exitNotificationStatement(GeneratedYangParser.NotificationStatementContext ctx) {
- NotificationListener.processNotificationExit(this, ctx);
- }
-
- @Override
- public void enterDeviationStatement(GeneratedYangParser.DeviationStatementContext ctx) {
- increaseUnsupportedYangConstructDepth();
- handleUnsupportedYangConstruct(YangConstructType.DEVIATION_DATA, ctx, UNSUPPORTED_YANG_CONSTRUCT,
- getFileName());
- }
-
- @Override
- public void exitDeviationStatement(GeneratedYangParser.DeviationStatementContext ctx) {
- decreaseUnsupportedYangConstructDepth();
- }
-
- @Override
- public void enterDeviateNotSupportedStatement(GeneratedYangParser.DeviateNotSupportedStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitDeviateNotSupportedStatement(GeneratedYangParser.DeviateNotSupportedStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterDeviateAddStatement(GeneratedYangParser.DeviateAddStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitDeviateAddStatement(GeneratedYangParser.DeviateAddStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterDeviateDeleteStatement(GeneratedYangParser.DeviateDeleteStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitDeviateDeleteStatement(GeneratedYangParser.DeviateDeleteStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterDeviateReplaceStatement(GeneratedYangParser.DeviateReplaceStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitDeviateReplaceStatement(GeneratedYangParser.DeviateReplaceStatementContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterString(GeneratedYangParser.StringContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitString(GeneratedYangParser.StringContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterIdentifier(GeneratedYangParser.IdentifierContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitIdentifier(GeneratedYangParser.IdentifierContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterDateArgumentString(GeneratedYangParser.DateArgumentStringContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitDateArgumentString(GeneratedYangParser.DateArgumentStringContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterRange(GeneratedYangParser.RangeContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitRange(GeneratedYangParser.RangeContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterLength(GeneratedYangParser.LengthContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitLength(GeneratedYangParser.LengthContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterPath(GeneratedYangParser.PathContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitPath(GeneratedYangParser.PathContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterPosition(GeneratedYangParser.PositionContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitPosition(GeneratedYangParser.PositionContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterStatus(GeneratedYangParser.StatusContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitStatus(GeneratedYangParser.StatusContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterConfig(GeneratedYangParser.ConfigContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitConfig(GeneratedYangParser.ConfigContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterMandatory(GeneratedYangParser.MandatoryContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitMandatory(GeneratedYangParser.MandatoryContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterOrderedBy(GeneratedYangParser.OrderedByContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitOrderedBy(GeneratedYangParser.OrderedByContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterMinValue(GeneratedYangParser.MinValueContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitMinValue(GeneratedYangParser.MinValueContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterMaxValue(GeneratedYangParser.MaxValueContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitMaxValue(GeneratedYangParser.MaxValueContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterKey(GeneratedYangParser.KeyContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitKey(GeneratedYangParser.KeyContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterUnique(GeneratedYangParser.UniqueContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitUnique(GeneratedYangParser.UniqueContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterRefine(GeneratedYangParser.RefineContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitRefine(GeneratedYangParser.RefineContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterAugment(GeneratedYangParser.AugmentContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitAugment(GeneratedYangParser.AugmentContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterDeviation(GeneratedYangParser.DeviationContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitDeviation(GeneratedYangParser.DeviationContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterYangConstruct(GeneratedYangParser.YangConstructContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitYangConstruct(GeneratedYangParser.YangConstructContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterCompilerAnnotationStatement(GeneratedYangParser.CompilerAnnotationStatementContext ctx) {
- CompilerAnnotationListener.processCompilerAnnotationEntry(this, ctx);
- }
-
- @Override
- public void exitCompilerAnnotationStatement(GeneratedYangParser.CompilerAnnotationStatementContext ctx) {
- CompilerAnnotationListener.processCompilerAnnotationExit(this, ctx);
- }
-
- @Override
- public void enterCompilerAnnotationBodyStatement(GeneratedYangParser.CompilerAnnotationBodyStatementContext ctx) {
- // do nothing
- }
-
- @Override
- public void exitCompilerAnnotationBodyStatement(GeneratedYangParser.CompilerAnnotationBodyStatementContext ctx) {
- // do nothing
- }
-
- @Override
- public void enterAppDataStructureStatement(GeneratedYangParser.AppDataStructureStatementContext ctx) {
- AppDataStructureListener.processAppDataStructureEntry(this, ctx);
- }
-
- @Override
- public void exitAppDataStructureStatement(GeneratedYangParser.AppDataStructureStatementContext ctx) {
- AppDataStructureListener.processAppDataStructureExit(this, ctx);
- }
-
- @Override
- public void enterAppDataStructure(GeneratedYangParser.AppDataStructureContext currentContext) {
- // do nothing
- }
-
- @Override
- public void exitAppDataStructure(GeneratedYangParser.AppDataStructureContext currentContext) {
- // do nothing
- }
-
- @Override
- public void enterAppExtendedStatement(GeneratedYangParser.AppExtendedStatementContext currentContext) {
- AppExtendedNameListener.processAppExtendedNameEntry(this, currentContext);
- }
-
- @Override
- public void exitAppExtendedStatement(GeneratedYangParser.AppExtendedStatementContext currentContext) {
- // TODO : to be implemented
- }
-
- @Override
- public void enterExtendedName(GeneratedYangParser.ExtendedNameContext currentContext) {
- // do nothing
- }
-
- @Override
- public void exitExtendedName(GeneratedYangParser.ExtendedNameContext currentContext) {
- // do nothing
- }
-
- @Override
- public void enterDataStructureKeyStatement(GeneratedYangParser.DataStructureKeyStatementContext ctx) {
- DataStructureKeyListener.processDataStructureKeyEntry(this, ctx);
- }
-
- @Override
- public void exitDataStructureKeyStatement(GeneratedYangParser.DataStructureKeyStatementContext ctx) {
- // do nothing
- }
-
- @Override
- public void enterVersion(GeneratedYangParser.VersionContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitVersion(GeneratedYangParser.VersionContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterValue(GeneratedYangParser.ValueContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitValue(GeneratedYangParser.ValueContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterRequireInstance(GeneratedYangParser.RequireInstanceContext ctx) {
- // do nothing.
- }
-
- @Override
- public void exitRequireInstance(GeneratedYangParser.RequireInstanceContext ctx) {
- // do nothing.
- }
-
- @Override
- public void enterFraction(GeneratedYangParser.FractionContext ctx) {
- // TODO: implement the method.
- }
-
- @Override
- public void exitFraction(GeneratedYangParser.FractionContext ctx) {
- // TODO: implement the method.
- }
-
- @Override
- public void visitTerminal(TerminalNode terminalNode) {
- // do nothing.
- }
-
- @Override
- public void visitErrorNode(ErrorNode errorNode) {
- // do nothing.
- }
-
- @Override
- public void enterEveryRule(ParserRuleContext parserRuleContext) {
- // do nothing.
- }
-
- @Override
- public void exitEveryRule(ParserRuleContext parserRuleContext) {
- // do nothing.
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/YangUtilsParserManager.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/YangUtilsParserManager.java
deleted file mode 100644
index c2b29ed..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/YangUtilsParserManager.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl;
-
-import java.io.IOException;
-
-import org.antlr.v4.runtime.ANTLRFileStream;
-import org.antlr.v4.runtime.ANTLRInputStream;
-import org.antlr.v4.runtime.CommonTokenStream;
-import org.antlr.v4.runtime.tree.ParseTree;
-import org.antlr.v4.runtime.tree.ParseTreeWalker;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.parser.YangUtilsParser;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangLexer;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.parserutils.ParseTreeErrorListener;
-
-/**
- * Represents file parsing, parse tree creation and data model tree creation
- * corresponding to an input YANG file.
- */
-public class YangUtilsParserManager implements YangUtilsParser {
-
- @Override
- public YangNode getDataModel(String yangFile) throws IOException, ParserException {
-
- /**
- * Create a char stream that reads from YANG file. Throws an exception
- * in case input YANG file is either null or non existent.
- */
- ANTLRInputStream input;
- try {
- input = new ANTLRFileStream(yangFile);
- } catch (IOException e) {
- throw new ParserException("YANG file error : YANG file does not exist. " + yangFile);
- }
-
- // Create a lexer that feeds off of input char stream.
- GeneratedYangLexer lexer = new GeneratedYangLexer(input);
-
- // Create a buffer of tokens pulled from the lexer.
- CommonTokenStream tokens = new CommonTokenStream(lexer);
-
- // Create a parser that feeds off the tokens buffer.
- GeneratedYangParser parser = new GeneratedYangParser(tokens);
-
- // Remove console error listener.
- parser.removeErrorListeners();
-
- // Create instance of customized error listener.
- ParseTreeErrorListener parseTreeErrorListener = new ParseTreeErrorListener();
-
- // Add customized error listener to catch errors during parsing.
- parser.addErrorListener(parseTreeErrorListener);
-
- ParseTree tree;
-
- try {
- // Begin parsing YANG file and generate parse tree.
- tree = parser.yangfile();
- } catch (ParserException parserException) {
- parserException.setFileName(yangFile);
- throw parserException;
- }
-
- // Create a walker to walk the parse tree.
- ParseTreeWalker walker = new ParseTreeWalker();
-
- // Create a listener implementation class object.
- TreeWalkListener treeWalker = new TreeWalkListener();
- treeWalker.setFileName(yangFile);
- /**
- * Walk parse tree, provide call backs to methods in listener and build
- * data model tree.
- */
- try {
- walker.walk(treeWalker, tree);
- } catch (ParserException listenerException) {
- // TODO free incomplete data model tree.
- listenerException.setFileName(yangFile);
- throw listenerException;
- } finally {
- // TODO free parsable stack
- }
-
- // Returns the Root Node of the constructed data model tree.
- return treeWalker.getRootNode();
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/AppDataStructureListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/AppDataStructureListener.java
deleted file mode 100644
index e9ff96c..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/AppDataStructureListener.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangAppDataStructure;
-import org.onosproject.yangutils.datamodel.YangCompilerAnnotation;
-import org.onosproject.yangutils.datamodel.YangDataStructure;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.YangDataStructure.getDataStructureType;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.APP_DATA_STRUCTURE;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidPrefix;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * app-data-structure-stmt = prefix:app-data-structure-keyword string
- * (";" /
- * "{"
- * [data-structure-key-stmt stmtsep]
- * "}")
- *
- * ANTLR grammar rule
- * appDataStructureStatement : APP_DATA_STRUCTURE appDataStructure (STMTEND | (LEFT_CURLY_BRACE
- * dataStructureKeyStatement? RIGHT_CURLY_BRACE));
- */
-
-/**
- * Represents listener based call back function corresponding to the "app-data-structure"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class AppDataStructureListener {
-
- /**
- * Creates a new app-data-structure listener.
- */
- private AppDataStructureListener() {
- }
-
- /**
- * Performs validation and updates the data model tree. It is called when parser receives an
- * input matching the grammar rule(app-data-structure).
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processAppDataStructureEntry(TreeWalkListener listener,
- GeneratedYangParser.AppDataStructureStatementContext ctx) {
-
- checkStackIsNotEmpty(listener, MISSING_HOLDER, APP_DATA_STRUCTURE, "", ENTRY);
-
- String prefix = getValidPrefix(ctx.APP_DATA_STRUCTURE().getText(), APP_DATA_STRUCTURE, ctx);
- YangDataStructure dataStructure = getDataStructureType(ctx.appDataStructure().getText());
-
- YangAppDataStructure appDataStructure = new YangAppDataStructure();
- appDataStructure.setPrefix(prefix);
- appDataStructure.setDataStructure(dataStructure);
- appDataStructure.setLineNumber(ctx.getStart().getLine());
- appDataStructure.setCharPosition(ctx.getStart().getCharPositionInLine());
- appDataStructure.setFileName(listener.getFileName());
-
- Parsable curData = listener.getParsedDataStack().peek();
- if (curData instanceof YangCompilerAnnotation) {
- YangCompilerAnnotation compilerAnnotation = ((YangCompilerAnnotation) curData);
- compilerAnnotation.setYangAppDataStructure(appDataStructure);
- listener.getParsedDataStack().push(appDataStructure);
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, APP_DATA_STRUCTURE,
- "", ENTRY));
- }
- }
-
- /**
- * Performs validation and updates the data model tree. It is called when parser
- * exits from grammar rule (app-data-structure).
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processAppDataStructureExit(TreeWalkListener listener,
- GeneratedYangParser.AppDataStructureStatementContext ctx) {
-
- checkStackIsNotEmpty(listener, MISSING_HOLDER, APP_DATA_STRUCTURE, "", EXIT);
- if (!(listener.getParsedDataStack().peek() instanceof YangAppDataStructure)) {
- throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, APP_DATA_STRUCTURE,
- "", EXIT));
- }
- listener.getParsedDataStack().pop();
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/AppExtendedNameListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/AppExtendedNameListener.java
deleted file mode 100644
index 7ff8bbe..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/AppExtendedNameListener.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangAppExtended;
-import org.onosproject.yangutils.datamodel.YangCompilerAnnotation;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.APP_EXTENDED_NAME_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidPrefix;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * app-extended-stmt = prefix:app-extended-name-keyword string ";"
- *
- * ANTLR grammar rule
- * appExtendedStatement : APP_EXTENDED extendedName STMTEND;
- */
-
-/**
- * Represents listener based call back function corresponding to the "app-extended-name"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class AppExtendedNameListener {
-
- /**
- * Creates a new app-extended-name listener.
- */
- private AppExtendedNameListener() {
- }
-
- /**
- * Performs validation and updates the data model tree. It is called when parser receives an
- * input matching the grammar rule(app-extended-name).
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processAppExtendedNameEntry(TreeWalkListener listener,
- GeneratedYangParser.AppExtendedStatementContext ctx) {
-
- checkStackIsNotEmpty(listener, MISSING_HOLDER, APP_EXTENDED_NAME_DATA, ctx.extendedName().getText(), ENTRY);
-
- String prefix = getValidPrefix(ctx.APP_EXTENDED().getText(), APP_EXTENDED_NAME_DATA, ctx);
- YangAppExtended extendedName = new YangAppExtended();
- extendedName.setPrefix(prefix);
- extendedName.setYangAppExtendedName(removeQuotesAndHandleConcat(ctx.extendedName().getText()));
-
- extendedName.setLineNumber(ctx.getStart().getLine());
- extendedName.setCharPosition(ctx.getStart().getCharPositionInLine());
- extendedName.setFileName(listener.getFileName());
- Parsable curData = listener.getParsedDataStack().peek();
- if (curData instanceof YangCompilerAnnotation) {
- YangCompilerAnnotation compilerAnnotation = ((YangCompilerAnnotation) curData);
- compilerAnnotation.setYangAppExtendedName(extendedName);
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, APP_EXTENDED_NAME_DATA,
- ctx.extendedName().getText(), ENTRY));
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ArgumentListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ArgumentListener.java
deleted file mode 100644
index 797da12..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ArgumentListener.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangExtension;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.ARGUMENT_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * argument-stmt = argument-keyword sep identifier-arg-str optsep
- * (";" /
- * "{" stmtsep
- * [yin-element-stmt stmtsep]
- * "}")
- * *
- * ANTLR grammar rule
- * argumentStatement : ARGUMENT_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE argumentBody RIGHT_CURLY_BRACE);
- * argumentBody : yinElementStatement?;
- */
-
-/**
- * Represents listener based call back function corresponding to the "argument"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class ArgumentListener {
-
- /**
- * Creates a new argument listener.
- */
- private ArgumentListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar rule
- * (argument), performs validation and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processArgumentEntry(TreeWalkListener listener,
- GeneratedYangParser.ArgumentStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, ARGUMENT_DATA, ctx.identifier().getText(), ENTRY);
-
- String identifier = getValidIdentifier(ctx.identifier().getText(), ARGUMENT_DATA, ctx);
-
- Parsable curData = listener.getParsedDataStack().peek();
- if (curData instanceof YangExtension) {
- YangExtension extension = ((YangExtension) curData);
-
- extension.setLineNumber(ctx.getStart().getLine());
- extension.setCharPosition(ctx.getStart().getCharPositionInLine());
- extension.setFileName(listener.getFileName());
- extension.setArgumentName(identifier);
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, ARGUMENT_DATA,
- ctx.identifier().getText(), ENTRY));
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/AugmentListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/AugmentListener.java
deleted file mode 100644
index dedbb82..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/AugmentListener.java
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangAtomicPath;
-import org.onosproject.yangutils.datamodel.YangAugment;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangSubModule;
-import org.onosproject.yangutils.datamodel.YangUses;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.linker.impl.YangResolutionInfoImpl;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser.AugmentStatementContext;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import java.util.List;
-
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.addResolutionInfo;
-import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.AUGMENT_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.CASE_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.DATA_DEF_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.DESCRIPTION_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.REFERENCE_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.STATUS_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.WHEN_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getPrefixRemovedName;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidAbsoluteSchemaNodeId;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.validateCardinalityEitherOne;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.validateCardinalityMaxOne;
-import static org.onosproject.yangutils.translator.tojava.YangDataModelFactory.getYangAugmentNode;
-import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * augment-stmt = augment-keyword sep augment-arg-str optsep
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [when-stmt stmtsep]
- * *(if-feature-stmt stmtsep)
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * 1*((data-def-stmt stmtsep) /
- * (case-stmt stmtsep))
- * "}"
- *
- * ANTLR grammar rule
- * augmentStatement : AUGMENT_KEYWORD augment LEFT_CURLY_BRACE (whenStatement |
- * ifFeatureStatement | statusStatement | descriptionStatement |
- * referenceStatement | dataDefStatement | caseStatement)* RIGHT_CURLY_BRACE;
- */
-
-/**
- * Represents listener based call back function corresponding to the "augment"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class AugmentListener {
-
- // No instantiation.
- private AugmentListener() {
- }
-
- /**
- * Performs validation and updates the data model tree when parser
- * receives an input matching the grammar rule (augment), performs
- * validation and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object
- */
- public static void processAugmentEntry(TreeWalkListener listener,
- AugmentStatementContext ctx) {
-
- checkStackIsNotEmpty(listener, MISSING_HOLDER, AUGMENT_DATA,
- ctx.augment().getText(), ENTRY);
-
- Parsable curData = listener.getParsedDataStack().peek();
-
- if (curData instanceof YangUses) {
- throw new ParserException(constructListenerErrorMessage(
- UNHANDLED_PARSED_DATA, AUGMENT_DATA,
- ctx.augment().getText(), ENTRY));
- }
-
- if (!(curData instanceof YangModule) &&
- !(curData instanceof YangSubModule)) {
- throw new ParserException(constructListenerErrorMessage(
- INVALID_HOLDER, AUGMENT_DATA,
- ctx.augment().getText(), ENTRY));
- }
-
- // Validates augment argument string
- List<YangAtomicPath> atomics =
- getValidAbsoluteSchemaNodeId(ctx.augment().getText(),
- AUGMENT_DATA, ctx);
- valSubStatCardinality(ctx);
-
- int line = ctx.getStart().getLine();
- int pos = ctx.getStart().getCharPositionInLine();
-
- detectCollidingChildUtil(listener, line, pos, EMPTY_STRING,
- AUGMENT_DATA);
-
- YangNode root = (YangNode) curData;
- String name = getPrefixRemovedName(atomics, root);
- YangAugment augment = getYangAugmentNode(JAVA_GENERATION);
- augment.setLineNumber(line);
- augment.setCharPosition(pos);
- augment.setFileName(listener.getFileName());
- augment.setTargetNode(atomics);
- augment.setName(removeQuotesAndHandleConcat(ctx.augment().getText()));
- augment.setPrefixRemovedName(name);
-
- try {
- root.addChild(augment);
- } catch (DataModelException e) {
- throw new ParserException(constructExtendedListenerErrorMessage(
- UNHANDLED_PARSED_DATA, AUGMENT_DATA,
- ctx.augment().getText(), ENTRY, e.getMessage()));
- }
- listener.getParsedDataStack().push(augment);
-
- // Adds resolution info to the list
- YangResolutionInfoImpl<YangAugment> info =
- new YangResolutionInfoImpl<>(augment, root, line, pos);
- addToResolution(info, ctx);
- }
-
- /**
- * Performs validations and update the data model tree when parser exits
- * from grammar rule (augment).
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processAugmentExit(TreeWalkListener listener,
- AugmentStatementContext ctx) {
-
- //Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, AUGMENT_DATA,
- ctx.augment().getText(), EXIT);
-
- if (!(listener.getParsedDataStack().peek() instanceof YangAugment)) {
- throw new ParserException(constructListenerErrorMessage(
- MISSING_CURRENT_HOLDER, AUGMENT_DATA,
- ctx.augment().getText(), EXIT));
- }
- listener.getParsedDataStack().pop();
- }
-
- /**
- * Validates the cardinality of augment sub-statements as per grammar.
- *
- * @param ctx context object
- */
- private static void valSubStatCardinality(AugmentStatementContext ctx) {
-
- validateCardinalityMaxOne(ctx.statusStatement(), STATUS_DATA,
- AUGMENT_DATA, ctx.augment().getText());
-
- validateCardinalityMaxOne(ctx.descriptionStatement(), DESCRIPTION_DATA,
- AUGMENT_DATA, ctx.augment().getText());
-
- validateCardinalityMaxOne(ctx.referenceStatement(), REFERENCE_DATA,
- AUGMENT_DATA, ctx.augment().getText());
-
- validateCardinalityMaxOne(ctx.whenStatement(), WHEN_DATA, AUGMENT_DATA,
- ctx.augment().getText());
-
- validateCardinalityEitherOne(ctx.dataDefStatement(), DATA_DEF_DATA,
- ctx.caseStatement(), CASE_DATA,
- AUGMENT_DATA, ctx.augment().getText(),
- ctx);
- }
-
- /**
- * Add to resolution list.
- *
- * @param info resolution info
- * @param ctx context object
- */
- private static void addToResolution(YangResolutionInfoImpl<YangAugment> info,
- AugmentStatementContext ctx) {
- try {
- addResolutionInfo(info);
- } catch (DataModelException e) {
- throw new ParserException(constructExtendedListenerErrorMessage(
- UNHANDLED_PARSED_DATA, AUGMENT_DATA,
- ctx.augment().getText(), EXIT, e.getMessage()));
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/BaseFileListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/BaseFileListener.java
deleted file mode 100644
index 8ba4d02..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/BaseFileListener.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangSubModule;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.YANGBASE_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_CHILD;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsEmpty;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ANTLR grammar rule
- * yangfile : module_stmt
- * | submodule_stmt;
- */
-
-/**
- * Representation of call back function corresponding to the "base rule" defined in
- * ANTLR grammar file.
- */
-public final class BaseFileListener {
-
- /**
- * Creates a new base listener.
- */
- private BaseFileListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar rule
- * (yangfile), perform validations and update the data model tree.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processYangFileEntry(TreeWalkListener listener, GeneratedYangParser.YangfileContext ctx) {
-
- // Check if stack is empty.
- checkStackIsEmpty(listener, INVALID_HOLDER, YANGBASE_DATA, "", ENTRY);
-
- }
-
- /**
- * It is called when parser exits from grammar rule (yangfile), it perform
- * validations and update the data model tree.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processYangFileExit(TreeWalkListener listener, GeneratedYangParser.YangfileContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, YANGBASE_DATA, "", EXIT);
-
- // Data Model tree root node is set.
- if (listener.getParsedDataStack().peek() instanceof YangModule
- || listener.getParsedDataStack().peek() instanceof YangSubModule) {
- listener.setRootNode((YangNode) listener.getParsedDataStack().pop());
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_CHILD, YANGBASE_DATA, "", EXIT));
- }
-
- // Check if stack is empty.
- checkStackIsEmpty(listener, INVALID_HOLDER, YANGBASE_DATA, "", EXIT);
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/BaseListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/BaseListener.java
deleted file mode 100644
index ebf85a7..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/BaseListener.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangBase;
-import org.onosproject.yangutils.datamodel.YangIdentity;
-import org.onosproject.yangutils.datamodel.YangIdentityRef;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeIdentifier;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.linker.impl.YangResolutionInfoImpl;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.addResolutionInfo;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.*;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidNodeIdentifier;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.BASE_DATA;
-
-/**
- * base-stmt = base-keyword sep identifier-ref-arg-str
- * optsep stmtend*
- * identifier-ref-arg = [prefix ":"] identifier
- */
-
-/**
- * Represents listener based call back function corresponding to the "base"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class BaseListener {
-
- //Creates a new base listener.
- private BaseListener() {
- }
-
- /**
- * Performs validation and updates the data model tree when parser receives an
- * input matching the grammar rule (base).
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processBaseEntry(TreeWalkListener listener,
- GeneratedYangParser.BaseStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, BASE_DATA, ctx.string().getText(), ENTRY);
-
- YangNodeIdentifier nodeIdentifier = getValidNodeIdentifier(ctx.string().getText(), BASE_DATA, ctx);
-
- Parsable tmpData = listener.getParsedDataStack().peek();
-
- /**
- * For identityref base node identifier is copied in identity listener itself, so no need to process
- * base statement for indentityref
- */
- if (tmpData instanceof YangIdentityRef) {
- return;
- }
-
- if (!(tmpData instanceof YangIdentity)) {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, BASE_DATA,
- ctx.string().getText(), ENTRY));
- }
-
- YangBase yangBase = new YangBase();
- yangBase.setBaseIdentifier(nodeIdentifier);
- ((YangIdentity) tmpData).setBaseNode(yangBase);
-
- int errorLine = ctx.getStart().getLine();
- int errorPosition = ctx.getStart().getCharPositionInLine();
-
- yangBase.setLineNumber(errorLine);
- yangBase.setCharPosition(errorPosition);
- yangBase.setFileName(listener.getFileName());
-
- // Add resolution information to the list
- YangResolutionInfoImpl resolutionInfo =
- new YangResolutionInfoImpl<YangBase>(yangBase, (YangNode) tmpData, errorLine, errorPosition);
- addToResolutionList(resolutionInfo, ctx);
- }
-
- /**
- * Add to resolution list.
- *
- * @param resolutionInfo resolution information
- * @param ctx context object of the grammar rule
- */
- private static void addToResolutionList(YangResolutionInfoImpl<YangBase> resolutionInfo,
- GeneratedYangParser.BaseStatementContext ctx) {
-
- try {
- addResolutionInfo(resolutionInfo);
- } catch (DataModelException e) {
- throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
- BASE_DATA, ctx.string().getText(), EXIT, e.getMessage()));
- }
- }
-
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/BelongsToListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/BelongsToListener.java
deleted file mode 100644
index 4f7ecf8..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/BelongsToListener.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangBelongsTo;
-import org.onosproject.yangutils.datamodel.YangSubModule;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.BELONGS_TO_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * submodule-header-stmts =
- * ;; these stmts can appear in any order
- * [yang-version-stmt stmtsep]
- * belongs-to-stmt stmtsep
- *
- * belongs-to-stmt = belongs-to-keyword sep identifier-arg-str
- * optsep
- * "{" stmtsep
- * prefix-stmt stmtsep
- * "}"
- *
- * ANTLR grammar rule
- * submodule_header_statement : yang_version_stmt? belongs_to_stmt
- * | belongs_to_stmt yang_version_stmt?
- * ;
- * belongs_to_stmt : BELONGS_TO_KEYWORD identifier LEFT_CURLY_BRACE belongs_to_stmt_body RIGHT_CURLY_BRACE;
- * belongs_to_stmt_body : prefix_stmt;
- */
-
-/**
- * Represents listener based call back function corresponding to the
- * "belongs to" rule defined in ANTLR grammar file for corresponding ABNF rule
- * in RFC 6020.
- */
-public final class BelongsToListener {
-
- /**
- * Creates a new belongto listener.
- */
- private BelongsToListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar rule
- * (belongsto), perform validations and update the data model tree.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processBelongsToEntry(TreeWalkListener listener,
- GeneratedYangParser.BelongstoStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, BELONGS_TO_DATA, ctx.identifier().getText(),
- ENTRY);
-
- String identifier = getValidIdentifier(ctx.identifier().getText(), BELONGS_TO_DATA, ctx);
-
- YangBelongsTo belongstoNode = new YangBelongsTo();
- belongstoNode.setBelongsToModuleName(identifier);
-
- // Set the line number and character position in line for the belongs to.
- int errorLine = ctx.getStart().getLine();
- int errorPosition = ctx.getStart().getCharPositionInLine();
- belongstoNode.setLineNumber(errorLine);
- belongstoNode.setCharPosition(errorPosition);
- belongstoNode.setFileName(listener.getFileName());
-
- // Push belongsto into the stack.
- listener.getParsedDataStack().push(belongstoNode);
- }
-
- /**
- * It is called when parser exits from grammar rule (belongsto), it perform
- * validations and update the data model tree.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processBelongsToExit(TreeWalkListener listener,
- GeneratedYangParser.BelongstoStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, BELONGS_TO_DATA, ctx.identifier().getText(),
- EXIT);
-
- Parsable tmpBelongstoNode = listener.getParsedDataStack().peek();
- if (tmpBelongstoNode instanceof YangBelongsTo) {
- listener.getParsedDataStack().pop();
-
- // Check for stack to be empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, BELONGS_TO_DATA,
- ctx.identifier().getText(), EXIT);
-
- Parsable tmpNode = listener.getParsedDataStack().peek();
- switch (tmpNode.getYangConstructType()) {
- case SUB_MODULE_DATA: {
- YangSubModule subModule = (YangSubModule) tmpNode;
- subModule.setBelongsTo((YangBelongsTo) tmpBelongstoNode);
- subModule.setPrefix(subModule.getBelongsTo().getPrefix());
- break;
- }
- default:
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, BELONGS_TO_DATA,
- ctx.identifier().getText(),
- EXIT));
- }
- } else {
- throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, BELONGS_TO_DATA,
- ctx.identifier().getText(), EXIT));
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/BitListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/BitListener.java
deleted file mode 100644
index bd60910..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/BitListener.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * bit-stmt = bit-keyword sep identifier-arg-str optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [position-stmt stmtsep]
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * "}"
- * "}")
- *
- * ANTLR grammar rule
- * bitStatement : BIT_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE bitBodyStatement RIGHT_CURLY_BRACE);
- *
- * bitBodyStatement : positionStatement? statusStatement? descriptionStatement? referenceStatement?
- * | positionStatement? statusStatement? referenceStatement? descriptionStatement?
- * | positionStatement? descriptionStatement? statusStatement? referenceStatement?
- * | positionStatement? descriptionStatement? referenceStatement? statusStatement?
- * | positionStatement? referenceStatement? statusStatement? descriptionStatement?
- * | positionStatement? referenceStatement? descriptionStatement? statusStatement?
- * | statusStatement? positionStatement? descriptionStatement? referenceStatement?
- * | statusStatement? positionStatement? referenceStatement? descriptionStatement?
- * | statusStatement? descriptionStatement? descriptionStatement? positionStatement?
- * | statusStatement? descriptionStatement? positionStatement? descriptionStatement?
- * | statusStatement? referenceStatement? positionStatement? descriptionStatement?
- * | statusStatement? referenceStatement? descriptionStatement? positionStatement?
- * | descriptionStatement? positionStatement? statusStatement? referenceStatement?
- * | descriptionStatement? positionStatement? referenceStatement? statusStatement?
- * | descriptionStatement? statusStatement? positionStatement? referenceStatement?
- * | descriptionStatement? statusStatement? referenceStatement? positionStatement?
- * | descriptionStatement? referenceStatement? positionStatement? statusStatement?
- * | descriptionStatement? referenceStatement? statusStatement? positionStatement?
- * | referenceStatement? positionStatement? descriptionStatement? statusStatement?
- * | referenceStatement? positionStatement? statusStatement? descriptionStatement?
- * | referenceStatement? statusStatement? descriptionStatement? positionStatement?
- * | referenceStatement? statusStatement? positionStatement? descriptionStatement?
- * | referenceStatement? descriptionStatement? positionStatement? statusStatement?
- * | referenceStatement? descriptionStatement? statusStatement? positionStatement?
- * ;
- */
-
-import java.util.Map;
-
-import org.onosproject.yangutils.datamodel.YangBit;
-import org.onosproject.yangutils.datamodel.YangBits;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.BIT_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_CONTENT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/**
- * Represents listener based call back function corresponding to the "bit"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class BitListener {
-
- /**
- * Creates a new bit listener.
- */
- private BitListener() {
- }
-
- /**
- * It is called when parser enters grammar rule (bit), it perform
- * validations and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processBitEntry(TreeWalkListener listener,
- GeneratedYangParser.BitStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, BIT_DATA, ctx.identifier().getText(), ENTRY);
-
- String identifier = getValidIdentifier(ctx.identifier().getText(), BIT_DATA, ctx);
-
- YangBit bitNode = new YangBit();
- bitNode.setBitName(identifier);
-
- bitNode.setLineNumber(ctx.getStart().getLine());
- bitNode.setCharPosition(ctx.getStart().getCharPositionInLine());
- bitNode.setFileName(listener.getFileName());
- listener.getParsedDataStack().push(bitNode);
- }
-
- /**
- * It is called when parser exits from grammar rule (bit), it perform
- * validations and update the data model tree.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processBitExit(TreeWalkListener listener,
- GeneratedYangParser.BitStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, BIT_DATA, ctx.identifier().getText(), EXIT);
-
- Parsable tmpBitNode = listener.getParsedDataStack().peek();
- if (tmpBitNode instanceof YangBit) {
- listener.getParsedDataStack().pop();
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, BIT_DATA, ctx.identifier().getText(), EXIT);
-
- Parsable tmpNode = listener.getParsedDataStack().peek();
- switch (tmpNode.getYangConstructType()) {
- case BITS_DATA: {
- YangBits yangBits = (YangBits) tmpNode;
- if (ctx.bitBodyStatement() == null || ctx.bitBodyStatement().positionStatement() == null) {
- int maxPosition = 0;
- boolean isPositionPresent = false;
-
- for (Map.Entry<Integer, YangBit> element : yangBits.getBitPositionMap().entrySet()) {
- if (maxPosition <= element.getKey()) {
- maxPosition = element.getKey();
- isPositionPresent = true;
- }
- }
-
- if (isPositionPresent) {
- maxPosition++;
- }
- ((YangBit) tmpBitNode).setPosition(maxPosition);
- }
- try {
- yangBits.addBitInfo((YangBit) tmpBitNode);
- } catch (DataModelException e) {
- ParserException parserException = new ParserException(constructExtendedListenerErrorMessage(
- INVALID_CONTENT, BIT_DATA, ctx.identifier().getText(), EXIT, e.getMessage()));
- parserException.setLine(ctx.getStart().getLine());
- parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
- throw parserException;
- }
- break;
- }
- default:
- throw new ParserException(
- constructListenerErrorMessage(INVALID_HOLDER, BIT_DATA, ctx.identifier().getText(), EXIT));
- }
- } else {
- throw new ParserException(
- constructListenerErrorMessage(MISSING_CURRENT_HOLDER, BIT_DATA, ctx.identifier().getText(), EXIT));
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/BitsListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/BitsListener.java
deleted file mode 100644
index a476902..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/BitsListener.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * type-body-stmts = numerical-restrictions /
- * decimal64-specification /
- * string-restrictions /
- * enum-specification /
- * leafref-specification /
- * identityref-specification /
- * instance-identifier-specification /
- * bits-specification /
- * union-specification
- *
- * bits-specification = 1*(bit-stmt stmtsep)
- *
- * ANTLR grammar rule
- *
- * typeBodyStatements : numericalRestrictions | stringRestrictions | enumSpecification
- * | leafrefSpecification | identityrefSpecification | instanceIdentifierSpecification
- * | bitsSpecification | unionSpecification;
- *
- * bitsSpecification : bitStatement+;
- */
-
-import org.onosproject.yangutils.datamodel.YangBits;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangLeafList;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.YangTypeDef;
-import org.onosproject.yangutils.datamodel.YangUnion;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.BITS_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.TYPE_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/**
- * Represents listener based call back function corresponding to the "bits" rule
- * defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class BitsListener {
-
- /**
- * Creates a new bits listener.
- */
- private BitsListener() {
- }
-
- /**
- * It is called when parser enters grammar rule (bits), it perform
- * validations and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processBitsEntry(TreeWalkListener listener,
- GeneratedYangParser.BitsSpecificationContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, BITS_DATA, "", ENTRY);
-
- if (listener.getParsedDataStack().peek() instanceof YangType) {
- YangBits bitsNode = new YangBits();
-
- bitsNode.setLineNumber(ctx.getStart().getLine());
- bitsNode.setCharPosition(ctx.getStart().getCharPositionInLine());
- bitsNode.setFileName(listener.getFileName());
- Parsable typeData = listener.getParsedDataStack().pop();
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, BITS_DATA, "", ENTRY);
-
- Parsable tmpData = listener.getParsedDataStack().peek();
-
- switch (tmpData.getYangConstructType()) {
- case LEAF_DATA:
- bitsNode.setBitsName(((YangLeaf) tmpData).getName());
- break;
- case LEAF_LIST_DATA:
- bitsNode.setBitsName(((YangLeafList) tmpData).getName());
- break;
- case TYPEDEF_DATA:
- bitsNode.setBitsName(((YangTypeDef) tmpData).getName());
- break;
- case UNION_DATA:
- bitsNode.setBitsName(((YangUnion) tmpData).getName());
- break;
- // TODO typedef, union, deviate.
- default:
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, TYPE_DATA,
- ((YangType<?>) typeData).getDataTypeName(), ENTRY));
- }
- listener.getParsedDataStack().push(typeData);
- listener.getParsedDataStack().push(bitsNode);
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, BITS_DATA, "", ENTRY));
- }
- }
-
- /**
- * It is called when parser exits from grammar rule (bits), it perform
- * validations and update the data model tree.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processBitsExit(TreeWalkListener listener,
- GeneratedYangParser.BitsSpecificationContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, BITS_DATA, "", EXIT);
-
- Parsable tmpBitsNode = listener.getParsedDataStack().peek();
- if (tmpBitsNode instanceof YangBits) {
- YangBits bitsNode = (YangBits) tmpBitsNode;
- listener.getParsedDataStack().pop();
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, BITS_DATA, "", EXIT);
-
- Parsable tmpNode = listener.getParsedDataStack().peek();
- switch (tmpNode.getYangConstructType()) {
- case TYPE_DATA: {
- YangType<YangBits> typeNode = (YangType<YangBits>) tmpNode;
- typeNode.setDataTypeExtendedInfo(bitsNode);
- break;
- }
- default:
- throw new ParserException(
- constructListenerErrorMessage(INVALID_HOLDER, BITS_DATA, "", EXIT));
- }
- } else {
- throw new ParserException(
- constructListenerErrorMessage(MISSING_CURRENT_HOLDER, BITS_DATA, "", EXIT));
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/CaseListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/CaseListener.java
deleted file mode 100644
index f3803da..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/CaseListener.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangAugment;
-import org.onosproject.yangutils.datamodel.YangCase;
-import org.onosproject.yangutils.datamodel.YangChoice;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.CASE_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.DESCRIPTION_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.REFERENCE_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.STATUS_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.WHEN_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.validateCardinalityMaxOne;
-import static org.onosproject.yangutils.translator.tojava.YangDataModelFactory.getYangCaseNode;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * case-stmt = case-keyword sep identifier-arg-str optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [when-stmt stmtsep]
- * *(if-feature-stmt stmtsep)
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * *(data-def-stmt stmtsep)
- * "}")
- *
- * ANTLR grammar rule
- * caseStatement : CASE_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement
- * | statusStatement | descriptionStatement | referenceStatement | dataDefStatement)* RIGHT_CURLY_BRACE);
- */
-
-/**
- * Represents listener based call back function corresponding to the "case" rule
- * defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class CaseListener {
-
- /**
- * Create a new case listener.
- */
- private CaseListener() {
- }
-
- /**
- * It is called when parser enters grammar rule (case), it perform
- * validations and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processCaseEntry(TreeWalkListener listener,
- GeneratedYangParser.CaseStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, CASE_DATA, ctx.identifier().getText(), ENTRY);
-
- // Check validity of identifier and remove double quotes.
- String identifier = getValidIdentifier(ctx.identifier().getText(), CASE_DATA, ctx);
-
- // Validate sub statement cardinality.
- validateSubStatementsCardinality(ctx);
-
- Parsable curData = listener.getParsedDataStack().peek();
-
- // Check for identifier collision
- int line = ctx.getStart().getLine();
- int charPositionInLine = ctx.getStart().getCharPositionInLine();
- detectCollidingChildUtil(listener, line, charPositionInLine, identifier, CASE_DATA);
-
- if (curData instanceof YangChoice || curData instanceof YangAugment) {
- YangCase caseNode = getYangCaseNode(JAVA_GENERATION);
- caseNode.setName(identifier);
- caseNode.setLineNumber(line);
- caseNode.setCharPosition(charPositionInLine);
- caseNode.setFileName(listener.getFileName());
- YangNode curNode = (YangNode) curData;
- try {
- curNode.addChild(caseNode);
- } catch (DataModelException e) {
- throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
- CASE_DATA, ctx.identifier().getText(), ENTRY, e.getMessage()));
- }
- listener.getParsedDataStack().push(caseNode);
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, CASE_DATA,
- ctx.identifier().getText(), ENTRY));
- }
- }
-
- /**
- * It is called when parser exits from grammar rule (case), it perform
- * validations and update the data model tree.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processCaseExit(TreeWalkListener listener,
- GeneratedYangParser.CaseStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, CASE_DATA, ctx.identifier().getText(), EXIT);
-
- if (listener.getParsedDataStack().peek() instanceof YangCase) {
- listener.getParsedDataStack().pop();
- } else {
- throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, CASE_DATA,
- ctx.identifier().getText(), EXIT));
- }
- }
-
- /**
- * Validates the cardinality of case sub-statements as per grammar.
- *
- * @param ctx context object of the grammar rule
- */
- private static void validateSubStatementsCardinality(GeneratedYangParser.CaseStatementContext ctx) {
-
- validateCardinalityMaxOne(ctx.whenStatement(), WHEN_DATA, CASE_DATA, ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.statusStatement(), STATUS_DATA, CASE_DATA, ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.descriptionStatement(), DESCRIPTION_DATA, CASE_DATA, ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.referenceStatement(), REFERENCE_DATA, CASE_DATA, ctx.identifier().getText());
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ChoiceListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ChoiceListener.java
deleted file mode 100644
index 00b9973..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ChoiceListener.java
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangAugment;
-import org.onosproject.yangutils.datamodel.YangCase;
-import org.onosproject.yangutils.datamodel.YangChoice;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.YangGrouping;
-import org.onosproject.yangutils.datamodel.YangInput;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNotification;
-import org.onosproject.yangutils.datamodel.YangOutput;
-import org.onosproject.yangutils.datamodel.YangSubModule;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-import org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation;
-
-import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.CHOICE_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.CONFIG_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.DEFAULT_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.DESCRIPTION_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.MANDATORY_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.REFERENCE_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.STATUS_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.WHEN_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_CONTENT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.validateCardinalityMaxOne;
-import static org.onosproject.yangutils.translator.tojava.YangDataModelFactory.getYangChoiceNode;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * choice-stmt = choice-keyword sep identifier-arg-str optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [when-stmt stmtsep]
- * *(if-feature-stmt stmtsep)
- * [default-stmt stmtsep]
- * [config-stmt stmtsep]
- * [mandatory-stmt stmtsep]
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * *((short-case-stmt / case-stmt) stmtsep)
- * "}")
- *
- * ANTLR grammar rule
- * choiceStatement : CHOICE_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement
- * | defaultStatement | configStatement | mandatoryStatement | statusStatement | descriptionStatement
- * | referenceStatement | shortCaseStatement | caseStatement)* RIGHT_CURLY_BRACE);
- */
-
-/**
- * Represents listener based call back function corresponding to the "choice"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class ChoiceListener {
-
- /**
- * Create a new choice listener.
- */
- private ChoiceListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar rule
- * (choice), perform validations and update the data model tree.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processChoiceEntry(TreeWalkListener listener,
- GeneratedYangParser.ChoiceStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, CHOICE_DATA, ctx.identifier().getText(), ENTRY);
-
- // Check validity of identifier and remove double quotes.
- String identifier = getValidIdentifier(ctx.identifier().getText(), CHOICE_DATA, ctx);
-
- // Validate sub statement cardinality.
- validateSubStatementsCardinality(ctx);
-
- Parsable curData = listener.getParsedDataStack().peek();
-
- // Check for identifier collision
- int line = ctx.getStart().getLine();
- int charPositionInLine = ctx.getStart().getCharPositionInLine();
- detectCollidingChildUtil(listener, line, charPositionInLine, identifier, CHOICE_DATA);
-
- if (curData instanceof YangModule || curData instanceof YangSubModule || curData instanceof YangContainer
- || curData instanceof YangList || curData instanceof YangCase || curData instanceof YangGrouping
- || curData instanceof YangAugment || curData instanceof YangInput || curData instanceof YangOutput
- || curData instanceof YangNotification) {
-
- YangChoice choiceNode = getYangChoiceNode(JAVA_GENERATION);
- choiceNode.setName(identifier);
- choiceNode.setLineNumber(line);
- choiceNode.setCharPosition(charPositionInLine);
- choiceNode.setFileName(listener.getFileName());
- /*
- * If "config" is not specified, the default is the same as the parent
- * schema node's "config" value.
- */
- if (ctx.configStatement().isEmpty()) {
- boolean parentConfig = ListenerValidation.getParentNodeConfig(listener);
- choiceNode.setConfig(parentConfig);
- }
-
- YangNode curNode = (YangNode) curData;
- try {
- curNode.addChild(choiceNode);
- } catch (DataModelException e) {
- throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
- CHOICE_DATA, ctx.identifier().getText(), ENTRY, e.getMessage()));
- }
- listener.getParsedDataStack().push(choiceNode);
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER,
- CHOICE_DATA, ctx.identifier().getText(), ENTRY));
- }
- }
-
- /**
- * It is called when parser exits from grammar rule (choice), it perform
- * validations and update the data model tree.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processChoiceExit(TreeWalkListener listener,
- GeneratedYangParser.ChoiceStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, CHOICE_DATA, ctx.identifier().getText(), EXIT);
-
- if (listener.getParsedDataStack().peek() instanceof YangChoice) {
- YangChoice choiceNode = (YangChoice) listener.getParsedDataStack().peek();
- try {
- choiceNode.validateDataOnExit();
- } catch (DataModelException e) {
- throw new ParserException(constructListenerErrorMessage(INVALID_CONTENT, CHOICE_DATA,
- ctx.identifier().getText(), EXIT));
- }
- listener.getParsedDataStack().pop();
- } else {
- throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, CHOICE_DATA,
- ctx.identifier().getText(), EXIT));
- }
- }
-
- /**
- * Validates the cardinality of choice sub-statements as per grammar.
- *
- * @param ctx context object of the grammar rule.
- */
- private static void validateSubStatementsCardinality(GeneratedYangParser.ChoiceStatementContext ctx) {
-
- validateCardinalityMaxOne(ctx.whenStatement(), WHEN_DATA, CHOICE_DATA, ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.defaultStatement(), DEFAULT_DATA, CHOICE_DATA, ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.configStatement(), CONFIG_DATA, CHOICE_DATA, ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.mandatoryStatement(), MANDATORY_DATA, CHOICE_DATA, ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.statusStatement(), STATUS_DATA, CHOICE_DATA, ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.descriptionStatement(), DESCRIPTION_DATA, CHOICE_DATA,
- ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.referenceStatement(), REFERENCE_DATA, CHOICE_DATA, ctx.identifier().getText());
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/CompilerAnnotationListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/CompilerAnnotationListener.java
deleted file mode 100644
index 6167843..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/CompilerAnnotationListener.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.util.List;
-
-import org.onosproject.yangutils.datamodel.YangAtomicPath;
-import org.onosproject.yangutils.datamodel.YangCompilerAnnotation;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangSubModule;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.linker.impl.YangResolutionInfoImpl;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.addResolutionInfo;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.COMPILER_ANNOTATION_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidAbsoluteSchemaNodeId;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidPrefix;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * compiler-annotation-stmt = prefix:compiler-annotation-keyword string
- * "{"
- * [app-data-structure-stmt stmtsep]
- * [app-extended-stmt stmtsep]
- * "}"
- *
- * ANTLR grammar rule
- * compilerAnnotationStatement : COMPILER_ANNOTATION string LEFT_CURLY_BRACE
- * compilerAnnotationBodyStatement RIGHT_CURLY_BRACE;
- *
- * compilerAnnotationBodyStatement : appDataStructureStatement? appExtendedStatement? ;
- */
-
-/**
- * Represents listener based call back function corresponding to the "compiler-annotation"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class CompilerAnnotationListener {
-
- /**
- * Creates a new compiler-annotation listener.
- */
- private CompilerAnnotationListener() {
- }
-
- /**
- * Performs validation and updates the data model tree. It is called when parser receives an
- * input matching the grammar rule(compiler-annotation).
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processCompilerAnnotationEntry(TreeWalkListener listener,
- GeneratedYangParser.CompilerAnnotationStatementContext ctx) {
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, COMPILER_ANNOTATION_DATA, ctx.string().getText(), ENTRY);
- String prefix = getValidPrefix(ctx.COMPILER_ANNOTATION().getText(), COMPILER_ANNOTATION_DATA, ctx);
-
- YangCompilerAnnotation compilerAnnotation = new YangCompilerAnnotation();
- compilerAnnotation.setPrefix(prefix);
- compilerAnnotation.setPath(removeQuotesAndHandleConcat(ctx.string().getText()));
-
- compilerAnnotation.setLineNumber(ctx.getStart().getLine());
- compilerAnnotation.setCharPosition(ctx.getStart().getCharPositionInLine());
- compilerAnnotation.setFileName(listener.getFileName());
- // Validate augment argument string
- List<YangAtomicPath> targetNodes = getValidAbsoluteSchemaNodeId(ctx.string().getText(),
- COMPILER_ANNOTATION_DATA, ctx);
-
- compilerAnnotation.setAtomicPathList(targetNodes);
-
- int line = ctx.getStart().getLine();
- int charPositionInLine = ctx.getStart().getCharPositionInLine();
-
- Parsable curData = listener.getParsedDataStack().peek();
- if (!(curData instanceof YangModule || curData instanceof YangSubModule)) {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, COMPILER_ANNOTATION_DATA,
- ctx.string().getText(), ENTRY));
- }
-
- // Add resolution information to the list
- YangResolutionInfoImpl resolutionInfo = new YangResolutionInfoImpl<>(
- compilerAnnotation, (YangNode) curData, line, charPositionInLine);
- addToResolutionList(resolutionInfo, ctx);
-
- listener.getParsedDataStack().push(compilerAnnotation);
- }
-
- /**
- * Performs validation and updates the data model tree. It is called when parser
- * exits from grammar rule (compiler-annotation).
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processCompilerAnnotationExit(TreeWalkListener listener,
- GeneratedYangParser.CompilerAnnotationStatementContext ctx) {
-
- checkStackIsNotEmpty(listener, MISSING_HOLDER, COMPILER_ANNOTATION_DATA, ctx.string().getText(), EXIT);
- if (!(listener.getParsedDataStack().peek() instanceof YangCompilerAnnotation)) {
- throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, COMPILER_ANNOTATION_DATA,
- ctx.string().getText(), EXIT));
- }
- listener.getParsedDataStack().pop();
- }
-
- /**
- * Adds to resolution list.
- *
- * @param resolutionInfo resolution information.
- * @param ctx context object of the grammar rule
- */
- private static void addToResolutionList(YangResolutionInfoImpl<YangCompilerAnnotation> resolutionInfo,
- GeneratedYangParser.CompilerAnnotationStatementContext ctx) {
-
- try {
- addResolutionInfo(resolutionInfo);
- } catch (DataModelException e) {
- throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
- COMPILER_ANNOTATION_DATA, ctx.COMPILER_ANNOTATION().getText(), ENTRY, e.getMessage()));
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ConfigListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ConfigListener.java
deleted file mode 100644
index d595cb0..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ConfigListener.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangLeafList;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.CONFIG_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidBooleanValue;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * config-stmt = config-keyword sep
- * config-arg-str stmtend
- * config-arg-str = < a string that matches the rule
- * config-arg >
- * config-arg = true-keyword / false-keyword
- *
- * ANTLR grammar rule
- * configStatement : CONFIG_KEYWORD config STMTEND;
- * config : string;
- */
-
-/**
- * Represents listener based call back function corresponding to the "config"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class ConfigListener {
-
- /**
- * Creates a new config listener.
- */
- private ConfigListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar rule
- * (config), performs validation and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processConfigEntry(TreeWalkListener listener,
- GeneratedYangParser.ConfigStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, CONFIG_DATA, "", ENTRY);
-
- boolean isConfig = getValidBooleanValue(ctx.config().getText(), CONFIG_DATA, ctx);
-
- Parsable tmpData = listener.getParsedDataStack().peek();
- switch (tmpData.getYangConstructType()) {
- case LEAF_DATA:
- YangLeaf leaf = (YangLeaf) tmpData;
- leaf.setConfig(isConfig);
- break;
- case CONTAINER_DATA:
- YangContainer container = (YangContainer) tmpData;
- container.setConfig(isConfig);
- break;
- case LEAF_LIST_DATA:
- YangLeafList leafList = (YangLeafList) tmpData;
- leafList.setConfig(isConfig);
- break;
- case LIST_DATA:
- YangList yangList = (YangList) tmpData;
- yangList.setConfig(isConfig);
- break;
- case CHOICE_DATA: // TODO
- break;
- default:
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, CONFIG_DATA, "", ENTRY));
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ContactListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ContactListener.java
deleted file mode 100644
index 4cab95d..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ContactListener.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangSubModule;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.CONTACT_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * meta-stmts = ;; these stmts can appear in any order
- * [organization-stmt stmtsep]
- * [contact-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * contact-stmt = contact-keyword sep string optsep stmtend
- *
- * ANTLR grammar rule
- * meta_stmts : organization_stmt? contact_stmt? description_stmt? reference_stmt?
- * | organization_stmt? contact_stmt? reference_stmt? description_stmt?
- * | organization_stmt? description_stmt? contact_stmt? reference_stmt?
- * | organization_stmt? description_stmt? reference_stmt? contact_stmt?
- * | organization_stmt? reference_stmt? contact_stmt? description_stmt?
- * | organization_stmt? reference_stmt? description_stmt? contact_stmt?
- * | contact_stmt? organization_stmt? description_stmt? reference_stmt?
- * | contact_stmt? organization_stmt? reference_stmt? description_stmt?
- * | contact_stmt? reference_stmt? organization_stmt? description_stmt?
- * | contact_stmt? reference_stmt? description_stmt? organization_stmt?
- * | contact_stmt? description_stmt? reference_stmt? organization_stmt?
- * | contact_stmt? description_stmt? organization_stmt? reference_stmt?
- * | reference_stmt? contact_stmt? organization_stmt? description_stmt?
- * | reference_stmt? contact_stmt? description_stmt? organization_stmt?
- * | reference_stmt? organization_stmt? contact_stmt? description_stmt?
- * | reference_stmt? organization_stmt? description_stmt? contact_stmt?
- * | reference_stmt? description_stmt? organization_stmt? contact_stmt?
- * | reference_stmt? description_stmt? contact_stmt? organization_stmt?
- * | description_stmt? reference_stmt? contact_stmt? organization_stmt?
- * | description_stmt? reference_stmt? organization_stmt? contact_stmt?
- * | description_stmt? contact_stmt? reference_stmt? organization_stmt?
- * | description_stmt? contact_stmt? organization_stmt? reference_stmt?
- * | description_stmt? organization_stmt? contact_stmt? reference_stmt?
- * | description_stmt? organization_stmt? reference_stmt? contact_stmt?
- * ;
- * contact_stmt : CONTACT_KEYWORD string STMTEND;
- */
-
-/**
- * Represents listener based call back function corresponding to the "contact"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class ContactListener {
-
- /**
- * Creates a new contact listener.
- */
- private ContactListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar rule
- * (contact), perform validations and update the data model tree.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processContactEntry(TreeWalkListener listener, GeneratedYangParser.ContactStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, CONTACT_DATA, ctx.string().getText(), ENTRY);
-
- // Obtain the node of the stack.
- Parsable tmpNode = listener.getParsedDataStack().peek();
- switch (tmpNode.getYangConstructType()) {
- case MODULE_DATA: {
- YangModule module = (YangModule) tmpNode;
- module.setContact(ctx.string().getText());
- break;
- }
- case SUB_MODULE_DATA: {
- YangSubModule subModule = (YangSubModule) tmpNode;
- subModule.setContact(ctx.string().getText());
- break;
- }
- default:
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, CONTACT_DATA,
- ctx.string().getText(), ENTRY));
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ContainerListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ContainerListener.java
deleted file mode 100644
index 7ea261b..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ContainerListener.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangAugment;
-import org.onosproject.yangutils.datamodel.YangCase;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.YangGrouping;
-import org.onosproject.yangutils.datamodel.YangInput;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNotification;
-import org.onosproject.yangutils.datamodel.YangOutput;
-import org.onosproject.yangutils.datamodel.YangSubModule;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-import org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation;
-
-import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.CONFIG_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.CONTAINER_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.DESCRIPTION_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.PRESENCE_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.REFERENCE_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.STATUS_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction
- .constructExtendedListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction
- .constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.validateCardinalityMaxOne;
-import static org.onosproject.yangutils.translator.tojava.YangDataModelFactory.getYangContainerNode;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * container-stmt = container-keyword sep identifier-arg-str optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [when-stmt stmtsep]
- * *(if-feature-stmt stmtsep)
- * *(must-stmt stmtsep)
- * [presence-stmt stmtsep]
- * [config-stmt stmtsep]
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * *((typedef-stmt /
- * grouping-stmt) stmtsep)
- * *(data-def-stmt stmtsep)
- * "}")
- *
- * ANTLR grammar rule
- * containerStatement : CONTAINER_KEYWORD identifier
- * (STMTEND | LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | mustStatement |
- * presenceStatement | configStatement | statusStatement | descriptionStatement |
- * referenceStatement | typedefStatement | groupingStatement
- * | dataDefStatement)* RIGHT_CURLY_BRACE);
- */
-
-/**
- * Represents listener based call back function corresponding to the "container"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class ContainerListener {
-
- /**
- * Creates a new container listener.
- */
- private ContainerListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar rule
- * (container), performs validation and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processContainerEntry(TreeWalkListener listener,
- GeneratedYangParser.ContainerStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, CONTAINER_DATA, ctx.identifier().getText(), ENTRY);
-
- String identifier = getValidIdentifier(ctx.identifier().getText(), CONTAINER_DATA, ctx);
-
- // Validate sub statement cardinality.
- validateSubStatementsCardinality(ctx);
-
- // Check for identifier collision
- int line = ctx.getStart().getLine();
- int charPositionInLine = ctx.getStart().getCharPositionInLine();
- detectCollidingChildUtil(listener, line, charPositionInLine, identifier, CONTAINER_DATA);
-
- YangContainer container = getYangContainerNode(JAVA_GENERATION);
- container.setName(identifier);
-
- container.setLineNumber(line);
- container.setCharPosition(charPositionInLine);
- container.setFileName(listener.getFileName());
- /*
- * If "config" is not specified, the default is the same as the parent
- * schema node's "config" value.
- */
- if (ctx.configStatement().isEmpty()) {
- boolean parentConfig = ListenerValidation.getParentNodeConfig(listener);
- container.setConfig(parentConfig);
- }
-
- Parsable curData = listener.getParsedDataStack().peek();
- if (curData instanceof YangModule || curData instanceof YangSubModule
- || curData instanceof YangContainer || curData instanceof YangList
- || curData instanceof YangCase || curData instanceof YangNotification
- || curData instanceof YangInput || curData instanceof YangOutput
- || curData instanceof YangAugment || curData instanceof YangGrouping) {
- YangNode curNode = (YangNode) curData;
- try {
- curNode.addChild(container);
- } catch (DataModelException e) {
- throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
- CONTAINER_DATA, ctx.identifier().getText(), ENTRY, e.getMessage()));
- }
- listener.getParsedDataStack().push(container);
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, CONTAINER_DATA,
- ctx.identifier().getText(), ENTRY));
- }
- }
-
- /**
- * It is called when parser exits from grammar rule (container), it perform
- * validations and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processContainerExit(TreeWalkListener listener,
- GeneratedYangParser.ContainerStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, CONTAINER_DATA, ctx.identifier().getText(), EXIT);
-
- if (listener.getParsedDataStack().peek() instanceof YangContainer) {
- YangContainer yangContainer = (YangContainer) listener.getParsedDataStack().peek();
- try {
- yangContainer.validateDataOnExit();
- } catch (DataModelException e) {
- ParserException parserException = new ParserException(constructExtendedListenerErrorMessage(
- UNHANDLED_PARSED_DATA, CONTAINER_DATA, ctx.identifier().getText(), EXIT, e.getMessage()));
- parserException.setLine(ctx.getStart().getLine());
- parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
- throw parserException;
- }
- listener.getParsedDataStack().pop();
- } else {
- throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, CONTAINER_DATA,
- ctx.identifier().getText(), EXIT));
- }
- }
-
- /**
- * Validates the cardinality of container sub-statements as per grammar.
- *
- * @param ctx context object of the grammar rule
- */
- private static void validateSubStatementsCardinality(GeneratedYangParser.ContainerStatementContext ctx) {
-
- validateCardinalityMaxOne(ctx.presenceStatement(), PRESENCE_DATA, CONTAINER_DATA, ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.configStatement(), CONFIG_DATA, CONTAINER_DATA, ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.descriptionStatement(), DESCRIPTION_DATA, CONTAINER_DATA,
- ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.referenceStatement(), REFERENCE_DATA, CONTAINER_DATA, ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.statusStatement(), STATUS_DATA, CONTAINER_DATA, ctx.identifier().getText());
- // TODO validate 'when' cardinality
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/DataStructureKeyListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/DataStructureKeyListener.java
deleted file mode 100644
index 9cee91f..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/DataStructureKeyListener.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangAppDataStructure;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.KEY_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * data-structure-key-stmt = prefix:key-keyword string ";"
- *
- * ANTLR grammar rule
- * dataStructureKeyStatement : DATA_STRUCTURE_KEY string STMTEND;
- */
-
-/**
- * Represents listener based call back function corresponding to the "key"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class DataStructureKeyListener {
-
- /**
- * Creates a new data-structure-key listener.
- */
- private DataStructureKeyListener() {
- }
-
- /**
- * Performs validation and updates the data model tree. It is called when parser receives an
- * input matching the grammar rule(key).
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processDataStructureKeyEntry(TreeWalkListener listener,
- GeneratedYangParser.DataStructureKeyStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, KEY_DATA, ctx.string().getText(), ENTRY);
-
- Parsable tmpData = listener.getParsedDataStack().peek();
- if (listener.getParsedDataStack().peek() instanceof YangAppDataStructure) {
- YangAppDataStructure dataStructure = (YangAppDataStructure) tmpData;
-
- dataStructure.setLineNumber(ctx.getStart().getLine());
- dataStructure.setCharPosition(ctx.getStart().getCharPositionInLine());
- dataStructure.setFileName(listener.getFileName());
- String tmpKeyValue = removeQuotesAndHandleConcat(ctx.string().getText());
- if (tmpKeyValue.contains(SPACE)) {
- String[] keyValues = tmpKeyValue.split(SPACE);
- for (String keyValue : keyValues) {
- dataStructure.addKey(keyValue);
- }
- } else {
- dataStructure.addKey(tmpKeyValue);
- }
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, KEY_DATA, ctx.string().getText(),
- ENTRY));
- }
- }
-}
-
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/Decimal64Listener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/Decimal64Listener.java
deleted file mode 100644
index 14ae935..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/Decimal64Listener.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * type-body-stmts = numerical-restrictions /
- * decimal64-specification /
- * string-restrictions /
- * enum-specification /
- * leafref-specification /
- * identityref-specification /
- * instance-identifier-specification /
- * bits-specification /
- * union-specification
- *
- * decimal64-specification = fraction-digits-stmt [range-stmt stmtsep]
- *
- * fraction-digits-stmt = fraction-digits-keyword sep
- * fraction-digits-arg-str stmtend
- *
- * fraction-digits-arg-str = < a string that matches the rule
- * fraction-digits-arg >
- *
- * fraction-digits-arg = ("1" ["0" / "1" / "2" / "3" / "4" /
- * "5" / "6" / "7" / "8"])
- * / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9"
- *
- * range-stmt = range-keyword sep range-arg-str optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [error-message-stmt stmtsep]
- * [error-app-tag-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * "}")
- * ANTLR grammar rule
- *
- * typeBodyStatements : numericalRestrictions | decimal64Specification | stringRestrictions | enumSpecification
- * | leafrefSpecification | identityrefSpecification | instanceIdentifierSpecification
- * | bitsSpecification | unionSpecification;
- *
- * decimal64Specification : fractionDigitStatement rangeStatement?;
- *
- * fractionDigitStatement : FRACTION_DIGITS_KEYWORD fraction STMTEND;
- *
- * fraction : string;
- */
-
-import org.onosproject.yangutils.datamodel.YangDecimal64;
-import org.onosproject.yangutils.datamodel.YangRangeRestriction;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.DECIMAL64_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/**
- * Represents listener based call back function corresponding to the "decimal64" rule
- * defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class Decimal64Listener {
-
- /**
- * Creates a new Decimal64 listener.
- */
- private Decimal64Listener() {
- }
-
- /**
- * It is called when parser enters grammar rule (decimal64), it perform
- * validations and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processDecimal64Entry(TreeWalkListener listener,
- GeneratedYangParser.Decimal64SpecificationContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, DECIMAL64_DATA, "", ENTRY);
-
- Parsable tmpNode = listener.getParsedDataStack().peek();
- if (tmpNode instanceof YangType) {
- YangType<YangDecimal64<YangRangeRestriction>> typeNode =
- (YangType<YangDecimal64<YangRangeRestriction>>) tmpNode;
- YangDecimal64 decimal64Node = new YangDecimal64();
- typeNode.setDataTypeExtendedInfo(decimal64Node);
-
- decimal64Node.setLineNumber(ctx.getStart().getLine());
- decimal64Node.setCharPosition(ctx.getStart().getCharPositionInLine());
- decimal64Node.setFileName(listener.getFileName());
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, DECIMAL64_DATA, "", ENTRY));
- }
- }
-
- /**
- * Performs validation and updates the data model tree.
- * It is called when parser exits from grammar rule (decimal64).
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processDecimal64Exit(TreeWalkListener listener,
- GeneratedYangParser.Decimal64SpecificationContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, DECIMAL64_DATA, "", EXIT);
-
- Parsable tmpNode = listener.getParsedDataStack().peek();
- if (tmpNode instanceof YangType) {
- YangType<YangDecimal64<YangRangeRestriction>> typeNode =
- (YangType<YangDecimal64<YangRangeRestriction>>) tmpNode;
- YangDecimal64<YangRangeRestriction> decimal64Node = typeNode.getDataTypeExtendedInfo();
- try {
- decimal64Node.validateRange();
- } catch (DataModelException e) {
- throw new ParserException(e);
- }
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, DECIMAL64_DATA, "", EXIT));
- }
- }
-}
\ No newline at end of file
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/DefaultListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/DefaultListener.java
deleted file mode 100644
index b93fe52..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/DefaultListener.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * typedef-stmt = typedef-keyword sep identifier-arg-str optsep
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * type-stmt stmtsep
- * [units-stmt stmtsep]
- * [default-stmt stmtsep]
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * "}"
- * default-stmt = default-keyword sep string stmtend
-
- *
- * ANTLR grammar rule
- * typedefStatement : TYPEDEF_KEYWORD IDENTIFIER LEFT_CURLY_BRACE
- * (typeStatement | unitsStatement | defaultStatement | statusStatement
- * | descriptionStatement | referenceStatement)* RIGHT_CURLY_BRACE;
- * defaultStatement : DEFAULT_KEYWORD string STMTEND;
- */
-
-import org.onosproject.yangutils.datamodel.YangChoice;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangTypeDef;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.DEFAULT_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/**
- * Represents listener for default YANG statement.
- */
-public final class DefaultListener {
-
- /**
- * Creates a new default listener.
- */
- private DefaultListener() {
- }
-
- /**
- * It is called when parser enters grammar rule (default), it perform
- * validations and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processDefaultEntry(TreeWalkListener listener,
- GeneratedYangParser.DefaultStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, DEFAULT_DATA, ctx.string().getText(), ENTRY);
-
- Parsable tmpNode = listener.getParsedDataStack().peek();
- switch (tmpNode.getYangConstructType()) {
- case TYPEDEF_DATA: {
- YangTypeDef typeDef = (YangTypeDef) tmpNode;
- typeDef.setDefaultValueInString(removeQuotesAndHandleConcat(ctx.string().getText()));
- break;
- }
- case LEAF_DATA: {
- YangLeaf leaf = (YangLeaf) tmpNode;
- leaf.setDefaultValueInString(removeQuotesAndHandleConcat(ctx.string().getText()));
- break;
- }
- case CHOICE_DATA: {
- YangChoice choice = (YangChoice) tmpNode;
- choice.setDefaultValueInString(removeQuotesAndHandleConcat(ctx.string().getText()));
- break;
- }
- default:
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER,
- DEFAULT_DATA, ctx.string().getText(), ENTRY));
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/DescriptionListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/DescriptionListener.java
deleted file mode 100644
index c7988a8..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/DescriptionListener.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangDesc;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.DESCRIPTION_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * description-stmt = description-keyword sep string optsep stmtend
- *
- * ANTLR grammar rule
- * descriptionStatement : DESCRIPTION_KEYWORD string STMTEND;
- */
-
-/**
- * Represents listener based call back function corresponding to the
- * "description" rule defined in ANTLR grammar file for corresponding ABNF rule
- * in RFC 6020.
- */
-public final class DescriptionListener {
-
- /**
- * Creates a new description listener.
- */
- private DescriptionListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar rule
- * (description), perform validations and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processDescriptionEntry(TreeWalkListener listener,
- GeneratedYangParser.DescriptionStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, DESCRIPTION_DATA, ctx.string().getText(), ENTRY);
-
- Parsable tmpData = listener.getParsedDataStack().peek();
- if (tmpData instanceof YangDesc) {
- YangDesc description = (YangDesc) tmpData;
- description.setDescription(ctx.string().getText());
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, DESCRIPTION_DATA,
- ctx.string().getText(), ENTRY));
- }
- }
-}
\ No newline at end of file
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/EnumListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/EnumListener.java
deleted file mode 100644
index b0beef5..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/EnumListener.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * enum-stmt = enum-keyword sep string optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [value-stmt stmtsep]
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * "}")
- *
- * ANTLR grammar rule
- * enumStatement : ENUM_KEYWORD string (STMTEND | LEFT_CURLY_BRACE enumStatementBody RIGHT_CURLY_BRACE);
- *
- * enumStatementBody : valueStatement? statusStatement? descriptionStatement? referenceStatement?
- * | valueStatement? statusStatement? referenceStatement? descriptionStatement?
- * | valueStatement? descriptionStatement? statusStatement? referenceStatement?
- * | valueStatement? descriptionStatement? referenceStatement? statusStatement?
- * | valueStatement? referenceStatement? statusStatement? descriptionStatement?
- * | valueStatement? referenceStatement? descriptionStatement? statusStatement?
- * | statusStatement? valueStatement? descriptionStatement? referenceStatement?
- * | statusStatement? valueStatement? referenceStatement? descriptionStatement?
- * | statusStatement? descriptionStatement? descriptionStatement? valueStatement?
- * | statusStatement? descriptionStatement? valueStatement? descriptionStatement?
- * | statusStatement? referenceStatement? valueStatement? descriptionStatement?
- * | statusStatement? referenceStatement? descriptionStatement? valueStatement?
- * | descriptionStatement? valueStatement? statusStatement? referenceStatement?
- * | descriptionStatement? valueStatement? referenceStatement? statusStatement?
- * | descriptionStatement? statusStatement? valueStatement? referenceStatement?
- * | descriptionStatement? statusStatement? referenceStatement? valueStatement?
- * | descriptionStatement? referenceStatement? valueStatement? statusStatement?
- * | descriptionStatement? referenceStatement? statusStatement? valueStatement?
- * | referenceStatement? valueStatement? descriptionStatement? statusStatement?
- * | referenceStatement? valueStatement? statusStatement? descriptionStatement?
- * | referenceStatement? statusStatement? descriptionStatement? valueStatement?
- * | referenceStatement? statusStatement? valueStatement? descriptionStatement?
- * | referenceStatement? descriptionStatement? valueStatement? statusStatement?
- * | referenceStatement? descriptionStatement? statusStatement? valueStatement?
- * ;
- */
-
-import org.onosproject.yangutils.datamodel.YangEnum;
-import org.onosproject.yangutils.datamodel.YangEnumeration;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.ENUM_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.DUPLICATE_ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-import static org.onosproject.yangutils.utils.UtilConstants.QUOTES;
-import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
-
-/**
- * Represents listener based call back function corresponding to the "enum" rule
- * defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class EnumListener {
-
- /**
- * Creates a new enum listener.
- */
- private EnumListener() {
- }
-
- /**
- * It is called when parser enters grammar rule (enum), it perform
- * validations and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processEnumEntry(TreeWalkListener listener, GeneratedYangParser.EnumStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, ENUM_DATA, ctx.string().getText(), ENTRY);
-
- YangEnum enumNode = new YangEnum();
- enumNode.setNamedValue(getValidNamedValue(ctx.string().getText()));
-
- enumNode.setLineNumber(ctx.getStart().getLine());
- enumNode.setCharPosition(ctx.getStart().getCharPositionInLine());
- enumNode.setFileName(listener.getFileName());
- listener.getParsedDataStack().push(enumNode);
- }
-
- /*Removes quotes from the enum name if present.*/
- private static String getValidNamedValue(String name) {
- if (name.contains(QUOTES)) {
- name = name.replace(QUOTES, EMPTY_STRING);
- }
- return name;
- }
-
- /**
- * It is called when parser exits from grammar rule (enum), it perform
- * validations and update the data model tree.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processEnumExit(TreeWalkListener listener, GeneratedYangParser.EnumStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, ENUM_DATA, ctx.string().getText(), EXIT);
-
- Parsable tmpEnumNode = listener.getParsedDataStack().peek();
- if (tmpEnumNode instanceof YangEnum) {
- listener.getParsedDataStack().pop();
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, ENUM_DATA, ctx.string().getText(), EXIT);
-
- Parsable tmpNode = listener.getParsedDataStack().peek();
- switch (tmpNode.getYangConstructType()) {
- case ENUMERATION_DATA: {
- YangEnumeration yangEnumeration = (YangEnumeration) tmpNode;
- if (ctx.enumStatementBody() == null || ctx.enumStatementBody().valueStatement() == null) {
- int maxValue = 0;
- boolean isValuePresent = false;
-
- for (YangEnum curEnum : yangEnumeration.getEnumSet()) {
- if (curEnum.getValue() == Integer.MAX_VALUE) {
- ParserException parserException = new ParserException("YANG file error : "
- + "An enum value MUST be specified for enum substatements following the one"
- + "with the current highest value");
- parserException.setLine(ctx.getStart().getLine());
- parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
- throw parserException;
- } else if (maxValue <= curEnum.getValue()) {
- maxValue = curEnum.getValue();
- isValuePresent = true;
- }
- }
- if (isValuePresent) {
- maxValue++;
- }
- ((YangEnum) tmpEnumNode).setValue(maxValue);
- }
- try {
- yangEnumeration.addEnumInfo((YangEnum) tmpEnumNode);
- } catch (DataModelException e) {
- ParserException parserException = new ParserException(constructExtendedListenerErrorMessage(
- DUPLICATE_ENTRY, ENUM_DATA, ctx.string().getText(), EXIT, e.getMessage()));
- parserException.setLine(ctx.getStart().getLine());
- parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
- throw parserException;
- }
- break;
- }
- default:
- throw new ParserException(
- constructListenerErrorMessage(INVALID_HOLDER, ENUM_DATA, ctx.string().getText(), EXIT));
- }
- } else {
- throw new ParserException(
- constructListenerErrorMessage(MISSING_CURRENT_HOLDER, ENUM_DATA, ctx.string().getText(), EXIT));
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/EnumerationListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/EnumerationListener.java
deleted file mode 100644
index 5eff217..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/EnumerationListener.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * type-body-stmts = numerical-restrictions /
- * decimal64-specification /
- * string-restrictions /
- * enum-specification /
- * leafref-specification /
- * identityref-specification /
- * instance-identifier-specification /
- * bits-specification /
- * union-specification
- *
- * enum-specification = 1*(enum-stmt stmtsep)
- *
- * ANTLR grammar rule
- *
- * typeBodyStatements : numericalRestrictions | stringRestrictions | enumSpecification
- * | leafrefSpecification | identityrefSpecification | instanceIdentifierSpecification
- * | bitsSpecification | unionSpecification;
- *
- * enumSpecification : enumStatement+;
- */
-
-import org.onosproject.yangutils.datamodel.YangEnumeration;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangLeafList;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.YangTypeDef;
-import org.onosproject.yangutils.datamodel.YangUnion;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.ENUMERATION_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.TYPE_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-import static org.onosproject.yangutils.translator.tojava.YangDataModelFactory.getYangEnumerationNode;
-
-/**
- * Represents listener based call back function corresponding to the
- * "enumeration" rule defined in ANTLR grammar file for corresponding ABNF rule
- * in RFC 6020.
- */
-public final class EnumerationListener {
-
- /**
- * Suffix to be used while creating enumeration class.
- */
- private static final String ENUMERATION_CLASS_SUFFIX = "_enum";
-
- /**
- * Creates a new enumeration listener.
- */
- private EnumerationListener() {
- }
-
- /**
- * It is called when parser enters grammar rule (enumeration), it perform
- * validations and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processEnumerationEntry(TreeWalkListener listener,
- GeneratedYangParser.EnumSpecificationContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, ENUMERATION_DATA, "", ENTRY);
-
- if (listener.getParsedDataStack().peek() instanceof YangType) {
- YangEnumeration enumerationNode = getYangEnumerationNode(JAVA_GENERATION);
- enumerationNode.setLineNumber(ctx.getStart().getLine());
- enumerationNode.setCharPosition(ctx.getStart().getCharPositionInLine());
- enumerationNode.setFileName(listener.getFileName());
- Parsable typeData = listener.getParsedDataStack().pop();
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, ENUMERATION_DATA, "", ENTRY);
-
- Parsable tmpData = listener.getParsedDataStack().peek();
-
- switch (tmpData.getYangConstructType()) {
- case LEAF_DATA:
- // Set the name of enumeration same as leaf.
- enumerationNode.setName(((YangLeaf) tmpData).getName() + ENUMERATION_CLASS_SUFFIX);
- // Pop the stack entry to obtain the parent YANG node.
- Parsable leaf = listener.getParsedDataStack().pop();
- // Add the enumeration node to the parent holder of leaf.
- addChildToParentNode(listener, enumerationNode);
- // Push the popped entry back to the stack.
- listener.getParsedDataStack().push(leaf);
- break;
- case LEAF_LIST_DATA:
- // Set the name of enumeration same as leaf list.
- enumerationNode.setName(((YangLeafList) tmpData).getName() + ENUMERATION_CLASS_SUFFIX);
- // Pop the stack entry to obtain the parent YANG node.
- Parsable leafList = listener.getParsedDataStack().pop();
- // Add the enumeration node to the parent holder of leaf.
- addChildToParentNode(listener, enumerationNode);
- // Push the popped entry back to the stack.
- listener.getParsedDataStack().push(leafList);
- break;
- case UNION_DATA:
- YangUnion yangUnion = (YangUnion) tmpData;
- /*
- * In case parent of enumeration is a union, name of the
- * enumeration is parent union name suffixed with running
- * integer number, this is done because under union there
- * could be multiple child union types.
- */
- enumerationNode.setName(yangUnion.getName() + ENUMERATION_CLASS_SUFFIX
- + yangUnion.getChildUnionNumber());
- // Increment the running number.
- yangUnion.setChildUnionNumber(yangUnion.getChildUnionNumber() + 1);
- // Add union as a child to parent union.
- addChildToParentNode(listener, enumerationNode);
- break;
- case TYPEDEF_DATA:
- YangTypeDef typeDef = (YangTypeDef) tmpData;
- // Set the name of enumeration same as typedef name.
- enumerationNode.setName(typeDef.getName() + ENUMERATION_CLASS_SUFFIX);
- // Add enumeration as a child to parent type def.
- addChildToParentNode(listener, enumerationNode);
- break;
- // TODO deviate.
- default:
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, TYPE_DATA,
- ((YangType<?>) typeData).getDataTypeName(), ENTRY));
- }
- listener.getParsedDataStack().push(typeData);
- listener.getParsedDataStack().push(enumerationNode);
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, ENUMERATION_DATA, "", ENTRY));
- }
- }
-
- /**
- * It is called when parser exits from grammar rule (enumeration), it
- * perform validations and update the data model tree.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processEnumerationExit(TreeWalkListener listener,
- GeneratedYangParser.EnumSpecificationContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, ENUMERATION_DATA, "", EXIT);
-
- Parsable tmpEnumerationNode = listener.getParsedDataStack().peek();
- if (tmpEnumerationNode instanceof YangEnumeration) {
- YangEnumeration enumerationNode = (YangEnumeration) tmpEnumerationNode;
- listener.getParsedDataStack().pop();
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, ENUMERATION_DATA, "", EXIT);
-
- Parsable tmpNode = listener.getParsedDataStack().peek();
- switch (tmpNode.getYangConstructType()) {
- case TYPE_DATA: {
- YangType<YangEnumeration> typeNode = (YangType<YangEnumeration>) tmpNode;
- typeNode.setDataTypeExtendedInfo(enumerationNode);
- break;
- }
- default:
- throw new ParserException(
- constructListenerErrorMessage(INVALID_HOLDER, ENUMERATION_DATA, "", EXIT));
- }
- } else {
- throw new ParserException(
- constructListenerErrorMessage(MISSING_CURRENT_HOLDER, ENUMERATION_DATA, "", EXIT));
- }
- }
-
- /**
- * Adds the enumeration node to the parent holder.
- *
- * @param listener listener's object
- * @param enumerationNode enumeration node which needs to be added to parent
- */
- private static void addChildToParentNode(TreeWalkListener listener, YangEnumeration enumerationNode) {
- if (!(listener.getParsedDataStack().peek() instanceof YangNode)) {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, ENUMERATION_DATA,
- "", ENTRY));
- } else {
- YangNode curNode = (YangNode) listener.getParsedDataStack().peek();
- try {
- curNode.addChild(enumerationNode);
- } catch (DataModelException e) {
- throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
- YangConstructType.ENUMERATION_DATA, "", ENTRY, e.getMessage()));
- }
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ErrorAppTagListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ErrorAppTagListener.java
deleted file mode 100644
index c576118..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ErrorAppTagListener.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangAppErrorHolder;
-import org.onosproject.yangutils.datamodel.YangAppErrorInfo;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.ERROR_APP_TAG_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC 6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC 6020
- *
- * error-app-tag-stmt = error-app-tag-keyword sep string stmtend
- *
- * ANTLR grammar rule
- * errorAppTagStatement : ERROR_APP_TAG_KEYWORD string STMTEND;
- */
-
-/**
- * Represents listener based call back function corresponding to the
- * error app tag defined in ANTLR grammar file for corresponding ABNF rule
- * in RFC 6020.
- */
-public final class ErrorAppTagListener {
-
- /**
- * Creates a new error app tag listener.
- */
- private ErrorAppTagListener() {
- }
-
- /**
- * Performs validations and updates the data model tree. It is called when parser
- * receives an input matching the grammar rule error app tag.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processErrorAppTagMessageEntry(TreeWalkListener listener,
- GeneratedYangParser.ErrorAppTagStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, ERROR_APP_TAG_DATA, ctx.string().getText(), ENTRY);
- String errorMessage = removeQuotesAndHandleConcat(ctx.string().getText());
- // Obtain the node of the stack.
- Parsable tmpNode = listener.getParsedDataStack().peek();
- if (tmpNode instanceof YangAppErrorHolder) {
- YangAppErrorInfo yangAppErrorInfo = ((YangAppErrorHolder) tmpNode).getAppErrorInfo();
- yangAppErrorInfo.setErrorAppTag(errorMessage);
- yangAppErrorInfo.setLineNumber(ctx.getStart().getLine());
- yangAppErrorInfo.setCharPosition(ctx.getStart().getCharPositionInLine());
- yangAppErrorInfo.setFileName(listener.getFileName());
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, ERROR_APP_TAG_DATA,
- ctx.string().getText(), ENTRY));
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ErrorMessageListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ErrorMessageListener.java
deleted file mode 100644
index ead1746..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ErrorMessageListener.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangAppErrorHolder;
-import org.onosproject.yangutils.datamodel.YangAppErrorInfo;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.ERROR_MESSAGE_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- *
- * error-message-stmt = error-message-keyword sep string stmtend
- *
- * ANTLR grammar rule
- * errorMessageStatement : ERROR_MESSAGE_KEYWORD string STMTEND;
- */
-
-/**
- * Represents listener based call back function corresponding to the
- * app error message defined in ANTLR grammar file for corresponding ABNF rule
- * in RFC 6020.
- */
-public final class ErrorMessageListener {
-
- /**
- * Creates a new must listener.
- */
- private ErrorMessageListener() {
- }
-
- /**
- * Performs validations and updates the data model tree. It is called when parser
- * receives an input matching the grammar rule (app error message).
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processErrorMessageEntry(TreeWalkListener listener,
- GeneratedYangParser.ErrorMessageStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, ERROR_MESSAGE_DATA, ctx.string().getText(), ENTRY);
- String errorMessage = removeQuotesAndHandleConcat(ctx.string().getText());
-
- // Obtain the node of the stack.
- Parsable tmpNode = listener.getParsedDataStack().peek();
- if (tmpNode instanceof YangAppErrorHolder) {
- YangAppErrorInfo yangAppErrorInfo = ((YangAppErrorHolder) tmpNode).getAppErrorInfo();
- yangAppErrorInfo.setErrorMessage(errorMessage);
-
- yangAppErrorInfo.setLineNumber(ctx.getStart().getLine());
- yangAppErrorInfo.setCharPosition(ctx.getStart().getCharPositionInLine());
- yangAppErrorInfo.setFileName(listener.getFileName());
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, ERROR_MESSAGE_DATA,
- ctx.string().getText(), ENTRY));
- }
- }
-}
\ No newline at end of file
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ExtensionListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ExtensionListener.java
deleted file mode 100644
index 9a1180f..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ExtensionListener.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangExtension;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangSubModule;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.EXTENSION_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * extension-stmt = extension-keyword sep identifier-arg-str optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [argument-stmt stmtsep]
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * "}")
- *
- * ANTLR grammar rule
- * extensionStatement : EXTENSION_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE extensionBody RIGHT_CURLY_BRACE);
- */
-
-/**
- * Represents listener based call back function corresponding to the "extension"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class ExtensionListener {
-
- /**
- * Creates a new extension listener.
- */
- private ExtensionListener() {
- }
-
- /**
- * Performs validation and updates the data model tree. It is called when parser
- * receives an input matching the grammar rule (extension).
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processExtensionEntry(TreeWalkListener listener,
- GeneratedYangParser.ExtensionStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, EXTENSION_DATA, ctx.identifier().getText(), ENTRY);
-
- String identifier = getValidIdentifier(ctx.identifier().getText(), EXTENSION_DATA, ctx);
-
- YangExtension extension = new YangExtension();
-
- extension.setLineNumber(ctx.getStart().getLine());
- extension.setCharPosition(ctx.getStart().getCharPositionInLine());
- extension.setFileName(listener.getFileName());
- extension.setName(identifier);
-
- Parsable curData = listener.getParsedDataStack().peek();
- switch (curData.getYangConstructType()) {
- case MODULE_DATA:
- YangModule module = ((YangModule) curData);
- module.addExtension(extension);
- break;
- case SUB_MODULE_DATA:
- YangSubModule subModule = ((YangSubModule) curData);
- subModule.addExtension(extension);
- break;
- default:
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, EXTENSION_DATA,
- ctx.identifier().getText(), ENTRY));
- }
- listener.getParsedDataStack().push(extension);
- }
-
- /**
- * Performs validation and updates the data model tree. It is called when parser exits
- * from grammar rule(extension).
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processExtensionExit(TreeWalkListener listener,
- GeneratedYangParser.ExtensionStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, EXTENSION_DATA, ctx.identifier().getText(), EXIT);
-
- if (!(listener.getParsedDataStack().peek() instanceof YangExtension)) {
- throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, EXTENSION_DATA,
- ctx.identifier().getText(), EXIT));
- }
- listener.getParsedDataStack().pop();
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/FeatureListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/FeatureListener.java
deleted file mode 100644
index 12e83b1..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/FeatureListener.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * feature-stmt = feature-keyword sep identifier-arg-str optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * *(if-feature-stmt stmtsep)
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * "}")
- *
- *
- *
- * ANTLR grammar rule
- * featureStatement : FEATURE_KEYWORD string (STMTEND | LEFT_CURLY_BRACE featureBody RIGHT_CURLY_BRACE);
- */
-
-import org.onosproject.yangutils.datamodel.YangFeature;
-import org.onosproject.yangutils.datamodel.YangFeatureHolder;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.FEATURE_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/**
- * Represents listener based call back function corresponding to the "feature"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class FeatureListener {
-
- /**
- * Creates a new feature listener.
- */
- private FeatureListener() {
- }
-
- /**
- * Performs validation and updates the data model tree.It is called when parser receives
- * an input matching the grammar rule (feature).
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processFeatureEntry(TreeWalkListener listener,
- GeneratedYangParser.FeatureStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, FEATURE_DATA, ctx.string().getText(), ENTRY);
-
- String identifier = getValidIdentifier(ctx.string().getText(), FEATURE_DATA, ctx);
-
- // Obtain the node of the stack.
- Parsable tmpNode = listener.getParsedDataStack().peek();
- if (tmpNode instanceof YangFeatureHolder) {
- YangFeatureHolder featureHolder = (YangFeatureHolder) tmpNode;
-
- YangFeature feature = new YangFeature();
- feature.setName(identifier);
-
- feature.setLineNumber(ctx.getStart().getLine());
- feature.setCharPosition(ctx.getStart().getCharPositionInLine());
- feature.setFileName(listener.getFileName());
- featureHolder.addFeatureList(feature);
- listener.getParsedDataStack().push(feature);
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, FEATURE_DATA,
- ctx.string().getText(), ENTRY));
- }
- }
-
- /**
- * Perform validations and updates the data model tree.It is called when parser exits from
- * grammar rule(feature).
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processFeatureExit(TreeWalkListener listener,
- GeneratedYangParser.FeatureStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, FEATURE_DATA, ctx.string().getText(), EXIT);
-
- if (listener.getParsedDataStack().peek() instanceof YangFeature) {
- listener.getParsedDataStack().pop();
- } else {
- throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, FEATURE_DATA,
- ctx.string().getText(), EXIT));
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/FractionDigitsListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/FractionDigitsListener.java
deleted file mode 100644
index ff6dae0..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/FractionDigitsListener.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * decimal64-specification = fraction-digits-stmt
- *
- * fraction-digits-stmt = fraction-digits-keyword sep
- * fraction-digits-arg-str stmtend
- *
- * fraction-digits-arg-str = < a string that matches the rule
- * fraction-digits-arg >
- *
- * fraction-digits-arg = ("1" ["0" / "1" / "2" / "3" / "4" /
- * "5" / "6" / "7" / "8"])
- * / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9"
- *
- * ANTLR grammar rule
- * decimal64Specification : FRACTION_DIGITS_KEYWORD fraction STMTEND;
- *
- * fraction : string;
- */
-
-import org.onosproject.yangutils.datamodel.YangDecimal64;
-import org.onosproject.yangutils.datamodel.YangRangeRestriction;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.FRACTION_DIGITS_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_CONTENT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/**
- * Represents listener based call back function corresponding to the "fraction-digits"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class FractionDigitsListener {
-
- /**
- * Creates a new bit listener.
- */
- private FractionDigitsListener() {
- }
-
- /**
- * It is called when parser enters grammar rule (fraction-digits), it perform
- * validations and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processFractionDigitsEntry(TreeWalkListener listener,
- GeneratedYangParser.FractionDigitStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, FRACTION_DIGITS_DATA,
- ctx.fraction().getText(), ENTRY);
- int value = getValidFractionDigits(ctx);
- Parsable tmpNode = listener.getParsedDataStack().peek();
- if (tmpNode instanceof YangType) {
- YangType<YangDecimal64<YangRangeRestriction>> typeNode =
- (YangType<YangDecimal64<YangRangeRestriction>>) tmpNode;
- YangDecimal64 decimal64Node = typeNode.getDataTypeExtendedInfo();
- decimal64Node.setFractionDigit(value);
- if (!decimal64Node.isValidFractionDigit()) {
- throw new ParserException(constructErrorMsg(ctx, INVALID_CONTENT));
- }
- } else {
- throw new ParserException(constructErrorMsg(ctx, INVALID_HOLDER));
- }
- }
-
- private static String constructErrorMsg(
- GeneratedYangParser.FractionDigitStatementContext ctx,
- ListenerErrorType type) {
- return constructListenerErrorMessage(type, FRACTION_DIGITS_DATA,
- ctx.fraction().getText(), ENTRY);
- }
-
- /**
- * Validate fraction digits.
- *
- * @param ctx context object of the grammar rule
- * @return validated fraction-digits
- */
- private static int getValidFractionDigits(GeneratedYangParser
- .FractionDigitStatementContext ctx) {
- String value = ctx.fraction().getText().trim();
- ParserException parserException;
-
- int fractionDigits = Integer.parseInt(value);
- if (fractionDigits >= YangDecimal64.MIN_FRACTION_DIGITS_VALUE &&
- fractionDigits <= YangDecimal64.MAX_FRACTION_DIGITS_VALUE) {
- return fractionDigits;
- } else {
- parserException =
- new ParserException("YANG file error : fraction-digits value" +
- " should be between 1 and 18.");
- parserException.setLine(ctx.getStart().getLine());
- parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
- throw parserException;
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/GroupingListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/GroupingListener.java
deleted file mode 100644
index 46ca2e0..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/GroupingListener.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.YangGrouping;
-import org.onosproject.yangutils.datamodel.YangInput;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNotification;
-import org.onosproject.yangutils.datamodel.YangOutput;
-import org.onosproject.yangutils.datamodel.YangRpc;
-import org.onosproject.yangutils.datamodel.YangSubModule;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.DESCRIPTION_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.GROUPING_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.REFERENCE_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.STATUS_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.validateCardinalityMaxOne;
-import static org.onosproject.yangutils.translator.tojava.YangDataModelFactory.getYangGroupingNode;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * grouping-stmt = grouping-keyword sep identifier-arg-str optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * *((typedef-stmt /
- * grouping-stmt) stmtsep)
- * *(data-def-stmt stmtsep)
- * "}")
- *
- * ANTLR grammar rule
- * groupingStatement : GROUPING_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE
- * (statusStatement | descriptionStatement | referenceStatement | typedefStatement | groupingStatement
- * | dataDefStatement)* RIGHT_CURLY_BRACE);
- */
-
-/**
- * Represents listener based call back function corresponding to the "grouping"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class GroupingListener {
-
- /**
- * Creates a new grouping listener.
- */
- private GroupingListener() {
- }
-
- /**
- * It is called when parser enters grammar rule (grouping), it perform
- * validations and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processGroupingEntry(TreeWalkListener listener,
- GeneratedYangParser.GroupingStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, GROUPING_DATA, ctx.identifier().getText(), ENTRY);
-
- // Check validity of identifier and remove double quotes.
- String identifier = getValidIdentifier(ctx.identifier().getText(), GROUPING_DATA, ctx);
-
- // Validate sub statement cardinality.
- validateSubStatementsCardinality(ctx);
-
- // Increase the grouping count by one.
- listener.increaseGroupingDepth();
- Parsable curData = listener.getParsedDataStack().peek();
-
- // Check for identifier collision
- int line = ctx.getStart().getLine();
- int charPositionInLine = ctx.getStart().getCharPositionInLine();
- detectCollidingChildUtil(listener, line, charPositionInLine, identifier, GROUPING_DATA);
-
- if (curData instanceof YangModule || curData instanceof YangSubModule
- || curData instanceof YangContainer || curData instanceof YangNotification
- || curData instanceof YangList || curData instanceof YangGrouping
- || curData instanceof YangRpc || curData instanceof YangInput
- || curData instanceof YangOutput) {
-
- YangGrouping groupingNode = getYangGroupingNode(JAVA_GENERATION);
- groupingNode.setName(identifier);
- groupingNode.setGroupingDepth(listener.getGroupingDepth());
-
- groupingNode.setLineNumber(line);
- groupingNode.setCharPosition(charPositionInLine);
- groupingNode.setFileName(listener.getFileName());
- YangNode curNode = (YangNode) curData;
- try {
- curNode.addChild(groupingNode);
- } catch (DataModelException e) {
- throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
- GROUPING_DATA, ctx.identifier().getText(), ENTRY, e.getMessage()));
- }
- listener.getParsedDataStack().push(groupingNode);
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER,
- GROUPING_DATA, ctx.identifier().getText(), ENTRY));
- }
- }
-
- /**
- * It is called when parser exits from grammar rule (grouping), it perform
- * validations and update the data model tree.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processGroupingExit(TreeWalkListener listener,
- GeneratedYangParser.GroupingStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, GROUPING_DATA, ctx.identifier().getText(), EXIT);
-
- // Decrease the grouping count by one.
- listener.decreaseGroupingDepth();
- if (listener.getParsedDataStack().peek() instanceof YangGrouping) {
- listener.getParsedDataStack().pop();
- } else {
- throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, GROUPING_DATA,
- ctx.identifier().getText(), EXIT));
- }
- }
-
- /**
- * Validates the cardinality of case sub-statements as per grammar.
- *
- * @param ctx context object of the grammar rule
- */
- private static void validateSubStatementsCardinality(GeneratedYangParser.GroupingStatementContext ctx) {
-
- validateCardinalityMaxOne(ctx.statusStatement(), STATUS_DATA, GROUPING_DATA, ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.descriptionStatement(), DESCRIPTION_DATA, GROUPING_DATA,
- ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.referenceStatement(), REFERENCE_DATA, GROUPING_DATA, ctx.identifier().getText());
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/IdentityListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/IdentityListener.java
deleted file mode 100644
index 332ae4f..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/IdentityListener.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangIdentity;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangSubModule;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
-import static org.onosproject.yangutils.translator.tojava.YangDataModelFactory.getYangIdentityNode;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.IDENTITY_DATA;
-
-/**
- * Reference: RFC6020 and YANG ANTLR Grammar.
- *
- * ABNF grammar as per RFC6020
- * identity-stmt = identity-keyword sep identifier-arg-str optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [base-stmt stmtsep]
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * "}")
- */
-
-/**
- * Represents listener based call back function corresponding to the "identity"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class IdentityListener {
-
- //Creates a identity listener.
- private IdentityListener() {
- }
-
- /**
- * Performs validations and update the data model tree when parser receives an input
- * matching the grammar rule (identity).
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processIdentityEntry(TreeWalkListener listener,
- GeneratedYangParser.IdentityStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, IDENTITY_DATA, ctx.identifier().getText(), ENTRY);
-
- String identifier = getValidIdentifier(ctx.identifier().getText(), IDENTITY_DATA, ctx);
-
- YangIdentity identity = getYangIdentityNode(JAVA_GENERATION);
- identity.setName(identifier);
-
- identity.setLineNumber(ctx.getStart().getLine());
- identity.setCharPosition(ctx.getStart().getCharPositionInLine());
- identity.setFileName(listener.getFileName());
- Parsable curData = listener.getParsedDataStack().peek();
- if (curData instanceof YangModule || curData instanceof YangSubModule) {
- YangNode curNode = (YangNode) curData;
- try {
- curNode.addChild(identity);
- } catch (DataModelException e) {
- throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
- IDENTITY_DATA, ctx.identifier().getText(), ENTRY, e.getMessage()));
- }
- // Push identity node to the stack.
- listener.getParsedDataStack().push(identity);
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, IDENTITY_DATA,
- ctx.identifier().getText(), ENTRY));
- }
-
- }
-
- /**
- * Performs validations and update the data model tree when parser exits from grammar
- * rule (identity).
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processIdentityExit(TreeWalkListener listener,
- GeneratedYangParser.IdentityStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_CURRENT_HOLDER, IDENTITY_DATA, ctx.identifier().getText(), EXIT);
-
- Parsable parsableType = listener.getParsedDataStack().pop();
- if (!(parsableType instanceof YangIdentity)) {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, IDENTITY_DATA,
- ctx.identifier().getText(), EXIT));
- }
- }
-
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/IdentityRefListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/IdentityRefListener.java
deleted file mode 100644
index a6fbd1e..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/IdentityRefListener.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangIdentityRef;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeIdentifier;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.linker.impl.YangResolutionInfoImpl;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.addResolutionInfo;
-import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.UNRESOLVED;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.BASE_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.IDENTITYREF_DATA;
-import static org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser.IdentityrefSpecificationContext;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidNodeIdentifier;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- * <p/>
- * ABNF grammar as per RFC6020
- * identityref-specification =
- * base-stmt stmtsep
- * base-stmt = base-keyword sep identifier-ref-arg-str
- * optsep stmtend*
- * identifier-ref-arg = [prefix ":"] identifier
- */
-
-/**
- * Represents listener based call back function corresponding to the
- * "identityref" rule defined in ANTLR grammar file for corresponding ABNF
- * rule in RFC 6020.
- */
-public final class IdentityRefListener {
-
- // No instantiation.
- private IdentityRefListener() {
- }
-
- /**
- * Performs validation and updates the data model tree when parser receives an input
- * matching the grammar rule (identity-ref).
- *
- * @param listener listener object
- * @param ctx context object
- */
- public static void processIdentityRefEntry(TreeWalkListener listener,
- IdentityrefSpecificationContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, IDENTITYREF_DATA,
- EMPTY_STRING, ENTRY);
-
- if (!(listener.getParsedDataStack().peek() instanceof YangType)) {
- throw new ParserException(constructListenerErrorMessage(
- INVALID_HOLDER, IDENTITYREF_DATA, EMPTY_STRING, ENTRY));
- }
-
- YangIdentityRef idRef = new YangIdentityRef();
- Parsable typeData = listener.getParsedDataStack().pop();
- YangResolutionInfoImpl<YangIdentityRef> resolutionInfo;
-
- // Validate node identifier.
- YangNodeIdentifier nodeId = getValidNodeIdentifier(
- ctx.baseStatement().string().getText(), BASE_DATA, ctx);
- idRef.setBaseIdentity(nodeId);
- ((YangType) typeData).setDataTypeExtendedInfo(idRef);
-
- int errLine = ctx.getStart().getLine();
- int errPos = ctx.getStart().getCharPositionInLine();
-
- idRef.setLineNumber(errLine);
- idRef.setCharPosition(errPos);
- idRef.setFileName(listener.getFileName());
-
- Parsable tmpData = listener.getParsedDataStack().peek();
- Parsable parentNode;
- switch (tmpData.getYangConstructType()) {
-
- case LEAF_DATA:
- Parsable leaf = listener.getParsedDataStack().pop();
- parentNode = listener.getParsedDataStack().peek();
- listener.getParsedDataStack().push(leaf);
- break;
-
- case LEAF_LIST_DATA:
- Parsable leafList = listener.getParsedDataStack().pop();
- parentNode = listener.getParsedDataStack().peek();
- listener.getParsedDataStack().push(leafList);
- break;
-
- case UNION_DATA:
- parentNode = listener.getParsedDataStack().peek();
- break;
-
- case TYPEDEF_DATA:
- parentNode = listener.getParsedDataStack().peek();
- break;
-
- default:
- throw new ParserException(
- constructListenerErrorMessage(INVALID_HOLDER,
- IDENTITYREF_DATA,
- ctx.getText(), EXIT));
- }
-
- if (!(parentNode instanceof YangNode)) {
- throw new ParserException(
- constructListenerErrorMessage(INVALID_HOLDER,
- IDENTITYREF_DATA,
- ctx.getText(), EXIT));
- }
- idRef.setResolvableStatus(UNRESOLVED);
- // Adds resolution information to the list
- resolutionInfo = new YangResolutionInfoImpl<>(
- idRef, (YangNode) parentNode, errLine, errPos);
- addToResolution(resolutionInfo, ctx);
-
- listener.getParsedDataStack().push(typeData);
- listener.getParsedDataStack().push(idRef);
- }
-
- /**
- * Performs validations and update the data model tree when parser exits
- * from grammar rule (identity-ref).
- *
- * @param listener Listener's object
- * @param ctx context object
- */
- public static void processIdentityRefExit(TreeWalkListener listener,
- IdentityrefSpecificationContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_CURRENT_HOLDER, IDENTITYREF_DATA,
- ctx.getText(), EXIT);
-
- Parsable parsableType = listener.getParsedDataStack().pop();
- if (!(parsableType instanceof YangIdentityRef)) {
- throw new ParserException(constructListenerErrorMessage(
- INVALID_HOLDER, IDENTITYREF_DATA, ctx.getText(), EXIT));
- }
- }
-
- /**
- * Adds to resolution list.
- *
- * @param info resolution info
- * @param ctx context object
- */
- private static void addToResolution(YangResolutionInfoImpl<YangIdentityRef> info,
- IdentityrefSpecificationContext ctx) {
- try {
- addResolutionInfo(info);
- } catch (DataModelException e) {
- throw new ParserException(constructExtendedListenerErrorMessage(
- UNHANDLED_PARSED_DATA, IDENTITYREF_DATA, ctx.getText(),
- ENTRY, e.getMessage()));
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/IfFeatureListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/IfFeatureListener.java
deleted file mode 100644
index ab11780..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/IfFeatureListener.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- *
- * if-feature-stmt = if-feature-keyword sep identifier-ref-arg-str
- * optsep stmtend
- *
- * ANTLR grammar rule
- * ifFeatureStatement : IF_FEATURE_KEYWORD string STMTEND;
- */
-
-import org.onosproject.yangutils.datamodel.YangFeature;
-import org.onosproject.yangutils.datamodel.YangIfFeature;
-import org.onosproject.yangutils.datamodel.YangIfFeatureHolder;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangLeafList;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeIdentifier;
-import org.onosproject.yangutils.datamodel.YangResolutionInfo;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.linker.impl.YangResolutionInfoImpl;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.addResolutionInfo;
-import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.UNRESOLVED;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.IF_FEATURE_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidNodeIdentifier;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/**
- * Represents listener based call back function corresponding to the "if-feature"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class IfFeatureListener {
-
- /**
- * Creates a new IfFeature listener.
- */
- private IfFeatureListener() {
- }
-
- /**
- * Performs validation and updates the data model tree.It is called when parser receives
- * an input matching the grammar rule (if-feature).
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processIfFeatureEntry(TreeWalkListener listener,
- GeneratedYangParser.IfFeatureStatementContext ctx) {
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, IF_FEATURE_DATA, ctx.string().getText(), ENTRY);
-
- // Validate if-feature argument string
- YangNodeIdentifier nodeIdentifier = getValidNodeIdentifier(ctx.string().getText(),
- IF_FEATURE_DATA, ctx);
-
- YangIfFeature ifFeature = new YangIfFeature();
- ifFeature.setName(nodeIdentifier);
- ifFeature.setResolvableStatus(UNRESOLVED);
-
- ifFeature.setLineNumber(ctx.getStart().getLine());
- ifFeature.setCharPosition(ctx.getStart().getCharPositionInLine());
- ifFeature.setFileName(listener.getFileName());
- YangIfFeatureHolder ifFeatureHolder;
-
- // Obtain the node of the stack.
- Parsable tmpNode = listener.getParsedDataStack().peek();
- if (tmpNode instanceof YangIfFeatureHolder) {
- ifFeatureHolder = (YangIfFeatureHolder) tmpNode;
- ifFeatureHolder.addIfFeatureList(ifFeature);
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, IF_FEATURE_DATA,
- ctx.string().getText(), ENTRY));
- }
-
- // Add resolution information to the list
- Parsable parentNode;
- if (tmpNode instanceof YangLeafList || tmpNode instanceof YangLeaf
- || tmpNode instanceof YangFeature) {
- Parsable leafData = listener.getParsedDataStack().pop();
- parentNode = listener.getParsedDataStack().peek();
- listener.getParsedDataStack().push(leafData);
- } else {
- parentNode = tmpNode;
- }
-
- // Verify parent node of leaf
- if (!(parentNode instanceof YangNode)) {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, IF_FEATURE_DATA,
- ctx.string().getText(), EXIT));
- }
-
- int errorLine = ctx.getStart().getLine();
- int errorPosition = ctx.getStart().getCharPositionInLine();
- YangResolutionInfoImpl resolutionInfo = new YangResolutionInfoImpl<YangIfFeature>(ifFeature,
- (YangNode) parentNode, errorLine,
- errorPosition);
- addToResolutionList(resolutionInfo, ctx);
- }
-
- /**
- * Add to resolution list.
- *
- * @param resolutionInfo resolution information.
- * @param ctx context object of the grammar rule
- */
- private static void addToResolutionList(YangResolutionInfo<YangIfFeature> resolutionInfo,
- GeneratedYangParser.IfFeatureStatementContext ctx) {
-
- try {
- addResolutionInfo(resolutionInfo);
- } catch (DataModelException e) {
- throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
- IF_FEATURE_DATA, ctx.string().getText(), EXIT, e.getMessage()));
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ImportListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ImportListener.java
deleted file mode 100644
index 1f7a7d7..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ImportListener.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangImport;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangSubModule;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.IMPORT_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * linkage-stmts = ;; these stmts can appear in any order
- * *(import-stmt stmtsep)
- * *(include-stmt stmtsep)
- *
- * import-stmt = import-keyword sep identifier-arg-str optsep
- * "{" stmtsep
- * prefix-stmt stmtsep
- * [revision-date-stmt stmtsep]
- * "}"
- *
- * ANTLR grammar rule
- * linkage_stmts : (import_stmt
- * | include_stmt)*;
- * import_stmt : IMPORT_KEYWORD identifier LEFT_CURLY_BRACE import_stmt_body
- * RIGHT_CURLY_BRACE;
- * import_stmt_body : prefix_stmt revision_date_stmt?;
- */
-
-/**
- * Represents listener based call back function corresponding to the "import"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class ImportListener {
-
- /**
- * Creates a new import listener.
- */
- private ImportListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar rule
- * (import), perform validations and update the data model tree.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processImportEntry(TreeWalkListener listener, GeneratedYangParser.ImportStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, IMPORT_DATA, ctx.identifier().getText(), ENTRY);
-
- String identifier = getValidIdentifier(ctx.identifier().getText(), IMPORT_DATA, ctx);
-
- YangImport importNode = new YangImport();
- importNode.setModuleName(identifier);
-
- // Set the line number and character position in line for the belongs to.
- int errorLine = ctx.getStart().getLine();
- int errorPosition = ctx.getStart().getCharPositionInLine();
- importNode.setLineNumber(errorLine);
- importNode.setCharPosition(errorPosition);
- importNode.setFileName(listener.getFileName());
-
- // Push import node to the stack.
- listener.getParsedDataStack().push(importNode);
- }
-
- /**
- * It is called when parser exits from grammar rule (import), it perform
- * validations and update the data model tree.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processImportExit(TreeWalkListener listener, GeneratedYangParser.ImportStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, IMPORT_DATA, ctx.identifier().getText(), EXIT);
-
- Parsable tmpImportNode = listener.getParsedDataStack().peek();
- if (tmpImportNode instanceof YangImport) {
- listener.getParsedDataStack().pop();
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, IMPORT_DATA, ctx.identifier().getText(),
- EXIT);
-
- Parsable tmpNode = listener.getParsedDataStack().peek();
- switch (tmpNode.getYangConstructType()) {
- case MODULE_DATA: {
- YangModule module = (YangModule) tmpNode;
- module.addToImportList((YangImport) tmpImportNode);
- break;
- }
- case SUB_MODULE_DATA: {
- YangSubModule subModule = (YangSubModule) tmpNode;
- subModule.addToImportList((YangImport) tmpImportNode);
- break;
- }
- default:
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, IMPORT_DATA,
- ctx.identifier().getText(),
- EXIT));
- }
- } else {
- throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, IMPORT_DATA,
- ctx.identifier().getText(), EXIT));
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/IncludeListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/IncludeListener.java
deleted file mode 100644
index 5842a7e..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/IncludeListener.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangInclude;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangSubModule;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.INCLUDE_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * linkage-stmts = ;; these stmts can appear in any order
- * *(import-stmt stmtsep)
- * *(include-stmt stmtsep)
- *
- * include-stmt = include-keyword sep identifier-arg-str optsep
- * (";" /
- * "{" stmtsep
- * [revision-date-stmt stmtsep]
- * "}")
- *
- * ANTLR grammar rule
- * linkage_stmts : (import_stmt
- * | include_stmt)*;
- * include_stmt : INCLUDE_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE
- * revision_date_stmt? RIGHT_CURLY_BRACE);
- */
-
-/**
- * Represents listener based call back function corresponding to the "include"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class IncludeListener {
-
- /**
- * Creates a new include listener.
- */
- private IncludeListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar rule
- * (include), perform validations and update the data model tree.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processIncludeEntry(TreeWalkListener listener, GeneratedYangParser.IncludeStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, INCLUDE_DATA, ctx.identifier().getText(),
- ENTRY);
-
- String identifier = getValidIdentifier(ctx.identifier().getText(), INCLUDE_DATA, ctx);
-
- YangInclude includeNode = new YangInclude();
- includeNode.setSubModuleName(identifier);
-
- // Set the line number and character position in line for the belongs to.
- int errorLine = ctx.getStart().getLine();
- int errorPosition = ctx.getStart().getCharPositionInLine();
- includeNode.setLineNumber(errorLine);
- includeNode.setCharPosition(errorPosition);
- includeNode.setFileName(listener.getFileName());
-
- listener.getParsedDataStack().push(includeNode);
- }
-
- /**
- * It is called when parser exits from grammar rule (include), it perform
- * validations and update the data model tree.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processIncludeExit(TreeWalkListener listener, GeneratedYangParser.IncludeStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, INCLUDE_DATA, ctx.identifier().getText(), EXIT);
-
- Parsable tmpIncludeNode = listener.getParsedDataStack().peek();
- if (tmpIncludeNode instanceof YangInclude) {
- listener.getParsedDataStack().pop();
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, INCLUDE_DATA, ctx.identifier().getText(),
- EXIT);
-
- Parsable tmpNode = listener.getParsedDataStack().peek();
- switch (tmpNode.getYangConstructType()) {
- case MODULE_DATA: {
- YangModule module = (YangModule) tmpNode;
- module.addToIncludeList((YangInclude) tmpIncludeNode);
- break;
- }
- case SUB_MODULE_DATA: {
- YangSubModule subModule = (YangSubModule) tmpNode;
- subModule.addToIncludeList((YangInclude) tmpIncludeNode);
- break;
- }
- default:
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, INCLUDE_DATA,
- ctx.identifier().getText(),
- EXIT));
- }
- } else {
- throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, INCLUDE_DATA,
- ctx.identifier().getText(), EXIT));
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/InputListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/InputListener.java
deleted file mode 100644
index 0b7e116..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/InputListener.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangInput;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangRpc;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.INPUT_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction
- .constructExtendedListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction
- .constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-import static org.onosproject.yangutils.translator.tojava.YangDataModelFactory.getYangInputNode;
-import static org.onosproject.yangutils.utils.UtilConstants.INPUT;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- *
- * input-stmt = input-keyword optsep
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * *((typedef-stmt /
- * grouping-stmt) stmtsep)
- * 1*(data-def-stmt stmtsep)
- * "}"
- *
- * inputStatement : INPUT_KEYWORD LEFT_CURLY_BRACE inputStatementBody RIGHT_CURLY_BRACE;
-
- * inputStatementBody : typedefStatement* dataDefStatement+
- * | dataDefStatement+ typedefStatement*
- * | groupingStatement* dataDefStatement+
- * | dataDefStatement+ groupingStatement*;
- */
-
-/**
- * Represents listener based call back function corresponding to the "input"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class InputListener {
-
- /**
- * Creates a new input listener.
- */
- private InputListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar rule
- * (input), performs validation and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processInputEntry(TreeWalkListener listener,
- GeneratedYangParser.InputStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, INPUT_DATA, "", ENTRY);
-
- Parsable curData = listener.getParsedDataStack().peek();
- if (curData instanceof YangRpc) {
-
- YangInput yangInput = getYangInputNode(JAVA_GENERATION);
- yangInput.setName(INPUT);
- yangInput.setLineNumber(ctx.getStart().getLine());
- yangInput.setCharPosition(ctx.getStart().getCharPositionInLine());
- yangInput.setFileName(listener.getFileName());
- YangNode curNode = (YangNode) curData;
- try {
- curNode.addChild(yangInput);
- } catch (DataModelException e) {
- throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
- INPUT_DATA, "", ENTRY, e.getMessage()));
- }
- listener.getParsedDataStack().push(yangInput);
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, INPUT_DATA,
- "", ENTRY));
- }
- }
-
- /**
- * It is called when parser exits from grammar rule (input), it perform
- * validations and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processInputExit(TreeWalkListener listener,
- GeneratedYangParser.InputStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, INPUT_DATA, "", EXIT);
-
- if (!(listener.getParsedDataStack().peek() instanceof YangInput)) {
- throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, INPUT_DATA,
- "", EXIT));
- }
- listener.getParsedDataStack().pop();
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/KeyListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/KeyListener.java
deleted file mode 100644
index 889de0a..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/KeyListener.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.KEY_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * key-stmt = key-keyword sep key-arg-str stmtend
- *
- * ANTLR grammar rule
- * keyStatement : KEY_KEYWORD key STMTEND;
- * key : string;
- */
-
-/**
- * Represesnts listener based call back function corresponding to the "key" rule
- * defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class KeyListener {
-
- /**
- * Creates a new key listener.
- */
- private KeyListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar rule
- * (key), perform validations and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processKeyEntry(TreeWalkListener listener,
- GeneratedYangParser.KeyStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, KEY_DATA, ctx.key().getText(), ENTRY);
-
- Parsable tmpData = listener.getParsedDataStack().peek();
- if (listener.getParsedDataStack().peek() instanceof YangList) {
- YangList yangList = (YangList) tmpData;
- String tmpKeyValue = removeQuotesAndHandleConcat(ctx.key().getText());
- if (tmpKeyValue.contains(" ")) {
- String[] keyValues = tmpKeyValue.split(" ");
- for (String keyValue : keyValues) {
- try {
- yangList.addKey(keyValue);
- } catch (DataModelException e) {
- throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA, KEY_DATA,
- ctx.key().getText(), ENTRY, e.getMessage()));
- }
- }
- } else {
- try {
- yangList.addKey(tmpKeyValue);
- } catch (DataModelException e) {
- throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA, KEY_DATA,
- ctx.key().getText(), ENTRY, e.getMessage()));
- }
- }
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, KEY_DATA, ctx.key().getText(),
- ENTRY));
- }
- }
-}
\ No newline at end of file
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LeafListListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LeafListListener.java
deleted file mode 100644
index 8dd33b8..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LeafListListener.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangLeafList;
-import org.onosproject.yangutils.datamodel.YangLeavesHolder;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-import org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation;
-
-import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.CONFIG_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.DESCRIPTION_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.LEAF_LIST_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.MAX_ELEMENT_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.MIN_ELEMENT_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.REFERENCE_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.STATUS_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.TYPE_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.UNITS_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.validateCardinalityEqualsOne;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.validateCardinalityMaxOne;
-import static org.onosproject.yangutils.translator.tojava.YangDataModelFactory.getYangLeafList;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * leaf-list-stmt = leaf-list-keyword sep identifier-arg-str optsep
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [when-stmt stmtsep]
- * *(if-feature-stmt stmtsep)
- * type-stmt stmtsep
- * [units-stmt stmtsep]
- * *(must-stmt stmtsep)
- * [config-stmt stmtsep]
- * [min-elements-stmt stmtsep]
- * [max-elements-stmt stmtsep]
- * [ordered-by-stmt stmtsep]
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * "}"
- *
- * ANTLR grammar rule
- * leafListStatement : LEAF_LIST_KEYWORD identifier LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement |
- * typeStatement | unitsStatement | mustStatement | configStatement | minElementsStatement | maxElementsStatement |
- * orderedByStatement | statusStatement | descriptionStatement | referenceStatement)* RIGHT_CURLY_BRACE;
- */
-
-/**
- * Represents listener based call back function corresponding to the "leaf-list"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class LeafListListener {
-
- /**
- * Creates a new leaf list listener.
- */
- private LeafListListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar rule
- * (leaf-list), performs validation and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processLeafListEntry(TreeWalkListener listener,
- GeneratedYangParser.LeafListStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, LEAF_LIST_DATA, ctx.identifier().getText(), ENTRY);
-
- String identifier = getValidIdentifier(ctx.identifier().getText(), LEAF_LIST_DATA, ctx);
-
- // Validate sub statement cardinality.
- validateSubStatementsCardinality(ctx);
-
- // Check for identifier collision
- int line = ctx.getStart().getLine();
- int charPositionInLine = ctx.getStart().getCharPositionInLine();
- detectCollidingChildUtil(listener, line, charPositionInLine, identifier, LEAF_LIST_DATA);
-
- YangLeafList leafList = getYangLeafList(JAVA_GENERATION);
- leafList.setName(identifier);
- leafList.setLineNumber(line);
- leafList.setCharPosition(charPositionInLine);
- leafList.setFileName(listener.getFileName());
- /*
- * If "config" is not specified, the default is the same as the parent
- * schema node's "config" value.
- */
- if (ctx.configStatement().isEmpty()) {
- boolean parentConfig = ListenerValidation.getParentNodeConfig(listener);
- leafList.setConfig(parentConfig);
- }
-
- Parsable tmpData = listener.getParsedDataStack().peek();
- YangLeavesHolder leavesHolder;
-
- if (tmpData instanceof YangLeavesHolder) {
- leavesHolder = (YangLeavesHolder) tmpData;
- leavesHolder.addLeafList(leafList);
- leafList.setContainedIn(leavesHolder);
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LEAF_LIST_DATA,
- ctx.identifier().getText(), ENTRY));
- }
- listener.getParsedDataStack().push(leafList);
- }
-
- /**
- * It is called when parser exits from grammar rule (leaf-list), it performs
- * validation and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processLeafListExit(TreeWalkListener listener,
- GeneratedYangParser.LeafListStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, LEAF_LIST_DATA, ctx.identifier().getText(), EXIT);
-
- if (listener.getParsedDataStack().peek() instanceof YangLeafList) {
- listener.getParsedDataStack().pop();
- } else {
- throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, LEAF_LIST_DATA,
- ctx.identifier().getText(), EXIT));
- }
- }
-
- /**
- * Validates the cardinality of leaf-list sub-statements as per grammar.
- *
- * @param ctx context object of the grammar rule
- */
- private static void validateSubStatementsCardinality(GeneratedYangParser.LeafListStatementContext ctx) {
-
- validateCardinalityEqualsOne(ctx.typeStatement(), TYPE_DATA, LEAF_LIST_DATA, ctx.identifier().getText(), ctx);
- validateCardinalityMaxOne(ctx.unitsStatement(), UNITS_DATA, LEAF_LIST_DATA, ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.configStatement(), CONFIG_DATA, LEAF_LIST_DATA, ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.maxElementsStatement(), MAX_ELEMENT_DATA, LEAF_LIST_DATA,
- ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.minElementsStatement(), MIN_ELEMENT_DATA, LEAF_LIST_DATA,
- ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.descriptionStatement(), DESCRIPTION_DATA, LEAF_LIST_DATA,
- ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.referenceStatement(), REFERENCE_DATA, LEAF_LIST_DATA, ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.statusStatement(), STATUS_DATA, LEAF_LIST_DATA, ctx.identifier().getText());
- //TODO ordered by
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LeafListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LeafListener.java
deleted file mode 100644
index ed0a3a2..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LeafListener.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-/**
- * Implements listener based call back function corresponding to the "leaf"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangLeavesHolder;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-import org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation;
-
-import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.CONFIG_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.DESCRIPTION_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.LEAF_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.MANDATORY_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.REFERENCE_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.STATUS_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.TYPE_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.UNITS_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_CONTENT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.validateCardinalityEqualsOne;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.validateCardinalityMaxOne;
-import static org.onosproject.yangutils.translator.tojava.YangDataModelFactory.getYangLeaf;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * leaf-stmt = leaf-keyword sep identifier-arg-str optsep
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [when-stmt stmtsep]
- * *(if-feature-stmt stmtsep)
- * type-stmt stmtsep
- * [units-stmt stmtsep]
- * *(must-stmt stmtsep)
- * [default-stmt stmtsep]
- * [config-stmt stmtsep]
- * [mandatory-stmt stmtsep]
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * "}"
- *
- * ANTLR grammar rule
- * leafStatement : LEAF_KEYWORD identifier LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | typeStatement |
- * unitsStatement | mustStatement | defaultStatement | configStatement | mandatoryStatement | statusStatement |
- * descriptionStatement | referenceStatement)* RIGHT_CURLY_BRACE;
- */
-
-/**
- * Represents listener based call back function corresponding to the "leaf" rule
- * defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class LeafListener {
-
- /**
- * Creates a new leaf listener.
- */
- private LeafListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar rule
- * (leaf), performs validation and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processLeafEntry(TreeWalkListener listener,
- GeneratedYangParser.LeafStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, LEAF_DATA, ctx.identifier().getText(), ENTRY);
-
- String identifier = getValidIdentifier(ctx.identifier().getText(), LEAF_DATA, ctx);
-
- // Validate sub statement cardinality.
- validateSubStatementsCardinality(ctx);
-
- // Check for identifier collision
- int line = ctx.getStart().getLine();
- int charPositionInLine = ctx.getStart().getCharPositionInLine();
- detectCollidingChildUtil(listener, line, charPositionInLine, identifier, LEAF_DATA);
-
- YangLeaf leaf = getYangLeaf(JAVA_GENERATION);
- leaf.setName(identifier);
- leaf.setLineNumber(line);
- leaf.setCharPosition(charPositionInLine);
- leaf.setFileName(listener.getFileName());
-
- /*
- * If "config" is not specified, the default is the same as the parent
- * schema node's "config" value.
- */
- if (ctx.configStatement().isEmpty()) {
- boolean parentConfig = ListenerValidation.getParentNodeConfig(listener);
- leaf.setConfig(parentConfig);
- }
-
- Parsable tmpData = listener.getParsedDataStack().peek();
- YangLeavesHolder leavesHolder;
-
- if (tmpData instanceof YangLeavesHolder) {
- leavesHolder = (YangLeavesHolder) tmpData;
- leavesHolder.addLeaf(leaf);
- leaf.setContainedIn(leavesHolder);
- if (tmpData instanceof YangList) {
- YangList list = (YangList) tmpData;
- if (list.isConfig()) {
- for (String key : list.getKeyList()) {
- if (key.equals(leaf.getName())) {
- leaf.setKeyLeaf(true);
- }
- }
- }
- }
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LEAF_DATA,
- ctx.identifier().getText(), ENTRY));
- }
-
- listener.getParsedDataStack().push(leaf);
- }
-
- /**
- * It is called when parser exits from grammar rule (leaf), performs
- * validation and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processLeafExit(TreeWalkListener listener,
- GeneratedYangParser.LeafStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, LEAF_DATA, ctx.identifier().getText(), EXIT);
-
- if (listener.getParsedDataStack().peek() instanceof YangLeaf) {
- YangLeaf leafNode = (YangLeaf) listener.getParsedDataStack().peek();
- try {
- leafNode.validateDataOnExit();
- } catch (DataModelException e) {
- throw new ParserException(constructListenerErrorMessage(INVALID_CONTENT, LEAF_DATA,
- ctx.identifier().getText(), EXIT));
- }
- listener.getParsedDataStack().pop();
- } else {
- throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, LEAF_DATA,
- ctx.identifier().getText(), EXIT));
- }
- }
-
- /**
- * Validates the cardinality of leaf sub-statements as per grammar.
- *
- * @param ctx context object of the grammar rule
- */
- private static void validateSubStatementsCardinality(GeneratedYangParser.LeafStatementContext ctx) {
-
- validateCardinalityEqualsOne(ctx.typeStatement(), TYPE_DATA, LEAF_DATA, ctx.identifier().getText(), ctx);
- validateCardinalityMaxOne(ctx.unitsStatement(), UNITS_DATA, LEAF_DATA, ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.configStatement(), CONFIG_DATA, LEAF_DATA, ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.mandatoryStatement(), MANDATORY_DATA, LEAF_DATA, ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.descriptionStatement(), DESCRIPTION_DATA, LEAF_DATA, ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.referenceStatement(), REFERENCE_DATA, LEAF_DATA, ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.statusStatement(), STATUS_DATA, LEAF_DATA, ctx.identifier().getText());
- //TODO when.
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LeafrefListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LeafrefListener.java
deleted file mode 100644
index 9c1b466..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LeafrefListener.java
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangLeafList;
-import org.onosproject.yangutils.datamodel.YangLeafRef;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.linker.impl.YangResolutionInfoImpl;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.addResolutionInfo;
-import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.UNRESOLVED;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.LEAFREF_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * type-body-stmts = numerical-restrictions /
- * decimal64-specification /
- * string-restrictions /
- * enum-specification /
- * leafref-specification /
- * identityref-specification /
- * instance-identifier-specification /
- * bits-specification /
- * union-specification
- *
- * leafref-specification =
- * ;; these stmts can appear in any order
- * path-stmt stmtsep
- * [require-instance-stmt stmtsep]
- *
- * ANTLR grammar rule
- *
- * typeBodyStatements : numericalRestrictions | stringRestrictions | enumSpecification
- * | leafrefSpecification | identityrefSpecification | instanceIdentifierSpecification
- * | bitsSpecification | unionSpecification;
- *
- * leafrefSpecification : (pathStatement (requireInstanceStatement)?) | ((requireInstanceStatement)? pathStatement);
- */
-
-/**
- * Represents listener based call back function corresponding to the
- * "leafref" rule defined in ANTLR grammar file for corresponding ABNF rule
- * in RFC 6020.
- */
-public final class LeafrefListener {
-
- /**
- * Creates a new leafref listener.
- */
- private LeafrefListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar rule
- * (leafref), perform validations and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processLeafrefEntry(TreeWalkListener listener,
- GeneratedYangParser.LeafrefSpecificationContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, LEAFREF_DATA, "", ENTRY);
-
- int errorLine = ctx.getStart().getLine();
- int errorPosition = ctx.getStart().getCharPositionInLine();
-
- YangLeafRef<?> leafRef = new YangLeafRef<>();
-
- leafRef.setLineNumber(errorLine);
- leafRef.setCharPosition(errorPosition);
- leafRef.setFileName(listener.getFileName());
- Parsable typeData = listener.getParsedDataStack().pop();
-
- if (!(typeData instanceof YangType)) {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LEAFREF_DATA,
- "", ENTRY));
- }
-
- YangType type = (YangType) typeData;
- type.setDataTypeExtendedInfo(leafRef);
-
- // Setting by default the value of require-instance as true.
- leafRef.setRequireInstance(true);
- Parsable tmpData = listener.getParsedDataStack().peek();
-
- switch (tmpData.getYangConstructType()) {
-
- case LEAF_DATA:
-
- // Parent YANG node of leaf to be added in resolution information.
- YangLeaf leaf = (YangLeaf) listener.getParsedDataStack().pop();
- Parsable parentNodeOfLeaf = listener.getParsedDataStack().peek();
- listener.getParsedDataStack().push(leaf);
-
- // Verify parent node of leaf.
- if (!(parentNodeOfLeaf instanceof YangNode)) {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LEAFREF_DATA,
- "", ENTRY));
- }
-
- leafRef.setResolvableStatus(UNRESOLVED);
- leafRef.setParentNode((YangNode) parentNodeOfLeaf);
- if (listener.getGroupingDepth() == 0) {
- // Add resolution information to the list.
- YangResolutionInfoImpl resolutionInfo = new YangResolutionInfoImpl<YangLeafRef>(leafRef,
- (YangNode) parentNodeOfLeaf, errorLine, errorPosition);
- addToResolutionList(resolutionInfo);
- } else {
- leafRef.setInGrouping(true);
- }
- break;
-
- case LEAF_LIST_DATA:
-
- // Parent YANG node of leaf-list to be added in resolution information.
- YangLeafList leafList = (YangLeafList) listener.getParsedDataStack().pop();
- Parsable parentNodeOfLeafList = listener.getParsedDataStack().peek();
- listener.getParsedDataStack().push(leafList);
-
- // Verify parent node of leaf-list.
- if (!(parentNodeOfLeafList instanceof YangNode)) {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LEAFREF_DATA,
- "", ENTRY));
- }
-
- leafRef.setResolvableStatus(UNRESOLVED);
- leafRef.setParentNode((YangNode) parentNodeOfLeafList);
-
- if (listener.getGroupingDepth() == 0) {
- // Add resolution information to the list.
- YangResolutionInfoImpl resolutionInfoImpl = new YangResolutionInfoImpl<YangLeafRef>(leafRef,
- (YangNode) parentNodeOfLeafList, errorLine, errorPosition);
- addToResolutionList(resolutionInfoImpl);
- } else {
- leafRef.setInGrouping(true);
- }
- break;
-
- case TYPEDEF_DATA:
- Parsable parentNodeOfLeafref = listener.getParsedDataStack().peek();
- leafRef.setParentNode((YangNode) parentNodeOfLeafref);
- if (listener.getGroupingDepth() != 0) {
- leafRef.setInGrouping(true);
- }
- /*
- * Do not add the leaf ref to resolution list. It needs to be
- * added to resolution list, when leaf/leaf list references to
- * this typedef. At this time that leaf/leaf-list becomes the
- * parent for the leafref.
- */
- break;
-
- default:
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LEAFREF_DATA,
- "", ENTRY));
- }
- listener.getParsedDataStack().push(typeData);
- listener.getParsedDataStack().push(leafRef);
- }
-
- /**
- * It is called when parser exits from grammar rule (leafref), it performs
- * validation and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processLeafrefExit(TreeWalkListener listener,
- GeneratedYangParser.LeafrefSpecificationContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_CURRENT_HOLDER, LEAFREF_DATA, "", EXIT);
-
- Parsable parsableType = listener.getParsedDataStack().pop();
- if (!(parsableType instanceof YangLeafRef)) {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LEAFREF_DATA,
- "", EXIT));
- }
- }
-
- /**
- * Adds to resolution list.
- *
- * @param resolutionInfo resolution information
- */
- private static void addToResolutionList(YangResolutionInfoImpl resolutionInfo) {
-
- try {
- addResolutionInfo(resolutionInfo);
- } catch (DataModelException e) {
- throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
- LEAFREF_DATA, "", ENTRY, e.getMessage()));
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LengthRestrictionListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LengthRestrictionListener.java
deleted file mode 100644
index 6a3ac79..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LengthRestrictionListener.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangDerivedInfo;
-import org.onosproject.yangutils.datamodel.YangRangeRestriction;
-import org.onosproject.yangutils.datamodel.YangStringRestriction;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.RestrictionResolver.processLengthRestriction;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.LENGTH_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.TYPE_DATA;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BINARY;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.STRING;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * length-stmt = length-keyword sep length-arg-str optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [error-message-stmt stmtsep]
- * [error-app-tag-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * "}")
- *
- *
- * ANTLR grammar rule
- * lengthStatement : LENGTH_KEYWORD length
- * (STMTEND | LEFT_CURLY_BRACE commonStatements RIGHT_CURLY_BRACE);
- */
-
-/**
- * Represents listener based call back function corresponding to the "length"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class LengthRestrictionListener {
-
- /**
- * Creates a new length restriction listener.
- */
- private LengthRestrictionListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar
- * rule (length), performs validation and updates the data model
- * tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processLengthRestrictionEntry(TreeWalkListener listener,
- GeneratedYangParser.LengthStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, LENGTH_DATA, ctx.length().getText(), ENTRY);
-
- Parsable tmpData = listener.getParsedDataStack().peek();
- if (tmpData.getYangConstructType() == TYPE_DATA) {
- YangType type = (YangType) tmpData;
- setLengthRestriction(listener, type, ctx);
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LENGTH_DATA,
- ctx.length().getText(), ENTRY));
- }
- }
-
- /**
- * Sets the length restriction to type.
- *
- * @param listener listener's object
- * @param type Yang type for which length restriction to be set
- * @param ctx context object of the grammar rule
- */
- private static void setLengthRestriction(TreeWalkListener listener, YangType type,
- GeneratedYangParser.LengthStatementContext ctx) {
-
- if (type.getDataType() == DERIVED) {
- ((YangDerivedInfo<YangRangeRestriction>) type.getDataTypeExtendedInfo())
- .setLengthRestrictionString(ctx.length().getText());
- ((YangDerivedInfo<YangRangeRestriction>) type.getDataTypeExtendedInfo())
- .setLineNumber(ctx.getStart().getLine());
- ((YangDerivedInfo<YangRangeRestriction>) type.getDataTypeExtendedInfo())
- .setCharPosition(ctx.getStart().getCharPositionInLine());
- return;
- }
-
- if (type.getDataType() != STRING && type.getDataType() != BINARY) {
- ParserException parserException =
- new ParserException(
- "YANG file error : " +
- YangConstructType.getYangConstructType(LENGTH_DATA) +
- " name " + ctx.length().getText() +
- " can be used to restrict the built-in type string/binary" +
- " or types derived from string/binary.");
- parserException.setLine(ctx.getStart().getLine());
- parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
- throw parserException;
- }
-
- YangRangeRestriction lengthRestriction = null;
- try {
- lengthRestriction = processLengthRestriction(null, ctx.getStart().getLine(),
- ctx.getStart().getCharPositionInLine(), false, ctx.length
- ().getText(), listener.getFileName());
- } catch (DataModelException e) {
- ParserException parserException = new ParserException(e.getMessage());
- parserException.setCharPosition(e.getCharPositionInLine());
- parserException.setLine(e.getLineNumber());
- throw parserException;
- }
-
- if (type.getDataType() == STRING) {
- YangStringRestriction stringRestriction = (YangStringRestriction) type.getDataTypeExtendedInfo();
- if (stringRestriction == null) {
- stringRestriction = new YangStringRestriction();
- stringRestriction.setFileName(listener.getFileName());
- stringRestriction.setCharPosition(ctx.getStart().getCharPositionInLine());
- stringRestriction.setLineNumber(ctx.getStart().getLine());
- type.setDataTypeExtendedInfo(stringRestriction);
- }
-
- stringRestriction.setLengthRestriction(lengthRestriction);
- } else {
- type.setDataTypeExtendedInfo(lengthRestriction);
- }
-
- listener.getParsedDataStack().push(lengthRestriction);
- }
-
- /**
- * Performs validation and updates the data model tree.
- * It is called when parser exits from grammar rule (length).
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processLengthRestrictionExit(TreeWalkListener listener,
- GeneratedYangParser.LengthStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, LENGTH_DATA, ctx.length().getText(), EXIT);
-
- Parsable tmpData = listener.getParsedDataStack().peek();
- if (tmpData instanceof YangRangeRestriction) {
- listener.getParsedDataStack().pop();
- } else if (tmpData instanceof YangType
- && ((YangType) tmpData).getDataType() == DERIVED) {
- // TODO : need to handle in linker
- } else {
- throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, LENGTH_DATA,
- ctx.length().getText(), EXIT));
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ListListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ListListener.java
deleted file mode 100644
index ab91675..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ListListener.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangAugment;
-import org.onosproject.yangutils.datamodel.YangCase;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.YangGrouping;
-import org.onosproject.yangutils.datamodel.YangInput;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNotification;
-import org.onosproject.yangutils.datamodel.YangOutput;
-import org.onosproject.yangutils.datamodel.YangSubModule;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-import org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation;
-
-import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.CONFIG_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.DATA_DEF_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.DESCRIPTION_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.KEY_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.LIST_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.MAX_ELEMENT_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.MIN_ELEMENT_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.REFERENCE_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.STATUS_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.validateUniqueInList;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.validateCardinalityMaxOne;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.validateCardinalityNonZero;
-import static org.onosproject.yangutils.translator.tojava.YangDataModelFactory.getYangListNode;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * list-stmt = list-keyword sep identifier-arg-str optsep
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [when-stmt stmtsep]
- * *(if-feature-stmt stmtsep)
- * *(must-stmt stmtsep)
- * [key-stmt stmtsep]
- * *(unique-stmt stmtsep)
- * [config-stmt stmtsep]
- * [min-elements-stmt stmtsep]
- * [max-elements-stmt stmtsep]
- * [ordered-by-stmt stmtsep]
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * *((typedef-stmt /
- * grouping-stmt) stmtsep)
- * 1*(data-def-stmt stmtsep)
- * "}"
- *
- * ANTLR grammar rule
- * listStatement : LIST_KEYWORD identifier LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | mustStatement |
- * keyStatement | uniqueStatement | configStatement | minElementsStatement | maxElementsStatement |
- * orderedByStatement | statusStatement | descriptionStatement | referenceStatement | typedefStatement |
- * groupingStatement| dataDefStatement)* RIGHT_CURLY_BRACE;
- */
-
-/**
- * Represents listener based call back function corresponding to the "list" rule
- * defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class ListListener {
-
- /**
- * Creates a new list listener.
- */
- private ListListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar rule
- * (list), performs validation and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processListEntry(TreeWalkListener listener,
- GeneratedYangParser.ListStatementContext ctx) {
-
- YangNode curNode;
-
- checkStackIsNotEmpty(listener, MISSING_HOLDER, LIST_DATA, ctx.identifier().getText(), ENTRY);
-
- String identifier = getValidIdentifier(ctx.identifier().getText(), LIST_DATA, ctx);
-
- // Validate sub statement cardinality.
- validateSubStatementsCardinality(ctx);
-
- // Check for identifier collision
- int line = ctx.getStart().getLine();
- int charPositionInLine = ctx.getStart().getCharPositionInLine();
- detectCollidingChildUtil(listener, line, charPositionInLine, identifier, LIST_DATA);
-
- YangList yangList = getYangListNode(JAVA_GENERATION);
- yangList.setName(identifier);
- yangList.setLineNumber(line);
- yangList.setCharPosition(charPositionInLine);
- yangList.setFileName(listener.getFileName());
- /*
- * If "config" is not specified, the default is the same as the parent
- * schema node's "config" value.
- */
- if (ctx.configStatement().isEmpty()) {
- boolean parentConfig = ListenerValidation.getParentNodeConfig(listener);
- yangList.setConfig(parentConfig);
- }
-
- Parsable curData = listener.getParsedDataStack().peek();
- if (curData instanceof YangModule || curData instanceof YangContainer
- || curData instanceof YangList || curData instanceof YangCase
- || curData instanceof YangNotification || curData instanceof YangInput
- || curData instanceof YangOutput || curData instanceof YangAugment
- || curData instanceof YangGrouping || curData instanceof YangSubModule) {
- curNode = (YangNode) curData;
- try {
- curNode.addChild(yangList);
- } catch (DataModelException e) {
- throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
- LIST_DATA, ctx.identifier().getText(), ENTRY, e.getMessage()));
- }
- listener.getParsedDataStack().push(yangList);
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LIST_DATA,
- ctx.identifier().getText(), ENTRY));
- }
- }
-
- /**
- * It is called when parser exits from grammar rule (list), it performs
- * validation and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processListExit(TreeWalkListener listener,
- GeneratedYangParser.ListStatementContext ctx) {
-
- checkStackIsNotEmpty(listener, MISSING_HOLDER, LIST_DATA, ctx.identifier().getText(), EXIT);
-
- if (listener.getParsedDataStack().peek() instanceof YangList) {
- YangList yangList = (YangList) listener.getParsedDataStack().peek();
- try {
- yangList.validateDataOnExit();
- validateUniqueInList(yangList, ctx);
- } catch (DataModelException e) {
- ParserException parserException = new ParserException(constructExtendedListenerErrorMessage(
- UNHANDLED_PARSED_DATA, LIST_DATA, ctx.identifier().getText(), EXIT, e.getMessage()));
- parserException.setLine(ctx.getStart().getLine());
- parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
- throw parserException;
- }
- listener.getParsedDataStack().pop();
- } else {
- throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, LIST_DATA,
- ctx.identifier().getText(), EXIT));
- }
- }
-
- /**
- * Validates the cardinality of list sub-statements as per grammar.
- *
- * @param ctx context object of the grammar rule
- */
- private static void validateSubStatementsCardinality(GeneratedYangParser.ListStatementContext ctx) {
-
- validateCardinalityMaxOne(ctx.keyStatement(), KEY_DATA, LIST_DATA, ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.configStatement(), CONFIG_DATA, LIST_DATA, ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.maxElementsStatement(), MAX_ELEMENT_DATA, LIST_DATA, ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.minElementsStatement(), MIN_ELEMENT_DATA, LIST_DATA, ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.descriptionStatement(), DESCRIPTION_DATA, LIST_DATA, ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.referenceStatement(), REFERENCE_DATA, LIST_DATA, ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.statusStatement(), STATUS_DATA, LIST_DATA, ctx.identifier().getText());
- validateCardinalityNonZero(ctx.dataDefStatement(), DATA_DEF_DATA, LIST_DATA, ctx.identifier().getText(), ctx);
- //TODO when, typedef, grouping, unique
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/MandatoryListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/MandatoryListener.java
deleted file mode 100644
index b945f81..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/MandatoryListener.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.MANDATORY_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidBooleanValue;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * mandatory-stmt = mandatory-keyword sep
- * mandatory-arg-str stmtend
- *
- * mandatory-arg-str = < a string that matches the rule
- * mandatory-arg >
- *
- * mandatory-arg = true-keyword / false-keyword
- *
- * ANTLR grammar rule
- * mandatoryStatement : MANDATORY_KEYWORD mandatory STMTEND;
- * mandatory : string;
- */
-
-/**
- * Represents listener based call back function corresponding to the "mandatory"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class MandatoryListener {
-
- /**
- * Creates a new mandatory listener.
- */
- private MandatoryListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar
- * rule (mandatory), performs validation and updates the data model
- * tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processMandatoryEntry(TreeWalkListener listener,
- GeneratedYangParser.MandatoryStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, MANDATORY_DATA, "", ENTRY);
-
- boolean isMandatory = getValidBooleanValue(ctx.mandatory().getText(), MANDATORY_DATA, ctx);
-
- Parsable tmpNode = listener.getParsedDataStack().peek();
- switch (tmpNode.getYangConstructType()) {
- case LEAF_DATA:
- YangLeaf leaf = (YangLeaf) tmpNode;
- leaf.setMandatory(isMandatory);
- break;
- case CHOICE_DATA: // TODO
- break;
- default:
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, MANDATORY_DATA, "", ENTRY));
- }
- }
-}
\ No newline at end of file
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/MaxElementsListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/MaxElementsListener.java
deleted file mode 100644
index 2f06387..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/MaxElementsListener.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangLeafList;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangMaxElement;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.MAX_ELEMENT_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction
- .constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * max-elements-stmt = max-elements-keyword sep
- * max-value-arg-str stmtend
- * max-value-arg-str = < a string that matches the rule
- * max-value-arg >
- *
- * ANTLR grammar rule
- * maxElementsStatement : MAX_ELEMENTS_KEYWORD maxValue STMTEND;
- * maxValue : string;
- */
-
-/**
- * Represents listener based call back function corresponding to the
- * "max-elements" rule defined in ANTLR grammar file for corresponding ABNF rule
- * in RFC 6020.
- */
-public final class MaxElementsListener {
-
- private static final String POSITIVE_INTEGER_PATTERN = "[1-9][0-9]*";
- private static final String UNBOUNDED_KEYWORD = "unbounded";
-
- /**
- * Creates a new max-elements listener.
- */
- private MaxElementsListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar rule
- * (max-elements), performs validation and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processMaxElementsEntry(TreeWalkListener listener,
- GeneratedYangParser.MaxElementsStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, MAX_ELEMENT_DATA, "", ENTRY);
-
- int maxElementsValue = getValidMaxElementValue(ctx);
-
- YangMaxElement maxElement = new YangMaxElement();
- maxElement.setMaxElement(maxElementsValue);
-
- maxElement.setLineNumber(ctx.getStart().getLine());
- maxElement.setCharPosition(ctx.getStart().getCharPositionInLine());
- maxElement.setFileName(listener.getFileName());
- Parsable tmpData = listener.getParsedDataStack().peek();
- switch (tmpData.getYangConstructType()) {
- case LEAF_LIST_DATA:
- YangLeafList leafList = (YangLeafList) tmpData;
- leafList.setMaxElements(maxElement);
- break;
- case LIST_DATA:
- YangList yangList = (YangList) tmpData;
- yangList.setMaxElements(maxElement);
- break;
- default:
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, MAX_ELEMENT_DATA, "", ENTRY));
- }
- }
-
- /**
- * Validates max element value and returns the value from context.
- *
- * @param ctx context object of the grammar rule
- * @return max element's value
- */
- private static int getValidMaxElementValue(GeneratedYangParser.MaxElementsStatementContext ctx) {
-
- int maxElementsValue;
-
- String value = removeQuotesAndHandleConcat(ctx.maxValue().getText());
- if (value.equals(UNBOUNDED_KEYWORD)) {
- maxElementsValue = Integer.MAX_VALUE;
- } else if (value.matches(POSITIVE_INTEGER_PATTERN)) {
- try {
- maxElementsValue = Integer.parseInt(value);
- } catch (NumberFormatException e) {
- ParserException parserException = new ParserException("YANG file error : " +
- YangConstructType.getYangConstructType(
- MAX_ELEMENT_DATA) + " value " +
- value + " is not " +
- "valid.");
- parserException.setLine(ctx.getStart().getLine());
- parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
- throw parserException;
- }
- } else {
- ParserException parserException = new ParserException("YANG file error : " +
- YangConstructType.getYangConstructType(
- MAX_ELEMENT_DATA) + " value " +
- value + " is not " +
- "valid.");
- parserException.setLine(ctx.getStart().getLine());
- parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
- throw parserException;
- }
-
- return maxElementsValue;
- }
-
-}
\ No newline at end of file
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/MinElementsListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/MinElementsListener.java
deleted file mode 100644
index 27cd100..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/MinElementsListener.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangLeafList;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangMinElement;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.MIN_ELEMENT_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction
- .constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidNonNegativeIntegerValue;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * min-elements-stmt = min-elements-keyword sep
- * min-value-arg-str stmtend
- * min-value-arg-str = < a string that matches the rule
- * min-value-arg >
- * min-value-arg = non-negative-integer-value
- *
- * ANTLR grammar rule
- * minElementsStatement : MIN_ELEMENTS_KEYWORD minValue STMTEND;
- * minValue : string;
- */
-
-/**
- * Represents listener based call back function corresponding to the "min-elements"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class MinElementsListener {
-
- /**
- * Creates a new min-elements listener.
- */
- private MinElementsListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar
- * rule (min-elements), performs validation and updates the data model
- * tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processMinElementsEntry(TreeWalkListener listener,
- GeneratedYangParser.MinElementsStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, MIN_ELEMENT_DATA, ctx.minValue().getText(), ENTRY);
-
- int minElementValue = getValidNonNegativeIntegerValue(ctx.minValue().getText(), MIN_ELEMENT_DATA, ctx);
-
- YangMinElement minElement = new YangMinElement();
-
- minElement.setMinElement(minElementValue);
- minElement.setLineNumber(ctx.getStart().getLine());
- minElement.setCharPosition(ctx.getStart().getCharPositionInLine());
- minElement.setFileName(listener.getFileName());
- Parsable tmpData = listener.getParsedDataStack().peek();
- switch (tmpData.getYangConstructType()) {
- case LEAF_LIST_DATA:
- YangLeafList leafList = (YangLeafList) tmpData;
- leafList.setMinElements(minElement);
- break;
- case LIST_DATA:
- YangList yangList = (YangList) tmpData;
- yangList.setMinElements(minElement);
- break;
- default:
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, MIN_ELEMENT_DATA,
- ctx.minValue().getText(), ENTRY));
- }
- }
-
-}
\ No newline at end of file
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ModuleListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ModuleListener.java
deleted file mode 100644
index fb76dff..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ModuleListener.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangReferenceResolver;
-import org.onosproject.yangutils.datamodel.YangResolutionInfo;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.linker.exceptions.LinkerException;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-import org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType;
-
-import java.util.List;
-
-import static org.onosproject.yangutils.datamodel.ResolvableType.YANG_BASE;
-import static org.onosproject.yangutils.datamodel.ResolvableType.YANG_COMPILER_ANNOTATION;
-import static org.onosproject.yangutils.datamodel.ResolvableType.YANG_DERIVED_DATA_TYPE;
-import static org.onosproject.yangutils.datamodel.ResolvableType.YANG_IDENTITYREF;
-import static org.onosproject.yangutils.datamodel.ResolvableType.YANG_IF_FEATURE;
-import static org.onosproject.yangutils.datamodel.ResolvableType.YANG_LEAFREF;
-import static org.onosproject.yangutils.datamodel.ResolvableType.YANG_USES;
-import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.MODULE_DATA;
-import static org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser.ModuleStatementContext;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_CHILD;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsEmpty;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-import static org.onosproject.yangutils.translator.tojava.YangDataModelFactory.getYangModuleNode;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * module-stmt = optsep module-keyword sep identifier-arg-str
- * optsep
- * "{" stmtsep
- * module-header-stmts
- * linkage-stmts
- * meta-stmts
- * revision-stmts
- * body-stmts
- * "}" optsep
- *
- * ANTLR grammar rule
- * module_stmt : MODULE_KEYWORD identifier LEFT_CURLY_BRACE module_body* RIGHT_CURLY_BRACE;
- */
-
-/**
- * Represents listener based call back function corresponding to the "module"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class ModuleListener {
-
- /**
- * Creates a new module listener.
- */
- private ModuleListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar rule
- * (module), perform validations and update the data model tree.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processModuleEntry(TreeWalkListener listener,
- ModuleStatementContext ctx) {
-
- // Check if stack is empty.
- checkStackIsEmpty(listener, INVALID_HOLDER, MODULE_DATA,
- ctx.identifier().getText(), ENTRY);
- String identifier = getValidIdentifier(ctx.identifier().getText(),
- MODULE_DATA, ctx);
- YangModule yangModule = getYangModuleNode(JAVA_GENERATION);
- yangModule.setName(identifier);
- yangModule.setLineNumber(ctx.getStart().getLine());
- yangModule.setCharPosition(ctx.getStart().getCharPositionInLine());
- yangModule.setFileName(listener.getFileName());
-
- if (ctx.moduleBody().moduleHeaderStatement().yangVersionStatement() == null) {
- yangModule.setVersion((byte) 1);
- }
-
- listener.getParsedDataStack().push(yangModule);
- }
-
- /**
- * It is called when parser exits from grammar rule (module), it perform
- * validations and update the data model tree.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processModuleExit(TreeWalkListener listener,
- ModuleStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, MODULE_DATA,
- ctx.identifier().getText(), EXIT);
- Parsable tmpNode = listener.getParsedDataStack().peek();
- if (!(tmpNode instanceof YangModule)) {
- throwError(MISSING_CURRENT_HOLDER, ctx);
- }
-
- YangModule module = (YangModule) tmpNode;
- List<YangResolutionInfo> info = module.getUnresolvedResolutionList(
- YANG_COMPILER_ANNOTATION);
- if (info != null && !info.isEmpty() && module.getChild() != null) {
- throwError(INVALID_CHILD, ctx);
- }
- YangReferenceResolver resolver = (YangReferenceResolver) listener
- .getParsedDataStack().peek();
- try {
- resolver.resolveSelfFileLinking(YANG_IF_FEATURE);
- resolver.resolveSelfFileLinking(YANG_USES);
- resolver.resolveSelfFileLinking(YANG_DERIVED_DATA_TYPE);
- resolver.resolveSelfFileLinking(YANG_LEAFREF);
- resolver.resolveSelfFileLinking(YANG_BASE);
- resolver.resolveSelfFileLinking(YANG_IDENTITYREF);
- } catch (DataModelException e) {
- LinkerException linkerException = new LinkerException(e.getMessage());
- linkerException.setLine(e.getLineNumber());
- linkerException.setCharPosition(e.getCharPositionInLine());
- linkerException.setFileName(listener.getFileName());
- throw linkerException;
- }
- }
-
- private static void throwError(ListenerErrorType type,
- ModuleStatementContext ctx) {
- throw new ParserException(constructListenerErrorMessage(
- type, MODULE_DATA, ctx.identifier().getText(), EXIT));
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/MustListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/MustListener.java
deleted file mode 100644
index 421ede1..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/MustListener.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangMust;
-import org.onosproject.yangutils.datamodel.YangMustHolder;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.MUST_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- *
- * must-stmt = must-keyword sep string optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [error-message-stmt stmtsep]
- * [error-app-tag-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * "}")
- *
- * ANTLR grammar rule
- * mustStatement : MUST_KEYWORD string (STMTEND | LEFT_CURLY_BRACE commonStatements RIGHT_CURLY_BRACE);
- */
-
-/**
- * Represents listener based call back function corresponding to the
- * "must" rule defined in ANTLR grammar file for corresponding ABNF rule
- * in RFC 6020.
- */
-public final class MustListener {
-
- /**
- * Creates a new must listener.
- */
- private MustListener() {
- }
-
- /**
- * Perform validations and updates the data model tree.It is called when parser
- * receives an input matching the grammar rule (must).
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processMustEntry(TreeWalkListener listener,
- GeneratedYangParser.MustStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, MUST_DATA, ctx.string().getText(), ENTRY);
- String constraint = removeQuotesAndHandleConcat(ctx.string().getText());
-
- // Obtain the node of the stack.
- Parsable tmpNode = listener.getParsedDataStack().peek();
- if (tmpNode instanceof YangMustHolder) {
-
- YangMust must = new YangMust();
- must.setConstraint(constraint);
-
- must.setLineNumber(ctx.getStart().getLine());
- must.setCharPosition(ctx.getStart().getCharPositionInLine());
- must.setFileName(listener.getFileName());
- YangMustHolder mustHolder = (YangMustHolder) tmpNode;
- mustHolder.addMust(must);
-
- listener.getParsedDataStack().push(must);
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, MUST_DATA,
- ctx.string().getText(), ENTRY));
- }
-
- }
-
- /**
- * Performs validation and updates the data model tree.It is called when parser
- * exits from grammar rule (must).
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processMustExit(TreeWalkListener listener,
- GeneratedYangParser.MustStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, MUST_DATA, ctx.string().getText(), EXIT);
-
- if (listener.getParsedDataStack().peek() instanceof YangMust) {
- listener.getParsedDataStack().pop();
- } else {
- throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, MUST_DATA,
- ctx.string().getText(), EXIT));
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/NamespaceListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/NamespaceListener.java
deleted file mode 100644
index 6bfaf50..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/NamespaceListener.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.net.URI;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.NAMESPACE_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * module-header-stmts = ;; these stmts can appear in any order
- * [yang-version-stmt stmtsep]
- * namespace-stmt stmtsep
- * prefix-stmt stmtsep
- *
- * namespace-stmt = namespace-keyword sep uri-str optsep stmtend
- *
- * ANTLR grammar rule
- * module_header_statement : yang_version_stmt? namespace_stmt prefix_stmt
- * | yang_version_stmt? prefix_stmt namespace_stmt
- * | namespace_stmt yang_version_stmt? prefix_stmt
- * | namespace_stmt prefix_stmt yang_version_stmt?
- * | prefix_stmt namespace_stmt yang_version_stmt?
- * | prefix_stmt yang_version_stmt? namespace_stmt
- * ;
- * namespace_stmt : NAMESPACE_KEYWORD string STMTEND;
- */
-
-/**
- * Represents listener based call back function corresponding to the "namespace"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class NamespaceListener {
-
- /**
- * Creates a new namespace listener.
- */
- private NamespaceListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar rule
- * (namespace), perform validations and update the data model tree.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processNamespaceEntry(TreeWalkListener listener,
- GeneratedYangParser.NamespaceStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, NAMESPACE_DATA, ctx.string().getText(), ENTRY);
-
- if (!validateUriValue(ctx.string().getText())) {
- ParserException parserException = new ParserException("YANG file error: Invalid namespace URI");
- parserException.setLine(ctx.string().STRING(0).getSymbol().getLine());
- parserException.setCharPosition(ctx.string().STRING(0).getSymbol().getCharPositionInLine());
- throw parserException;
- }
-
- // Obtain the node of the stack.
- Parsable tmpNode = listener.getParsedDataStack().peek();
- switch (tmpNode.getYangConstructType()) {
- case MODULE_DATA: {
- YangModule module = (YangModule) tmpNode;
- module.setModuleNamespace(removeQuotesAndHandleConcat(ctx.string().getText()));
- break;
- }
- default:
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, NAMESPACE_DATA,
- ctx.string().getText(), ENTRY));
- }
- }
-
- /**
- * Validate input URI.
- *
- * @param uri input namespace URI
- * @return validation result
- */
- private static boolean validateUriValue(String uri) {
- uri = uri.replace("\"", "");
- try {
- URI.create(uri);
- } catch (Exception e1) {
- return false;
- }
- return true;
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/NotificationListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/NotificationListener.java
deleted file mode 100644
index 90b8e52..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/NotificationListener.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.RpcNotificationContainer;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNotification;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.DESCRIPTION_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.NOTIFICATION_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.REFERENCE_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.STATUS_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.validateCardinalityMaxOne;
-import static org.onosproject.yangutils.translator.tojava.YangDataModelFactory.getYangNotificationNode;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * notification-stmt = notification-keyword sep
- * identifier-arg-str optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * *(if-feature-stmt stmtsep)
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * *((typedef-stmt /
- * grouping-stmt) stmtsep)
- * *(data-def-stmt stmtsep)
- * "}")
- *
- * ANTLR grammar rule
- * notificationStatement : NOTIFICATION_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE (ifFeatureStatement
- * | statusStatement | descriptionStatement | referenceStatement | typedefStatement
- * | groupingStatement | dataDefStatement)* RIGHT_CURLY_BRACE);
- */
-
-/**
- * Represents listener based call back function corresponding to the "notification"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class NotificationListener {
-
- /**
- * Creates a new notification listener.
- */
- private NotificationListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar rule
- * (notification), performs validation and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processNotificationEntry(TreeWalkListener listener,
- GeneratedYangParser.NotificationStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, NOTIFICATION_DATA,
- ctx.identifier().getText(), ENTRY);
-
- String identifier = getValidIdentifier(ctx.identifier().getText(),
- NOTIFICATION_DATA, ctx);
-
- // Validate sub statement cardinality.
- validateSubStatementsCardinality(ctx);
-
- // Check for identifier collision
- int line = ctx.getStart().getLine();
- int charPositionInLine = ctx.getStart().getCharPositionInLine();
- detectCollidingChildUtil(listener, line, charPositionInLine, identifier,
- NOTIFICATION_DATA);
-
- Parsable curData = listener.getParsedDataStack().peek();
- if (curData instanceof RpcNotificationContainer) {
-
- YangNotification notification = getYangNotificationNode(JAVA_GENERATION);
- notification.setName(identifier);
-
- notification.setLineNumber(ctx.getStart().getLine());
- notification.setCharPosition(ctx.getStart().getCharPositionInLine());
- notification.setFileName(listener.getFileName());
- ((RpcNotificationContainer) curData).setNotificationPresenceFlag(true);
- YangNode curNode = (YangNode) curData;
- try {
- curNode.addChild(notification);
- } catch (DataModelException e) {
- throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
- NOTIFICATION_DATA, ctx.identifier().getText(), ENTRY, e.getMessage()));
- }
- listener.getParsedDataStack().push(notification);
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, NOTIFICATION_DATA,
- ctx.identifier().getText(), ENTRY));
- }
- }
-
- /**
- * It is called when parser exits from grammar rule (notification), it perform
- * validations and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processNotificationExit(TreeWalkListener listener,
- GeneratedYangParser.NotificationStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, NOTIFICATION_DATA,
- ctx.identifier().getText(), EXIT);
-
- if (listener.getParsedDataStack().peek() instanceof YangNotification) {
- listener.getParsedDataStack().pop();
- } else {
- throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, NOTIFICATION_DATA,
- ctx.identifier().getText(), EXIT));
- }
- }
-
- /**
- * Validates the cardinality of notification sub-statements as per grammar.
- *
- * @param ctx context object of the grammar rule
- */
- private static void validateSubStatementsCardinality(GeneratedYangParser.NotificationStatementContext ctx) {
-
- validateCardinalityMaxOne(ctx.statusStatement(), STATUS_DATA,
- NOTIFICATION_DATA, ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.descriptionStatement(),
- DESCRIPTION_DATA, NOTIFICATION_DATA,
- ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.referenceStatement(), REFERENCE_DATA,
- NOTIFICATION_DATA,
- ctx.identifier().getText());
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/OrganizationListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/OrganizationListener.java
deleted file mode 100644
index 20a42c1..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/OrganizationListener.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangSubModule;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.ORGANIZATION_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * meta-stmts = ;; these stmts can appear in any order
- * [organization-stmt stmtsep]
- * [contact-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * organization-stmt = organization-keyword sep string
- * optsep stmtend
- *
- * ANTLR grammar rule
- * meta_stmts : organization_stmt? contact_stmt? description_stmt? reference_stmt?
- * | organization_stmt? contact_stmt? reference_stmt? description_stmt?
- * | organization_stmt? description_stmt? contact_stmt? reference_stmt?
- * | organization_stmt? description_stmt? reference_stmt? contact_stmt?
- * | organization_stmt? reference_stmt? contact_stmt? description_stmt?
- * | organization_stmt? reference_stmt? description_stmt? contact_stmt?
- * | contact_stmt? organization_stmt? description_stmt? reference_stmt?
- * | contact_stmt? organization_stmt? reference_stmt? description_stmt?
- * | contact_stmt? reference_stmt? organization_stmt? description_stmt?
- * | contact_stmt? reference_stmt? description_stmt? organization_stmt?
- * | contact_stmt? description_stmt? reference_stmt? organization_stmt?
- * | contact_stmt? description_stmt? organization_stmt? reference_stmt?
- * | reference_stmt? contact_stmt? organization_stmt? description_stmt?
- * | reference_stmt? contact_stmt? description_stmt? organization_stmt?
- * | reference_stmt? organization_stmt? contact_stmt? description_stmt?
- * | reference_stmt? organization_stmt? description_stmt? contact_stmt?
- * | reference_stmt? description_stmt? organization_stmt? contact_stmt?
- * | reference_stmt? description_stmt? contact_stmt? organization_stmt?
- * | description_stmt? reference_stmt? contact_stmt? organization_stmt?
- * | description_stmt? reference_stmt? organization_stmt? contact_stmt?
- * | description_stmt? contact_stmt? reference_stmt? organization_stmt?
- * | description_stmt? contact_stmt? organization_stmt? reference_stmt?
- * | description_stmt? organization_stmt? contact_stmt? reference_stmt?
- * | description_stmt? organization_stmt? reference_stmt? contact_stmt?
- * ;
- * organization_stmt : ORGANIZATION_KEYWORD string STMTEND;
- */
-
-/**
- * Represents listener based call back function corresponding to the
- * "organization" rule defined in ANTLR grammar file for corresponding ABNF rule
- * in RFC 6020.
- */
-public final class OrganizationListener {
-
- /**
- * Creates a new organization listener.
- */
- private OrganizationListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar rule
- * (organization), perform validations and update the data model tree.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processOrganizationEntry(TreeWalkListener listener,
- GeneratedYangParser.OrganizationStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, ORGANIZATION_DATA, ctx.string().getText(),
- ENTRY);
-
- // Obtain the node of the stack.
- Parsable tmpNode = listener.getParsedDataStack().peek();
- switch (tmpNode.getYangConstructType()) {
- case MODULE_DATA: {
- YangModule module = (YangModule) tmpNode;
- module.setOrganization(ctx.string().getText());
- break;
- }
- case SUB_MODULE_DATA: {
- YangSubModule subModule = (YangSubModule) tmpNode;
- subModule.setOrganization(ctx.string().getText());
- break;
- }
- default:
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, ORGANIZATION_DATA,
- ctx.string().getText(), ENTRY));
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/OutputListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/OutputListener.java
deleted file mode 100644
index 6ae74b8..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/OutputListener.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangOutput;
-import org.onosproject.yangutils.datamodel.YangRpc;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.OUTPUT_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction
- .constructExtendedListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction
- .constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-import static org.onosproject.yangutils.translator.tojava.YangDataModelFactory.getYangOutputNode;
-import static org.onosproject.yangutils.utils.UtilConstants.OUTPUT;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- *
- * output-stmt = output-keyword optsep
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * *((typedef-stmt /
- * grouping-stmt) stmtsep)
- * 1*(data-def-stmt stmtsep)
- * "}"
- *
- * outputStatement : OUTPUT_KEYWORD LEFT_CURLY_BRACE outputStatementBody RIGHT_CURLY_BRACE;
-
- * outputStatementBody : typedefStatement* dataDefStatement+
- * | dataDefStatement+ typedefStatement*
- * | groupingStatement* dataDefStatement+
- * | dataDefStatement+ groupingStatement*;
- */
-
-/**
- * Represents listener based call back function corresponding to the "output"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class OutputListener {
-
- /**
- * Creates a new output listener.
- */
- private OutputListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar rule
- * (output), performs validation and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processOutputEntry(TreeWalkListener listener,
- GeneratedYangParser.OutputStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, OUTPUT_DATA, "", ENTRY);
-
- Parsable curData = listener.getParsedDataStack().peek();
- if (curData instanceof YangRpc) {
-
- YangOutput yangOutput = getYangOutputNode(JAVA_GENERATION);
- yangOutput.setName(OUTPUT);
- yangOutput.setLineNumber(ctx.getStart().getLine());
- yangOutput.setCharPosition(ctx.getStart().getCharPositionInLine());
- yangOutput.setFileName(listener.getFileName());
- YangNode curNode = (YangNode) curData;
- try {
- curNode.addChild(yangOutput);
- } catch (DataModelException e) {
- throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
- OUTPUT_DATA, "", ENTRY, e.getMessage()));
- }
- listener.getParsedDataStack().push(yangOutput);
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, OUTPUT_DATA,
- "", ENTRY));
- }
- }
-
- /**
- * It is called when parser exits from grammar rule (output), it perform
- * validations and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processOutputExit(TreeWalkListener listener,
- GeneratedYangParser.OutputStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, OUTPUT_DATA, "", EXIT);
-
- if (!(listener.getParsedDataStack().peek() instanceof YangOutput)) {
- throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, OUTPUT_DATA,
- "", EXIT));
- }
- listener.getParsedDataStack().pop();
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/PathListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/PathListener.java
deleted file mode 100644
index 681225d..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/PathListener.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangLeafRef;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser.PathStatementContext;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.PATH_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.validatePath;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * leafref-specification =
- * ;; these stmts can appear in any order
- * path-stmt stmtsep
- * [require-instance-stmt stmtsep]
- *
- * path-stmt = path-keyword sep path-arg-str stmtend
- *
- * ANTLR grammar rule
- *
- * leafrefSpecification : (pathStatement (requireInstanceStatement)?) |
- * ((requireInstanceStatement)? pathStatement);
- *
- * pathStatement : PATH_KEYWORD path STMTEND;
- */
-
-/**
- * Represents listener based call back function corresponding to the
- * "path" rule defined in ANTLR grammar file for corresponding ABNF rule
- * in RFC 6020.
- */
-public final class PathListener {
-
- // No instantiation.
- private PathListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar rule
- * (path), performs validation and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processPathEntry(TreeWalkListener listener,
- PathStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, PATH_DATA,
- ctx.path().getText(), ENTRY);
-
- Parsable curData = listener.getParsedDataStack().peek();
-
- // Checks the holder of path as leaf-ref, else throws error.
- if (curData instanceof YangLeafRef) {
- // Parsing the path and updating in leaf-ref path.
- validatePath(ctx.path().getText(), PATH_DATA, ctx,
- (YangLeafRef) curData);
- } else {
- throw new ParserException(
- constructListenerErrorMessage(INVALID_HOLDER, PATH_DATA,
- ctx.path().getText(), ENTRY));
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/PatternRestrictionListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/PatternRestrictionListener.java
deleted file mode 100644
index 992165b..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/PatternRestrictionListener.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.antlr.v4.runtime.tree.TerminalNode;
-import org.onosproject.yangutils.datamodel.YangDerivedInfo;
-import org.onosproject.yangutils.datamodel.YangPatternRestriction;
-import org.onosproject.yangutils.datamodel.YangStringRestriction;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import java.util.List;
-import java.util.regex.Pattern;
-import java.util.regex.PatternSyntaxException;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.PATTERN_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.TYPE_DATA;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * pattern-stmt = pattern-keyword sep string optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [error-message-stmt stmtsep]
- * [error-app-tag-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * "}")
- *
- * ANTLR grammar rule
- * patternStatement : PATTERN_KEYWORD string (STMTEND | LEFT_CURLY_BRACE commonStatements RIGHT_CURLY_BRACE);
- */
-
-/**
- * Represents listener based call back function corresponding to the "pattern"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class PatternRestrictionListener {
-
- private static final String EMPTY_STRING = "";
-
- /**
- * Creates a new pattern restriction listener.
- */
- private PatternRestrictionListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar
- * rule (pattern), performs validation and updates the data model
- * tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processPatternRestrictionEntry(TreeWalkListener listener,
- GeneratedYangParser.PatternStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, PATTERN_DATA, ctx.string().getText(), ENTRY);
-
- Parsable tmpData = listener.getParsedDataStack().peek();
- if (tmpData.getYangConstructType() == TYPE_DATA) {
- YangType type = (YangType) tmpData;
- setPatternRestriction(listener, type, ctx);
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, PATTERN_DATA,
- ctx.string().getText(), ENTRY));
- }
- }
-
- /**
- * Sets the pattern restriction to type.
- *
- * @param listener listener's object
- * @param type Yang type for which pattern restriction to be set
- * @param ctx context object of the grammar rule
- */
- private static void setPatternRestriction(TreeWalkListener listener, YangType type,
- GeneratedYangParser.PatternStatementContext ctx) {
-
- if (type.getDataType() != YangDataTypes.STRING && type.getDataType() != YangDataTypes.DERIVED) {
-
- ParserException parserException = new ParserException("YANG file error : " +
- YangConstructType.getYangConstructType(PATTERN_DATA) + " name " + ctx.string().getText() +
- " can be used to restrict the built-in type string or types derived from string.");
- parserException.setLine(ctx.getStart().getLine());
- parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
- throw parserException;
- }
-
- // Validate and get valid pattern restriction string.
- String patternArgument = getValidPattern(ctx);
-
- if (type.getDataType() == YangDataTypes.STRING) {
- YangStringRestriction stringRestriction = (YangStringRestriction) type.getDataTypeExtendedInfo();
- if (stringRestriction == null) {
- stringRestriction = new YangStringRestriction();
- stringRestriction.setFileName(listener.getFileName());
- stringRestriction.setCharPosition(ctx.getStart().getCharPositionInLine());
- stringRestriction.setLineNumber(ctx.getStart().getLine());
- type.setDataTypeExtendedInfo(stringRestriction);
- stringRestriction.addPattern(patternArgument);
- } else {
- stringRestriction.addPattern(patternArgument);
- }
- listener.getParsedDataStack().push(stringRestriction);
- } else {
- YangPatternRestriction patternRestriction = ((YangDerivedInfo<?>) type
- .getDataTypeExtendedInfo()).getPatternRestriction();
- if (patternRestriction == null) {
- patternRestriction = new YangPatternRestriction();
- ((YangDerivedInfo<?>) type.getDataTypeExtendedInfo()).setPatternRestriction(patternRestriction);
- patternRestriction.addPattern(patternArgument);
- } else {
- ((YangDerivedInfo<?>) type.getDataTypeExtendedInfo()).setPatternRestriction(patternRestriction);
- patternRestriction.addPattern(patternArgument);
- }
- }
- }
-
- /**
- * Performs validation and updates the data model tree.
- * It is called when parser exits from grammar rule (pattern).
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processPatternRestrictionExit(TreeWalkListener listener,
- GeneratedYangParser.PatternStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, PATTERN_DATA, ctx.string().getText(), EXIT);
-
- Parsable tmpData = listener.getParsedDataStack().peek();
- if (tmpData instanceof YangStringRestriction) {
- listener.getParsedDataStack().pop();
- } else if (tmpData instanceof YangType
- && ((YangType) tmpData).getDataType() == DERIVED) {
- // TODO : need to handle in linker
- } else {
- throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, PATTERN_DATA,
- ctx.string().getText(), EXIT));
- }
- }
-
- /**
- * Validates and return the valid pattern.
- *
- * @param ctx context object of the grammar rule
- * @return validated string
- */
- private static String getValidPattern(GeneratedYangParser.PatternStatementContext ctx) {
- List<TerminalNode> patternList = ctx.string().STRING();
- StringBuilder userInputPattern = new StringBuilder();
- String compile;
- for (TerminalNode pattern : patternList) {
- userInputPattern.append(pattern.getText());
- }
- compile = userInputPattern.toString().replaceAll("[\'\"]", EMPTY_STRING);
- try {
- Pattern.compile(compile);
- } catch (PatternSyntaxException exception) {
- ParserException parserException = new ParserException("YANG file error : " +
- YangConstructType.getYangConstructType(PATTERN_DATA) + " name " + ctx.string().getText() +
- " is not a valid regular expression");
- parserException.setLine(ctx.getStart().getLine());
- parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
- throw parserException;
- }
- return compile;
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/PositionListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/PositionListener.java
deleted file mode 100644
index 3a14927..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/PositionListener.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * position-stmt = position-keyword sep
- * position-value-arg-str stmtend
- * position-value-arg-str = < a string that matches the rule
- * position-value-arg >
- * position-value-arg = non-negative-integer-value
- * non-negative-integer-value = "0" / positive-integer-value
- * positive-integer-value = (non-zero-digit *DIGIT)
- * zero-integer-value = 1*DIGIT
- *
- * ANTLR grammar rule
- * positionStatement : POSITION_KEYWORD position STMTEND;
- * position : string;
- */
-
-import org.onosproject.yangutils.datamodel.YangBit;
-import org.onosproject.yangutils.datamodel.YangBits;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.POSITION_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidNonNegativeIntegerValue;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/**
- * Represents listener based call back function corresponding to the "position"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class PositionListener {
-
- /**
- * Creates a new position listener.
- */
- private PositionListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar rule
- * (position), perform validations and update the data model tree.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processPositionEntry(TreeWalkListener listener,
- GeneratedYangParser.PositionStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, POSITION_DATA, ctx.position().getText(), ENTRY);
-
- // Obtain the node of the stack.
- Parsable tmpNode = listener.getParsedDataStack().peek();
- switch (tmpNode.getYangConstructType()) {
- case BIT_DATA: {
- YangBit bitNode = (YangBit) tmpNode;
- int positionValue = getValidBitPosition(listener, ctx);
- bitNode.setPosition(positionValue);
- break;
- }
- default:
- throw new ParserException(
- constructListenerErrorMessage(INVALID_HOLDER, POSITION_DATA, ctx.position().getText(), ENTRY));
- }
- }
-
- /**
- * Validates BITS position value correctness and uniqueness.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- * @return position value
- */
- private static int getValidBitPosition(TreeWalkListener listener,
- GeneratedYangParser.PositionStatementContext ctx) {
- Parsable bitNode = listener.getParsedDataStack().pop();
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, POSITION_DATA, ctx.position().getText(), ENTRY);
-
- int positionValue = getValidNonNegativeIntegerValue(ctx.position().getText(), POSITION_DATA, ctx);
-
- Parsable tmpNode = listener.getParsedDataStack().peek();
- switch (tmpNode.getYangConstructType()) {
- case BITS_DATA: {
- YangBits yangBits = (YangBits) tmpNode;
- listener.getParsedDataStack().push(bitNode);
- if (yangBits.isBitPositionExists(positionValue)) {
- ParserException parserException = new ParserException("YANG file error: Duplicate value of " +
- "position is invalid.");
- parserException.setLine(ctx.getStart().getLine());
- parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
- throw parserException;
- }
- return positionValue;
- }
- default:
- listener.getParsedDataStack().push(bitNode);
- throw new ParserException(
- constructListenerErrorMessage(INVALID_HOLDER, POSITION_DATA, ctx.position().getText(), ENTRY));
- }
- }
-}
\ No newline at end of file
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/PrefixListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/PrefixListener.java
deleted file mode 100644
index b75f77c..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/PrefixListener.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangBelongsTo;
-import org.onosproject.yangutils.datamodel.YangImport;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.PREFIX_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * module-header-stmts = ;; these stmts can appear in any order
- * [yang-version-stmt stmtsep]
- * namespace-stmt stmtsep
- * prefix-stmt stmtsep
- *
- * prefix-stmt = prefix-keyword sep prefix-arg-str
- * optsep stmtend
- *
- * ANTLR grammar rule
- * module_header_statement : yang_version_stmt? namespace_stmt prefix_stmt
- * | yang_version_stmt? prefix_stmt namespace_stmt
- * | namespace_stmt yang_version_stmt? prefix_stmt
- * | namespace_stmt prefix_stmt yang_version_stmt?
- * | prefix_stmt namespace_stmt yang_version_stmt?
- * | prefix_stmt yang_version_stmt? namespace_stmt
- * ;
- * prefix_stmt : PREFIX_KEYWORD identifier STMTEND;
- */
-
-/**
- * Represents listener based call back function corresponding to the "prefix"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class PrefixListener {
-
- /**
- * Creates a new prefix listener.
- */
- private PrefixListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar rule
- * (prefix),perform validations and update the data model tree.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processPrefixEntry(TreeWalkListener listener, GeneratedYangParser.PrefixStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, PREFIX_DATA, ctx.identifier().getText(), ENTRY);
-
- String identifier = getValidIdentifier(ctx.identifier().getText(), PREFIX_DATA, ctx);
-
- // Obtain the node of the stack.
- Parsable tmpNode = listener.getParsedDataStack().peek();
- switch (tmpNode.getYangConstructType()) {
- case MODULE_DATA: {
- YangModule module = (YangModule) tmpNode;
- module.setPrefix(identifier);
- break;
- }
- case IMPORT_DATA: {
- YangImport importNode = (YangImport) tmpNode;
- importNode.setPrefixId(identifier);
- break;
- }
- case BELONGS_TO_DATA: {
- YangBelongsTo belongstoNode = (YangBelongsTo) tmpNode;
- belongstoNode.setPrefix(identifier);
- break;
- }
- default:
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, PREFIX_DATA,
- ctx.identifier().getText(), ENTRY));
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/PresenceListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/PresenceListener.java
deleted file mode 100644
index ef744d5..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/PresenceListener.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.CONTAINER_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.PRESENCE_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * presence-stmt = presence-keyword sep string stmtend
- *
- * ANTLR grammar rule
- * presenceStatement : PRESENCE_KEYWORD string STMTEND;
- */
-
-/**
- * Represents listener based call back function corresponding to the "presence"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class PresenceListener {
-
- /**
- * Creates a new presence listener.
- */
- private PresenceListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar
- * rule (presence), performs validation and updates the data model
- * tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processPresenceEntry(TreeWalkListener listener,
- GeneratedYangParser.PresenceStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, PRESENCE_DATA, ctx.string().getText(), ENTRY);
-
- Parsable tmpData = listener.getParsedDataStack().peek();
- if (tmpData.getYangConstructType() == CONTAINER_DATA) {
- YangContainer container = (YangContainer) tmpData;
- container.setPresence(ctx.string().getText());
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, PRESENCE_DATA,
- ctx.string().getText(), ENTRY));
- }
- }
-}
\ No newline at end of file
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/RangeRestrictionListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/RangeRestrictionListener.java
deleted file mode 100644
index 0765470..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/RangeRestrictionListener.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangDecimal64;
-import org.onosproject.yangutils.datamodel.YangDerivedInfo;
-import org.onosproject.yangutils.datamodel.YangRangeRestriction;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.RestrictionResolver.processRangeRestriction;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.RANGE_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.TYPE_DATA;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypeUtils.isOfRangeRestrictedType;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.DECIMAL64;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * range-stmt = range-keyword sep range-arg-str optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [error-message-stmt stmtsep]
- * [error-app-tag-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * "}")
- *
- * ANTLR grammar rule
- * rangeStatement : RANGE_KEYWORD range (STMTEND | LEFT_CURLY_BRACE commonStatements RIGHT_CURLY_BRACE);
- */
-
-/**
- * Represents listener based call back function corresponding to the "range"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class RangeRestrictionListener {
-
- /**
- * Creates a new range restriction listener.
- */
- private RangeRestrictionListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar
- * rule (range), performs validation and updates the data model
- * tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processRangeRestrictionEntry(TreeWalkListener listener,
- GeneratedYangParser.RangeStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, RANGE_DATA, ctx.range().getText(), ENTRY);
-
- Parsable tmpData = listener.getParsedDataStack().peek();
- if (tmpData.getYangConstructType() == TYPE_DATA) {
- YangType type = (YangType) tmpData;
- setRangeRestriction(listener, type, ctx);
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, RANGE_DATA,
- ctx.range().getText(), ENTRY));
- }
- }
-
- /**
- * Sets the range restriction to type.
- *
- * @param listener listener's object
- * @param type YANG type for which range restriction to be added
- * @param ctx context object of the grammar rule
- */
- private static void setRangeRestriction(TreeWalkListener listener, YangType type,
- GeneratedYangParser.RangeStatementContext ctx) {
-
- if (type.getDataType() == DERIVED) {
- ((YangDerivedInfo<YangRangeRestriction>) type.getDataTypeExtendedInfo())
- .setRangeRestrictionString(ctx.range().getText());
- ((YangDerivedInfo<YangRangeRestriction>) type.getDataTypeExtendedInfo())
- .setLineNumber(ctx.getStart().getLine());
- ((YangDerivedInfo<YangRangeRestriction>) type.getDataTypeExtendedInfo())
- .setCharPosition(ctx.getStart().getCharPositionInLine());
- return;
- }
-
- if (!(isOfRangeRestrictedType(type.getDataType())) && (type.getDataType() != DECIMAL64)) {
- ParserException parserException = new ParserException("YANG file error: Range restriction can't be " +
- "applied to a given type");
- parserException.setLine(ctx.getStart().getLine());
- parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
- throw parserException;
- }
-
- YangRangeRestriction rangeRestriction = null;
- try {
- if (type.getDataType() == DECIMAL64) {
- YangDecimal64 yangDecimal64 = (YangDecimal64) type.getDataTypeExtendedInfo();
- rangeRestriction =
- processRangeRestriction(yangDecimal64.getDefaultRangeRestriction(),
- ctx.getStart().getLine(),
- ctx.getStart().getCharPositionInLine(),
- true, ctx.range().getText(),
- type.getDataType(), listener.getFileName());
- } else {
- rangeRestriction =
- processRangeRestriction(null, ctx.getStart().getLine(),
- ctx.getStart().getCharPositionInLine(),
- false, ctx.range()
- .getText(), type
- .getDataType(),
- listener.getFileName());
- }
- } catch (DataModelException e) {
- ParserException parserException = new ParserException(e.getMessage());
- parserException.setCharPosition(e.getCharPositionInLine());
- parserException.setLine(e.getLineNumber());
- throw parserException;
- }
-
- if (rangeRestriction != null) {
- if (type.getDataType() == DECIMAL64) {
- ((YangDecimal64<YangRangeRestriction>) type.getDataTypeExtendedInfo())
- .setRangeRestrictedExtendedInfo(rangeRestriction);
- } else {
- type.setDataTypeExtendedInfo(rangeRestriction);
- }
- }
- listener.getParsedDataStack().push(rangeRestriction);
- }
-
- /**
- * Performs validation and updates the data model tree.
- * It is called when parser exits from grammar rule (range).
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processRangeRestrictionExit(TreeWalkListener listener,
- GeneratedYangParser.RangeStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, RANGE_DATA, ctx.range().getText(), EXIT);
-
- Parsable tmpData = listener.getParsedDataStack().peek();
- if (tmpData instanceof YangRangeRestriction) {
- listener.getParsedDataStack().pop();
- } else if (tmpData instanceof YangType
- && ((YangType) tmpData).getDataType() == DERIVED) {
- // TODO : need to handle in linker
- } else {
- throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, RANGE_DATA,
- ctx.range().getText(), EXIT));
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ReferenceListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ReferenceListener.java
deleted file mode 100644
index 02cdf62..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ReferenceListener.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangReference;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.REFERENCE_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * reference-stmt = reference-keyword sep string optsep stmtend
- *
- * ANTLR grammar rule
- * referenceStatement : REFERENCE_KEYWORD string STMTEND;
- */
-
-/**
- * Represents listener based call back function corresponding to the "reference"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class ReferenceListener {
-
- /**
- * Creates a new reference listener.
- */
- private ReferenceListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar
- * rule (reference), performs validation and updates the data model
- * tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processReferenceEntry(TreeWalkListener listener,
- GeneratedYangParser.ReferenceStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, REFERENCE_DATA, ctx.string().getText(), ENTRY);
-
- Parsable tmpData = listener.getParsedDataStack().peek();
- if (tmpData instanceof YangReference) {
- YangReference reference = (YangReference) tmpData;
- reference.setReference(ctx.string().getText());
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, REFERENCE_DATA,
- ctx.string().getText(), ENTRY));
- }
- }
-}
\ No newline at end of file
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/RequireInstanceListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/RequireInstanceListener.java
deleted file mode 100644
index 21c7533..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/RequireInstanceListener.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangLeafRef;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.REQUIRE_INSTANCE_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidBooleanValue;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * require-instance-stmt = require-instance-keyword sep
- * require-instance-arg-str stmtend
- *
- * require-instance-arg-str = < a string that matches the rule
- * require-instance-arg >
- *
- * require-instance-arg = true-keyword / false-keyword
- *
- * ANTLR grammar rule
- *
- * requireInstanceStatement : REQUIRE_INSTANCE_KEYWORD requireInstance STMTEND;
- *
- * requireInstance : string;
- */
-
-/**
- * Represents listener based call back function corresponding to the
- * "require-instance" rule defined in ANTLR grammar file for corresponding ABNF rule
- * in RFC 6020.
- */
-public final class RequireInstanceListener {
-
- /**
- * Creates a new require instance listener.
- */
- private RequireInstanceListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar rule
- * (require-instance), performs validation and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processRequireInstanceEntry(TreeWalkListener listener,
- GeneratedYangParser.RequireInstanceStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, REQUIRE_INSTANCE_DATA, "", ENTRY);
-
- Parsable curData = listener.getParsedDataStack().peek();
-
- // Gets the status of require instance
- boolean isRequireInstance = getValidBooleanValue(ctx.requireInstance().getText(), REQUIRE_INSTANCE_DATA, ctx);
-
- // Checks the holder of require-instance as leafref or type, else throws error.
- if (curData instanceof YangLeafRef) {
-
- // Sets the require-instance status to leafref.
- ((YangLeafRef) curData).setRequireInstance(isRequireInstance);
- } else if (curData instanceof YangType) {
-
- // Checks type should be instance-identifier, else throw error.
- if (((YangType) curData).getDataType() == YangDataTypes.INSTANCE_IDENTIFIER) {
-
- // Sets the require-instance status to instance-identifier type.
- ((YangType) curData).setDataTypeExtendedInfo(isRequireInstance);
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, REQUIRE_INSTANCE_DATA,
- ctx.getText(), ENTRY));
- }
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, REQUIRE_INSTANCE_DATA,
- ctx.getText(), ENTRY));
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/RevisionDateListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/RevisionDateListener.java
deleted file mode 100644
index 3ff67fe..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/RevisionDateListener.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.util.Date;
-import org.onosproject.yangutils.datamodel.YangImport;
-import org.onosproject.yangutils.datamodel.YangInclude;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.REVISION_DATE_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidDateFromString;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * import-stmt = import-keyword sep identifier-arg-str optsep
- * "{" stmtsep
- * prefix-stmt stmtsep
- * [revision-date-stmt stmtsep]
- * "}"
- * include-stmt = include-keyword sep identifier-arg-str optsep
- * (";" /
- * "{" stmtsep
- * [revision-date-stmt stmtsep]
- * "}")
- * revision-date-stmt = revision-date-keyword sep revision-date stmtend
- *
- * ANTLR grammar rule
- * import_stmt : IMPORT_KEYWORD IDENTIFIER LEFT_CURLY_BRACE import_stmt_body
- * RIGHT_CURLY_BRACE;
- * import_stmt_body : prefix_stmt revision_date_stmt?;
- *
- * include_stmt : INCLUDE_KEYWORD IDENTIFIER (STMTEND | LEFT_CURLY_BRACE
- * revision_date_stmt_body? RIGHT_CURLY_BRACE);
- *
- * revision_date_stmt : REVISION_DATE_KEYWORD DATE_ARG STMTEND;
- *
- */
-
-/**
- * Represents listener based call back function corresponding to the
- * "revision date" rule defined in ANTLR grammar file for corresponding ABNF
- * rule in RFC 6020.
- */
-public final class RevisionDateListener {
-
- /**
- * Creates a new revision date listener.
- */
- private RevisionDateListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar rule
- * (revision date),perform validations and update the data model tree.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processRevisionDateEntry(TreeWalkListener listener,
- GeneratedYangParser.RevisionDateStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, REVISION_DATE_DATA, ctx.dateArgumentString().getText(),
- ENTRY);
-
- Date date = getValidDateFromString(ctx.dateArgumentString().getText(), ctx);
-
- // Obtain the node of the stack.
- Parsable tmpNode = listener.getParsedDataStack().peek();
- switch (tmpNode.getYangConstructType()) {
- case IMPORT_DATA: {
- YangImport importNode = (YangImport) tmpNode;
- importNode.setRevision(date);
- break;
- }
- case INCLUDE_DATA: {
- YangInclude includeNode = (YangInclude) tmpNode;
- includeNode.setRevision(date);
- break;
- }
- default:
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, REVISION_DATE_DATA,
- ctx.dateArgumentString().getText(), ENTRY));
- }
- }
-}
\ No newline at end of file
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/RevisionListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/RevisionListener.java
deleted file mode 100644
index cb633b8..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/RevisionListener.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.util.Date;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangRevision;
-import org.onosproject.yangutils.datamodel.YangSubModule;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.REVISION_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidDateFromString;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * module-stmt = optsep module-keyword sep identifier-arg-str
- * optsep
- * "{" stmtsep
- * module-header-stmts
- * linkage-stmts
- * meta-stmts
- * revision-stmts
- * body-stmts
- * "}" optsep
- *
- * revision-stmt = revision-keyword sep revision-date optsep
- * (";" /
- * "{" stmtsep
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * "}")
- *
- * ANTLR grammar rule
- * module_stmt : MODULE_KEYWORD IDENTIFIER LEFT_CURLY_BRACE module_body* RIGHT_CURLY_BRACE;
- *
- * revision_stmt : REVISION_KEYWORD DATE_ARG (STMTEND | LEFT_CURLY_BRACE revision_stmt_body RIGHT_CURLY_BRACE);
- * revision_stmt_body : description_stmt? reference_stmt?;
- */
-
-/**
- * Represents listener based call back function corresponding to the "revision"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class RevisionListener {
-
- /**
- * Creates a new revision listener.
- */
- private RevisionListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar rule
- * (revision),perform validations and update the data model tree.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processRevisionEntry(TreeWalkListener listener,
- GeneratedYangParser.RevisionStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, REVISION_DATA, ctx.dateArgumentString().getText(), ENTRY);
-
- Date date = getValidDateFromString(ctx.dateArgumentString().getText(), ctx);
-
- YangRevision revisionNode = new YangRevision();
- revisionNode.setRevDate(date);
-
- listener.getParsedDataStack().push(revisionNode);
- }
-
- /**
- * It is called when parser exits from grammar rule (revision), it perform
- * validations and update the data model tree.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processRevisionExit(TreeWalkListener listener, GeneratedYangParser.RevisionStatementContext
- ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, REVISION_DATA, ctx.dateArgumentString().getText(), EXIT);
-
- Parsable tmpRevisionNode = listener.getParsedDataStack().peek();
- if (tmpRevisionNode instanceof YangRevision) {
- listener.getParsedDataStack().pop();
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, REVISION_DATA, ctx.dateArgumentString().getText(),
- EXIT);
-
- Parsable tmpNode = listener.getParsedDataStack().peek();
- switch (tmpNode.getYangConstructType()) {
- case MODULE_DATA: {
- YangModule module = (YangModule) tmpNode;
- if (module.getRevision() != null) {
- Date curRevisionDate = module.getRevision().getRevDate();
- if (curRevisionDate.before(((YangRevision) tmpRevisionNode).getRevDate())) {
- module.setRevision((YangRevision) tmpRevisionNode);
- }
- } else {
- module.setRevision((YangRevision) tmpRevisionNode);
- }
- break;
- }
- case SUB_MODULE_DATA: {
- YangSubModule subModule = (YangSubModule) tmpNode;
- if (subModule.getRevision() != null) {
- Date curRevisionDate = subModule.getRevision().getRevDate();
- if (curRevisionDate.before(((YangRevision) tmpRevisionNode).getRevDate())) {
- subModule.setRevision((YangRevision) tmpRevisionNode);
- }
- } else {
- subModule.setRevision((YangRevision) tmpRevisionNode);
- }
- break;
- }
- default:
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, REVISION_DATA,
- ctx.dateArgumentString().getText(),
- EXIT));
- }
- } else {
- throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, REVISION_DATA,
- ctx.dateArgumentString().getText(), EXIT));
- }
- }
-
- /**
- * Validate revision.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- * @return validation result
- */
- private static boolean validateRevision(TreeWalkListener listener,
- GeneratedYangParser.RevisionStatementContext ctx) {
- // TODO to be implemented
- return true;
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/RpcListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/RpcListener.java
deleted file mode 100644
index e037e52..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/RpcListener.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangRpc;
-import org.onosproject.yangutils.datamodel.YangSubModule;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.DESCRIPTION_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.INPUT_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.OUTPUT_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.REFERENCE_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.RPC_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.STATUS_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.validateCardinalityMaxOne;
-import static org.onosproject.yangutils.translator.tojava.YangDataModelFactory.getYangRpcNode;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * rpc-stmt = rpc-keyword sep identifier-arg-str optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * *(if-feature-stmt stmtsep)
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * *((typedef-stmt /
- * grouping-stmt) stmtsep)
- * [input-stmt stmtsep]
- * [output-stmt stmtsep]
- * "}")
- *
- * ANTLR grammar rule
- * rpcStatement : RPC_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE (ifFeatureStatement | statusStatement
- * | descriptionStatement | referenceStatement | typedefStatement | groupingStatement | inputStatement
- * | outputStatement)* RIGHT_CURLY_BRACE);
- */
-
-/**
- * Represents listener based call back function corresponding to the "rpc"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class RpcListener {
-
- /**
- * Creates a new rpc listener.
- */
- private RpcListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar rule
- * (rpc), performs validation and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processRpcEntry(TreeWalkListener listener,
- GeneratedYangParser.RpcStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, RPC_DATA, ctx.identifier().getText(), ENTRY);
-
- String identifier = getValidIdentifier(ctx.identifier().getText(), RPC_DATA, ctx);
-
- // Validate sub statement cardinality.
- validateSubStatementsCardinality(ctx);
-
- // Check for identifier collision
- int line = ctx.getStart().getLine();
- int charPositionInLine = ctx.getStart().getCharPositionInLine();
- detectCollidingChildUtil(listener, line, charPositionInLine, identifier, RPC_DATA);
-
- Parsable curData = listener.getParsedDataStack().peek();
- if (curData instanceof YangModule || curData instanceof YangSubModule) {
-
- YangNode curNode = (YangNode) curData;
- YangRpc yangRpc = getYangRpcNode(JAVA_GENERATION);
-
- yangRpc.setLineNumber(ctx.getStart().getLine());
- yangRpc.setCharPosition(ctx.getStart().getCharPositionInLine());
- yangRpc.setFileName(listener.getFileName());
- yangRpc.setName(identifier);
- try {
- curNode.addChild(yangRpc);
- } catch (DataModelException e) {
- throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
- RPC_DATA, ctx.identifier().getText(), ENTRY, e.getMessage()));
- }
- listener.getParsedDataStack().push(yangRpc);
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, RPC_DATA,
- ctx.identifier().getText(), ENTRY));
- }
- }
-
- /**
- * It is called when parser exits from grammar rule (rpc), it perform
- * validations and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processRpcExit(TreeWalkListener listener,
- GeneratedYangParser.RpcStatementContext ctx) {
-
- //Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, RPC_DATA, ctx.identifier().getText(), EXIT);
-
- if (!(listener.getParsedDataStack().peek() instanceof YangRpc)) {
- throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, RPC_DATA,
- ctx.identifier().getText(), EXIT));
- }
- listener.getParsedDataStack().pop();
- }
-
- /**
- * Validates the cardinality of rpc sub-statements as per grammar.
- *
- * @param ctx context object of the grammar rule
- */
- private static void validateSubStatementsCardinality(GeneratedYangParser.RpcStatementContext ctx) {
-
- validateCardinalityMaxOne(ctx.statusStatement(), STATUS_DATA, RPC_DATA, ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.descriptionStatement(), DESCRIPTION_DATA, RPC_DATA, ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.referenceStatement(), REFERENCE_DATA, RPC_DATA, ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.inputStatement(), INPUT_DATA, RPC_DATA, ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.outputStatement(), OUTPUT_DATA, RPC_DATA, ctx.identifier().getText());
- }
-
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ShortCaseListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ShortCaseListener.java
deleted file mode 100644
index 8dbd41d..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ShortCaseListener.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.antlr.v4.runtime.ParserRuleContext;
-import org.antlr.v4.runtime.tree.ParseTree;
-import org.onosproject.yangutils.datamodel.YangCase;
-import org.onosproject.yangutils.datamodel.YangChoice;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.CASE_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.SHORT_CASE_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_CHILD;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-import static org.onosproject.yangutils.translator.tojava.YangDataModelFactory.getYangCaseNode;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * short-case-stmt = container-stmt /
- * leaf-stmt /
- * leaf-list-stmt /
- * list-stmt /
- * anyxml-stmt
- *
- * ANTLR grammar rule
- * shortCaseStatement : containerStatement | leafStatement | leafListStatement | listStatement;
- */
-
-/**
- * Represents listener based call back function corresponding to the "short
- * case" rule defined in ANTLR grammar file for corresponding ABNF rule in RFC
- * 6020.
- */
-public final class ShortCaseListener {
-
- /**
- * Create a new short case listener.
- */
- private ShortCaseListener() {
- }
-
- /**
- * It is called when parser enters grammar rule (short case), it perform
- * validations and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processShortCaseEntry(TreeWalkListener listener,
- GeneratedYangParser.ShortCaseStatementContext ctx) {
-
- ParseTree errorConstructContext;
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, SHORT_CASE_DATA, "", ENTRY);
-
- YangCase caseNode = getYangCaseNode(JAVA_GENERATION);
-
- caseNode.setLineNumber(ctx.getStart().getLine());
- caseNode.setCharPosition(ctx.getStart().getCharPositionInLine());
- caseNode.setFileName(listener.getFileName());
- if (ctx.containerStatement() != null) {
- caseNode.setName(getValidIdentifier(ctx.containerStatement().identifier().getText(), CASE_DATA, ctx));
- errorConstructContext = ctx.containerStatement();
- } else if (ctx.listStatement() != null) {
- caseNode.setName(getValidIdentifier(ctx.listStatement().identifier().getText(), CASE_DATA, ctx));
- errorConstructContext = ctx.listStatement();
- } else if (ctx.leafListStatement() != null) {
- caseNode.setName(getValidIdentifier(ctx.leafListStatement().identifier().getText(), CASE_DATA, ctx));
- errorConstructContext = ctx.leafListStatement();
- } else if (ctx.leafStatement() != null) {
- caseNode.setName(getValidIdentifier(ctx.leafStatement().identifier().getText(), CASE_DATA, ctx));
- errorConstructContext = ctx.leafStatement();
- } else if (ctx.anyxmlStatement() != null) {
- // Anyxml statement is not supported
- return;
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_CHILD, SHORT_CASE_DATA, "", ENTRY));
- }
- // TODO implement for augment.
-
- int line = ((ParserRuleContext) errorConstructContext).getStart().getLine();
- int charPositionInLine = ((ParserRuleContext) errorConstructContext).getStart().getCharPositionInLine();
-
- // Check for identifier collision
- detectCollidingChildUtil(listener, line, charPositionInLine, caseNode.getName(), CASE_DATA);
-
- if ((listener.getParsedDataStack().peek()) instanceof YangChoice) {
- try {
- ((YangChoice) listener.getParsedDataStack().peek()).addChild(caseNode);
- } catch (DataModelException e) {
- throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
- SHORT_CASE_DATA, caseNode.getName(), ENTRY, e.getMessage()));
- }
- listener.getParsedDataStack().push(caseNode);
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, SHORT_CASE_DATA,
- caseNode.getName(), ENTRY));
- }
- }
-
- /**
- * It is called when parser exits from grammar rule (short case), it perform
- * validations and update the data model tree.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processShortCaseExit(TreeWalkListener listener,
- GeneratedYangParser.ShortCaseStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, SHORT_CASE_DATA, "", EXIT);
-
- if (listener.getParsedDataStack().peek() instanceof YangCase) {
- listener.getParsedDataStack().pop();
- } else if (ctx.anyxmlStatement() != null) {
- // Anyxml statement is not supported
- return;
- } else {
- throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, SHORT_CASE_DATA,
- "", EXIT));
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/StatusListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/StatusListener.java
deleted file mode 100644
index 81d6b61..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/StatusListener.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangStatus;
-import org.onosproject.yangutils.datamodel.YangStatusType;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.STATUS_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * status-stmt = status-keyword sep status-arg-str stmtend
- * status-arg-str = < a string that matches the rule
- * status-arg >
- * status-arg = current-keyword /
- * obsolete-keyword /
- * deprecated-keyword
- *
- * ANTLR grammar rule
- * statusStatement : STATUS_KEYWORD status STMTEND;
- */
-
-/**
- * Represents listener based call back function corresponding to the "status"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class StatusListener {
-
- private static final String CURRENT_KEYWORD = "current";
- private static final String DEPRECATED_KEYWORD = "deprecated";
- private static final String OBSOLETE_KEYWORD = "obsolete";
-
- /**
- * Creates a new status listener.
- */
- private StatusListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar
- * rule (status), performs validation and updates the data model
- * tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processStatusEntry(TreeWalkListener listener,
- GeneratedYangParser.StatusStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, STATUS_DATA, "", ENTRY);
-
- YangStatusType status = getValidStatus(ctx);
-
- Parsable tmpData = listener.getParsedDataStack().peek();
- if (tmpData instanceof YangStatus) {
- YangStatus yangStatus = (YangStatus) tmpData;
- yangStatus.setStatus(status);
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, STATUS_DATA, "", ENTRY));
- }
- }
-
- /**
- * Validates status value and returns the value from context.
- *
- * @param ctx context object of the grammar rule
- * @return status current/deprecated/obsolete
- */
- private static YangStatusType getValidStatus(GeneratedYangParser.StatusStatementContext ctx) {
-
- YangStatusType status;
-
- String value = removeQuotesAndHandleConcat(ctx.status().getText());
- switch (value) {
- case CURRENT_KEYWORD: {
- status = YangStatusType.CURRENT;
- break;
- }
- case DEPRECATED_KEYWORD: {
- status = YangStatusType.DEPRECATED;
- break;
- }
- case OBSOLETE_KEYWORD: {
- status = YangStatusType.OBSOLETE;
- break;
- }
- default: {
- ParserException parserException = new ParserException("YANG file error : " +
- YangConstructType.getYangConstructType(STATUS_DATA) + " " + ctx.status().getText() +
- " is not valid.");
- parserException.setLine(ctx.getStart().getLine());
- parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
- throw parserException;
- }
- }
-
- return status;
- }
-}
\ No newline at end of file
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/SubModuleListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/SubModuleListener.java
deleted file mode 100644
index d2c7347..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/SubModuleListener.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.ResolvableType;
-import org.onosproject.yangutils.datamodel.YangReferenceResolver;
-import org.onosproject.yangutils.datamodel.YangSubModule;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.linker.exceptions.LinkerException;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.MODULE_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.SUB_MODULE_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction
- .constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_CHILD;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsEmpty;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-import static org.onosproject.yangutils.translator.tojava.YangDataModelFactory.getYangSubModuleNode;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * submodule-stmt = optsep submodule-keyword sep identifier-arg-str
- * optsep
- * "{" stmtsep
- * submodule-header-stmts
- * linkage-stmts
- * meta-stmts
- * revision-stmts
- * body-stmts
- * "}" optsep
- *
- * ANTLR grammar rule
- * submodule_stmt : SUBMODULE_KEYWORD identifier LEFT_CURLY_BRACE submodule_body* RIGHT_CURLY_BRACE;
- * submodule_body : submodule_header_statement linkage_stmts meta_stmts revision_stmts body_stmts;
- */
-
-/**
- * Represents listener based call back function corresponding to the "submodule"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class SubModuleListener {
-
- /**
- * Creates a new sub module listener.
- */
- private SubModuleListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar rule (sub
- * module), perform validations and update the data model tree.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processSubModuleEntry(TreeWalkListener listener,
- GeneratedYangParser.SubModuleStatementContext ctx) {
-
- // Check if stack is empty.
- checkStackIsEmpty(listener, INVALID_HOLDER, SUB_MODULE_DATA, ctx.identifier().getText(),
- ENTRY);
-
- String identifier = getValidIdentifier(ctx.identifier().getText(), SUB_MODULE_DATA, ctx);
-
- YangSubModule yangSubModule = getYangSubModuleNode(JAVA_GENERATION);
- yangSubModule.setName(identifier);
-
- yangSubModule.setLineNumber(ctx.getStart().getLine());
- yangSubModule.setCharPosition(ctx.getStart().getCharPositionInLine());
- yangSubModule.setFileName(listener.getFileName());
- if (ctx.submoduleBody().submoduleHeaderStatement().yangVersionStatement() == null) {
- yangSubModule.setVersion((byte) 1);
- }
-
- listener.getParsedDataStack().push(yangSubModule);
- }
-
- /**
- * It is called when parser exits from grammar rule (submodule), it perform
- * validations and update the data model tree.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processSubModuleExit(TreeWalkListener listener,
- GeneratedYangParser.SubModuleStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, SUB_MODULE_DATA, ctx.identifier().getText(),
- EXIT);
-
- Parsable tmpNode = listener.getParsedDataStack().peek();
- if (!(tmpNode instanceof YangSubModule)) {
- throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, SUB_MODULE_DATA,
- ctx.identifier().getText(), EXIT));
- }
-
- YangSubModule subModule = (YangSubModule) tmpNode;
- if (subModule.getUnresolvedResolutionList(ResolvableType.YANG_COMPILER_ANNOTATION) != null
- && subModule.getUnresolvedResolutionList(ResolvableType.YANG_COMPILER_ANNOTATION).size() != 0
- && subModule.getChild() != null) {
- throw new ParserException(constructListenerErrorMessage(INVALID_CHILD, MODULE_DATA,
- ctx.identifier().getText(), EXIT));
- }
-
- try {
- ((YangReferenceResolver) listener.getParsedDataStack().peek())
- .resolveSelfFileLinking(ResolvableType.YANG_IF_FEATURE);
- ((YangReferenceResolver) listener.getParsedDataStack().peek())
- .resolveSelfFileLinking(ResolvableType.YANG_USES);
- ((YangReferenceResolver) listener.getParsedDataStack().peek())
- .resolveSelfFileLinking(ResolvableType.YANG_DERIVED_DATA_TYPE);
- ((YangReferenceResolver) listener.getParsedDataStack().peek())
- .resolveSelfFileLinking(ResolvableType.YANG_LEAFREF);
- ((YangReferenceResolver) listener.getParsedDataStack().peek())
- .resolveSelfFileLinking(ResolvableType.YANG_BASE);
- ((YangReferenceResolver) listener.getParsedDataStack().peek())
- .resolveSelfFileLinking(ResolvableType.YANG_IDENTITYREF);
- } catch (DataModelException e) {
- LinkerException linkerException = new LinkerException(e.getMessage());
- linkerException.setLine(e.getLineNumber());
- linkerException.setCharPosition(e.getCharPositionInLine());
- linkerException.setFileName(listener.getFileName());
- throw linkerException;
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/TypeDefListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/TypeDefListener.java
deleted file mode 100644
index 4821cfa..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/TypeDefListener.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.YangGrouping;
-import org.onosproject.yangutils.datamodel.YangInput;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNotification;
-import org.onosproject.yangutils.datamodel.YangOutput;
-import org.onosproject.yangutils.datamodel.YangRpc;
-import org.onosproject.yangutils.datamodel.YangSubModule;
-import org.onosproject.yangutils.datamodel.YangTypeDef;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.DEFAULT_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.DESCRIPTION_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.REFERENCE_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.STATUS_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.TYPEDEF_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.TYPE_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.UNITS_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_CONTENT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIdentifier;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.validateCardinalityEqualsOne;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.validateCardinalityMaxOne;
-import static org.onosproject.yangutils.translator.tojava.YangDataModelFactory.getYangTypeDefNode;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * body-stmts = *((extension-stmt /
- * feature-stmt /
- * identity-stmt /
- * typedef-stmt /
- * grouping-stmt /
- * data-def-stmt /
- * augment-stmt /
- * rpc-stmt /
- * notification-stmt /
- * deviation-stmt) stmtsep)
- *
- * typedef-stmt = typedef-keyword sep identifier-arg-str optsep
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * type-stmt stmtsep
- * [units-stmt stmtsep]
- * [default-stmt stmtsep]
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * "}"
- *
- * ANTLR grammar rule
- * typedefStatement : TYPEDEF_KEYWORD identifier LEFT_CURLY_BRACE
- * (typeStatement | unitsStatement | defaultStatement | statusStatement
- * | descriptionStatement | referenceStatement)* RIGHT_CURLY_BRACE;
- */
-
-/**
- * Represents listener based call back function corresponding to the "typedef"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class TypeDefListener {
-
- /**
- * Creates a new typedef listener.
- */
- private TypeDefListener() {
- }
-
- /**
- * It is called when parser enters grammar rule (typedef), it perform
- * validations and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processTypeDefEntry(TreeWalkListener listener,
- GeneratedYangParser.TypedefStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, TYPEDEF_DATA, ctx.identifier().getText(), ENTRY);
-
- String identifier = getValidIdentifier(ctx.identifier().getText(), TYPEDEF_DATA, ctx);
-
- // Validate sub statement cardinality.
- validateSubStatementsCardinality(ctx);
-
- // Check for identifier collision
- int line = ctx.getStart().getLine();
- int charPositionInLine = ctx.getStart().getCharPositionInLine();
- detectCollidingChildUtil(listener, line, charPositionInLine, identifier, TYPEDEF_DATA);
-
- /*
- * Create a derived type information, the base type must be set in type
- * listener.
- */
- YangTypeDef typeDefNode = getYangTypeDefNode(JAVA_GENERATION);
- typeDefNode.setName(identifier);
-
- typeDefNode.setLineNumber(ctx.getStart().getLine());
- typeDefNode.setCharPosition(ctx.getStart().getCharPositionInLine());
- typeDefNode.setFileName(listener.getFileName());
- Parsable curData = listener.getParsedDataStack().peek();
-
- if (curData instanceof YangModule || curData instanceof YangSubModule || curData instanceof YangContainer
- || curData instanceof YangList || curData instanceof YangNotification || curData instanceof YangRpc
- || curData instanceof YangInput || curData instanceof YangOutput || curData instanceof YangGrouping) {
-
- YangNode curNode = (YangNode) curData;
- try {
- curNode.addChild(typeDefNode);
- } catch (DataModelException e) {
- throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
- TYPEDEF_DATA, ctx.identifier().getText(), ENTRY, e.getMessage()));
- }
- listener.getParsedDataStack().push(typeDefNode);
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER,
- TYPEDEF_DATA, ctx.identifier().getText(), ENTRY));
- }
- }
-
- /**
- * It is called when parser exits from grammar rule (typedef), it perform
- * validations and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processTypeDefExit(TreeWalkListener listener,
- GeneratedYangParser.TypedefStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, TYPEDEF_DATA, ctx.identifier().getText(), EXIT);
-
- if (listener.getParsedDataStack().peek() instanceof YangTypeDef) {
- YangTypeDef typeDefNode = (YangTypeDef) listener.getParsedDataStack().peek();
- try {
- typeDefNode.validateDataOnExit();
- } catch (DataModelException e) {
- throw new ParserException(constructListenerErrorMessage(INVALID_CONTENT, TYPEDEF_DATA,
- ctx.identifier().getText(), EXIT));
- }
-
- listener.getParsedDataStack().pop();
- } else {
- throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, TYPEDEF_DATA,
- ctx.identifier().getText(), EXIT));
- }
- }
-
- /**
- * Validates the cardinality of typedef sub-statements as per grammar.
- *
- * @param ctx context object of the grammar rule
- */
- private static void validateSubStatementsCardinality(GeneratedYangParser.TypedefStatementContext ctx) {
-
- validateCardinalityMaxOne(ctx.unitsStatement(), UNITS_DATA, TYPEDEF_DATA, ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.defaultStatement(), DEFAULT_DATA, TYPEDEF_DATA, ctx.identifier().getText());
- validateCardinalityEqualsOne(ctx.typeStatement(), TYPE_DATA, TYPEDEF_DATA, ctx.identifier().getText(), ctx);
- validateCardinalityMaxOne(ctx.descriptionStatement(), DESCRIPTION_DATA, TYPEDEF_DATA,
- ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.referenceStatement(), REFERENCE_DATA, TYPEDEF_DATA, ctx.identifier().getText());
- validateCardinalityMaxOne(ctx.statusStatement(), STATUS_DATA, TYPEDEF_DATA, ctx.identifier().getText());
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/TypeListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/TypeListener.java
deleted file mode 100644
index bf69035..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/TypeListener.java
+++ /dev/null
@@ -1,349 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangDerivedInfo;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangLeafList;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeIdentifier;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.YangTypeDef;
-import org.onosproject.yangutils.datamodel.YangUnion;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.linker.impl.YangResolutionInfoImpl;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.addResolutionInfo;
-import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
-import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.UNRESOLVED;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.TYPE_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidNodeIdentifier;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-import static org.onosproject.yangutils.translator.tojava.YangDataModelFactory.getYangType;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * type-stmt = type-keyword sep identifier-ref-arg-str optsep
- * (";" /
- * "{" stmtsep
- * type-body-stmts
- * "}")
- *
- * ANTLR grammar rule
- * typeStatement : TYPE_KEYWORD string (STMTEND | LEFT_CURLY_BRACE typeBodyStatements RIGHT_CURLY_BRACE);
- */
-
-/**
- * Represents listener based call back function corresponding to the "type" rule
- * defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class TypeListener {
-
- /**
- * Creates a new type listener.
- */
- private TypeListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar rule
- * (type), performs validation and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processTypeEntry(TreeWalkListener listener,
- GeneratedYangParser.TypeStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, TYPE_DATA, ctx.string().getText(), ENTRY);
-
- // Validate node identifier.
- YangNodeIdentifier nodeIdentifier = getValidNodeIdentifier(ctx.string().getText(), TYPE_DATA,
- ctx);
-
- // Obtain the YANG data type.
- YangDataTypes yangDataTypes = YangDataTypes.getType(ctx.string().getText());
-
- // validate type sub-statement cardinality
- validateTypeSubStatementCardinality(ctx, yangDataTypes);
-
- // Create YANG type object and fill the values.
- YangType<?> type = getYangType(JAVA_GENERATION);
- type.setNodeId(nodeIdentifier);
- type.setDataType(yangDataTypes);
-
- type.setLineNumber(ctx.getStart().getLine());
- type.setCharPosition(ctx.getStart().getCharPositionInLine());
- type.setFileName(listener.getFileName());
- // Set default require instance value as true for instance identifier.
- setDefaultRequireInstanceForInstanceIdentifier(type);
-
- int errorLine = ctx.getStart().getLine();
- int errorPosition = ctx.getStart().getCharPositionInLine();
-
- Parsable tmpData = listener.getParsedDataStack().peek();
- switch (tmpData.getYangConstructType()) {
- case LEAF_DATA:
- YangLeaf leaf = (YangLeaf) tmpData;
- leaf.setDataType(type);
-
- /*
- * If data type is derived, resolution information to be added
- * in resolution list.
- */
- if (yangDataTypes == YangDataTypes.DERIVED) {
- // Parent YANG node of leaf to be added in resolution information.
- Parsable leafData = listener.getParsedDataStack().pop();
- Parsable parentNodeOfLeaf = listener.getParsedDataStack().peek();
- listener.getParsedDataStack().push(leafData);
-
- // Verify parent node of leaf
- if (!(parentNodeOfLeaf instanceof YangNode)) {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, TYPE_DATA,
- ctx.string().getText(), EXIT));
- }
-
- // Create empty derived info and attach it to type extended info.
- YangDerivedInfo<?> yangDerivedInfo = new YangDerivedInfo<>();
- yangDerivedInfo.setLineNumber(ctx.getStart().getLine());
- yangDerivedInfo.setCharPosition(ctx.getStart().getCharPositionInLine());
- yangDerivedInfo.setFileName(listener.getFileName());
- ((YangType<YangDerivedInfo>) type).setDataTypeExtendedInfo(yangDerivedInfo);
-
- type.setResolvableStatus(UNRESOLVED);
-
- // Add resolution information to the list
- YangResolutionInfoImpl resolutionInfo =
- new YangResolutionInfoImpl<YangType>(
- type, (YangNode) parentNodeOfLeaf, errorLine,
- errorPosition);
- addToResolutionList(resolutionInfo, ctx);
- }
- break;
- case LEAF_LIST_DATA:
- YangLeafList leafList = (YangLeafList) tmpData;
- leafList.setDataType(type);
-
- /*
- * If data type is derived, resolution information to be added
- * in resolution list.
- */
- if (yangDataTypes == YangDataTypes.DERIVED) {
- // Parent YANG node of leaf list to be added in resolution information.
- Parsable leafListData = listener.getParsedDataStack().pop();
- Parsable parentNodeOfLeafList = listener.getParsedDataStack().peek();
- listener.getParsedDataStack().push(leafListData);
-
- // Verify parent node of leaf
- if (!(parentNodeOfLeafList instanceof YangNode)) {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, TYPE_DATA,
- ctx.string().getText(), EXIT));
- }
-
- // Create empty derived info and attach it to type extended info.
- YangDerivedInfo<?> yangDerivedInfo = new YangDerivedInfo<>();
- yangDerivedInfo.setLineNumber(ctx.getStart().getLine());
- yangDerivedInfo.setCharPosition(ctx.getStart().getCharPositionInLine());
- yangDerivedInfo.setFileName(listener.getFileName());
- ((YangType<YangDerivedInfo>) type).setDataTypeExtendedInfo(yangDerivedInfo);
-
- // Add resolution information to the list
- YangResolutionInfoImpl resolutionInfo =
- new YangResolutionInfoImpl<YangType>(
- type, (YangNode) parentNodeOfLeafList,
- errorLine, errorPosition);
- addToResolutionList(resolutionInfo, ctx);
- }
- break;
- case UNION_DATA:
- YangUnion unionNode = (YangUnion) tmpData;
- try {
- unionNode.addType(type);
- } catch (DataModelException e) {
- ParserException parserException = new ParserException(e.getMessage());
- parserException.setLine(ctx.getStart().getLine());
- parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
- throw parserException;
- }
-
- /*
- * If data type is derived, resolution information to be added
- * in resolution list.
- */
- if (yangDataTypes == YangDataTypes.DERIVED) {
-
- // Create empty derived info and attach it to type extended info.
- YangDerivedInfo<?> yangDerivedInfo = new YangDerivedInfo<>();
- yangDerivedInfo.setLineNumber(ctx.getStart().getLine());
- yangDerivedInfo.setCharPosition(ctx.getStart().getCharPositionInLine());
- yangDerivedInfo.setFileName(listener.getFileName());
- ((YangType<YangDerivedInfo>) type).setDataTypeExtendedInfo(yangDerivedInfo);
-
- type.setResolvableStatus(UNRESOLVED);
-
- // Add resolution information to the list
- YangResolutionInfoImpl resolutionInfo =
- new YangResolutionInfoImpl<YangType>(
- type, unionNode, errorLine, errorPosition);
- addToResolutionList(resolutionInfo, ctx);
- }
-
- break;
- case TYPEDEF_DATA:
- /* Prepare the base type info and set in derived type */
- YangTypeDef typeDef = (YangTypeDef) tmpData;
- typeDef.setDataType(type);
-
- /*
- * If data type is derived, resolution information to be added
- * in resolution list.
- */
- if (yangDataTypes == YangDataTypes.DERIVED) {
- // Create empty derived info and attach it to type extended info.
- YangDerivedInfo<?> yangDerivedInfo = new YangDerivedInfo<>();
- yangDerivedInfo.setLineNumber(ctx.getStart().getLine());
- yangDerivedInfo.setCharPosition(ctx.getStart().getCharPositionInLine());
- yangDerivedInfo.setFileName(listener.getFileName());
- ((YangType<YangDerivedInfo>) type).setDataTypeExtendedInfo(yangDerivedInfo);
-
- type.setResolvableStatus(UNRESOLVED);
- // Add resolution information to the list
- YangResolutionInfoImpl resolutionInfo =
- new YangResolutionInfoImpl<YangType>(
- type, typeDef, errorLine, errorPosition);
- addToResolutionList(resolutionInfo, ctx);
- }
- break;
- //TODO: deviate replacement statement.
-
- default:
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, TYPE_DATA,
- ctx.string().getText(), EXIT));
- }
-
- // Push the type to the stack.
- listener.getParsedDataStack().push(type);
- }
-
- /**
- * Sets the default require instance value as true when the type is instance identifier.
- *
- * @param type type to which the value has to be set
- */
- private static void setDefaultRequireInstanceForInstanceIdentifier(YangType<?> type) {
-
- if (type.getDataType() == YangDataTypes.INSTANCE_IDENTIFIER) {
- ((YangType<Boolean>) type).setDataTypeExtendedInfo(true);
- }
- }
-
- /**
- * It is called when parser exits from grammar rule (type), it perform
- * validations and update the data model tree.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processTypeExit(TreeWalkListener listener,
- GeneratedYangParser.TypeStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_CURRENT_HOLDER, TYPE_DATA, ctx.string().getText(), EXIT);
-
- Parsable parsableType = listener.getParsedDataStack().pop();
- if (!(parsableType instanceof YangType)) {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, TYPE_DATA,
- ctx.string().getText(), EXIT));
- }
- }
-
- /**
- * Adds to resolution list.
- *
- * @param resolutionInfo resolution information
- * @param ctx context object of the grammar rule
- */
- private static void addToResolutionList(YangResolutionInfoImpl<YangType> resolutionInfo,
- GeneratedYangParser.TypeStatementContext ctx) {
- try {
- addResolutionInfo(resolutionInfo);
- } catch (DataModelException e) {
- throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
- TYPE_DATA, ctx.string().getText(), ENTRY, e.getMessage()));
- }
- }
-
- /**
- * Validates type body statements cardinality.
- *
- * @param ctx context object of the grammar rule
- * @param yangDataType yang data type
- */
- private static void validateTypeSubStatementCardinality(GeneratedYangParser.TypeStatementContext ctx,
- YangDataTypes yangDataType) {
- if (ctx.typeBodyStatements() == null || ctx.typeBodyStatements().isEmpty()) {
- ParserException parserException;
- switch (yangDataType) {
- case UNION:
- parserException = new ParserException("YANG file error : a type union" +
- " must have atleast one type statement.");
- break;
- case ENUMERATION:
- parserException = new ParserException("YANG file error : a type enumeration" +
- " must have atleast one enum statement.");
- break;
- case BITS:
- parserException = new ParserException("YANG file error : a type bits" +
- " must have atleast one bit statement.");
- break;
- case DECIMAL64:
- parserException = new ParserException("YANG file error : a type decimal64" +
- " must have fraction-digits statement.");
- break;
- case LEAFREF:
- parserException = new ParserException("YANG file error : a type leafref" +
- " must have one path statement.");
- break;
- case IDENTITYREF:
- parserException = new ParserException("YANG file error : a type identityref" +
- " must have base statement.");
- break;
- default:
- return;
- }
- parserException.setLine(ctx.getStart().getLine());
- parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
- throw parserException;
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/UnionListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/UnionListener.java
deleted file mode 100644
index 9653e40..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/UnionListener.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * type-body-stmts = numerical-restrictions /
- * decimal64-specification /
- * string-restrictions /
- * enum-specification /
- * leafref-specification /
- * identityref-specification /
- * instance-identifier-specification /
- * bits-specification /
- * union-specification
- *
- * union-specification = 1*(type-stmt stmtsep)
- *
- * ANTLR grammar rule
- * typeBodyStatements : numericalRestrictions | stringRestrictions | enumSpecification
- * | leafrefSpecification | identityrefSpecification | instanceIdentifierSpecification
- * | bitsSpecification | unionSpecification;
- *
- * unionSpecification : typeStatement+;
- */
-
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangLeafList;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.YangTypeDef;
-import org.onosproject.yangutils.datamodel.YangUnion;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.TYPE_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.UNION_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-import static org.onosproject.yangutils.translator.tojava.YangDataModelFactory.getYangUnionNode;
-
-/**
- * Represents listener based call back function corresponding to the "union" rule
- * defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class UnionListener {
-
- /**
- * Suffix to be used while creating union class.
- */
- private static final String UNION_CLASS_SUFFIX = "_union";
-
- /**
- * Creates a new union listener.
- */
- private UnionListener() {
- }
-
- /**
- * It is called when parser enters grammar rule (union), it perform
- * validations and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processUnionEntry(TreeWalkListener listener,
- GeneratedYangParser.UnionSpecificationContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, UNION_DATA, "", ENTRY);
-
- if (listener.getParsedDataStack().peek() instanceof YangType) {
- YangUnion unionNode = getYangUnionNode(JAVA_GENERATION);
- Parsable typeData = listener.getParsedDataStack().pop();
-
- unionNode.setLineNumber(ctx.getStart().getLine());
- unionNode.setCharPosition(ctx.getStart().getCharPositionInLine());
- unionNode.setFileName(listener.getFileName());
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, UNION_DATA, "", ENTRY);
-
- Parsable tmpData = listener.getParsedDataStack().peek();
-
- switch (tmpData.getYangConstructType()) {
- case LEAF_DATA:
- // Set the name of union same as leaf.
- unionNode.setName(((YangLeaf) tmpData).getName() + UNION_CLASS_SUFFIX);
- // Pop the stack entry to obtain the parent YANG node.
- Parsable leaf = listener.getParsedDataStack().pop();
- // Add the union node to the parent holder of leaf.
- addChildToParentNode(listener, unionNode);
- // Push the popped entry back to the stack.
- listener.getParsedDataStack().push(leaf);
- break;
- case LEAF_LIST_DATA:
- // Set the name of union same as leaf list.
- unionNode.setName(((YangLeafList) tmpData).getName() + UNION_CLASS_SUFFIX);
- // Pop the stack entry to obtain the parent YANG node.
- Parsable leafList = listener.getParsedDataStack().pop();
- // Add the union node to the parent holder of leaf.
- addChildToParentNode(listener, unionNode);
- // Push the popped entry back to the stack.
- listener.getParsedDataStack().push(leafList);
- break;
- case UNION_DATA:
- YangUnion parentUnion = (YangUnion) tmpData;
- /*
- * In case parent of union is again a union, name of the
- * child union is parent union name suffixed with running
- * integer number, this is done because under union there
- * could be multiple child union types.
- */
- unionNode.setName(parentUnion.getName() + UNION_CLASS_SUFFIX + parentUnion.getChildUnionNumber());
- // Increment the running number.
- parentUnion.setChildUnionNumber(parentUnion.getChildUnionNumber() + 1);
- // Add union as a child to parent union.
- addChildToParentNode(listener, unionNode);
- break;
- case TYPEDEF_DATA:
- YangTypeDef typeDef = (YangTypeDef) tmpData;
- // Set the name of union same as typedef name.
- unionNode.setName(typeDef.getName() + UNION_CLASS_SUFFIX);
- // Add union as a child to parent type def.
- addChildToParentNode(listener, unionNode);
- break;
- // TODO deviate.
- default:
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, TYPE_DATA,
- ((YangType<?>) typeData).getDataTypeName(), ENTRY));
- }
- listener.getParsedDataStack().push(typeData);
- listener.getParsedDataStack().push(unionNode);
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, UNION_DATA, "", ENTRY));
- }
- }
-
- /**
- * It is called when parser exits from grammar rule (union), it perform
- * validations and update the data model tree.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processUnionExit(TreeWalkListener listener,
- GeneratedYangParser.UnionSpecificationContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, UNION_DATA, "", EXIT);
-
- Parsable tmpUnionNode = listener.getParsedDataStack().peek();
- if (tmpUnionNode instanceof YangUnion) {
- YangUnion unionNode = (YangUnion) tmpUnionNode;
- listener.getParsedDataStack().pop();
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, UNION_DATA, "", EXIT);
-
- Parsable tmpNode = listener.getParsedDataStack().peek();
- switch (tmpNode.getYangConstructType()) {
- case TYPE_DATA: {
- YangType<YangUnion> typeNode = (YangType<YangUnion>) tmpNode;
- typeNode.setDataTypeExtendedInfo(unionNode);
- break;
- }
- default:
- throw new ParserException(
- constructListenerErrorMessage(INVALID_HOLDER, UNION_DATA, "", EXIT));
- }
- } else {
- throw new ParserException(
- constructListenerErrorMessage(MISSING_CURRENT_HOLDER, UNION_DATA, "", EXIT));
- }
- }
-
- /**
- * Adds the union node to the parent holder.
- *
- * @param listener listener's object
- * @param unionNode union node which needs to be added to parent
- */
- private static void addChildToParentNode(TreeWalkListener listener, YangUnion unionNode) {
- if (!(listener.getParsedDataStack().peek() instanceof YangNode)) {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, UNION_DATA,
- "", ENTRY));
- } else {
- YangNode curNode = (YangNode) listener.getParsedDataStack().peek();
- try {
- curNode.addChild(unionNode);
- } catch (DataModelException e) {
- throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
- UNION_DATA, "", ENTRY, e.getMessage()));
- }
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/UniqueListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/UniqueListener.java
deleted file mode 100644
index 59920fe..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/UniqueListener.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.UNIQUE_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction
- .constructExtendedListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction
- .constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * unique-stmt = unique-keyword sep unique-arg-str stmtend
- *
- * ANTLR grammar rule
- * uniqueStatement: UNIQUE_KEYWORD unique STMTEND;
- * unique : string;
- */
-
-/**
- * Represesnts listener based call back function corresponding to the "unique" rule
- * defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class UniqueListener {
-
- /**
- * Creates a new unique listener.
- */
- private UniqueListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar rule
- * (unique), perform validations and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processUniqueEntry(TreeWalkListener listener,
- GeneratedYangParser.UniqueStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, UNIQUE_DATA, ctx.unique().getText(), ENTRY);
-
- Parsable tmpData = listener.getParsedDataStack().peek();
- if (listener.getParsedDataStack().peek() instanceof YangList) {
- YangList yangList = (YangList) tmpData;
- String tmpUniqueValue = removeQuotesAndHandleConcat(ctx.unique().getText());
-
- if (tmpUniqueValue.contains(" ")) {
- String[] uniqueValues = tmpUniqueValue.split(" ");
- for (String uniqueValue : uniqueValues) {
- try {
- yangList.addUnique(uniqueValue);
- } catch (DataModelException e) {
- throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
- UNIQUE_DATA,
- ctx.unique().getText(), ENTRY, e.getMessage()));
- }
- }
- } else {
- try {
- yangList.addUnique(tmpUniqueValue);
- } catch (DataModelException e) {
- throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA, UNIQUE_DATA,
- ctx.unique().getText(), ENTRY, e.getMessage()));
- }
- }
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, UNIQUE_DATA, ctx.unique().getText(),
- ENTRY));
- }
- }
-}
\ No newline at end of file
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/UnitsListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/UnitsListener.java
deleted file mode 100644
index e7acccf..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/UnitsListener.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangLeafList;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.UNITS_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * units-stmt = units-keyword sep string optsep stmtend
- *
- * ANTLR grammar rule
- * unitsStatement : UNITS_KEYWORD string STMTEND;
- */
-
-/**
- * Represents listener based call back function corresponding to the "units"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class UnitsListener {
-
- /**
- * Creates a new units listener.
- */
- private UnitsListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar
- * rule (units), performs validation and updates the data model
- * tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processUnitsEntry(TreeWalkListener listener,
- GeneratedYangParser.UnitsStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, UNITS_DATA, ctx.string().getText(), ENTRY);
-
- Parsable tmpData = listener.getParsedDataStack().peek();
- switch (tmpData.getYangConstructType()) {
- case LEAF_DATA:
- YangLeaf leaf = (YangLeaf) tmpData;
- leaf.setUnits(ctx.string().getText());
- break;
- case LEAF_LIST_DATA:
- YangLeafList leafList = (YangLeafList) tmpData;
- leafList.setUnits(ctx.string().getText());
- break;
- case TYPEDEF_DATA:
- // TODO
- break;
- default:
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, UNITS_DATA,
- ctx.string().getText(), ENTRY));
- }
- }
-}
\ No newline at end of file
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/UsesListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/UsesListener.java
deleted file mode 100644
index 2609d44..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/UsesListener.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangAugment;
-import org.onosproject.yangutils.datamodel.YangCase;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.YangGrouping;
-import org.onosproject.yangutils.datamodel.YangInput;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeIdentifier;
-import org.onosproject.yangutils.datamodel.YangNotification;
-import org.onosproject.yangutils.datamodel.YangOutput;
-import org.onosproject.yangutils.datamodel.YangSubModule;
-import org.onosproject.yangutils.datamodel.YangUses;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.linker.impl.YangResolutionInfoImpl;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.addResolutionInfo;
-import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.DESCRIPTION_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.REFERENCE_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.STATUS_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.USES_DATA;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.WHEN_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.UNHANDLED_PARSED_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidNodeIdentifier;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.validateCardinalityMaxOne;
-import static org.onosproject.yangutils.translator.tojava.YangDataModelFactory.getYangUsesNode;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * data-def-stmt = container-stmt /
- * leaf-stmt /
- * leaf-list-stmt /
- * list-stmt /
- * choice-stmt /
- * anyxml-stmt /
- * uses-stmt
- *
- * uses-stmt = uses-keyword sep identifier-ref-arg-str optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [when-stmt stmtsep]
- * *(if-feature-stmt stmtsep)
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * *(refine-stmt stmtsep)
- * *(uses-augment-stmt stmtsep)
- * "}")
- *
- * ANTLR grammar rule
- * dataDefStatement : containerStatement
- * | leafStatement
- * | leafListStatement
- * | listStatement
- * | choiceStatement
- * | usesStatement;
- *
- * usesStatement : USES_KEYWORD string (STMTEND | LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement
- * | statusStatement | descriptionStatement | referenceStatement | refineStatement
- * | usesAugmentStatement)* RIGHT_CURLY_BRACE);
- */
-
-/**
- * Represents listener based call back function corresponding to the "uses"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class UsesListener {
-
- /**
- * Creates a new uses listener.
- */
- private UsesListener() {
- }
-
- /**
- * It is called when parser enters grammar rule (uses), it perform
- * validations and updates the data model tree.
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processUsesEntry(TreeWalkListener listener, GeneratedYangParser.UsesStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, USES_DATA, ctx.string().getText(), ENTRY);
-
- // Validate sub statement cardinality.
- validateSubStatementsCardinality(ctx);
-
- // Check for identifier collision
- int line = ctx.getStart().getLine();
- int charPositionInLine = ctx.getStart().getCharPositionInLine();
-
- detectCollidingChildUtil(listener, line, charPositionInLine, ctx.string().getText(), USES_DATA);
- Parsable curData = listener.getParsedDataStack().peek();
-
- if (curData instanceof YangModule || curData instanceof YangSubModule
- || curData instanceof YangContainer || curData instanceof YangList
- || curData instanceof YangUses || curData instanceof YangAugment
- || curData instanceof YangCase || curData instanceof YangGrouping
- || curData instanceof YangInput || curData instanceof YangOutput
- || curData instanceof YangNotification) {
-
- YangUses usesNode = getYangUsesNode(JAVA_GENERATION);
-
- usesNode.setLineNumber(ctx.getStart().getLine());
- usesNode.setCharPosition(ctx.getStart().getCharPositionInLine());
- usesNode.setFileName(listener.getFileName());
- YangNodeIdentifier nodeIdentifier = getValidNodeIdentifier(ctx.string().getText(), USES_DATA, ctx);
- usesNode.setNodeIdentifier(nodeIdentifier);
- usesNode.setCurrentGroupingDepth(listener.getGroupingDepth());
- YangNode curNode = (YangNode) curData;
-
- try {
- curNode.addChild(usesNode);
- } catch (DataModelException e) {
- throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
- USES_DATA, ctx.string().getText(), ENTRY, e.getMessage()));
- }
- listener.getParsedDataStack().push(usesNode);
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER,
- USES_DATA, ctx.string().getText(), ENTRY));
- }
- }
-
- /**
- * It is called when parser exits from grammar rule (uses), it perform
- * validations and update the data model tree.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processUsesExit(TreeWalkListener listener,
- GeneratedYangParser.UsesStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, USES_DATA, ctx.string().getText(), EXIT);
-
- Parsable parsableUses = listener.getParsedDataStack().pop();
- if (!(parsableUses instanceof YangUses)) {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, USES_DATA,
- ctx.string().getText(), EXIT));
- }
- YangUses uses = (YangUses) parsableUses;
- int errorLine = ctx.getStart().getLine();
- int errorPosition = ctx.getStart().getCharPositionInLine();
-
- // Parent YANG node of uses to be added in resolution information.
- Parsable parentNode = listener.getParsedDataStack().peek();
-
- // Verify parent node of leaf
- if (!(parentNode instanceof YangNode)) {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, USES_DATA,
- ctx.string().getText(), EXIT));
- }
-
- // Add resolution information to the list
- YangResolutionInfoImpl resolutionInfo = new YangResolutionInfoImpl<YangUses>(uses,
- (YangNode) parentNode, errorLine,
- errorPosition);
- addToResolutionList(resolutionInfo, ctx);
- }
-
- // TODO linker to handle collision scenarios like leaf obtained by uses, conflicts with some existing leaf.
-
- /**
- * Validates the cardinality of case sub-statements as per grammar.
- *
- * @param ctx context object of the grammar rule
- */
- private static void validateSubStatementsCardinality(GeneratedYangParser.UsesStatementContext ctx) {
- validateCardinalityMaxOne(ctx.whenStatement(), WHEN_DATA, USES_DATA, ctx.string().getText());
- validateCardinalityMaxOne(ctx.statusStatement(), STATUS_DATA, USES_DATA, ctx.string().getText());
- validateCardinalityMaxOne(ctx.descriptionStatement(), DESCRIPTION_DATA, USES_DATA, ctx.string().getText());
- validateCardinalityMaxOne(ctx.referenceStatement(), REFERENCE_DATA, USES_DATA, ctx.string().getText());
- }
-
- /**
- * Add to resolution list.
- *
- * @param resolutionInfo resolution information.
- * @param ctx context object of the grammar rule
- */
- private static void addToResolutionList(YangResolutionInfoImpl<YangUses> resolutionInfo,
- GeneratedYangParser.UsesStatementContext ctx) {
-
- try {
- addResolutionInfo(resolutionInfo);
- } catch (DataModelException e) {
- throw new ParserException(constructExtendedListenerErrorMessage(UNHANDLED_PARSED_DATA,
- USES_DATA, ctx.string().getText(), EXIT, e.getMessage()));
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ValueListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ValueListener.java
deleted file mode 100644
index 39efa6b..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ValueListener.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * value-stmt = value-keyword sep integer-value stmtend
- *
- * ANTLR grammar rule
- * valueStatement : VALUE_KEYWORD ((MINUS INTEGER) | INTEGER) STMTEND;
- */
-
-import org.onosproject.yangutils.datamodel.YangEnum;
-import org.onosproject.yangutils.datamodel.YangEnumeration;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.VALUE_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIntegerValue;
-
-/**
- * Represents listener based call back function corresponding to the "value"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class ValueListener {
-
- /**
- * Creates a new value listener.
- */
- private ValueListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar rule
- * (value), perform validations and update the data model tree.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processValueEntry(TreeWalkListener listener, GeneratedYangParser.ValueStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, VALUE_DATA, ctx.value().getText(), ENTRY);
-
- // Validate value
- int value = getValidIntegerValue(ctx.value().getText(), VALUE_DATA, ctx);
-
- // Obtain the node of the stack.
- Parsable tmpNode = listener.getParsedDataStack().peek();
- switch (tmpNode.getYangConstructType()) {
- case ENUM_DATA: {
- YangEnum enumNode = (YangEnum) tmpNode;
- if (!isEnumValueValid(listener, ctx, value)) {
- ParserException parserException = new ParserException("Duplicate Value Entry");
- parserException.setLine(ctx.getStart().getLine());
- parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
- throw parserException;
- }
- enumNode.setValue(value);
- break;
- }
- default:
- throw new ParserException(
- constructListenerErrorMessage(INVALID_HOLDER, VALUE_DATA, ctx.value().getText(), ENTRY));
- }
- }
-
- /**
- * Validates ENUM value uniqueness.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- * @param value enum value
- * @return validation result
- */
- private static boolean isEnumValueValid(TreeWalkListener listener, GeneratedYangParser.ValueStatementContext ctx,
- int value) {
- Parsable enumNode = listener.getParsedDataStack().pop();
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, VALUE_DATA, ctx.value().getText(), ENTRY);
-
- Parsable tmpNode = listener.getParsedDataStack().peek();
- switch (tmpNode.getYangConstructType()) {
- case ENUMERATION_DATA: {
- YangEnumeration yangEnumeration = (YangEnumeration) tmpNode;
- for (YangEnum curEnum : yangEnumeration.getEnumSet()) {
- if (value == curEnum.getValue()) {
- listener.getParsedDataStack().push(enumNode);
- return false;
- }
- }
- listener.getParsedDataStack().push(enumNode);
- return true;
- }
- default:
- listener.getParsedDataStack().push(enumNode);
- throw new ParserException(
- constructListenerErrorMessage(INVALID_HOLDER, VALUE_DATA, ctx.value().getText(), ENTRY));
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/VersionListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/VersionListener.java
deleted file mode 100644
index 80caaa2..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/VersionListener.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangSubModule;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidVersion;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.VERSION_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- * module-header-stmts = ;; these stmts can appear in any order
- * [yang-version-stmt stmtsep]
- * namespace-stmt stmtsep
- * prefix-stmt stmtsep
- *
- * submodule-header-stmts =
- * ;; these stmts can appear in any order
- * [yang-version-stmt stmtsep]
- * belongs-to-stmt stmtsep
- *
- * yang-version-stmt = yang-version-keyword sep yang-version-arg-str
- * optsep stmtend
- *
- *
- * ANTLR grammar rule
- * module_header_statement : yang_version_stmt? namespace_stmt prefix_stmt
- * | yang_version_stmt? prefix_stmt namespace_stmt
- * | namespace_stmt yang_version_stmt? prefix_stmt
- * | namespace_stmt prefix_stmt yang_version_stmt?
- * | prefix_stmt namespace_stmt yang_version_stmt?
- * | prefix_stmt yang_version_stmt? namespace_stmt?
- * ;
- * submodule_header_statement : yang_version_stmt? belongs_to_stmt
- * | belongs_to_stmt yang_version_stmt?
- * ;
- * yang_version_stmt : YANG_VERSION_KEYWORD version STMTEND;
- * version : string;
- */
-
-/**
- * Represents listener based call back function corresponding to the "version"
- * rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
- */
-public final class VersionListener {
-
- /**
- * Creates a new version listener.
- */
- private VersionListener() {
- }
-
- /**
- * It is called when parser receives an input matching the grammar rule
- * (version), perform validations and update the data model tree.
- *
- * @param listener Listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processVersionEntry(TreeWalkListener listener,
- GeneratedYangParser.YangVersionStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, VERSION_DATA, ctx.version().getText(), ENTRY);
-
- byte version = getValidVersion(ctx);
-
- // Obtain the node of the stack.
- Parsable tmpNode = listener.getParsedDataStack().peek();
- switch (tmpNode.getYangConstructType()) {
- case MODULE_DATA: {
- YangModule module = (YangModule) tmpNode;
- module.setVersion(version);
- break;
- }
- case SUB_MODULE_DATA: {
- YangSubModule subModule = (YangSubModule) tmpNode;
- subModule.setVersion(version);
- break;
- }
- default:
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, VERSION_DATA,
- ctx.version().getText(), ENTRY));
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/WhenListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/WhenListener.java
deleted file mode 100644
index 218440f..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/WhenListener.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.onosproject.yangutils.datamodel.YangWhen;
-import org.onosproject.yangutils.datamodel.YangWhenHolder;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.WHEN_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.removeQuotesAndHandleConcat;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/*
- * Reference: RFC6020 and YANG ANTLR Grammar
- *
- * ABNF grammar as per RFC6020
- *
- * when-stmt = when-keyword sep string optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * "}")
- *
- * ANTLR grammar rule
- * whenStatement : WHEN_KEYWORD string (STMTEND | LEFT_CURLY_BRACE ((descriptionStatement? referenceStatement?)
- * | (referenceStatement? descriptionStatement?)) RIGHT_CURLY_BRACE);
- */
-
-/**
- * Represents listener based call back function corresponding to the
- * "when" rule defined in ANTLR grammar file for corresponding ABNF rule
- * in RFC 6020.
- */
-public final class WhenListener {
-
- /**
- * Creates a new when listener.
- */
- private WhenListener() {
- }
-
- /**
- * Perform validations and updates the data model tree.It is called when parser
- * receives an input matching the grammar rule (when).
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processWhenEntry(TreeWalkListener listener,
- GeneratedYangParser.WhenStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, WHEN_DATA, ctx.string().getText(), ENTRY);
- String condition = removeQuotesAndHandleConcat(ctx.string().getText());
-
- YangWhenHolder whenHolder;
-
- // Obtain the node of the stack.
- Parsable tmpNode = listener.getParsedDataStack().peek();
- if (tmpNode instanceof YangWhenHolder) {
- whenHolder = (YangWhenHolder) tmpNode;
-
- YangWhen when = new YangWhen();
- when.setCondition(condition);
-
- when.setLineNumber(ctx.getStart().getLine());
- when.setCharPosition(ctx.getStart().getCharPositionInLine());
- when.setFileName(listener.getFileName());
-
- whenHolder.setWhen(when);
- listener.getParsedDataStack().push(when);
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER,
- WHEN_DATA, ctx.string().getText(), ENTRY));
- }
- }
-
- /**
- * Performs validation and updates the data model tree.It is called when parser
- * exits from grammar rule (when).
- *
- * @param listener listener's object
- * @param ctx context object of the grammar rule
- */
- public static void processWhenExit(TreeWalkListener listener,
- GeneratedYangParser.WhenStatementContext ctx) {
-
- // Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, WHEN_DATA, ctx.string().getText(), EXIT);
-
- if (listener.getParsedDataStack().peek() instanceof YangWhen) {
- listener.getParsedDataStack().pop();
- } else {
- throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, WHEN_DATA,
- ctx.string().getText(), EXIT));
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/package-info.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/package-info.java
deleted file mode 100644
index 240cd55..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/listeners/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-/**
- * Provide call back functions for listeners based tree walk.
- */
-package org.onosproject.yangutils.parser.impl.listeners;
\ No newline at end of file
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/package-info.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/package-info.java
deleted file mode 100644
index d935f7b..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-/**
- * Parse the YANG information from ANTLR generated parse tree.
- */
-package org.onosproject.yangutils.parser.impl;
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ListenerCollisionDetector.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ListenerCollisionDetector.java
deleted file mode 100644
index 55b9e01..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ListenerCollisionDetector.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.parserutils;
-
-import org.onosproject.yangutils.datamodel.CollisionDetector;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-
-/**
- * Represents the detector of YANG construct collision in a YANG file.
- */
-public final class ListenerCollisionDetector {
-
- /**
- * Creates a new listener collision.
- */
- private ListenerCollisionDetector() {
- }
-
- /**
- * Detects that the identifiers of all these child nodes must be unique
- * within all cases in a choice.
- *
- * @param listener listener's object
- * @param line line of identifier in YANG file, required for error
- * reporting
- * @param charPosition character position of identifier in YANG file,
- * required for error reporting
- * @param identifierName name for which uniqueness is to be detected
- * @param constructType type of YANG construct for which collision check is
- * to be performed
- * @throws ParserException if identifier is not unique
- */
- public static void detectCollidingChildUtil(TreeWalkListener listener, int line, int charPosition,
- String identifierName, YangConstructType constructType)
- throws ParserException {
-
- Object obj = listener.getParsedDataStack().peek();
- if (obj instanceof CollisionDetector) {
- try {
- ((CollisionDetector) obj).detectCollidingChild(
- identifierName, constructType);
- } catch (DataModelException e) {
- ParserException parserException = new ParserException(e.getMessage());
- parserException.setLine(line);
- parserException.setCharPosition(charPosition);
- throw parserException;
- }
- } else {
- throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, constructType, identifierName,
- EXIT));
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ListenerErrorLocation.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ListenerErrorLocation.java
deleted file mode 100644
index c1c2888..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ListenerErrorLocation.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.parserutils;
-
-/**
- * Represents listener error location.
- */
-public enum ListenerErrorLocation {
- /**
- * Represents that the error location is before processing.
- */
- ENTRY(),
-
- /**
- * Represents that the error location is before processing.
- */
- EXIT();
-
- /**
- * Returns the message corresponding to listener error location.
- *
- * @param errorLocation enum value for type of error
- * @return message corresponding to listener error location
- */
- public static String getErrorLocationMessage(ListenerErrorLocation errorLocation) {
-
- switch (errorLocation) {
- case ENTRY:
- return "before";
- case EXIT:
- return "after";
- default:
- return "during";
- }
- }
-}
\ No newline at end of file
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ListenerErrorMessageConstruction.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ListenerErrorMessageConstruction.java
deleted file mode 100644
index 15b2170..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ListenerErrorMessageConstruction.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.parserutils;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.getYangConstructType;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.getErrorLocationMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.getErrorType;
-
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-
-/**
- * Represents a utility to help construct detailed error message.
- */
-public final class ListenerErrorMessageConstruction {
-
- /**
- * Creates a object of listen error message.
- */
- private ListenerErrorMessageConstruction() {
- }
-
- /**
- * Constructs message for error with extended information and returns the
- * same.
- *
- * @param errorType error type needs to be set in error message
- * @param yangConstructType type of parsable data in which error occurred
- * @param parsableDataTypeName identifier/string of parsable data type in
- * which error occurred
- * @param errorLocation location where error occurred
- * @param extendedErrorInformation extended error information
- * @return constructed error message
- */
- public static String constructExtendedListenerErrorMessage(ListenerErrorType errorType,
- YangConstructType yangConstructType,
- String parsableDataTypeName,
- ListenerErrorLocation errorLocation,
- String extendedErrorInformation) {
- String newErrorMessage;
- newErrorMessage = constructListenerErrorMessage(errorType, yangConstructType, parsableDataTypeName,
- errorLocation)
- + "\n"
- + "Error Information: "
- + extendedErrorInformation;
- return newErrorMessage;
- }
-
- /**
- * Constructs message for error during listener based tree walk and returns
- * the same.
- *
- * @param errorType error type needs to be set in error message
- * @param yangConstructType type of parsable data in which error occurred
- * @param parsableDataTypeName identifier/string of parsable data type in
- * which error occurred
- * @param errorLocation location where error occurred
- * @return constructed error message
- */
- public static String constructListenerErrorMessage(ListenerErrorType errorType,
- YangConstructType yangConstructType,
- String parsableDataTypeName,
- ListenerErrorLocation errorLocation) {
-
- String errorMessage;
-
- errorMessage = "Internal parser error detected: " + getErrorType(errorType) + " "
- + getYangConstructType(yangConstructType);
-
- if (!parsableDataTypeName.isEmpty()) {
- errorMessage = errorMessage + " \"" + parsableDataTypeName + "\" ";
- } else {
- errorMessage = errorMessage + " ";
-
- }
- errorMessage = errorMessage + getErrorLocationMessage(errorLocation) + " processing.";
- return errorMessage;
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ListenerErrorType.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ListenerErrorType.java
deleted file mode 100644
index f1cb284..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ListenerErrorType.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.parserutils;
-
-/**
- * Represents listener error type.
- */
-public enum ListenerErrorType {
- /**
- * Represents the parent holder in parsable stack for given YANG construct
- * is invalid.
- */
- INVALID_HOLDER(),
-
- /**
- * Represents the parent holder in parsable stack for given YANG construct
- * is missing.
- */
- MISSING_HOLDER(),
-
- /**
- * Represents the current holder in parsable stack for given YANG construct
- * is missing.
- */
- MISSING_CURRENT_HOLDER(),
-
- /**
- * Represents that the child in parsable stack for given YANG construct is
- * invalid.
- */
- INVALID_CHILD(),
-
- /**
- * Represents that the cardinality for given YANG construct is invalid.
- */
- INVALID_CARDINALITY(),
-
- /**
- * Represents that the entry is duplicate.
- */
- DUPLICATE_ENTRY(),
-
- /**
- * Represents that the content is invalid.
- */
- INVALID_CONTENT(),
-
- /**
- * Represents that the identifier collision is detected.
- */
- IDENTIFIER_COLLISION(),
-
- /**
- * Represents that some of earlier parsed data is not handled correctly.
- */
- UNHANDLED_PARSED_DATA();
-
- /**
- * Returns the message corresponding to listener error type.
- *
- * @param errorType enum value for type of error
- * @return message corresponding to listener error type
- */
- public static String getErrorType(ListenerErrorType errorType) {
-
- switch (errorType) {
- case INVALID_HOLDER:
- return "Invalid holder for";
- case MISSING_HOLDER:
- return "Missing holder at";
- case MISSING_CURRENT_HOLDER:
- return "Missing";
- case INVALID_CHILD:
- return "Invalid child in";
- case INVALID_CARDINALITY:
- return "Invalid cardinality in";
- case DUPLICATE_ENTRY:
- return "Duplicate";
- case INVALID_CONTENT:
- return "Invalid content in";
- case IDENTIFIER_COLLISION:
- return "Identifier collision detected for";
- case UNHANDLED_PARSED_DATA:
- return "Unhandled parsed data at";
- default:
- return "Problem in";
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ListenerUtil.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ListenerUtil.java
deleted file mode 100644
index 17ec860..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ListenerUtil.java
+++ /dev/null
@@ -1,1061 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.parserutils;
-
-import org.antlr.v4.runtime.ParserRuleContext;
-import org.onosproject.yangutils.datamodel.YangAtomicPath;
-import org.onosproject.yangutils.datamodel.YangImport;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangLeafRef;
-import org.onosproject.yangutils.datamodel.YangLeavesHolder;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeIdentifier;
-import org.onosproject.yangutils.datamodel.YangPathPredicate;
-import org.onosproject.yangutils.datamodel.YangReferenceResolver;
-import org.onosproject.yangutils.datamodel.YangRelativePath;
-import org.onosproject.yangutils.datamodel.YangSubModule;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import static org.onosproject.yangutils.datamodel.YangPathArgType.ABSOLUTE_PATH;
-import static org.onosproject.yangutils.datamodel.YangPathArgType.RELATIVE_PATH;
-import static org.onosproject.yangutils.datamodel.YangPathOperator.EQUALTO;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.getYangConstructType;
-import static org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser.PathStatementContext;
-import static org.onosproject.yangutils.utils.UtilConstants.ADD;
-import static org.onosproject.yangutils.utils.UtilConstants.ANCESTOR;
-import static org.onosproject.yangutils.utils.UtilConstants.CARET;
-import static org.onosproject.yangutils.utils.UtilConstants.CHAR_OF_OPEN_SQUARE_BRACKET;
-import static org.onosproject.yangutils.utils.UtilConstants.CHAR_OF_SLASH;
-import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
-import static org.onosproject.yangutils.utils.UtilConstants.COLON;
-import static org.onosproject.yangutils.utils.UtilConstants.CURRENT;
-import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.FALSE;
-import static org.onosproject.yangutils.utils.UtilConstants.INVALID_TREE;
-import static org.onosproject.yangutils.utils.UtilConstants.OPEN_SQUARE_BRACKET;
-import static org.onosproject.yangutils.utils.UtilConstants.QUOTES;
-import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
-import static org.onosproject.yangutils.utils.UtilConstants.SLASH_ANCESTOR;
-import static org.onosproject.yangutils.utils.UtilConstants.SLASH_FOR_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.TRUE;
-import static org.onosproject.yangutils.utils.UtilConstants.YANG_FILE_ERROR;
-
-/**
- * Represents an utility for listener.
- */
-public final class ListenerUtil {
-
- private static final Pattern IDENTIFIER_PATTERN =
- Pattern.compile("[a-zA-Z_][a-zA-Z0-9_.-]*");
- private static final String DATE_PATTERN =
- "[0-9]{4}-([0-9]{2}|[0-9])-([0-9]{2}|[0-9])";
- private static final String NON_NEGATIVE_INTEGER_PATTERN = "[0-9]+";
- private static final Pattern INTEGER_PATTERN =
- Pattern.compile("[-][0-9]+|[0-9]+");
- private static final Pattern PREDICATE =
- Pattern.compile("\\[(.*?)\\]");
- private static final String XML = "xml";
- private static final String ONE = "1";
- private static final int IDENTIFIER_LENGTH = 64;
- private static final String DATE_FORMAT = "yyyy-MM-dd";
- private static final String REGEX_EQUAL = "[=]";
- private static final String REGEX_OPEN_BRACE = "[(]";
-
- // No instantiation.
- private ListenerUtil() {
- }
-
- /**
- * Removes doubles quotes and concatenates if string has plus symbol.
- *
- * @param yangStringData string from yang file
- * @return concatenated string after removing double quotes
- */
- public static String removeQuotesAndHandleConcat(String yangStringData) {
-
- yangStringData = yangStringData.replace("\"", EMPTY_STRING);
- String[] tmpData = yangStringData.split(Pattern.quote(ADD));
- StringBuilder builder = new StringBuilder();
- for (String yangString : tmpData) {
- builder.append(yangString);
- }
- return builder.toString();
- }
-
- /**
- * Validates identifier and returns concatenated string if string contains plus symbol.
- *
- * @param identifier string from yang file
- * @param yangConstruct yang construct for creating error message
- * @param ctx yang construct's context to get the line number and character position
- * @return concatenated string after removing double quotes
- */
- public static String getValidIdentifier(String identifier,
- YangConstructType yangConstruct,
- ParserRuleContext ctx) {
-
- String identifierString = removeQuotesAndHandleConcat(identifier);
- ParserException parserException;
-
- if (identifierString.length() > IDENTIFIER_LENGTH) {
- parserException = new ParserException("YANG file error : " +
- getYangConstructType(yangConstruct) + " name " + identifierString + " is " +
- "greater than 64 characters.");
- } else if (!IDENTIFIER_PATTERN.matcher(identifierString).matches()) {
- parserException = new ParserException("YANG file error : " +
- getYangConstructType(yangConstruct) + " name " + identifierString + " is not " +
- "valid.");
- } else if (identifierString.toLowerCase().startsWith(XML)) {
- parserException = new ParserException("YANG file error : " +
- getYangConstructType(yangConstruct) + " identifier " + identifierString +
- " must not start with (('X'|'x') ('M'|'m') ('L'|'l')).");
- } else {
- return identifierString;
- }
-
- parserException.setLine(ctx.getStart().getLine());
- parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
- throw parserException;
- }
-
- /**
- * Validates the revision date.
- *
- * @param dateToValidate input revision date
- * @return validation result, true for success, false for failure
- */
- public static boolean isDateValid(String dateToValidate) {
- if (dateToValidate == null || !dateToValidate.matches(DATE_PATTERN)) {
- return false;
- }
-
- SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
- sdf.setLenient(false);
-
- try {
- //if not valid, it will throw ParseException
- sdf.parse(dateToValidate);
- } catch (ParseException e) {
- return false;
- }
-
- return true;
- }
-
- /**
- * Validates YANG version.
- *
- * @param ctx version context object of the grammar rule
- * @return valid version
- */
- public static byte getValidVersion(GeneratedYangParser.YangVersionStatementContext ctx) {
-
- String value = removeQuotesAndHandleConcat(ctx.version().getText());
- if (!value.equals(ONE)) {
- ParserException parserException = new ParserException("YANG file error: Input version not supported");
- parserException.setLine(ctx.getStart().getLine());
- parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
- throw parserException;
- }
-
- return Byte.valueOf(value);
- }
-
- /**
- * Validates non negative integer value.
- *
- * @param integerValue integer to be validated
- * @param yangConstruct yang construct for creating error message
- * @param ctx context object of the grammar rule
- * @return valid non negative integer value
- */
- public static int getValidNonNegativeIntegerValue(String integerValue, YangConstructType yangConstruct,
- ParserRuleContext ctx) {
-
- String value = removeQuotesAndHandleConcat(integerValue);
- if (!value.matches(NON_NEGATIVE_INTEGER_PATTERN)) {
- ParserException parserException = new ParserException("YANG file error : " +
- getYangConstructType(yangConstruct) + " value " + value + " is not " +
- "valid.");
- parserException.setLine(ctx.getStart().getLine());
- parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
- throw parserException;
- }
-
- int valueInInteger;
- try {
- valueInInteger = Integer.parseInt(value);
- } catch (NumberFormatException e) {
- ParserException parserException = new ParserException("YANG file error : " +
- getYangConstructType(yangConstruct) + " value " + value + " is not " +
- "valid.");
- parserException.setLine(ctx.getStart().getLine());
- parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
- throw parserException;
- }
- return valueInInteger;
- }
-
- /**
- * Validates integer value.
- *
- * @param integerValue integer to be validated
- * @param yangConstruct yang construct for creating error message
- * @param ctx context object of the grammar rule
- * @return valid integer value
- */
- public static int getValidIntegerValue(String integerValue, YangConstructType yangConstruct,
- ParserRuleContext ctx) {
-
- String value = removeQuotesAndHandleConcat(integerValue);
- if (!INTEGER_PATTERN.matcher(value).matches()) {
- ParserException parserException = new ParserException("YANG file error : " +
- getYangConstructType(yangConstruct) + " value " + value + " is not " +
- "valid.");
- parserException.setLine(ctx.getStart().getLine());
- parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
- throw parserException;
- }
-
- int valueInInteger;
- try {
- valueInInteger = Integer.parseInt(value);
- } catch (NumberFormatException e) {
- ParserException parserException = new ParserException("YANG file error : " +
- getYangConstructType(yangConstruct) + " value " + value + " is not " +
- "valid.");
- parserException.setLine(ctx.getStart().getLine());
- parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
- throw parserException;
- }
- return valueInInteger;
- }
-
- /**
- * Validates boolean value.
- *
- * @param booleanValue value to be validated
- * @param yangConstruct yang construct for creating error message
- * @param ctx context object of the grammar rule
- * @return boolean value either true or false
- */
- public static boolean getValidBooleanValue(String booleanValue, YangConstructType yangConstruct,
- ParserRuleContext ctx) {
-
- String value = removeQuotesAndHandleConcat(booleanValue);
- if (value.equals(TRUE)) {
- return true;
- } else if (value.equals(FALSE)) {
- return false;
- } else {
- ParserException parserException = new ParserException("YANG file error : " +
- getYangConstructType(yangConstruct) + " value " + value + " is not " +
- "valid.");
- parserException.setLine(ctx.getStart().getLine());
- parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
- throw parserException;
- }
- }
-
- /**
- * Returns current date and makes it in usable format for revision.
- *
- * @return usable current date format for revision
- */
- public static Date getCurrentDateForRevision() {
-
- SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);
-
- Date date = new Date();
- String dateInString = dateFormat.format(date);
- try {
- //if not valid, it will throw ParseException
- Date now = dateFormat.parse(dateInString);
- return date;
- } catch (ParseException e) {
- ParserException parserException = new ParserException("YANG file error: Input date is not correct");
- throw parserException;
- }
- }
-
- /**
- * Checks and return valid node identifier.
- *
- * @param nodeIdentifierString string from yang file
- * @param yangConstruct yang construct for creating error message
- * @param ctx yang construct's context to get the line number and character position
- * @return valid node identifier
- */
- public static YangNodeIdentifier getValidNodeIdentifier(String nodeIdentifierString,
- YangConstructType yangConstruct, ParserRuleContext ctx) {
- String tmpIdentifierString = removeQuotesAndHandleConcat(nodeIdentifierString);
- String[] tmpData = tmpIdentifierString.split(Pattern.quote(COLON));
- if (tmpData.length == 1) {
- YangNodeIdentifier nodeIdentifier = new YangNodeIdentifier();
- nodeIdentifier.setName(getValidIdentifier(tmpData[0], yangConstruct, ctx));
- return nodeIdentifier;
- } else if (tmpData.length == 2) {
- YangNodeIdentifier nodeIdentifier = new YangNodeIdentifier();
- nodeIdentifier.setPrefix(getValidIdentifier(tmpData[0], yangConstruct, ctx));
- nodeIdentifier.setName(getValidIdentifier(tmpData[1], yangConstruct, ctx));
- return nodeIdentifier;
- } else {
- ParserException parserException = new ParserException("YANG file error : " +
- getYangConstructType(yangConstruct) + " name " + nodeIdentifierString +
- " is not valid.");
- parserException.setLine(ctx.getStart().getLine());
- parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
- throw parserException;
- }
- }
-
- /**
- * Validates the prefix of the YANG file where leaf-ref is present and
- * puts it in the map of node and prefix in leaf-ref.
- *
- * @param atomicList atomic content list in leaf-ref
- * @param leafRef YANG leaf-ref
- */
- private static void valPrefix(List<YangAtomicPath> atomicList,
- YangLeafRef leafRef) {
-
- for (YangAtomicPath atomicPath : atomicList) {
- String prefix = atomicPath.getNodeIdentifier().getPrefix();
- YangNode parent = leafRef.getParentNode();
- YangNode rootNode = getRootNode(parent);
-
- List<YangImport> imports;
- if (rootNode instanceof YangModule) {
- imports = ((YangModule) rootNode).getImportList();
- } else {
- imports = ((YangSubModule) rootNode).getImportList();
- }
- updatePrefixWithNode(rootNode, imports, prefix, leafRef);
- }
- }
-
- /**
- * Updates the prefix and its respective node in the leaf-ref by taking
- * the node from the import list of the root node which matches with the
- * prefix.
- *
- * @param root root node
- * @param imports import list
- * @param prefix prefix in path
- * @param leafRef YANG leaf-ref
- */
- private static void updatePrefixWithNode(YangNode root,
- List<YangImport> imports,
- String prefix,
- YangLeafRef<?> leafRef) {
-
- Map<String, String> prefixMap = leafRef.getPrefixAndNode();
- if (prefixMap == null) {
- prefixMap = new HashMap<>();
- leafRef.setPrefixAndNode(prefixMap);
- }
-
- if (prefix == null ||
- prefix.equals(((YangReferenceResolver) root).getPrefix())) {
- prefixMap.put(prefix, root.getName());
- return;
- }
-
- if (imports != null) {
- for (YangImport yangImp : imports) {
- if (yangImp.getPrefixId().equals(prefix)) {
- prefixMap.put(prefix, yangImp.getModuleName());
- }
- }
- }
- }
-
- /**
- * Returns the root node from the current node.
- *
- * @param node YANG node
- * @return root node
- */
- private static YangNode getRootNode(YangNode node) {
-
- YangNode curNode = node;
- while (!(curNode instanceof YangModule) &&
- !(curNode instanceof YangSubModule)) {
- if (curNode == null) {
- throw new ParserException(INVALID_TREE);
- }
- curNode = curNode.getParent();
- }
- return curNode;
- }
-
- /**
- * Validates the unique syntax from the reference path.
- *
- * @param uniquePath path of unique
- * @param prefixOfFile current file's prefix
- * @param ctx yang construct's context to get the line number and character position
- * @return list of absolute path
- */
- private static List<YangAtomicPath> validateUniqueValues(String uniquePath, String prefixOfFile,
- ParserRuleContext ctx) {
- List<YangAtomicPath> atomicPath = new LinkedList<>();
- String[] pathInUnique = uniquePath.split(SLASH_FOR_STRING);
- for (String uniqueValue : pathInUnique) {
- YangAtomicPath yangAtomicPathPath = new YangAtomicPath();
- YangNodeIdentifier nodeIdentifier = getValidNodeIdentifier(uniqueValue, YangConstructType.UNIQUE_DATA, ctx);
- yangAtomicPathPath.setNodeIdentifier(nodeIdentifier);
- atomicPath.add(yangAtomicPathPath);
- if (nodeIdentifier.getPrefix() != null && nodeIdentifier.getPrefix() != prefixOfFile) {
- ParserException parserException = new ParserException("YANG file error : A leaf reference, in unique," +
- " must refer to a leaf in the list");
- parserException.setLine(ctx.getStart().getLine());
- parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
- throw parserException;
- }
- }
- return atomicPath;
- }
-
- /**
- * Validates unique field from the list.
- *
- * @param yangList instance of YANG list
- * @param ctx yang construct's context to get the line number and character position
- */
- public static void validateUniqueInList(YangList yangList, ParserRuleContext ctx) {
- YangLeaf leaf;
- // Returns the prefix for the file where unique is present.
- String prefixOfTheFile = getRootPrefix(yangList);
- List<String> uniques = yangList.getUniqueList();
- if (uniques != null && !uniques.isEmpty()) {
- Iterator<String> uniqueList = uniques.listIterator();
- while (uniqueList.hasNext()) {
- String pathInUnique = uniqueList.next();
- List<YangAtomicPath> atomicPathInUnique = validateUniqueValues(pathInUnique, prefixOfTheFile, ctx);
- YangAtomicPath leafInPath = atomicPathInUnique.get(atomicPathInUnique.size() - 1);
- if (atomicPathInUnique.size() == 1) {
- leaf = getReferenceLeafFromUnique(yangList, leafInPath);
- } else {
- atomicPathInUnique.remove(atomicPathInUnique.size() - 1);
- YangNode holderOfLeaf = getNodeUnderListFromPath(atomicPathInUnique, yangList, ctx);
- leaf = getReferenceLeafFromUnique(holderOfLeaf, leafInPath);
- }
- if (leaf == null) {
- ParserException parserException = new ParserException("YANG file error : A leaf reference, in " +
- "unique," +
- " must refer to a leaf under the list");
- parserException.setLine(ctx.getStart().getLine());
- parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
- throw parserException;
- }
- }
- }
- }
-
- /**
- * Returns the last node under the unique path.
- *
- * @param uniquePath atomic path list
- * @param node root node from where it starts searching
- * @param ctx yang construct's context to get the line number and character position
- * @return last node in the list
- */
- private static YangNode getNodeUnderListFromPath(List<YangAtomicPath> uniquePath, YangNode node,
- ParserRuleContext ctx) {
- Iterator<YangAtomicPath> nodesInReference = uniquePath.listIterator();
- YangNode potentialReferredNode = node.getChild();
- while (nodesInReference.hasNext()) {
- YangAtomicPath nodeInUnique = nodesInReference.next();
- YangNode referredNode = getReferredNodeFromTheUniqueNodes(nodeInUnique.getNodeIdentifier(),
- potentialReferredNode);
- if (referredNode == null) {
- ParserException parserException = new ParserException("YANG file error : The target node in unique " +
- "reference path is invalid");
- parserException.setLine(ctx.getStart().getLine());
- parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
- throw parserException;
- } else {
- potentialReferredNode = referredNode.getChild();
- }
- }
- return potentialReferredNode;
- }
-
- /**
- * Returns the node that matches with the name of the node in path.
- *
- * @param nodeInUnique node name in path
- * @param potentialReferredNode node under which it has to match
- * @return referred node
- */
- private static YangNode getReferredNodeFromTheUniqueNodes(YangNodeIdentifier nodeInUnique, YangNode
- potentialReferredNode) {
- while (potentialReferredNode != null) {
- // Check if the potential referred node is the actual referred node
- if (potentialReferredNode.getName().equals(nodeInUnique.getName())) {
- return potentialReferredNode;
- }
- potentialReferredNode = potentialReferredNode.getNextSibling();
- }
- return null;
- }
-
- /**
- * Returns the leaf which unique refers.
- *
- * @param nodeForLeaf last node where leaf is referred
- * @param leafInUnique leaf in unique path
- * @return YANG leaf
- */
- private static YangLeaf getReferenceLeafFromUnique(YangNode nodeForLeaf, YangAtomicPath leafInUnique) {
- YangLeavesHolder leavesHolder = (YangLeavesHolder) nodeForLeaf;
- List<YangLeaf> leaves = leavesHolder.getListOfLeaf();
- if (leaves != null && !leaves.isEmpty()) {
- for (YangLeaf leaf : leaves) {
- if (leafInUnique.getNodeIdentifier().getName().equals(leaf.getName())) {
- return leaf;
- }
- }
- }
- return null;
- }
-
- /**
- * Returns the prefix of the root node from any node inside it.
- *
- * @param curNode YANG node
- * @return prefix of the root node
- */
- public static String getRootPrefix(YangNode curNode) {
-
- String prefix;
- YangNode node = getRootNode(curNode);
- if (node instanceof YangModule) {
- YangModule yangModule = (YangModule) node;
- prefix = yangModule.getPrefix();
- } else {
- YangSubModule yangSubModule = (YangSubModule) node;
- prefix = yangSubModule.getPrefix();
- }
- return prefix;
- }
-
- /**
- * Returns the matched first path predicate in a given string. Returns
- * null if match is not found.
- *
- * @param str string to be matched
- * @return the matched string
- */
- private static String getMatchedPredicate(String str) {
-
- Matcher matcher = PREDICATE.matcher(str);
- if (matcher.find()) {
- return matcher.group(0);
- }
- return null;
- }
-
- /**
- * Checks and return valid absolute schema node id.
- *
- * @param argumentString string from yang file
- * @param yangConstructType yang construct for creating error message
- * @param ctx yang construct's context to get the line number and character position
- * @return target nodes list of absolute schema node id
- */
- public static List<YangAtomicPath> getValidAbsoluteSchemaNodeId(String argumentString,
- YangConstructType yangConstructType,
- ParserRuleContext ctx) {
-
- List<YangAtomicPath> targetNodes = new ArrayList<>();
- YangNodeIdentifier yangNodeIdentifier;
- String tmpSchemaNodeId = removeQuotesAndHandleConcat(argumentString);
-
- // absolute-schema-nodeid = 1*("/" node-identifier)
- if (!tmpSchemaNodeId.startsWith(SLASH)) {
- ParserException parserException = new ParserException("YANG file error : " +
- getYangConstructType(yangConstructType) + " name " + argumentString +
- "is not valid");
- parserException.setLine(ctx.getStart().getLine());
- parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
- throw parserException;
- }
- String[] tmpData = tmpSchemaNodeId.replaceFirst(CARET + SLASH, EMPTY_STRING).split(SLASH);
- for (String nodeIdentifiers : tmpData) {
- yangNodeIdentifier = getValidNodeIdentifier(nodeIdentifiers, yangConstructType, ctx);
- YangAtomicPath yangAbsPath = new YangAtomicPath();
- yangAbsPath.setNodeIdentifier(yangNodeIdentifier);
- targetNodes.add(yangAbsPath);
- }
- return targetNodes;
- }
-
- /**
- * Throws parser exception for unsupported YANG constructs.
- *
- * @param type construct type
- * @param ctx construct context
- * @param errorInfo error msg
- * @param fileName YANG file name
- */
- public static void handleUnsupportedYangConstruct(YangConstructType type,
- ParserRuleContext ctx,
- String errorInfo,
- String fileName) {
- ParserException parserException = new ParserException(
- YANG_FILE_ERROR + QUOTES + getYangConstructType(
- type) + QUOTES + errorInfo);
- parserException.setLine(ctx.getStart().getLine());
- parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
- //FIXME this exception should probably be thrown rather than just logged
- //throw parserException;
- }
-
- /**
- * Returns date and makes it in usable format for revision.
- *
- * @param dateInString date argument string from yang file
- * @param ctx yang construct's context to get the line number and character position
- * @return date format for revision
- */
- public static Date getValidDateFromString(String dateInString, ParserRuleContext ctx) {
- String dateArgument = removeQuotesAndHandleConcat(dateInString);
- if (!dateArgument.matches(DATE_PATTERN)) {
- ParserException parserException = new ParserException("YANG file error: Input date is not correct");
- parserException.setLine(ctx.getStart().getLine());
- parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
- throw parserException;
- }
-
- SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
- sdf.setLenient(false);
-
- try {
- //if not valid, it will throw ParseException
- return sdf.parse(dateArgument);
- } catch (ParseException e) {
- ParserException parserException = new ParserException("YANG file error: Input date is not correct");
- parserException.setLine(ctx.getStart().getLine());
- parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
- throw parserException;
- }
- }
-
- /**
- * Checks and return valid prefix.
- *
- * @param inputString string from yang file
- * @param yangConstruct yang construct for creating error message
- * @param ctx yang construct's context to get the line number and character position
- * @return valid prefix
- */
- public static String getValidPrefix(String inputString,
- YangConstructType yangConstruct, ParserRuleContext ctx) {
- String tmpPrefixString = removeQuotesAndHandleConcat(inputString);
- String[] tmpData = tmpPrefixString.split(Pattern.quote(COLON));
- if (tmpData.length == 2) {
- return tmpData[0];
- } else {
- ParserException parserException = new ParserException("YANG file error : " +
- getYangConstructType(yangConstruct) + " name " + inputString +
- " is not valid.");
- parserException.setLine(ctx.getStart().getLine());
- parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
- throw parserException;
- }
- }
-
- /**
- * Validates path under leaf-ref and parses the path and stores in the
- * leaf-ref.
- *
- * @param path path of leaf-ref
- * @param type construct type
- * @param ctx construct details
- * @param leafRef YANG leaf-ref having path
- */
- public static void validatePath(String path, YangConstructType type,
- PathStatementContext ctx,
- YangLeafRef leafRef) {
-
- String concatPath = removeQuotesAndHandleConcat(path);
- if (!concatPath.startsWith(SLASH_FOR_STRING) &&
- !concatPath.startsWith(ANCESTOR)) {
- throw getPathException(ctx, leafRef);
- }
- leafRef.setPath(concatPath);
- if (concatPath.startsWith(SLASH_FOR_STRING)) {
- List<YangAtomicPath> atomicList = new LinkedList<>();
- valAbsPath(concatPath, atomicList, ctx, leafRef, type);
- leafRef.setPathType(ABSOLUTE_PATH);
- valPrefix(atomicList, leafRef);
- leafRef.setAtomicPath(atomicList);
- return;
- }
- leafRef.setPathType(RELATIVE_PATH);
- valRelPath(concatPath, leafRef, ctx, type);
- }
-
- /**
- * Validates relative path, parses the string and stores it in the leaf-ref.
- *
- * @param path leaf-ref path
- * @param leafRef YANG leaf-ref data model information
- * @param pathType yang construct for creating error message
- */
- private static void valRelPath(String path, YangLeafRef leafRef,
- PathStatementContext pathCtx,
- YangConstructType pathType) {
-
- YangRelativePath relPath = new YangRelativePath();
- int count = 0;
- while (path.startsWith(SLASH_ANCESTOR)) {
- path = path.replaceFirst(SLASH_ANCESTOR, EMPTY_STRING);
- count = count + 1;
- }
- if (path.isEmpty()) {
- throw getPathException(pathCtx, leafRef);
- }
-
- List<YangAtomicPath> atomicList = new ArrayList<>();
- relPath.setAncestorNodeCount(count);
- valAbsPath(SLASH_FOR_STRING + path, atomicList, pathCtx, leafRef,
- pathType);
- valPrefix(atomicList, leafRef);
- relPath.setAtomicPathList(atomicList);
- leafRef.setRelativePath(relPath);
- }
-
- /**
- * Validates absolute path, parses the string and stores it in leaf-ref.
- *
- * @param path leaf-ref path
- * @param atomics atomic content list
- * @param pathCtx path statement context
- * @param yangLeafRef YANG leaf ref
- * @param pathType yang construct for creating error message
- */
- private static void valAbsPath(String path, List<YangAtomicPath> atomics,
- PathStatementContext pathCtx,
- YangLeafRef yangLeafRef,
- YangConstructType pathType) {
-
- String comPath = path;
- while (comPath != null) {
- comPath = comPath.substring(1);
- if (comPath.isEmpty()) {
- throw getPathException(pathCtx, yangLeafRef);
- }
- int nodeId = comPath.indexOf(CHAR_OF_SLASH);
- int predicate = comPath.indexOf(CHAR_OF_OPEN_SQUARE_BRACKET);
- if (predicate < nodeId && predicate != -1) {
- comPath = getPathWithPredicate(comPath, atomics,
- pathCtx, yangLeafRef, pathType);
- } else {
- comPath = getPath(comPath, atomics, pathType, pathCtx);
- }
- }
- }
-
- /**
- * Returns the remaining path after parsing and the predicates of an atomic
- * content.
- *
- * @param path leaf-ref path
- * @param atomics atomic content list
- * @param pathCtx yang construct's context to get the line number and
- * character position
- * @param yangLeafRef YANG leaf-ref data model information
- * @param pathType yang construct for creating error message
- * @return parsed path after removing one atomic content.
- */
- private static String getPathWithPredicate(String path,
- List<YangAtomicPath> atomics,
- PathStatementContext pathCtx,
- YangLeafRef yangLeafRef,
- YangConstructType pathType) {
-
- String[] node = new String[2];
- int bracket = path.indexOf(CHAR_OF_OPEN_SQUARE_BRACKET);
- node[0] = path.substring(0, bracket);
- node[1] = path.substring(bracket);
- return getParsedPath(node[0], node[1], atomics, pathCtx, yangLeafRef,
- pathType);
- }
-
- /**
- * Returns the path after taking all the path predicates of an atomic
- * content.
- *
- * @param nodeId atomic content nodeId
- * @param path leaf-ref path
- * @param atomics atomic content list
- * @param pathCtx yang construct's context to get the line number
- * and character position
- * @param yangLeafRef YANG leaf-ref data model information
- * @param pathType yang construct for creating error message
- * @return parsed path after removing one atomic content.
- */
- public static String getParsedPath(String nodeId, String path,
- List<YangAtomicPath> atomics,
- PathStatementContext pathCtx,
- YangLeafRef yangLeafRef,
- YangConstructType pathType) {
-
- String comPath = path;
- List<String> predicateList = new ArrayList<>();
- while (comPath.startsWith(OPEN_SQUARE_BRACKET)) {
- String matchedVal = getMatchedPredicate(comPath);
- if (matchedVal == null || matchedVal.isEmpty()) {
- throw getPathException(pathCtx, yangLeafRef);
- }
- predicateList.add(matchedVal);
- comPath = comPath.substring(matchedVal.length());
- }
-
- YangAtomicPath atomicPath = new YangAtomicPath();
- YangNodeIdentifier validId =
- getValidNodeIdentifier(nodeId, pathType, pathCtx);
-
- List<YangPathPredicate> predicates = valPathPredicates(predicateList,
- pathType,
- pathCtx, yangLeafRef);
- atomicPath.setNodeIdentifier(validId);
- atomicPath.setPathPredicatesList(predicates);
- atomics.add(atomicPath);
- return comPath;
- }
-
- /**
- * Validates the path predicates of an atomic content after parsing the
- * predicates and storing it in the leaf-ref.
- *
- * @param predicates list of predicates
- * @param pathType yang construct for creating error message
- * @param pathCtx yang construct's context to get the line number
- * and character position
- * @param yangLeafRef YANG leaf-ref data model information
- * @return list of path predicates of an atomic content
- */
- private static List<YangPathPredicate> valPathPredicates(List<String> predicates,
- YangConstructType pathType,
- PathStatementContext pathCtx,
- YangLeafRef yangLeafRef) {
-
- List<YangPathPredicate> result = new ArrayList<>();
- for (String p : predicates) {
- p = p.substring(1, p.length() - 1);
- result.add(valPathEqualityExp(p.trim(), pathType, pathCtx, yangLeafRef));
- }
- return result;
- }
-
- /**
- * Validates the path equality expression of a path predicate and after
- * parsing the string assigns it to the YANG path predicate.
- *
- * @param predicate path predicate
- * @param pathType yang construct for creating error message
- * @param pathCtx yang construct's context to get the line number
- * and character position
- * @param yangLeafRef YANG leaf-ref data model information
- * @return YANG path predicate
- */
- private static YangPathPredicate valPathEqualityExp(String predicate,
- YangConstructType pathType,
- PathStatementContext pathCtx,
- YangLeafRef yangLeafRef) {
-
- String[] exp = predicate.split(REGEX_EQUAL);
- YangNodeIdentifier nodeId =
- getValidNodeIdentifier(exp[0].trim(), pathType, pathCtx);
- YangRelativePath relPath = valPathKeyExp(exp[1].trim(), pathType,
- pathCtx, yangLeafRef);
-
- YangPathPredicate pathPredicate = new YangPathPredicate();
- pathPredicate.setNodeId(nodeId);
- pathPredicate.setPathOp(EQUALTO);
- pathPredicate.setRelPath(relPath);
- return pathPredicate;
- }
-
- /**
- * Validates the path key expression of the path-predicate and stores it
- * in the relative path of the leaf-ref.
- *
- * @param relPath relative path
- * @param pathType yang construct for creating error message
- * @param pathCtx yang construct's context to get the line number
- * and character position
- * @param yangLeafRef YANG leaf-ref data model information
- * @return YANG relative path
- */
- private static YangRelativePath valPathKeyExp(String relPath,
- YangConstructType pathType,
- PathStatementContext pathCtx,
- YangLeafRef yangLeafRef) {
-
- String[] relative = relPath.split(SLASH_FOR_STRING);
- int count = 0;
- List<String> atomicContent = new ArrayList<>();
- for (String val : relative) {
- if (val.trim().equals(ANCESTOR)) {
- count = count + 1;
- } else {
- atomicContent.add(val);
- }
- }
-
- YangRelativePath relativePath = new YangRelativePath();
- relativePath.setAncestorNodeCount(count);
- relativePath.setAtomicPathList(valRelPathKeyExp(atomicContent,
- pathType,
- pathCtx, yangLeafRef));
- return relativePath;
- }
-
- /**
- * Validates relative path key expression in the right relative path of
- * the path predicate, by taking every atomic content in it.
- *
- * @param content atomic content list
- * @param pathType yang construct for creating error message
- * @param pathCtx yang construct's context to get the line number
- * and character position
- * @param yangLeafRef YANG leaf-ref data model information
- * @return YANG atomic content list
- */
- private static List<YangAtomicPath> valRelPathKeyExp(List<String> content,
- YangConstructType pathType,
- PathStatementContext pathCtx,
- YangLeafRef yangLeafRef) {
-
- String current = content.get(0);
- String[] curStr = (current.trim()).split(REGEX_OPEN_BRACE);
- if (!(curStr[0].trim().equals(CURRENT)) ||
- !(curStr[1].trim().equals(CLOSE_PARENTHESIS))) {
- throw getPathException(pathCtx, yangLeafRef);
- }
-
- content.remove(0);
- List<YangAtomicPath> atomicList = new ArrayList<>();
- for (String relPath : content) {
- YangNodeIdentifier nodeId =
- getValidNodeIdentifier(relPath, pathType, pathCtx);
- YangAtomicPath atomicPath = new YangAtomicPath();
- atomicPath.setNodeIdentifier(nodeId);
- atomicList.add(atomicPath);
- }
- return atomicList;
- }
-
- /**
- * Returns the remaining path after parsing and processing an atomic
- * content which doesn't have path-predicate.
- *
- * @param path leaf-ref path
- * @param atomicList atomic content list
- * @param pathType yang construct for creating error message
- * @param pathCtx yang construct's context to get the line number
- * and character position
- * @return remaining path after parsing one atomic content
- */
- public static String getPath(String path, List<YangAtomicPath> atomicList,
- YangConstructType pathType,
- PathStatementContext pathCtx) {
-
- String comPath = path;
- String nodeId;
- if (comPath.contains(SLASH_FOR_STRING)) {
- nodeId = comPath.substring(0, comPath.indexOf(CHAR_OF_SLASH));
- comPath = comPath.substring(comPath.indexOf(CHAR_OF_SLASH));
- } else {
- nodeId = comPath;
- comPath = null;
- }
-
- YangNodeIdentifier validNodeId =
- getValidNodeIdentifier(nodeId, pathType, pathCtx);
- YangAtomicPath atomicPath = new YangAtomicPath();
- atomicPath.setNodeIdentifier(validNodeId);
- atomicList.add(atomicPath);
- return comPath;
- }
-
- /**
- * Returns the path syntax parser exception.
- *
- * @param pathCtx yang construct's context to get the line number
- * and character position
- * @param yangLeafRef YANG leaf-ref data model information
- * @return parser exception
- */
- private static ParserException getPathException(PathStatementContext pathCtx,
- YangLeafRef yangLeafRef) {
- ParserException exception = new ParserException(
- "YANG file error : Path " + yangLeafRef.getPath() +
- " does not follow valid path syntax");
- exception.setLine(pathCtx.getStart().getLine());
- exception.setCharPosition(pathCtx.getStart().getCharPositionInLine());
- return exception;
- }
-
- /**
- * Returns the augment name, after removing the prefix, in each atomic
- * content, which is equal to the root prefix.
- *
- * @param atomics atomic content list
- * @param root root node
- * @return prefix removed augment name
- */
- public static String getPrefixRemovedName(List<YangAtomicPath> atomics,
- YangNode root) {
-
- String rootPrefix = getRootPrefix(root);
- StringBuilder builder = new StringBuilder();
- for (YangAtomicPath atomic : atomics) {
- String id;
- String prefix = atomic.getNodeIdentifier().getPrefix();
- String name = atomic.getNodeIdentifier().getName();
- if (rootPrefix.equals(prefix) || prefix == null) {
- id = SLASH_FOR_STRING + name;
- } else {
- id = SLASH_FOR_STRING + prefix + COLON + name;
- }
- builder.append(id);
- }
- return builder.toString();
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ListenerValidation.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ListenerValidation.java
deleted file mode 100644
index fa3b200..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ListenerValidation.java
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.parserutils;
-
-import java.util.Iterator;
-import java.util.List;
-
-import org.antlr.v4.runtime.ParserRuleContext;
-import org.onosproject.yangutils.datamodel.YangCase;
-import org.onosproject.yangutils.datamodel.YangChoice;
-import org.onosproject.yangutils.datamodel.YangConfig;
-import org.onosproject.yangutils.datamodel.YangInput;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNotification;
-import org.onosproject.yangutils.datamodel.YangOutput;
-import org.onosproject.yangutils.datamodel.YangRpc;
-import org.onosproject.yangutils.datamodel.utils.Parsable;
-import org.onosproject.yangutils.datamodel.utils.YangConstructType;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.getYangConstructType;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-
-/**
- * Represents a utility to carry out listener validation.
- */
-public final class ListenerValidation {
-
- /**
- * Creates a new listener validation.
- */
- private ListenerValidation() {
- }
-
- /**
- * Checks parsed data stack is not empty.
- *
- * @param listener Listener's object
- * @param errorType error type needs to be set in error message
- * @param yangConstructType type of parsable data in which error occurred
- * @param parsableDataTypeName name of parsable data type in which error
- * occurred
- * @param errorLocation location where error occurred
- */
- public static void checkStackIsNotEmpty(TreeWalkListener listener, ListenerErrorType errorType,
- YangConstructType yangConstructType, String parsableDataTypeName,
- ListenerErrorLocation errorLocation) {
-
- if (listener.getParsedDataStack().empty()) {
- /*
- * If stack is empty it indicates error condition, value of
- * parsableDataTypeName will be null in case there is no name
- * attached to parsable data type.
- */
- String message = constructListenerErrorMessage(errorType, yangConstructType, parsableDataTypeName,
- errorLocation);
- throw new ParserException(message);
- }
- }
-
- /**
- * Checks parsed data stack is empty.
- *
- * @param listener Listener's object
- * @param errorType error type needs to be set in error message
- * @param yangConstructType type of parsable data in which error occurred
- * @param parsableDataTypeName name of parsable data type in which error
- * occurred
- * @param errorLocation location where error occurred
- */
- public static void checkStackIsEmpty(TreeWalkListener listener, ListenerErrorType errorType,
- YangConstructType yangConstructType, String parsableDataTypeName,
- ListenerErrorLocation errorLocation) {
-
- if (!listener.getParsedDataStack().empty()) {
- /*
- * If stack is empty it indicates error condition, value of
- * parsableDataTypeName will be null in case there is no name
- * attached to parsable data type.
- */
- String message = constructListenerErrorMessage(errorType, yangConstructType, parsableDataTypeName,
- errorLocation);
- throw new ParserException(message);
- }
- }
-
- /**
- * Returns parent node config value, if top node does not specify a config
- * statement then default value true is returned.
- *
- * @param listener listener's object
- * @return true/false parent's config value
- */
- public static boolean getParentNodeConfig(TreeWalkListener listener) {
- Parsable curData = listener.getParsedDataStack().peek();
- YangNode parentNode = ((YangNode) curData).getParent();
- if (curData instanceof YangConfig) {
- return ((YangConfig) curData).isConfig();
- } else if (curData instanceof YangRpc || curData instanceof YangOutput
- || curData instanceof YangInput || curData instanceof YangNotification) {
- return false;
- } else if (curData instanceof YangCase && parentNode instanceof YangChoice) {
- return ((YangChoice) parentNode).isConfig();
- } else {
- return true;
- }
- }
-
- /**
- * Checks if a rule occurrences is as per the expected YANG grammar's
- * cardinality.
- *
- * @param childContext child's context
- * @param yangChildConstruct child construct for whom cardinality is to be
- * validated
- * @param yangParentConstruct parent construct
- * @param parentName parent name
- * @throws ParserException exception if cardinality check fails
- */
- public static void validateCardinalityMaxOne(List<?> childContext, YangConstructType yangChildConstruct,
- YangConstructType yangParentConstruct, String parentName)
- throws ParserException {
-
- if (!childContext.isEmpty() && childContext.size() != 1) {
- ParserException parserException = new ParserException("YANG file error: \""
- + getYangConstructType(yangChildConstruct) + "\" is defined more than once in \""
- + getYangConstructType(yangParentConstruct) + " " + parentName + "\".");
-
- Iterator<?> context = childContext.iterator();
- parserException.setLine(((ParserRuleContext) context.next()).getStart().getLine());
- parserException.setCharPosition(((ParserRuleContext) context.next()).getStart().getCharPositionInLine());
- throw parserException;
- }
- }
-
- /**
- * Checks if a rule occurrences is exactly 1.
- *
- * @param childContext child's context
- * @param yangChildConstruct child construct for whom cardinality is to be
- * validated
- * @param yangParentConstruct parent construct
- * @param parentName parent name
- * @param parentContext parents's context
- * @throws ParserException exception if cardinality check fails
- */
- public static void validateCardinalityEqualsOne(List<?> childContext, YangConstructType yangChildConstruct,
- YangConstructType yangParentConstruct, String parentName,
- ParserRuleContext parentContext)
- throws ParserException {
-
- if (childContext.isEmpty()) {
- ParserException parserException = new ParserException("YANG file error: Missing \""
- + getYangConstructType(yangChildConstruct) + "\" in \"" + getYangConstructType(yangParentConstruct)
- + " " + parentName + "\".");
- parserException.setLine(parentContext.getStart().getLine());
- parserException.setCharPosition(parentContext.getStart().getCharPositionInLine());
- throw parserException;
- } else if (!childContext.isEmpty() && childContext.size() != 1) {
- Iterator<?> childcontext = childContext.iterator();
- ParserException parserException = new ParserException("YANG file error: \""
- + getYangConstructType(yangChildConstruct) + "\" is present more than once in \""
- + getYangConstructType(yangParentConstruct) + " " + parentName + "\".");
- parserException.setLine(((ParserRuleContext) childcontext.next()).getStart().getLine());
- parserException.setCharPosition(((ParserRuleContext) childcontext.next()).getStart()
- .getCharPositionInLine());
- throw parserException;
- }
- }
-
- /**
- * Checks if a rule occurrences is minimum 1.
- *
- * @param childContext child's context
- * @param yangChildConstruct child construct for whom cardinality is to be
- * validated
- * @param yangParentConstruct parent construct
- * @param parentName parent name
- * @param parentContext parents's context
- * @throws ParserException exception if cardinality check fails
- */
- public static void validateCardinalityNonZero(List<?> childContext, YangConstructType yangChildConstruct,
- YangConstructType yangParentConstruct, String parentName,
- ParserRuleContext parentContext)
- throws ParserException {
-
- if (childContext.isEmpty()) {
- ParserException parserException = new ParserException("YANG file error: Missing \""
- + getYangConstructType(yangChildConstruct) + "\" in \"" + getYangConstructType(yangParentConstruct)
- + " " + parentName + "\".");
-
- parserException.setLine(parentContext.getStart().getLine());
- parserException.setCharPosition(parentContext.getStart().getCharPositionInLine());
- throw parserException;
- }
- }
-
- /**
- * Checks if a either of one construct occurrence.
- *
- * @param child1Context first optional child's context
- * @param yangChild1Construct first child construct for whom cardinality is
- * to be validated
- * @param child2Context second optional child's context
- * @param yangChild2Construct second child construct for whom cardinality is
- * to be validated
- * @param yangParentConstruct parent construct
- * @param parentName parent name
- * @param parentContext parents's context
- * @throws ParserException exception if cardinality check fails
- */
- public static void validateCardinalityEitherOne(List<?> child1Context, YangConstructType yangChild1Construct,
- List<?> child2Context, YangConstructType yangChild2Construct,
- YangConstructType yangParentConstruct, String parentName,
- ParserRuleContext parentContext)
- throws ParserException {
-
- if (child1Context.isEmpty() && child2Context.isEmpty()) {
- ParserException parserException = new ParserException("YANG file error: Either \""
- + getYangConstructType(yangChild1Construct) + "\" or \"" + getYangConstructType(yangChild2Construct)
- + "\" should be present in \"" + getYangConstructType(yangParentConstruct) + " "
- + parentName + "\".");
- parserException.setLine(parentContext.getStart().getLine());
- parserException.setCharPosition(parentContext.getStart().getCharPositionInLine());
- throw parserException;
- }
- }
-}
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ParseTreeErrorListener.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ParseTreeErrorListener.java
deleted file mode 100644
index af81d6f..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ParseTreeErrorListener.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.parserutils;
-
-import org.antlr.v4.runtime.BaseErrorListener;
-import org.antlr.v4.runtime.RecognitionException;
-import org.antlr.v4.runtime.Recognizer;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-
-/**
- * Represent the parse tree error listener.
- * By default, ANTLR sends all errors to standard error, this is changed by
- * providing this new implementation of interface ANTLRErrorListener. The
- * interface has a syntaxError() method that applies to both lexer and parser.
- */
-public class ParseTreeErrorListener extends BaseErrorListener {
-
- @Override
- public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int line, int charPositionInLine,
- String msg, RecognitionException e) {
-
- ParserException parserException = new ParserException(msg);
- parserException.setLine(line);
- parserException.setCharPosition(charPositionInLine);
- throw parserException;
- }
-}
\ No newline at end of file
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/package-info.java b/parser/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/package-info.java
deleted file mode 100644
index 9eafb00..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-/**
- * Provide common utils for parser implementation.
- */
-package org.onosproject.yangutils.parser.impl.parserutils;
\ No newline at end of file
diff --git a/parser/src/main/java/org/onosproject/yangutils/parser/package-info.java b/parser/src/main/java/org/onosproject/yangutils/parser/package-info.java
deleted file mode 100644
index f039e68..0000000
--- a/parser/src/main/java/org/onosproject/yangutils/parser/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-/**
- * Interfaces to process YANG information from ANTLR generated listeners.
- */
-package org.onosproject.yangutils.parser;
diff --git a/parser/src/main/resources/GeneratedYang.g4 b/parser/src/main/resources/GeneratedYang.g4
deleted file mode 100644
index 0362cb0..0000000
--- a/parser/src/main/resources/GeneratedYang.g4
+++ /dev/null
@@ -1,1347 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-/**
- * This is a YANG grammar for parser based on which ANTLR will generate YANG parser.
- */
-
-grammar GeneratedYang;
-import YangLexer;
-
-@header {
-package org.onosproject.yangutils.parser.antlrgencode;
-}
-
- yangfile : moduleStatement EOF
- | subModuleStatement EOF;
-
- /**
- * module-stmt = optsep module-keyword sep identifier-arg-str
- * optsep
- * "{" stmtsep
- * module-header-stmts
- * linkage-stmts
- * meta-stmts
- * revision-stmts
- * body-stmts
- * "}" optsep
- */
-
- moduleStatement : MODULE_KEYWORD identifier LEFT_CURLY_BRACE moduleBody RIGHT_CURLY_BRACE;
-
- moduleBody : moduleHeaderStatement linkageStatements metaStatements revisionStatements bodyStatements;
-
- /**
- * module-header-stmts = ;; these stmts can appear in any order
- * [yang-version-stmt stmtsep]
- * namespace-stmt stmtsep
- * prefix-stmt stmtsep
- */
-
- moduleHeaderStatement : yangVersionStatement? namespaceStatement prefixStatement
- | yangVersionStatement? prefixStatement namespaceStatement
- | namespaceStatement yangVersionStatement? prefixStatement
- | namespaceStatement prefixStatement yangVersionStatement?
- | prefixStatement namespaceStatement yangVersionStatement?
- | prefixStatement yangVersionStatement? namespaceStatement
- ;
-
- /**
- * linkage-stmts = ;; these stmts can appear in any order
- * *(import-stmt stmtsep)
- * *(include-stmt stmtsep)
- */
- linkageStatements : (importStatement
- | includeStatement)*;
-
- /**
- * meta-stmts = ;; these stmts can appear in any order
- * [organization-stmt stmtsep]
- * [contact-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- */
- metaStatements : organizationStatement? contactStatement? descriptionStatement? referenceStatement?
- | organizationStatement? contactStatement? referenceStatement? descriptionStatement?
- | organizationStatement? descriptionStatement? contactStatement? referenceStatement?
- | organizationStatement? descriptionStatement? referenceStatement? contactStatement?
- | organizationStatement? referenceStatement? contactStatement? descriptionStatement?
- | organizationStatement? referenceStatement? descriptionStatement? contactStatement?
- | contactStatement? organizationStatement? descriptionStatement? referenceStatement?
- | contactStatement? organizationStatement? referenceStatement? descriptionStatement?
- | contactStatement? referenceStatement? organizationStatement? descriptionStatement?
- | contactStatement? referenceStatement? descriptionStatement? organizationStatement?
- | contactStatement? descriptionStatement? referenceStatement? organizationStatement?
- | contactStatement? descriptionStatement? organizationStatement? referenceStatement?
- | referenceStatement? contactStatement? organizationStatement? descriptionStatement?
- | referenceStatement? contactStatement? descriptionStatement? organizationStatement?
- | referenceStatement? organizationStatement? contactStatement? descriptionStatement?
- | referenceStatement? organizationStatement? descriptionStatement? contactStatement?
- | referenceStatement? descriptionStatement? organizationStatement? contactStatement?
- | referenceStatement? descriptionStatement? contactStatement? organizationStatement?
- | descriptionStatement? referenceStatement? contactStatement? organizationStatement?
- | descriptionStatement? referenceStatement? organizationStatement? contactStatement?
- | descriptionStatement? contactStatement? referenceStatement? organizationStatement?
- | descriptionStatement? contactStatement? organizationStatement? referenceStatement?
- | descriptionStatement? organizationStatement? contactStatement? referenceStatement?
- | descriptionStatement? organizationStatement? referenceStatement? contactStatement?
- ;
-
- // revision-stmts = *(revision-stmt stmtsep)
- revisionStatements : revisionStatement*;
-
- /**
- * body-stmts = *((extension-stmt /
- * feature-stmt /
- * identity-stmt /
- * typedef-stmt /
- * grouping-stmt /
- * data-def-stmt /
- * augment-stmt /
- * rpc-stmt /
- * notification-stmt /
- * deviation-stmt) stmtsep)
- */
- bodyStatements : (extensionStatement
- | featureStatement
- | identityStatement
- | typedefStatement
- | groupingStatement
- | dataDefStatement
- | augmentStatement
- | rpcStatement
- | notificationStatement
- | deviationStatement
- | compilerAnnotationStatement)*
- ;
-
- /**
- * yang-version-stmt = yang-version-keyword sep yang-version-arg-str
- * optsep stmtend
- */
- yangVersionStatement : YANG_VERSION_KEYWORD version STMTEND;
-
-
- /**
- * namespace-stmt = namespace-keyword sep uri-str optsep stmtend
- * For namespace validation TODO in Listener
- */
- namespaceStatement : NAMESPACE_KEYWORD string STMTEND;
-
- /**
- * prefix-stmt = prefix-keyword sep prefix-arg-str
- * optsep stmtend
- */
- prefixStatement : PREFIX_KEYWORD identifier STMTEND;
-
- /**
- * import-stmt = import-keyword sep identifier-arg-str optsep
- * "{" stmtsep
- * prefix-stmt stmtsep
- * [revision-date-stmt stmtsep]
- * "}"
- */
- importStatement : IMPORT_KEYWORD identifier LEFT_CURLY_BRACE importStatementBody RIGHT_CURLY_BRACE;
-
- importStatementBody : prefixStatement revisionDateStatement?;
-
- // revision-date-stmt = revision-date-keyword sep revision-date stmtend
- revisionDateStatement : REVISION_DATE_KEYWORD dateArgumentString STMTEND;
-
- /**
- * include-stmt = include-keyword sep identifier-arg-str optsep
- * (";" /
- * "{" stmtsep
- * [revision-date-stmt stmtsep]
- * "}")
- */
- includeStatement : INCLUDE_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE revisionDateStatement? RIGHT_CURLY_BRACE);
-
- /**
- * organization-stmt = organization-keyword sep string
- * optsep stmtend
- */
- organizationStatement : ORGANIZATION_KEYWORD string STMTEND;
-
- // contact-stmt = contact-keyword sep string optsep stmtend
- contactStatement : CONTACT_KEYWORD string STMTEND;
-
- // description-stmt = description-keyword sep string optsep stmtend
- descriptionStatement : DESCRIPTION_KEYWORD string STMTEND;
-
- // reference-stmt = reference-keyword sep string optsep stmtend
- referenceStatement : REFERENCE_KEYWORD string STMTEND;
-
- /**
- * revision-stmt = revision-keyword sep revision-date optsep
- * (";" /
- * "{" stmtsep
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * "}")
- */
- revisionStatement : REVISION_KEYWORD dateArgumentString (STMTEND | LEFT_CURLY_BRACE revisionStatementBody RIGHT_CURLY_BRACE);
- revisionStatementBody : descriptionStatement? referenceStatement?;
-
- /**
- * submodule-stmt = optsep submodule-keyword sep identifier-arg-str
- * optsep
- * "{" stmtsep
- * submodule-header-stmts
- * linkage-stmts
- * meta-stmts
- * revision-stmts
- * body-stmts
- * "}" optsep
- */
- subModuleStatement : SUBMODULE_KEYWORD identifier LEFT_CURLY_BRACE submoduleBody RIGHT_CURLY_BRACE;
- submoduleBody : submoduleHeaderStatement linkageStatements metaStatements revisionStatements bodyStatements;
-
- /** submodule-header-stmts =
- * ;; these stmts can appear in any order
- * [yang-version-stmt stmtsep]
- * belongs-to-stmt stmtsep
- */
- submoduleHeaderStatement : yangVersionStatement? belongstoStatement
- | belongstoStatement yangVersionStatement?
- ;
-
- /**
- * belongs-to-stmt = belongs-to-keyword sep identifier-arg-str
- * optsep
- * "{" stmtsep
- * prefix-stmt stmtsep
- * "}"
- */
- belongstoStatement : BELONGS_TO_KEYWORD identifier LEFT_CURLY_BRACE belongstoStatementBody RIGHT_CURLY_BRACE;
- belongstoStatementBody : prefixStatement;
-
- /**
- * extension-stmt = extension-keyword sep identifier-arg-str optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [argument-stmt stmtsep]
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * "}")
- */
- extensionStatement : EXTENSION_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE extensionBody RIGHT_CURLY_BRACE);
- extensionBody : argumentStatement? statusStatement? descriptionStatement? referenceStatement?
- | argumentStatement? statusStatement? referenceStatement? descriptionStatement?
- | argumentStatement? descriptionStatement? statusStatement? referenceStatement?
- | argumentStatement? descriptionStatement? referenceStatement? statusStatement?
- | argumentStatement? referenceStatement? descriptionStatement? statusStatement?
- | argumentStatement? referenceStatement? statusStatement? descriptionStatement?
- | statusStatement? referenceStatement? argumentStatement? descriptionStatement?
- | statusStatement? referenceStatement? descriptionStatement? argumentStatement?
- | statusStatement? descriptionStatement? referenceStatement? argumentStatement?
- | statusStatement? descriptionStatement? argumentStatement? referenceStatement?
- | statusStatement? argumentStatement? referenceStatement? descriptionStatement?
- | statusStatement? argumentStatement? descriptionStatement? referenceStatement?
- | descriptionStatement? argumentStatement? statusStatement? referenceStatement?
- | descriptionStatement? argumentStatement? referenceStatement? statusStatement?
- | descriptionStatement? statusStatement? argumentStatement? referenceStatement?
- | descriptionStatement? statusStatement? referenceStatement? argumentStatement?
- | descriptionStatement? referenceStatement? statusStatement? argumentStatement?
- | descriptionStatement? referenceStatement? argumentStatement? statusStatement?
- | referenceStatement? descriptionStatement? argumentStatement? statusStatement?
- | referenceStatement? descriptionStatement? statusStatement? argumentStatement?
- | referenceStatement? statusStatement? argumentStatement? descriptionStatement?
- | referenceStatement? statusStatement? descriptionStatement? argumentStatement?
- | referenceStatement? argumentStatement? descriptionStatement? statusStatement?
- | referenceStatement? argumentStatement? statusStatement? descriptionStatement?
- ;
-
- /**
- * argument-stmt = argument-keyword sep identifier-arg-str optsep
- * (";" /
- * "{" stmtsep
- * [yin-element-stmt stmtsep]
- * "}")
- */
- argumentStatement : ARGUMENT_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE argumentBody RIGHT_CURLY_BRACE);
- argumentBody : yinElementStatement?;
-
- /**
- * yin-element-stmt = yin-element-keyword sep yin-element-arg-str
- * stmtend
- */
- yinElementStatement : YIN_ELEMENT_KEYWORD (TRUE_KEYWORD | FALSE_KEYWORD) STMTEND;
-
- /**
- * identity-stmt = identity-keyword sep identifier-arg-str optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [base-stmt stmtsep]
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * "}")
- */
- identityStatement : IDENTITY_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE identityBody RIGHT_CURLY_BRACE);
- identityBody : baseStatement? statusStatement? descriptionStatement? referenceStatement?
- | baseStatement? statusStatement? referenceStatement? descriptionStatement?
- | baseStatement? descriptionStatement? statusStatement? referenceStatement?
- | baseStatement? descriptionStatement? referenceStatement? statusStatement?
- | baseStatement? referenceStatement? descriptionStatement? statusStatement?
- | baseStatement? referenceStatement? statusStatement? descriptionStatement?
- | referenceStatement? baseStatement? statusStatement? descriptionStatement?
- | referenceStatement? baseStatement? descriptionStatement? statusStatement?
- | referenceStatement? statusStatement? baseStatement? descriptionStatement?
- | referenceStatement? statusStatement? descriptionStatement? baseStatement?
- | referenceStatement? descriptionStatement? statusStatement? baseStatement?
- | referenceStatement? descriptionStatement? baseStatement? statusStatement?
- | descriptionStatement? referenceStatement? statusStatement? baseStatement?
- | descriptionStatement? referenceStatement? statusStatement? baseStatement?
- | descriptionStatement? referenceStatement? baseStatement? statusStatement?
- | descriptionStatement? statusStatement? baseStatement? referenceStatement?
- | descriptionStatement? statusStatement? referenceStatement? baseStatement?
- | descriptionStatement? baseStatement? referenceStatement? statusStatement?
- | descriptionStatement? baseStatement? statusStatement? referenceStatement?
- | statusStatement? baseStatement? descriptionStatement? referenceStatement?
- | statusStatement? baseStatement? referenceStatement? descriptionStatement?
- | statusStatement? descriptionStatement? baseStatement? referenceStatement?
- | statusStatement? descriptionStatement? referenceStatement? baseStatement?
- | statusStatement? referenceStatement? descriptionStatement? baseStatement?
- | statusStatement? referenceStatement? baseStatement? descriptionStatement?
- ;
-
- /**
- * base-stmt = base-keyword sep identifier-ref-arg-str
- * optsep stmtend*
- * identifier-ref-arg = [prefix ":"] identifier
- */
- baseStatement : BASE_KEYWORD string STMTEND;
-
- /**
- * feature-stmt = feature-keyword sep identifier-arg-str optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * *(if-feature-stmt stmtsep)
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * "}")
- */
- featureStatement : FEATURE_KEYWORD string (STMTEND | LEFT_CURLY_BRACE featureBody RIGHT_CURLY_BRACE);
- featureBody : ifFeatureStatement* statusStatement? descriptionStatement? referenceStatement?
- | ifFeatureStatement* statusStatement? referenceStatement? descriptionStatement?
- | ifFeatureStatement* descriptionStatement? statusStatement? referenceStatement?
- | ifFeatureStatement* descriptionStatement? referenceStatement? statusStatement?
- | ifFeatureStatement* referenceStatement? statusStatement? descriptionStatement?
- | ifFeatureStatement* referenceStatement? descriptionStatement? statusStatement?
- | statusStatement? ifFeatureStatement* descriptionStatement? referenceStatement?
- | statusStatement? ifFeatureStatement* referenceStatement? descriptionStatement?
- | statusStatement? descriptionStatement? ifFeatureStatement* referenceStatement?
- | statusStatement? descriptionStatement? referenceStatement? ifFeatureStatement*
- | statusStatement? referenceStatement? ifFeatureStatement* descriptionStatement?
- | statusStatement? referenceStatement? descriptionStatement? ifFeatureStatement*
- | descriptionStatement? ifFeatureStatement* statusStatement? referenceStatement?
- | descriptionStatement? ifFeatureStatement* referenceStatement? statusStatement?
- | descriptionStatement? statusStatement? ifFeatureStatement* referenceStatement?
- | descriptionStatement? statusStatement? referenceStatement? ifFeatureStatement*
- | descriptionStatement? referenceStatement* statusStatement? ifFeatureStatement*
- | descriptionStatement? referenceStatement* ifFeatureStatement? statusStatement?
- | referenceStatement? ifFeatureStatement* statusStatement? descriptionStatement?
- | referenceStatement? ifFeatureStatement* descriptionStatement? statusStatement?
- | referenceStatement? descriptionStatement? statusStatement? ifFeatureStatement*
- | referenceStatement? descriptionStatement? ifFeatureStatement* statusStatement?
- | referenceStatement? statusStatement? descriptionStatement? ifFeatureStatement*
- | referenceStatement? statusStatement? ifFeatureStatement* descriptionStatement?
- ;
-
- /**
- * data-def-stmt = container-stmt /
- * leaf-stmt /
- * leaf-list-stmt /
- * list-stmt /
- * choice-stmt /
- * anyxml-stmt /
- * uses-stmt
- */
- dataDefStatement : containerStatement
- | leafStatement
- | leafListStatement
- | listStatement
- | choiceStatement
- | anyxmlStatement
- | usesStatement;
-
- /**
- * if-feature-stmt = if-feature-keyword sep identifier-ref-arg-str
- * optsep stmtend
- */
- ifFeatureStatement : IF_FEATURE_KEYWORD string STMTEND;
-
- /**
- * units-stmt = units-keyword sep string optsep stmtend
- */
- unitsStatement : UNITS_KEYWORD string STMTEND;
-
- /**
- * typedef-stmt = typedef-keyword sep identifier-arg-str optsep
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * type-stmt stmtsep
- * [units-stmt stmtsep]
- * [default-stmt stmtsep]
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * "}"
- * TODO : 0..1 occurance to be validated in listener
- */
- typedefStatement : TYPEDEF_KEYWORD identifier LEFT_CURLY_BRACE
- (typeStatement | unitsStatement | defaultStatement | statusStatement | descriptionStatement | referenceStatement)*
- RIGHT_CURLY_BRACE;
-
- /**
- * type-stmt = type-keyword sep identifier-ref-arg-str optsep
- * (";" /
- * "{" stmtsep
- * type-body-stmts
- * "}")
- */
- typeStatement : TYPE_KEYWORD string (STMTEND | LEFT_CURLY_BRACE typeBodyStatements RIGHT_CURLY_BRACE);
-
- /**
- * type-body-stmts = numerical-restrictions /
- * decimal64-specification /
- * string-restrictions /
- * enum-specification /
- * leafref-specification /
- * identityref-specification /
- * instance-identifier-specification /
- * bits-specification /
- * union-specification
- *
- */
- typeBodyStatements : numericalRestrictions | decimal64Specification | stringRestrictions | enumSpecification
- | leafrefSpecification | identityrefSpecification | instanceIdentifierSpecification
- | bitsSpecification | unionSpecification;
-
- /**
- * decimal64-specification = ;; these stmts can appear in any order
- * fraction-digits-stmt
- * [range-stmt]
- */
- decimal64Specification : fractionDigitStatement rangeStatement?;
-
- /**
- * fraction-digits-stmt = fraction-digits-keyword sep
- * fraction-digits-arg-str stmtend
- *
- * fraction-digits-arg-str = < a string that matches the rule
- * fraction-digits-arg >
- *
- * fraction-digits-arg = ("1" ["0" / "1" / "2" / "3" / "4" /
- * "5" / "6" / "7" / "8"])
- * / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9"
- */
- fractionDigitStatement : FRACTION_DIGITS_KEYWORD fraction STMTEND;
-
- /**
- * numerical-restrictions = range-stmt stmtsep
- */
- numericalRestrictions : rangeStatement;
-
- /**
- * range-stmt = range-keyword sep range-arg-str optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [error-message-stmt stmtsep]
- * [error-app-tag-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * "}")
- */
- rangeStatement : RANGE_KEYWORD range (STMTEND | LEFT_CURLY_BRACE commonStatements RIGHT_CURLY_BRACE);
-
- commonStatements : errorMessageStatement? errorAppTagStatement? descriptionStatement? referenceStatement?
- | errorMessageStatement? errorAppTagStatement? referenceStatement? descriptionStatement?
- | errorMessageStatement? descriptionStatement? errorAppTagStatement? referenceStatement?
- | errorMessageStatement? descriptionStatement? referenceStatement? errorAppTagStatement?
- | errorMessageStatement? referenceStatement? errorAppTagStatement? descriptionStatement?
- | errorMessageStatement? referenceStatement? descriptionStatement? errorAppTagStatement?
- | errorAppTagStatement? errorMessageStatement? descriptionStatement? referenceStatement?
- | errorAppTagStatement? errorMessageStatement? referenceStatement? descriptionStatement?
- | errorAppTagStatement? descriptionStatement? descriptionStatement? errorMessageStatement?
- | errorAppTagStatement? descriptionStatement? errorMessageStatement? descriptionStatement?
- | errorAppTagStatement? referenceStatement? errorMessageStatement? descriptionStatement?
- | errorAppTagStatement? referenceStatement? descriptionStatement? errorMessageStatement?
- | descriptionStatement? errorMessageStatement? errorAppTagStatement? referenceStatement?
- | descriptionStatement? errorMessageStatement? referenceStatement? errorAppTagStatement?
- | descriptionStatement? errorAppTagStatement? errorMessageStatement? referenceStatement?
- | descriptionStatement? errorAppTagStatement? referenceStatement? errorMessageStatement?
- | descriptionStatement? referenceStatement? errorMessageStatement? errorAppTagStatement?
- | descriptionStatement? referenceStatement? errorAppTagStatement? errorMessageStatement?
- | referenceStatement? errorMessageStatement? descriptionStatement? errorAppTagStatement?
- | referenceStatement? errorMessageStatement? errorAppTagStatement? descriptionStatement?
- | referenceStatement? errorAppTagStatement? descriptionStatement? errorMessageStatement?
- | referenceStatement? errorAppTagStatement? errorMessageStatement? descriptionStatement?
- | referenceStatement? descriptionStatement? errorMessageStatement? errorAppTagStatement?
- | referenceStatement? descriptionStatement? errorAppTagStatement? errorMessageStatement?
- ;
-
- /**
- * string-restrictions = ;; these stmts can appear in any order
- * [length-stmt stmtsep]
- * *(pattern-stmt stmtsep)
- */
- stringRestrictions : ((lengthStatement)? (patternStatement)*) | ((patternStatement)* (lengthStatement)?);
-
- /**
- * length-stmt = length-keyword sep length-arg-str optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [error-message-stmt stmtsep]
- * [error-app-tag-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * "}")
- */
- lengthStatement : LENGTH_KEYWORD length
- (STMTEND | LEFT_CURLY_BRACE commonStatements RIGHT_CURLY_BRACE);
-
- /**
- * pattern-stmt = pattern-keyword sep string optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [error-message-stmt stmtsep]
- * [error-app-tag-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * "}")
- */
- patternStatement : PATTERN_KEYWORD string (STMTEND | LEFT_CURLY_BRACE commonStatements RIGHT_CURLY_BRACE);
-
- /**
- * default-stmt = default-keyword sep string stmtend
- */
- defaultStatement : DEFAULT_KEYWORD string STMTEND;
-
- /**
- * enum-specification = 1*(enum-stmt stmtsep)
- */
- enumSpecification : enumStatement+;
-
- /**
- * enum-stmt = enum-keyword sep string optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [value-stmt stmtsep]
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * "}")
- */
- enumStatement : ENUM_KEYWORD string (STMTEND | LEFT_CURLY_BRACE enumStatementBody RIGHT_CURLY_BRACE);
-
- enumStatementBody : valueStatement? statusStatement? descriptionStatement? referenceStatement?
- | valueStatement? statusStatement? referenceStatement? descriptionStatement?
- | valueStatement? descriptionStatement? statusStatement? referenceStatement?
- | valueStatement? descriptionStatement? referenceStatement? statusStatement?
- | valueStatement? referenceStatement? statusStatement? descriptionStatement?
- | valueStatement? referenceStatement? descriptionStatement? statusStatement?
- | statusStatement? valueStatement? descriptionStatement? referenceStatement?
- | statusStatement? valueStatement? referenceStatement? descriptionStatement?
- | statusStatement? descriptionStatement? descriptionStatement? valueStatement?
- | statusStatement? descriptionStatement? valueStatement? descriptionStatement?
- | statusStatement? referenceStatement? valueStatement? descriptionStatement?
- | statusStatement? referenceStatement? descriptionStatement? valueStatement?
- | descriptionStatement? valueStatement? statusStatement? referenceStatement?
- | descriptionStatement? valueStatement? referenceStatement? statusStatement?
- | descriptionStatement? statusStatement? valueStatement? referenceStatement?
- | descriptionStatement? statusStatement? referenceStatement? valueStatement?
- | descriptionStatement? referenceStatement? valueStatement? statusStatement?
- | descriptionStatement? referenceStatement? statusStatement? valueStatement?
- | referenceStatement? valueStatement? descriptionStatement? statusStatement?
- | referenceStatement? valueStatement? statusStatement? descriptionStatement?
- | referenceStatement? statusStatement? descriptionStatement? valueStatement?
- | referenceStatement? statusStatement? valueStatement? descriptionStatement?
- | referenceStatement? descriptionStatement? valueStatement? statusStatement?
- | referenceStatement? descriptionStatement? statusStatement? valueStatement?
- ;
-
- /**
- * leafref-specification =
- * ;; these stmts can appear in any order
- * path-stmt stmtsep
- * [require-instance-stmt stmtsep]
- */
- leafrefSpecification : (pathStatement (requireInstanceStatement)?) | ((requireInstanceStatement)? pathStatement);
-
- /**
- * path-stmt = path-keyword sep path-arg-str stmtend
- */
- pathStatement : PATH_KEYWORD path STMTEND;
-
- /**
- * require-instance-stmt = require-instance-keyword sep
- * require-instance-arg-str stmtend
- * require-instance-arg-str = < a string that matches the rule
- * require-instance-arg >
- * require-instance-arg = true-keyword / false-keyword
- */
- requireInstanceStatement : REQUIRE_INSTANCE_KEYWORD requireInstance STMTEND;
-
- /**
- * instance-identifier-specification =
- * [require-instance-stmt stmtsep]
- */
- instanceIdentifierSpecification : requireInstanceStatement?;
-
- /**
- * identityref-specification =
- * base-stmt stmtsep
- */
- identityrefSpecification : baseStatement;
-
- /**
- * union-specification = 1*(type-stmt stmtsep)
- */
- unionSpecification : typeStatement+;
-
- /**
- * bits-specification = 1*(bit-stmt stmtsep)
- */
- bitsSpecification : bitStatement+;
-
- /**
- * bit-stmt = bit-keyword sep identifier-arg-str optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [position-stmt stmtsep]
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * "}"
- * "}")
- */
- bitStatement : BIT_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE bitBodyStatement RIGHT_CURLY_BRACE);
-
- bitBodyStatement : positionStatement? statusStatement? descriptionStatement? referenceStatement?
- | positionStatement? statusStatement? referenceStatement? descriptionStatement?
- | positionStatement? descriptionStatement? statusStatement? referenceStatement?
- | positionStatement? descriptionStatement? referenceStatement? statusStatement?
- | positionStatement? referenceStatement? statusStatement? descriptionStatement?
- | positionStatement? referenceStatement? descriptionStatement? statusStatement?
- | statusStatement? positionStatement? descriptionStatement? referenceStatement?
- | statusStatement? positionStatement? referenceStatement? descriptionStatement?
- | statusStatement? descriptionStatement? descriptionStatement? positionStatement?
- | statusStatement? descriptionStatement? positionStatement? descriptionStatement?
- | statusStatement? referenceStatement? positionStatement? descriptionStatement?
- | statusStatement? referenceStatement? descriptionStatement? positionStatement?
- | descriptionStatement? positionStatement? statusStatement? referenceStatement?
- | descriptionStatement? positionStatement? referenceStatement? statusStatement?
- | descriptionStatement? statusStatement? positionStatement? referenceStatement?
- | descriptionStatement? statusStatement? referenceStatement? positionStatement?
- | descriptionStatement? referenceStatement? positionStatement? statusStatement?
- | descriptionStatement? referenceStatement? statusStatement? positionStatement?
- | referenceStatement? positionStatement? descriptionStatement? statusStatement?
- | referenceStatement? positionStatement? statusStatement? descriptionStatement?
- | referenceStatement? statusStatement? descriptionStatement? positionStatement?
- | referenceStatement? statusStatement? positionStatement? descriptionStatement?
- | referenceStatement? descriptionStatement? positionStatement? statusStatement?
- | referenceStatement? descriptionStatement? statusStatement? positionStatement?
- ;
-
- /**
- * position-stmt = position-keyword sep
- * position-value-arg-str stmtend
- * position-value-arg-str = < a string that matches the rule
- * position-value-arg >
- * position-value-arg = non-negative-integer-value
- */
- positionStatement : POSITION_KEYWORD position STMTEND;
-
- /**
- * status-stmt = status-keyword sep status-arg-str stmtend
- * status-arg-str = < a string that matches the rule
- * status-arg >
- * status-arg = current-keyword /
- * obsolete-keyword /
- * deprecated-keyword
- */
- statusStatement : STATUS_KEYWORD status STMTEND;
-
- /**
- * config-stmt = config-keyword sep
- * config-arg-str stmtend
- * config-arg-str = < a string that matches the rule
- * config-arg >
- * config-arg = true-keyword / false-keyword
- */
- configStatement : CONFIG_KEYWORD config STMTEND;
-
- /**
- * mandatory-stmt = mandatory-keyword sep
- * mandatory-arg-str stmtend
- *
- * mandatory-arg-str = < a string that matches the rule
- * mandatory-arg >
- *
- * mandatory-arg = true-keyword / false-keyword
- */
- mandatoryStatement : MANDATORY_KEYWORD mandatory STMTEND;
-
- /**
- * presence-stmt = presence-keyword sep string stmtend
- */
- presenceStatement : PRESENCE_KEYWORD string STMTEND;
-
- /**
- * ordered-by-stmt = ordered-by-keyword sep
- * ordered-by-arg-str stmtend
- *
- * ordered-by-arg-str = < a string that matches the rule
- * ordered-by-arg >
- *
- * ordered-by-arg = user-keyword / system-keyword
- */
- orderedByStatement : ORDERED_BY_KEYWORD orderedBy STMTEND;
-
- /**
- * must-stmt = must-keyword sep string optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [error-message-stmt stmtsep]
- * [error-app-tag-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * "}")
- */
- mustStatement : MUST_KEYWORD string (STMTEND | LEFT_CURLY_BRACE commonStatements RIGHT_CURLY_BRACE);
-
- /**
- * error-message-stmt = error-message-keyword sep string stmtend
- */
- errorMessageStatement : ERROR_MESSAGE_KEYWORD string STMTEND;
-
- /**
- * error-app-tag-stmt = error-app-tag-keyword sep string stmtend
- */
- errorAppTagStatement : ERROR_APP_TAG_KEYWORD string STMTEND;
-
- /**
- * min-elements-stmt = min-elements-keyword sep
- * min-value-arg-str stmtend
- * min-value-arg-str = < a string that matches the rule
- * min-value-arg >
- * min-value-arg = non-negative-integer-value
- */
- minElementsStatement : MIN_ELEMENTS_KEYWORD minValue STMTEND;
-
- /**
- * max-elements-stmt = max-elements-keyword sep
- * max-value-arg-str stmtend
- * max-value-arg-str = < a string that matches the rule
- * max-value-arg >
- * max-value-arg = unbounded-keyword /
- * positive-integer-value
- */
- maxElementsStatement : MAX_ELEMENTS_KEYWORD maxValue STMTEND;
-
- /**
- * value-stmt = value-keyword sep integer-value stmtend
- */
- valueStatement : VALUE_KEYWORD value STMTEND;
-
- /**
- * grouping-stmt = grouping-keyword sep identifier-arg-str optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * *((typedef-stmt /
- * grouping-stmt) stmtsep)
- * *(data-def-stmt stmtsep)
- * "}")
- * TODO : 0..1 occurance to be checked in listener
- */
- groupingStatement : GROUPING_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE
- (statusStatement | descriptionStatement | referenceStatement | typedefStatement | groupingStatement
- | dataDefStatement)* RIGHT_CURLY_BRACE);
-
- /**
- * container-stmt = container-keyword sep identifier-arg-str optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [when-stmt stmtsep]
- * *(if-feature-stmt stmtsep)
- * *(must-stmt stmtsep)
- * [presence-stmt stmtsep]
- * [config-stmt stmtsep]
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * *((typedef-stmt /
- * grouping-stmt) stmtsep)
- * *(data-def-stmt stmtsep)
- * "}")
- * TODO : 0..1 occurance to be checked in listener
- */
- containerStatement : CONTAINER_KEYWORD identifier
- (STMTEND | LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | mustStatement | presenceStatement | configStatement
- | statusStatement | descriptionStatement | referenceStatement | typedefStatement | groupingStatement
- | dataDefStatement)* RIGHT_CURLY_BRACE);
-
- /**
- * leaf-stmt = leaf-keyword sep identifier-arg-str optsep
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [when-stmt stmtsep]
- * *(if-feature-stmt stmtsep)
- * type-stmt stmtsep
- * [units-stmt stmtsep]
- * *(must-stmt stmtsep)
- * [default-stmt stmtsep]
- * [config-stmt stmtsep]
- * [mandatory-stmt stmtsep]
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * "}"
- * TODO : 0..1 occurance to be checked in listener
- */
- leafStatement : LEAF_KEYWORD identifier LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | typeStatement | unitsStatement
- | mustStatement | defaultStatement | configStatement | mandatoryStatement | statusStatement | descriptionStatement
- | referenceStatement)* RIGHT_CURLY_BRACE;
-
- /**
- * leaf-list-stmt = leaf-list-keyword sep identifier-arg-str optsep
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [when-stmt stmtsep]
- * *(if-feature-stmt stmtsep)
- * type-stmt stmtsep
- * [units-stmt stmtsep]
- * *(must-stmt stmtsep)
- * [config-stmt stmtsep]
- * [min-elements-stmt stmtsep]
- * [max-elements-stmt stmtsep]
- * [ordered-by-stmt stmtsep]
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * "}"
- * TODO : 0..1 occurance to be checked in listener
- */
- leafListStatement : LEAF_LIST_KEYWORD identifier LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | typeStatement
- | unitsStatement | mustStatement | configStatement | minElementsStatement | maxElementsStatement | orderedByStatement
- | statusStatement | descriptionStatement | referenceStatement)* RIGHT_CURLY_BRACE;
-
- /**
- * list-stmt = list-keyword sep identifier-arg-str optsep
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [when-stmt stmtsep]
- * *(if-feature-stmt stmtsep)
- * *(must-stmt stmtsep)
- * [key-stmt stmtsep]
- * *(unique-stmt stmtsep)
- * [config-stmt stmtsep]
- * [min-elements-stmt stmtsep]
- * [max-elements-stmt stmtsep]
- * [ordered-by-stmt stmtsep]
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * *((typedef-stmt /
- * grouping-stmt) stmtsep)
- * 1*(data-def-stmt stmtsep)
- * "}"
- * TODO : 0..1 occurance to be checked in listener
- */
- listStatement : LIST_KEYWORD identifier LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | mustStatement | keyStatement
- | uniqueStatement | configStatement | minElementsStatement | maxElementsStatement | orderedByStatement | statusStatement
- | descriptionStatement | referenceStatement | typedefStatement | groupingStatement| dataDefStatement)* RIGHT_CURLY_BRACE;
-
- /**
- * key-stmt = key-keyword sep key-arg-str stmtend
- */
- keyStatement : KEY_KEYWORD key STMTEND;
-
- /**
- * unique-stmt = unique-keyword sep unique-arg-str stmtend
- */
- uniqueStatement: UNIQUE_KEYWORD unique STMTEND;
-
- /**
- * choice-stmt = choice-keyword sep identifier-arg-str optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [when-stmt stmtsep]
- * *(if-feature-stmt stmtsep)
- * [default-stmt stmtsep]
- * [config-stmt stmtsep]
- * [mandatory-stmt stmtsep]
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * *((short-case-stmt / case-stmt) stmtsep)
- * "}")
- * TODO : 0..1 occurance to be checked in listener
- */
- choiceStatement : CHOICE_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | defaultStatement
- | configStatement | mandatoryStatement | statusStatement | descriptionStatement | referenceStatement | shortCaseStatement
- | caseStatement)* RIGHT_CURLY_BRACE);
-
- /**
- * short-case-stmt = container-stmt /
- * leaf-stmt /
- * leaf-list-stmt /
- * list-stmt /
- * anyxml-stmt
- */
- shortCaseStatement : containerStatement | leafStatement | leafListStatement | listStatement | anyxmlStatement;
-
- /**
- * case-stmt = case-keyword sep identifier-arg-str optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [when-stmt stmtsep]
- * *(if-feature-stmt stmtsep)
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * *(data-def-stmt stmtsep)
- * "}")
- * TODO : 0..1 occurance to be checked in listener
- */
- caseStatement : CASE_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | statusStatement
- | descriptionStatement | referenceStatement | dataDefStatement)* RIGHT_CURLY_BRACE);
-
- /**
- * anyxml-stmt = anyxml-keyword sep identifier-arg-str optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [when-stmt stmtsep]
- * *(if-feature-stmt stmtsep)
- * *(must-stmt stmtsep)
- * [config-stmt stmtsep]
- * [mandatory-stmt stmtsep]
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * "}")
- */
- anyxmlStatement : ANYXML_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement
- | mustStatement | configStatement | mandatoryStatement | statusStatement | descriptionStatement
- | referenceStatement)* RIGHT_CURLY_BRACE);
-
- /**
- * uses-stmt = uses-keyword sep identifier-ref-arg-str optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [when-stmt stmtsep]
- * *(if-feature-stmt stmtsep)
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * *(refine-stmt stmtsep)
- * *(uses-augment-stmt stmtsep)
- * "}")
- * TODO : 0..1 occurance to be checked in listener
- */
- usesStatement : USES_KEYWORD string (STMTEND | LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | statusStatement
- | descriptionStatement | referenceStatement | refineStatement | augmentStatement)* RIGHT_CURLY_BRACE);
-
- /**
- * refine-stmt = refine-keyword sep refine-arg-str optsep
- * (";" /
- * "{" stmtsep
- * (refine-container-stmts /
- * refine-leaf-stmts /
- * refine-leaf-list-stmts /
- * refine-list-stmts /
- * refine-choice-stmts /
- * refine-case-stmts /
- * refine-anyxml-stmts)
- * "}")
- */
- refineStatement : REFINE_KEYWORD refine (STMTEND | LEFT_CURLY_BRACE (refineContainerStatements
- | refineLeafStatements | refineLeafListStatements | refineListStatements | refineChoiceStatements
- | refineCaseStatements | refineAnyxmlStatements) RIGHT_CURLY_BRACE);
-
- /**
- * refine-container-stmts =
- * ;; these stmts can appear in any order
- * *(must-stmt stmtsep)
- * [presence-stmt stmtsep]
- * [config-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * TODO : 0..1 occurance to be checked in listener
- */
- refineContainerStatements : (mustStatement | presenceStatement | configStatement | descriptionStatement | referenceStatement)* ;
-
- /**
- * refine-leaf-stmts = ;; these stmts can appear in any order
- * *(must-stmt stmtsep)
- * [default-stmt stmtsep]
- * [config-stmt stmtsep]
- * [mandatory-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * TODO : 0..1 occurance to be checked in listener
- */
- refineLeafStatements : (mustStatement | defaultStatement | configStatement | mandatoryStatement | descriptionStatement | referenceStatement)*;
-
- /**
- * refine-leaf-list-stmts =
- * ;; these stmts can appear in any order
- * *(must-stmt stmtsep)
- * [config-stmt stmtsep]
- * [min-elements-stmt stmtsep]
- * [max-elements-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * TODO : 0..1 occurance to be checked in listener
- */
- refineLeafListStatements : (mustStatement | configStatement | minElementsStatement | maxElementsStatement | descriptionStatement
- | referenceStatement)*;
-
- /**
- * refine-list-stmts = ;; these stmts can appear in any order
- * *(must-stmt stmtsep)
- * [config-stmt stmtsep]
- * [min-elements-stmt stmtsep]
- * [max-elements-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * TODO : 0..1 occurance to be checked in listener
- */
- refineListStatements : (mustStatement | configStatement | minElementsStatement | maxElementsStatement | descriptionStatement
- | referenceStatement)*;
-
- /**
- * refine-choice-stmts = ;; these stmts can appear in any order
- * [default-stmt stmtsep]
- * [config-stmt stmtsep]
- * [mandatory-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * TODO : 0..1 occurance to be checked in listener
- */
- refineChoiceStatements : (defaultStatement | configStatement | mandatoryStatement | descriptionStatement | referenceStatement)*;
-
- /**
- * refine-case-stmts = ;; these stmts can appear in any order
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- *
- */
- refineCaseStatements : (descriptionStatement | referenceStatement)? | (referenceStatement | descriptionStatement)?;
-
- /**
- * refine-anyxml-stmts = ;; these stmts can appear in any order
- * *(must-stmt stmtsep)
- * [config-stmt stmtsep]
- * [mandatory-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- */
- refineAnyxmlStatements : (mustStatement | configStatement | mandatoryStatement | descriptionStatement
- | referenceStatement)*;
-
- /**
- * augment-stmt = augment-keyword sep augment-arg-str optsep
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [when-stmt stmtsep]
- * *(if-feature-stmt stmtsep)
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * 1*((data-def-stmt stmtsep) /
- * (case-stmt stmtsep))
- * "}"
- * TODO : 0..1 occurance to be checked in listener
- */
- augmentStatement : AUGMENT_KEYWORD augment LEFT_CURLY_BRACE (whenStatement | ifFeatureStatement | statusStatement
- | descriptionStatement | referenceStatement | dataDefStatement | caseStatement)* RIGHT_CURLY_BRACE;
-
- /**
- * when-stmt = when-keyword sep string optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * "}")
- *
- */
- whenStatement : WHEN_KEYWORD string (STMTEND | LEFT_CURLY_BRACE ((descriptionStatement? referenceStatement?)
- | (referenceStatement? descriptionStatement?)) RIGHT_CURLY_BRACE);
-
- /**
- * rpc-stmt = rpc-keyword sep identifier-arg-str optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * *(if-feature-stmt stmtsep)
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * *((typedef-stmt /
- * grouping-stmt) stmtsep)
- * [input-stmt stmtsep]
- * [output-stmt stmtsep]
- * "}")
- */
- rpcStatement : RPC_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE (ifFeatureStatement | statusStatement | descriptionStatement
- | referenceStatement | typedefStatement | groupingStatement | inputStatement | outputStatement)* RIGHT_CURLY_BRACE);
-
- /**
- * input-stmt = input-keyword optsep
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * *((typedef-stmt /
- * grouping-stmt) stmtsep)
- * 1*(data-def-stmt stmtsep)
- * "}"
- */
- inputStatement : INPUT_KEYWORD LEFT_CURLY_BRACE (typedefStatement | groupingStatement | dataDefStatement)* RIGHT_CURLY_BRACE;
-
- /**
- * output-stmt = output-keyword optsep
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * *((typedef-stmt /
- * grouping-stmt) stmtsep)
- * 1*(data-def-stmt stmtsep)
- * "}"
- */
- outputStatement : OUTPUT_KEYWORD LEFT_CURLY_BRACE (typedefStatement | groupingStatement | dataDefStatement)* RIGHT_CURLY_BRACE;
-
- /**
- * notification-stmt = notification-keyword sep
- * identifier-arg-str optsep
- * (";" /
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * *(if-feature-stmt stmtsep)
- * [status-stmt stmtsep]
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * *((typedef-stmt /
- * grouping-stmt) stmtsep)
- * *(data-def-stmt stmtsep)
- * "}")
- * TODO : 0..1 occurance to be checked in listener
- */
- notificationStatement : NOTIFICATION_KEYWORD identifier (STMTEND | LEFT_CURLY_BRACE (ifFeatureStatement
- | statusStatement | descriptionStatement | referenceStatement | typedefStatement
- | groupingStatement | dataDefStatement)* RIGHT_CURLY_BRACE);
-
- /**
- * deviation-stmt = deviation-keyword sep
- * deviation-arg-str optsep
- * "{" stmtsep
- * ;; these stmts can appear in any order
- * [description-stmt stmtsep]
- * [reference-stmt stmtsep]
- * (deviate-not-supported-stmt /
- * 1*(deviate-add-stmt /
- * deviate-replace-stmt /
- * deviate-delete-stmt))
- * "}"
- * TODO : 0..1 occurance to be checked in listener
- */
- deviationStatement: DEVIATION_KEYWORD deviation LEFT_CURLY_BRACE (descriptionStatement | referenceStatement
- | deviateNotSupportedStatement | deviateAddStatement | deviateReplaceStatement
- | deviateDeleteStatement)* RIGHT_CURLY_BRACE;
-
- /**
- * deviate-not-supported-stmt =
- * deviate-keyword sep
- * not-supported-keyword optsep
- * (";" /
- * "{" stmtsep
- * "}")
- */
- deviateNotSupportedStatement: DEVIATE_KEYWORD NOT_SUPPORTED_KEYWORD (STMTEND | LEFT_CURLY_BRACE RIGHT_CURLY_BRACE);
-
- /**
- * deviate-add-stmt = deviate-keyword sep add-keyword optsep
- * (";" /
- * "{" stmtsep
- * [units-stmt stmtsep]
- * *(must-stmt stmtsep)
- * *(unique-stmt stmtsep)
- * [default-stmt stmtsep]
- * [config-stmt stmtsep]
- * [mandatory-stmt stmtsep]
- * [min-elements-stmt stmtsep]
- * [max-elements-stmt stmtsep]
- * "}")
- */
- deviateAddStatement: DEVIATE_KEYWORD ADD_KEYWORD (STMTEND | (LEFT_CURLY_BRACE unitsStatement? mustStatement* uniqueStatement*
- defaultStatement? configStatement? mandatoryStatement? minElementsStatement? maxElementsStatement?
- RIGHT_CURLY_BRACE));
-
- /**
- * deviate-delete-stmt = deviate-keyword sep delete-keyword optsep
- * (";" /
- * "{" stmtsep
- * [units-stmt stmtsep]
- * *(must-stmt stmtsep)
- * *(unique-stmt stmtsep)
- * [default-stmt stmtsep]
- * "}")
- */
- deviateDeleteStatement: DEVIATE_KEYWORD DELETE_KEYWORD (STMTEND
- | (LEFT_CURLY_BRACE unitsStatement? mustStatement* uniqueStatement* defaultStatement? RIGHT_CURLY_BRACE));
-
- /**
- * deviate-replace-stmt = deviate-keyword sep replace-keyword optsep
- * (";" /
- * "{" stmtsep
- * [type-stmt stmtsep]
- * [units-stmt stmtsep]
- * [default-stmt stmtsep]
- * [config-stmt stmtsep]
- * [mandatory-stmt stmtsep]
- * [min-elements-stmt stmtsep]
- * [max-elements-stmt stmtsep]
- * "}")
- */
- deviateReplaceStatement: DEVIATE_KEYWORD REPLACE_KEYWORD (STMTEND | (LEFT_CURLY_BRACE typeStatement? unitsStatement?
- defaultStatement? configStatement? mandatoryStatement? minElementsStatement?
- maxElementsStatement? RIGHT_CURLY_BRACE));
-
- /**
- * compiler-annotation-stmt = prefix:compiler-annotation-keyword string
- * "{"
- * [app-data-structure-stmt stmtsep]
- * [app-extended-stmt stmtsep]
- * "}"
- */
- compilerAnnotationStatement : COMPILER_ANNOTATION string LEFT_CURLY_BRACE
- compilerAnnotationBodyStatement RIGHT_CURLY_BRACE;
-
- compilerAnnotationBodyStatement : appDataStructureStatement? appExtendedStatement? ;
-
- /**
- * app-data-structure-stmt = prefix:app-data-structure-keyword string
- * (";" /
- * "{"
- * [data-structure-key-stmt stmtsep]
- * "}")
- */
- appDataStructureStatement : APP_DATA_STRUCTURE appDataStructure (STMTEND | (LEFT_CURLY_BRACE
- dataStructureKeyStatement? RIGHT_CURLY_BRACE));
-
- /**
- * data-structure-key-stmt = prefix:key-keyword string ";"
- */
- dataStructureKeyStatement : DATA_STRUCTURE_KEY string STMTEND;
-
- /**
- * app-extended-stmt = prefix:app-extended-name-keyword string ";"
- */
- appExtendedStatement : APP_EXTENDED extendedName STMTEND;
-
- string : STRING (PLUS STRING)*
- | IDENTIFIER
- | INTEGER
- | yangConstruct;
-
- identifier : STRING (PLUS STRING)*
- | IDENTIFIER
- | yangConstruct;
-
- dateArgumentString : DATE_ARG
- | STRING (PLUS STRING)*;
-
- version : string;
-
- range : string;
-
- length : string;
-
- path : string;
-
- position : string;
-
- status : string;
-
- config : string;
-
- mandatory : string;
-
- orderedBy : string;
-
- minValue : string;
-
- maxValue : string;
-
- key : string;
-
- unique : string;
-
- refine : string;
-
- requireInstance : string;
-
- augment : string;
-
- deviation : string;
-
- value : string;
-
- fraction : string;
-
- appDataStructure : string;
-
- extendedName : string;
-
- yangConstruct : ANYXML_KEYWORD | ARGUMENT_KEYWORD | AUGMENT_KEYWORD | BASE_KEYWORD | BELONGS_TO_KEYWORD
- | BIT_KEYWORD | CASE_KEYWORD | CHOICE_KEYWORD | CONFIG_KEYWORD | CONTACT_KEYWORD | CONTAINER_KEYWORD
- | DEFAULT_KEYWORD | DESCRIPTION_KEYWORD | ENUM_KEYWORD | ERROR_APP_TAG_KEYWORD | ERROR_MESSAGE_KEYWORD
- | EXTENSION_KEYWORD | DEVIATION_KEYWORD | DEVIATE_KEYWORD | FEATURE_KEYWORD
- | FRACTION_DIGITS_KEYWORD | GROUPING_KEYWORD | IDENTITY_KEYWORD | IF_FEATURE_KEYWORD
- | IMPORT_KEYWORD | INCLUDE_KEYWORD | INPUT_KEYWORD | KEY_KEYWORD | LEAF_KEYWORD | LEAF_LIST_KEYWORD
- | LENGTH_KEYWORD | LIST_KEYWORD | MANDATORY_KEYWORD | MAX_ELEMENTS_KEYWORD | MIN_ELEMENTS_KEYWORD
- | MODULE_KEYWORD | MUST_KEYWORD | NAMESPACE_KEYWORD | NOTIFICATION_KEYWORD | ORDERED_BY_KEYWORD
- | ORGANIZATION_KEYWORD | OUTPUT_KEYWORD | PATH_KEYWORD | PATTERN_KEYWORD | POSITION_KEYWORD
- | PREFIX_KEYWORD | PRESENCE_KEYWORD | RANGE_KEYWORD | REFERENCE_KEYWORD | REFINE_KEYWORD
- | REQUIRE_INSTANCE_KEYWORD | REVISION_KEYWORD | REVISION_DATE_KEYWORD | RPC_KEYWORD
- | STATUS_KEYWORD | SUBMODULE_KEYWORD | TYPE_KEYWORD | TYPEDEF_KEYWORD | UNIQUE_KEYWORD
- | UNITS_KEYWORD | USES_KEYWORD | VALUE_KEYWORD | WHEN_KEYWORD | YANG_VERSION_KEYWORD
- | YIN_ELEMENT_KEYWORD | ADD_KEYWORD | CURRENT_KEYWORD | DELETE_KEYWORD | DEPRECATED_KEYWORD
- | FALSE_KEYWORD | MAX_KEYWORD | MIN_KEYWORD | NOT_SUPPORTED_KEYWORD | OBSOLETE_KEYWORD
- | REPLACE_KEYWORD | SYSTEM_KEYWORD | TRUE_KEYWORD | UNBOUNDED_KEYWORD | USER_KEYWORD
- | COMPILER_ANNOTATION_KEYWORD | APP_DATA_STRUCTURE_KEYWORD | DATA_STRUCTURE_KEYWORD
- | APP_EXTENDED_KEYWORD;
diff --git a/plugin/buck/pom.xml b/plugin/buck/pom.xml
deleted file mode 100644
index 783e897..0000000
--- a/plugin/buck/pom.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<!--
- ~ Copyright 2016-present Open Networking Laboratory
- ~
- ~ Licensed 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
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License 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.
- -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-yang-plugins</artifactId>
- <version>1.12-SNAPSHOT</version>
- </parent>
-
- <artifactId>onos-yang-buck-plugin</artifactId>
- <packaging>jar</packaging>
-
- <dependencies>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>buck-api</artifactId>
- <version>0.1-SNAPSHOT</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-yang-tool</artifactId>
- <version>1.12-SNAPSHOT</version>
- </dependency>
- </dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-shade-plugin</artifactId>
- <version>2.4.3</version>
- <executions>
- <execution>
- <phase>package</phase>
- <goals>
- <goal>shade</goal>
- </goals>
- </execution>
- </executions>
- <configuration>
- <artifactSet>
- <excludes>
- <exclude>com.google.guava:guava</exclude>
- </excludes>
- </artifactSet>
- </configuration>
- </plugin>
- </plugins>
- </build>
-</project>
diff --git a/plugin/buck/src/main/java/org/onosproject/yangutils/plugin/buck/YangGenerator.java b/plugin/buck/src/main/java/org/onosproject/yangutils/plugin/buck/YangGenerator.java
deleted file mode 100644
index b14a54a..0000000
--- a/plugin/buck/src/main/java/org/onosproject/yangutils/plugin/buck/YangGenerator.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.plugin.buck;
-
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.tool.CallablePlugin;
-import org.onosproject.yangutils.tool.YangToolManager;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-import static java.util.stream.Collectors.toList;
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.parseJarFile;
-import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
-import static org.onosproject.yangutils.utils.UtilConstants.YANG_RESOURCES;
-
-/**
- * Generates Java sources from a Yang model.
- */
-public class YangGenerator implements CallablePlugin {
-
- private final List<File> models;
- private final List<String> depJar;
- private String outputDirectory;
- private final String DEFAULT_JAR_RES_PATH = SLASH + YANG_RESOURCES + SLASH;
-
- YangGenerator(List<File> models, String outputDirectory, List<String> depJar) {
- this.models = models;
- this.depJar = depJar;
- this.outputDirectory = outputDirectory + SLASH;
- }
-
- public void execute() throws YangParsingException {
- List<String> files = getListOfFile();
- synchronized (files) {
- try {
- YangPluginConfig config = new YangPluginConfig();
- config.setCodeGenDir(outputDirectory);
- config.resourceGenDir(outputDirectory + DEFAULT_JAR_RES_PATH);
- //for inter-jar linking.
- List<YangNode> dependentSchema = new ArrayList<>();
- for (String jar : depJar) {
- dependentSchema.addAll(parseJarFile(jar, outputDirectory));
- }
- //intra jar file linking.
- YangToolManager manager = new YangToolManager();
- manager.compileYangFiles(manager.createYangFileInfoSet(files),
- dependentSchema, config, this);
- } catch (Exception e) {
- throw new YangParsingException(e);
- }
- }
- }
-
- private List<String> getListOfFile() {
- List<String> files = new ArrayList<>();
- if (models != null) {
- synchronized (models) {
- files.addAll(models.stream().map(File::toString)
- .collect(toList()));
- }
- }
- return files;
- }
-
- @Override
- public void addGeneratedCodeToBundle() {
- //TODO: add functionality.
- }
-
- @Override
- public void addCompiledSchemaToBundle() throws IOException {
- //TODO: add functionality.
- }
-
- @Override
- public void addYangFilesToBundle() throws IOException {
- //TODO: add functionality.
- }
-}
diff --git a/plugin/buck/src/main/java/org/onosproject/yangutils/plugin/buck/YangLibrary.java b/plugin/buck/src/main/java/org/onosproject/yangutils/plugin/buck/YangLibrary.java
deleted file mode 100644
index 5d0550c..0000000
--- a/plugin/buck/src/main/java/org/onosproject/yangutils/plugin/buck/YangLibrary.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.plugin.buck;
-
-import com.facebook.buck.jvm.java.JarDirectoryStep;
-import com.facebook.buck.model.BuildTargets;
-import com.facebook.buck.rules.AbstractBuildRule;
-import com.facebook.buck.rules.AddToRuleKey;
-import com.facebook.buck.rules.BuildContext;
-import com.facebook.buck.rules.BuildRuleParams;
-import com.facebook.buck.rules.BuildableContext;
-import com.facebook.buck.rules.SourcePath;
-import com.facebook.buck.rules.SourcePathResolver;
-import com.facebook.buck.step.Step;
-import com.facebook.buck.step.fs.MakeCleanDirectoryStep;
-import com.facebook.buck.step.fs.MkdirStep;
-import com.facebook.buck.step.fs.RmStep;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSortedSet;
-
-import javax.annotation.Nullable;
-import java.io.File;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.List;
-import java.util.stream.Collectors;
-
-import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
-import static org.onosproject.yangutils.utils.UtilConstants.YANG;
-
-/**
- * Buck rule to define a library built form a Yang model.
- */
-public class YangLibrary extends AbstractBuildRule {
-
- @AddToRuleKey
- private final ImmutableSortedSet<SourcePath> srcs;
- private final BuildRuleParams params;
-
- private final Path genSrcsDirectory;
- private final Path outputDirectory;
- private final Path output;
-
- public YangLibrary(
- BuildRuleParams params,
- SourcePathResolver resolver,
- ImmutableSortedSet<SourcePath> srcs) {
- super(params, resolver);
- this.srcs = srcs;
- this.params = params;
- genSrcsDirectory = BuildTargets.getGenPath(getProjectFilesystem(),
- params.getBuildTarget(),
- "%s__yang-gen");
- outputDirectory = BuildTargets.getGenPath(getProjectFilesystem(),
- params.getBuildTarget(),
- "%s__yang-output");
- output = Paths.get(String.format("%s/%s-sources.jar",
- outputDirectory,
- params.getBuildTarget().getShortNameAndFlavorPostfix()));
- }
-
- @Override
- public ImmutableList<Step> getBuildSteps(BuildContext buildContext, BuildableContext buildableContext) {
- ImmutableList.Builder<Step> steps = ImmutableList.builder();
-
- // Delete the old output for this rule, if it exists.
- steps.add(
- new RmStep(
- getProjectFilesystem(),
- getPathToOutput(),
- /* shouldForceDeletion */ true,
- /* shouldRecurse */ true));
-
- // Make sure that the directory to contain the output file exists. Rules get output to a
- // directory named after the base path, so we don't want to nuke the entire directory.
- steps.add(new MkdirStep(getProjectFilesystem(), outputDirectory));
-
- steps.add(new MakeCleanDirectoryStep(getProjectFilesystem(), genSrcsDirectory));
-
- List<Path> sourcePaths = srcs.stream()
- .map(s -> getResolver().getRelativePath(s))
- .collect(Collectors.toList());
-
- steps.add(new YangStep(getProjectFilesystem(), sourcePaths, genSrcsDirectory,
- params.getDeps()));
-
- steps.add(new JarDirectoryStep(
- getProjectFilesystem(),
- output,
- ImmutableSortedSet.of(genSrcsDirectory),
- null,
- null));
-
- return steps.build();
- }
-
- @Nullable
- @Override
- public Path getPathToOutput() {
- return output;
- }
-
-
- /**
- * Returns generated sources directory.
- *
- * @return generated sources directory
- */
- public Path getGenSrcsDirectory() {
- File dir = new File(genSrcsDirectory.toString() + SLASH + YANG);
- dir.mkdirs();
- return genSrcsDirectory;
- }
-
-}
diff --git a/plugin/buck/src/main/java/org/onosproject/yangutils/plugin/buck/YangLibraryDescription.java b/plugin/buck/src/main/java/org/onosproject/yangutils/plugin/buck/YangLibraryDescription.java
deleted file mode 100644
index 83b1370..0000000
--- a/plugin/buck/src/main/java/org/onosproject/yangutils/plugin/buck/YangLibraryDescription.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.plugin.buck;
-
-import com.facebook.buck.cli.BuckConfig;
-import com.facebook.buck.jvm.java.CalculateAbi;
-import com.facebook.buck.jvm.java.DefaultJavaLibrary;
-import com.facebook.buck.jvm.java.JavaBuckConfig;
-import com.facebook.buck.jvm.java.JavaOptions;
-import com.facebook.buck.jvm.java.JavacOptions;
-import com.facebook.buck.jvm.java.JavacOptionsAmender;
-import com.facebook.buck.jvm.java.JavacOptionsFactory;
-import com.facebook.buck.jvm.java.JavacToJarStepFactory;
-import com.facebook.buck.jvm.java.JvmLibraryArg;
-import com.facebook.buck.model.BuildTarget;
-import com.facebook.buck.model.BuildTargets;
-import com.facebook.buck.model.Flavor;
-import com.facebook.buck.model.Flavored;
-import com.facebook.buck.model.ImmutableFlavor;
-import com.facebook.buck.model.UnflavoredBuildTarget;
-import com.facebook.buck.parser.NoSuchBuildTargetException;
-import com.facebook.buck.rules.BuildRule;
-import com.facebook.buck.rules.BuildRuleParams;
-import com.facebook.buck.rules.BuildRuleResolver;
-import com.facebook.buck.rules.BuildRuleType;
-import com.facebook.buck.rules.BuildTargetSourcePath;
-import com.facebook.buck.rules.Description;
-import com.facebook.buck.rules.PathSourcePath;
-import com.facebook.buck.rules.SourcePath;
-import com.facebook.buck.rules.SourcePathResolver;
-import com.facebook.buck.rules.SourcePaths;
-import com.facebook.buck.rules.TargetGraph;
-import com.google.common.base.Optional;
-import com.google.common.base.Suppliers;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.ImmutableSortedSet;
-
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.regex.Pattern;
-import java.util.stream.Collectors;
-
-import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
-import static org.onosproject.yangutils.utils.UtilConstants.YANG;
-
-/**
- * Description of a Buck Yang Library.
- */
-public class YangLibraryDescription
- implements Description<YangLibraryDescription.Arg>, Flavored {
- public static final BuildRuleType TYPE = BuildRuleType.of("yang_library");
- public static final Flavor SOURCES = ImmutableFlavor.of("srcs");
-
- private final JavacOptions defaultJavacOptions;
- private final JavaOptions defaultJavaOptions;
-
- public YangLibraryDescription(BuckConfig config) {
- JavaBuckConfig javaConfig = new JavaBuckConfig(config);
- defaultJavacOptions = javaConfig.getDefaultJavacOptions();
- defaultJavaOptions = javaConfig.getDefaultJavaOptions();
- }
-
- @Override
- public BuildRuleType getBuildRuleType() {
- return TYPE;
- }
-
- @Override
- public Arg createUnpopulatedConstructorArg() {
- return new Arg();
- }
-
- @Override
- public <A extends Arg> BuildRule createBuildRule(TargetGraph targetGraph,
- BuildRuleParams params,
- BuildRuleResolver resolver,
- A args)
- throws NoSuchBuildTargetException {
-
- SourcePathResolver pathResolver = new SourcePathResolver(resolver);
-
- UnflavoredBuildTarget unflavoredBuildTarget =
- params.getBuildTarget().getUnflavoredBuildTarget();
- BuildRuleParams yangParams = params.copyWithBuildTarget(
- BuildTargets.createFlavoredBuildTarget(
- unflavoredBuildTarget, SOURCES));
- BuildRule yangLib = resolver.addToIndex(new YangLibrary(yangParams, pathResolver, args.srcs));
-
- if (params.getBuildTarget().getFlavors().contains(SOURCES)) {
- return yangLib;
- }
-
- JavacOptions javacOptions = JavacOptionsFactory.create(
- defaultJavacOptions,
- params,
- resolver,
- pathResolver,
- args
- );
-
-
- // Create to main compile rule.
- BuildRuleParams javaParams = params.copyWithChanges(
- params.getBuildTarget(),
- Suppliers.ofInstance(
- ImmutableSortedSet.<BuildRule>naturalOrder()
- .add(yangLib)
-// .addAll(deps)
- //FIXME remove when we figure out compile time deps
- .addAll((args.deps.or(ImmutableSortedSet.<BuildTarget>of())).stream().map(resolver::getRule).collect(Collectors.toList()))
-// .addAll(BuildRules.getExportedRules(deps))
- .addAll(pathResolver.filterBuildRuleInputs(javacOptions.getInputs(pathResolver)))
- .build()),
- Suppliers.ofInstance(ImmutableSortedSet.<BuildRule>of()));
-
- BuildTarget abiJarTarget = params.getBuildTarget().withAppendedFlavors(CalculateAbi.FLAVOR);
-
- //Add yang meta data resources to generated jar file resources.
-
- Path rscRoot = ((YangLibrary) yangLib).getGenSrcsDirectory();
- Path resPath = Paths.get(rscRoot + SLASH + YANG);
-
- SourcePath path = new PathSourcePath(params.getProjectFilesystem(),
- resPath);
-
- DefaultJavaLibrary library =
- resolver.addToIndex(
- new DefaultJavaLibrary(
- javaParams,
- pathResolver,
- ImmutableSet.of(SourcePaths.getToBuildTargetSourcePath().apply(yangLib)),
- /* resources */ImmutableSet.of(path),
- javacOptions.getGeneratedSourceFolderName(),
- /* proguardConfig */ Optional.<SourcePath>absent(),
- /* postprocessClassesCommands */ ImmutableList.<String>of(),
- /* exportedDeps */ ImmutableSortedSet.<BuildRule>of(),
- /* providedDeps */ ImmutableSortedSet.<BuildRule>of(),
- /* abiJar */ new BuildTargetSourcePath(abiJarTarget),
- javacOptions.trackClassUsage(),
- /* additionalClasspathEntries */ ImmutableSet.<Path>of(),
- new JavacToJarStepFactory(javacOptions, JavacOptionsAmender.IDENTITY),
- /* resourcesRoot */ Optional.<Path>of(rscRoot),
- /* manifestFile */ Optional.absent(),
- /* mavenCoords */ Optional.<String>absent(),
- /* tests */ ImmutableSortedSet.<BuildTarget>of(),
- /* classesToRemoveFromJar */ ImmutableSet.<Pattern>of()));
-
- resolver.addToIndex(
- CalculateAbi.of(
- abiJarTarget,
- pathResolver,
- params,
- new BuildTargetSourcePath(library.getBuildTarget())));
-
- return library;
- }
-
- @Override
- public boolean hasFlavors(ImmutableSet<Flavor> flavors) {
- return flavors.isEmpty() || flavors.contains(SOURCES);
- }
-
- public static class Arg extends JvmLibraryArg {
- public ImmutableSortedSet<SourcePath> srcs;
- public Optional<ImmutableSortedSet<BuildTarget>> deps;
-
- //TODO other params here
- }
-
-}
diff --git a/plugin/buck/src/main/java/org/onosproject/yangutils/plugin/buck/YangParsingException.java b/plugin/buck/src/main/java/org/onosproject/yangutils/plugin/buck/YangParsingException.java
deleted file mode 100644
index da1765b..0000000
--- a/plugin/buck/src/main/java/org/onosproject/yangutils/plugin/buck/YangParsingException.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.onosproject.yangutils.plugin.buck;
-
-/**
- * Used to signal a problem parsing a Yang model.
- */
-public class YangParsingException extends Exception {
-
- /**
- * Creates a YangParsingException based on another exception.
- * @param t exception from the parser
- */
- public YangParsingException (Throwable t) {
- super(t);
- }
-
-}
diff --git a/plugin/buck/src/main/java/org/onosproject/yangutils/plugin/buck/YangStep.java b/plugin/buck/src/main/java/org/onosproject/yangutils/plugin/buck/YangStep.java
deleted file mode 100644
index d795d8c..0000000
--- a/plugin/buck/src/main/java/org/onosproject/yangutils/plugin/buck/YangStep.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.plugin.buck;
-
-import com.facebook.buck.io.ProjectFilesystem;
-import com.facebook.buck.model.UnflavoredBuildTarget;
-import com.facebook.buck.rules.BuildRule;
-import com.facebook.buck.step.AbstractExecutionStep;
-import com.facebook.buck.step.ExecutionContext;
-import com.facebook.buck.step.StepExecutionResult;
-import com.google.common.collect.ImmutableSortedSet;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.Path;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
-
-import static org.onosproject.yangutils.utils.UtilConstants.JAR;
-import static org.onosproject.yangutils.utils.UtilConstants.LIB;
-import static org.onosproject.yangutils.utils.UtilConstants.LIB_PATH;
-import static org.onosproject.yangutils.utils.UtilConstants.OUT;
-import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
-import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
-
-/**
- * Buck build step to trigger Yang Java source file generation.
- */
-public class YangStep extends AbstractExecutionStep {
-
- private static final String DESCRIPTION = "yang-compile";
- private final ImmutableSortedSet<BuildRule> deps;
- private final ProjectFilesystem filesystem;
- private final List<Path> srcs;
- private final Path output;
-
- YangStep(ProjectFilesystem filesystem,
- List<Path> srcs,
- Path genSourcesDirectory, ImmutableSortedSet<BuildRule> deps) {
- super(DESCRIPTION);
- this.filesystem = filesystem;
- this.srcs = srcs;
- this.deps = deps;
- this.output = genSourcesDirectory;
- }
-
- @Override
- public StepExecutionResult execute(ExecutionContext executionContext)
- throws IOException, InterruptedException {
-
- List<File> sourceFiles = srcs.stream().map(Path::toFile)
- .collect(Collectors.toList());
- try {
- new YangGenerator(sourceFiles, output.toString(), getJarPaths())
- .execute();
- return StepExecutionResult.SUCCESS;
- } catch (YangParsingException e) {
- executionContext.getConsole().printErrorText(e.getMessage());
- return StepExecutionResult.ERROR;
- }
- }
-
- private List<String> getJarPaths() {
- StringBuilder builder;
- List<String> depJarPaths = new ArrayList<>();
- String[] array;
- UnflavoredBuildTarget uBt;
- if (deps != null) {
- for (BuildRule rule : deps) {
- if (!rule.getBuildTarget().getFullyQualifiedName()
- .contains(LIB_PATH)) {
- builder = new StringBuilder();
- //build absolute path for jar file
- builder.append(filesystem.getRootPath().toString()).append(SLASH)
- .append(filesystem.getBuckPaths().getGenDir())
- .append(SLASH);
- uBt = rule.getBuildTarget().getUnflavoredBuildTarget();
- array = uBt.getBaseName().split(SLASH);
- for (int i = 2; i < array.length; i++) {
- builder.append(array[i]).append(SLASH);
- }
- builder.append(LIB).append(uBt.getShortName())
- .append(OUT).append(SLASH)
- .append(uBt.getShortName()).append(PERIOD + JAR);
- depJarPaths.add(builder.toString());
- }
- }
- }
- return depJarPaths;
- }
-}
diff --git a/plugin/maven/pom.xml b/plugin/maven/pom.xml
deleted file mode 100644
index db4920b..0000000
--- a/plugin/maven/pom.xml
+++ /dev/null
@@ -1,155 +0,0 @@
-<!--
- ~ Copyright 2016-present Open Networking Laboratory
- ~
- ~ Licensed 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
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License 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.
- -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-yang-plugins</artifactId>
- <version>1.12-SNAPSHOT</version>
- </parent>
-
- <artifactId>onos-yang-maven-plugin</artifactId>
- <version>1.12-SNAPSHOT</version>
- <packaging>maven-plugin</packaging>
-
- <dependencies>
- <dependency>
- <groupId>org.apache.maven</groupId>
- <artifactId>maven-core</artifactId>
- <version>3.3.9</version>
- </dependency>
- <dependency>
- <groupId>org.apache.maven</groupId>
- <artifactId>maven-plugin-api</artifactId>
- <version>3.3.9</version>
- </dependency>
- <dependency>
- <groupId>org.apache.maven.plugin-tools</groupId>
- <artifactId>maven-plugin-annotations</artifactId>
- <version>3.4</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-scr-plugin</artifactId>
- <version>1.21.0</version>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.maven</groupId>
- <artifactId>maven-artifact</artifactId>
- <version>3.3.9</version>
- </dependency>
- <dependency>
- <groupId>org.apache.maven</groupId>
- <artifactId>maven-project</artifactId>
- <version>3.0-alpha-2</version>
- </dependency>
- <dependency>
- <groupId>org.apache.maven</groupId>
- <artifactId>maven-model</artifactId>
- <version>3.3.9</version>
- </dependency>
- <dependency>
- <groupId>org.sonatype.plexus</groupId>
- <artifactId>plexus-build-api</artifactId>
- <version>0.0.7</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>build-helper-maven-plugin</artifactId>
- <version>1.10</version>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- <version>1.7.21</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.12</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-yang-tool</artifactId>
- <version>1.12-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-yang-utils-parser</artifactId>
- <version>1.12-SNAPSHOT</version>
- </dependency>
- </dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>build-helper-maven-plugin</artifactId>
- <version>1.10</version>
- <executions>
- <execution>
- <id>add-source</id>
- <phase>generate-sources</phase>
- <goals>
- <goal>add-source</goal>
- </goals>
- <configuration>
- <sources>
- <source>
- target/generated-sources/org/onosproject/yangutils/parser/antlrgencode
- </source>
- <sourceDirectory>
- target/generated-sources/org/onosproject/yangutils/parser/antlrgencode
- </sourceDirectory>
- </sources>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-plugin-plugin</artifactId>
- <version>3.4</version>
- <configuration>
- <skipErrorNoDescriptorsFound>true
- </skipErrorNoDescriptorsFound>
- </configuration>
- <executions>
- <execution>
- <phase>generate-sources</phase>
- <goals>
- <goal>descriptor</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <version>2.5.4</version>
- <extensions>true</extensions>
- </plugin>
- </plugins>
- </build>
-</project>
diff --git a/plugin/maven/src/main/java/org/onosproject/yangutils/plugin/manager/YangPluginUtils.java b/plugin/maven/src/main/java/org/onosproject/yangutils/plugin/manager/YangPluginUtils.java
deleted file mode 100644
index 82b1901..0000000
--- a/plugin/maven/src/main/java/org/onosproject/yangutils/plugin/manager/YangPluginUtils.java
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.plugin.manager;
-
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.model.Dependency;
-import org.apache.maven.model.Plugin;
-import org.apache.maven.model.Resource;
-import org.apache.maven.project.MavenProject;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.slf4j.Logger;
-import org.sonatype.plexus.build.incremental.BuildContext;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.parseJarFile;
-import static org.onosproject.yangutils.tool.YangToolManager.DEFAULT_JAR_RES_PATH;
-import static org.onosproject.yangutils.utils.UtilConstants.COLON;
-import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.HYPHEN;
-import static org.onosproject.yangutils.utils.UtilConstants.JAR;
-import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
-import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
-import static org.onosproject.yangutils.utils.UtilConstants.TEMP;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getPackageDirPathFromJavaJPackage;
-import static org.slf4j.LoggerFactory.getLogger;
-
-/**
- * Represents YANG plugin utilities.
- */
-public final class YangPluginUtils {
-
- private static final Logger log = getLogger(YangPluginUtils.class);
-
- private static final String TEXT_FILE_EXTENSION = ".txt";
- private static final String VERSION_META_DATA = "VersionMetaData";
- private static final String PLUGIN_ARTIFACT = "onos-yang-maven-plugin";
-
- private YangPluginUtils() {
- }
-
- /**
- * Adds generated source directory to the compilation root.
- *
- * @param source directory
- * @param project current maven project
- * @param context current build context
- */
- static void addToCompilationRoot(String source, MavenProject project, BuildContext context) {
- project.addCompileSourceRoot(source);
- context.refresh(project.getBasedir());
- log.info("Source directory added to compilation root: " + source);
- }
-
- /**
- * Copies YANG files to the current project's output directory.
- *
- * @param outputDir project's output directory
- * @param project maven project
- * @throws IOException when fails to copy files to destination resource directory
- */
- static void copyYangFilesToTarget(String outputDir, MavenProject project)
- throws IOException {
-
- addToProjectResource(outputDir + SLASH + TEMP + SLASH, project);
- }
-
- /**
- * Serializes data-model.
- *
- * @param directory base directory for serialized files
- * @param project maven project
- * @param operation true if need to add to resource
- * @throws IOException when fails to do IO operations
- */
- public static void serializeDataModel(String directory,
- MavenProject project,
- boolean operation)
- throws IOException {
-
- String serFileDirPath = directory + DEFAULT_JAR_RES_PATH;
- File dir = new File(serFileDirPath);
- dir.mkdirs();
-
- if (operation) {
- addToProjectResource(directory + SLASH + TEMP + SLASH, project);
- }
-
- if (operation) {
- addVersionMetaDataFile(project, serFileDirPath);
- }
- }
-
- /**
- * Adds version meta data files for YSR to know version of YANG tools.
- *
- * @param project maven project
- * @param dir directory
- * @throws IOException when fails to do IO operations
- */
- private static void addVersionMetaDataFile(MavenProject project, String dir)
- throws IOException {
- List<Plugin> plugins = project.getBuildPlugins();
- Iterator<Plugin> it = plugins.iterator();
- Plugin plugin = it.next();
- String data = EMPTY_STRING;
- while (it.hasNext()) {
- if (plugin.getArtifactId().equals(PLUGIN_ARTIFACT)) {
- data = plugin.getGroupId() + COLON + plugin.getArtifactId()
- + COLON + plugin.getVersion();
- }
- plugin = it.next();
- }
- if (data.equals(EMPTY_STRING)) {
- throw new IOException("Invalid artifact for " + PLUGIN_ARTIFACT);
- }
- String verFileName = dir + VERSION_META_DATA + TEXT_FILE_EXTENSION;
- PrintWriter out = new PrintWriter(verFileName);
- out.print(data);
- out.close();
- }
-
- /**
- * Returns list of jar path.
- *
- * @param project maven project
- * @param localRepository local repository
- * @param remoteRepos remote repository
- * @return list of jar paths
- */
- private static List<String> resolveDependencyJarPath(MavenProject project, ArtifactRepository localRepository,
- List<ArtifactRepository> remoteRepos) {
-
- StringBuilder path = new StringBuilder();
- List<String> jarPaths = new ArrayList<>();
- for (Object obj : project.getDependencies()) {
-
- Dependency dependency = (Dependency) obj;
- path.append(localRepository.getBasedir());
- path.append(SLASH);
- path.append(getPackageDirPathFromJavaJPackage(dependency.getGroupId()));
- path.append(SLASH);
- path.append(dependency.getArtifactId());
- path.append(SLASH);
- path.append(dependency.getVersion());
- path.append(SLASH);
- path.append(dependency.getArtifactId() + HYPHEN + dependency.getVersion() + PERIOD + JAR);
- File jarFile = new File(path.toString());
- if (jarFile.exists()) {
- jarPaths.add(path.toString());
- }
- path.delete(0, path.length());
- }
-
- for (ArtifactRepository repo : remoteRepos) {
- // TODO: add resolver for remote repo.
- }
- return jarPaths;
- }
-
- /**
- * Resolves inter jar dependencies.
- *
- * @param project current maven project
- * @param localRepository local maven repository
- * @param remoteRepos list of remote repository
- * @param directory directory for serialized files
- * @return list of resolved datamodel nodes
- * @throws IOException when fails to do IO operations
- */
- static List<YangNode> resolveInterJarDependencies(MavenProject project, ArtifactRepository localRepository,
- List<ArtifactRepository> remoteRepos, String directory)
- throws IOException {
-
- List<String> dependenciesJarPaths = resolveDependencyJarPath(project, localRepository, remoteRepos);
- List<YangNode> resolvedDataModelNodes = new ArrayList<>();
- for (String dependency : dependenciesJarPaths) {
- resolvedDataModelNodes.addAll(parseJarFile(dependency, directory));
- }
- return resolvedDataModelNodes;
- }
-
- /* Adds directory to resources of project */
- private static void addToProjectResource(String dir, MavenProject project) {
- Resource rsc = new Resource();
- rsc.setDirectory(dir);
- project.addResource(rsc);
- }
-}
diff --git a/plugin/maven/src/main/java/org/onosproject/yangutils/plugin/manager/YangUtilManager.java b/plugin/maven/src/main/java/org/onosproject/yangutils/plugin/manager/YangUtilManager.java
deleted file mode 100644
index 33e8f64..0000000
--- a/plugin/maven/src/main/java/org/onosproject/yangutils/plugin/manager/YangUtilManager.java
+++ /dev/null
@@ -1,434 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.plugin.manager;
-
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.plugin.AbstractMojo;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
-import org.apache.maven.plugins.annotations.Component;
-import org.apache.maven.plugins.annotations.Mojo;
-import org.apache.maven.plugins.annotations.Parameter;
-import org.apache.maven.project.MavenProject;
-import org.apache.maven.rtinfo.RuntimeInformation;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangReferenceResolver;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.linker.YangLinker;
-import org.onosproject.yangutils.linker.exceptions.LinkerException;
-import org.onosproject.yangutils.linker.impl.YangLinkerManager;
-import org.onosproject.yangutils.parser.YangUtilsParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-import org.onosproject.yangutils.tool.CallablePlugin;
-import org.onosproject.yangutils.tool.YangFileInfo;
-import org.onosproject.yangutils.tool.YangToolManager;
-import org.onosproject.yangutils.tool.exception.YangToolException;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-import org.onosproject.yangutils.utils.io.YangToJavaNamingConflictUtil;
-import org.sonatype.plexus.build.incremental.BuildContext;
-
-import java.io.IOException;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-
-import static java.util.Collections.sort;
-import static org.apache.maven.plugins.annotations.LifecyclePhase.PROCESS_SOURCES;
-import static org.apache.maven.plugins.annotations.ResolutionScope.COMPILE;
-import static org.onosproject.yangutils.datamodel.ResolvableType.YANG_DERIVED_DATA_TYPE;
-import static org.onosproject.yangutils.datamodel.ResolvableType.YANG_IDENTITYREF;
-import static org.onosproject.yangutils.linker.impl.YangLinkerUtils.resolveGroupingInDefinationScope;
-import static org.onosproject.yangutils.plugin.manager.YangPluginUtils.addToCompilationRoot;
-import static org.onosproject.yangutils.plugin.manager.YangPluginUtils.copyYangFilesToTarget;
-import static org.onosproject.yangutils.plugin.manager.YangPluginUtils.resolveInterJarDependencies;
-import static org.onosproject.yangutils.plugin.manager.YangPluginUtils.serializeDataModel;
-import static org.onosproject.yangutils.tool.YangToolManager.DEFAULT_JAR_RES_PATH;
-import static org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorUtil.generateJavaCode;
-import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_BASE_PKG;
-import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.IN;
-import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
-import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
-import static org.onosproject.yangutils.utils.UtilConstants.TEMP;
-import static org.onosproject.yangutils.utils.UtilConstants.VERSION_ERROR;
-import static org.onosproject.yangutils.utils.UtilConstants.YANG_RESOURCES;
-import static org.onosproject.yangutils.utils.io.impl.YangFileScanner.getYangFiles;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getDirectory;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getPackageDirPathFromJavaJPackage;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getVersionValue;
-
-/**
- * Represents ONOS YANG utility maven plugin.
- * Goal of plugin is yang2java.
- * Execution phase is generate-sources.
- * requiresDependencyResolution at compile time.
- */
-@Mojo(name = "yang2java", defaultPhase = PROCESS_SOURCES,
- requiresDependencyResolution = COMPILE)
-public class YangUtilManager extends AbstractMojo implements CallablePlugin {
-
- private static final String DEFAULT_PKG =
- getPackageDirPathFromJavaJPackage(DEFAULT_BASE_PKG);
- private static final int SUPPORTED_VERSION = 339;
- private final YangPluginConfig yangPlugin = new YangPluginConfig();
- private YangNode rootNode;
- // YANG file information set.
- private Set<YangFileInfo> yangFileInfoSet = new HashSet<>();
- private final YangUtilsParser yangUtilsParser = new YangUtilsParserManager();
- private final YangLinker yangLinker = new YangLinkerManager();
- private YangFileInfo curYangFileInfo = new YangFileInfo();
- private final Set<YangNode> yangNodeSet = new HashSet<>();
-
- /**
- * Source directory for YANG files.
- */
- @Parameter(property = "yangFilesDir", defaultValue = "src/main/yang")
- private String yangFilesDir;
-
- /**
- * Source directory for generated files.
- */
- @Parameter(property = "classFileDir", defaultValue = "target/generated-sources")
- private String classFileDir;
-
- /**
- * Base directory for project.
- */
- @Parameter(property = "basedir", defaultValue = "${basedir}")
- private String baseDir;
-
- /**
- * Output directory.
- */
- @Parameter(property = "project.build.outputDirectory", required = true,
- defaultValue = "target/classes")
- private String outputDirectory;
-
- /**
- * Current maven project.
- */
- @Parameter(property = "project", required = true, readonly = true,
- defaultValue = "${project}")
- private MavenProject project;
-
- /**
- * Replacement required for period special character in the identifier.
- */
- @Parameter(property = "replacementForPeriod")
- private String replacementForPeriod;
-
- /**
- * Replacement required for underscore special character in the identifier.
- */
- @Parameter(property = "replacementForUnderscore")
- private String replacementForUnderscore;
-
- /**
- * Replacement required for hyphen special character in the identifier.
- */
- @Parameter(property = "replacementForHyphen")
- private String replacementForHyphen;
-
- /**
- * Prefix which is required for adding with the identifier.
- */
- @Parameter(property = "prefixForIdentifier")
- private String prefixForIdentifier;
-
- /**
- * Build context.
- */
- @Component
- private BuildContext context;
-
- /**
- * Local maven repository.
- */
- @Parameter(readonly = true, defaultValue = "${localRepository}")
- private ArtifactRepository localRepository;
-
- /**
- * Remote maven repositories.
- */
- @Parameter(readonly = true, defaultValue = "${project.remoteArtifactRepositories}")
- private List<ArtifactRepository> remoteRepository;
-
- /**
- * Code generation is for nbi or sbi.
- */
- @Parameter(property = "generateJavaFileForSbi", defaultValue = "nbi")
- private String generateJavaFileForSbi;
-
- /**
- * The Runtime information for the current instance of Maven.
- */
- @Component
- private RuntimeInformation runtime;
-
- /**
- * The name of the property in which to store the version of Maven.
- */
- @Parameter(defaultValue = "maven.version")
- private String versionProperty;
-
- private String outputDir;
- private String codeGenDir;
-
- @Override
- public void execute()
- throws MojoExecutionException, MojoFailureException {
-
- try {
- validateMavenVersion();
- /*
- * For deleting the generated code in previous build.
- */
- outputDir = getDirectory(baseDir, outputDirectory);
- deleteDirectory(outputDir + SLASH + TEMP);
- deleteDirectory(outputDir + SLASH + YANG_RESOURCES);
- String searchDir = getDirectory(baseDir, yangFilesDir);
- codeGenDir = getDirectory(baseDir, classFileDir) + SLASH;
-
- // Creates conflict resolver and set values to it.
- YangToJavaNamingConflictUtil conflictResolver = new YangToJavaNamingConflictUtil();
- conflictResolver.setReplacementForPeriod(replacementForPeriod);
- conflictResolver.setReplacementForHyphen(replacementForHyphen);
- conflictResolver.setReplacementForUnderscore(replacementForUnderscore);
- conflictResolver.setPrefixForIdentifier(prefixForIdentifier);
- yangPlugin.setCodeGenDir(codeGenDir);
- yangPlugin.setConflictResolver(conflictResolver);
-
- yangPlugin.resourceGenDir(outputDir + DEFAULT_JAR_RES_PATH);
- yangPlugin.setCodeGenerateForSbi(generateJavaFileForSbi.toLowerCase());
-
- /*
- * Obtain the YANG files at a path mentioned in plugin and creates
- * YANG file information set.
- */
-
- YangToolManager toolManager = new YangToolManager();
-
- yangFileInfoSet = toolManager.createYangFileInfoSet(
- getYangFiles(searchDir));
- List<YangNode> interJarResolvedNodes =
- resolveInterJarDependencies(project, localRepository,
- remoteRepository, outputDir);
- toolManager.compileYangFiles(yangFileInfoSet,
- interJarResolvedNodes, yangPlugin,
- this);
- } catch (YangToolException e) {
- String fileName = EMPTY_STRING;
- if (e.getCurYangFile() != null) {
- fileName = e.getCurYangFile().getYangFileName();
- }
- try {
- deleteDirectory(codeGenDir + DEFAULT_PKG);
- } catch (IOException ex) {
- e.printStackTrace();
- throw new MojoExecutionException(
- "Error handler failed to delete files for data model node.");
- }
- getLog().info(e.getCause());
- throw new MojoExecutionException(
- "Exception occurred due to " + e.getLocalizedMessage() +
- IN + fileName + " YANG file.");
- } catch (IOException e) {
- throw new MojoExecutionException(
- "Failed to process files");
- }
- }
-
- /**
- * Validates current maven version of system.
- *
- * @throws MojoExecutionException when maven version is below 3.3.9
- */
- private void validateMavenVersion() throws MojoExecutionException {
- String version = runtime.getMavenVersion();
- if (getVersionValue(version) < SUPPORTED_VERSION) {
- throw new MojoExecutionException(VERSION_ERROR + version);
- }
- }
-
- /**
- * Returns the YANG node set.
- *
- * @return YANG node set
- */
- public Set<YangNode> getYangNodeSet() {
- return yangNodeSet;
- }
-
- /**
- * TODO: Delete me and use the tool code for UT test cases
- * Links all the provided with the YANG file info set.
- *
- * @throws MojoExecutionException a violation in mojo execution
- */
- public void resolveDependenciesUsingLinker()
- throws MojoExecutionException {
- createYangNodeSet();
- try {
- yangLinker.resolveDependencies(yangNodeSet);
- } catch (LinkerException e) {
- printLog(e.getFileName(), e.getLineNumber(), e.getCharPositionInLine(),
- e.getMessage(), e.getLocalizedMessage());
- throw new MojoExecutionException(e.getMessage());
- }
- }
-
- /**
- * TODO: Delete me and use the tool code for UT test cases
- * Creates YANG nodes set.
- */
- protected void createYangNodeSet() {
- for (YangFileInfo yangFileInfo : yangFileInfoSet) {
- yangNodeSet.add(yangFileInfo.getRootNode());
- }
- }
-
- /**
- * TODO: Delete me and use the tool code for UT test cases
- * Parses all the provided YANG files and generates YANG data model tree.
- *
- * @throws IOException a violation in IO
- */
- public void parseYangFileInfoSet()
- throws IOException {
- for (YangFileInfo yangFileInfo : yangFileInfoSet) {
- curYangFileInfo = yangFileInfo;
- if (yangFileInfo.isForTranslator()) {
- try {
- YangNode yangNode = yangUtilsParser.getDataModel(
- yangFileInfo.getYangFileName());
- yangFileInfo.setRootNode(yangNode);
- rootNode = yangNode;
- resolveGroupingInDefinationScope((YangReferenceResolver) yangNode);
- try {
- ((YangReferenceResolver) yangNode)
- .resolveSelfFileLinking(YANG_DERIVED_DATA_TYPE);
- ((YangReferenceResolver) yangNode)
- .resolveSelfFileLinking(YANG_IDENTITYREF);
- } catch (DataModelException e) {
- printLog(e.getFileName(), e.getLineNumber(), e
- .getCharPositionInLine(), e.getMessage(), e
- .getLocalizedMessage());
- }
- } catch (ParserException e) {
- printLog(e.getFileName(), e.getLineNumber(), e
- .getCharPositionInLine(), e.getMessage(), e
- .getLocalizedMessage());
- throw e;
- }
- }
- }
- }
-
- /**
- * TODO: Delete me and use the tool code for UT test cases
- * Translates to java code corresponding to the YANG schema.
- *
- * @param yangPlugin YANG plugin config
- * @throws IOException when fails to generate java code file the current node
- */
- public void translateToJava(YangPluginConfig yangPlugin)
- throws IOException {
- List<YangNode> yangNodeSortedList = new LinkedList<>();
- yangNodeSortedList.addAll(yangNodeSet);
- sort(yangNodeSortedList);
- for (YangNode node : yangNodeSortedList) {
- if (node.isToTranslate()) {
- generateJavaCode(node, yangPlugin);
- }
- }
- }
-
- /**
- * Creates a YANG file info set.
- *
- * @param yangFileList YANG files list
- */
- public void createYangFileInfoSet(List<String> yangFileList) {
- for (String yangFile : yangFileList) {
- YangFileInfo yangFileInfo = new YangFileInfo();
- yangFileInfo.setYangFileName(yangFile);
- yangFileInfoSet.add(yangFileInfo);
- }
- }
-
- /**
- * TODO: Delete me and use the tool code for UT test cases
- * Returns the YANG file info set.
- *
- * @return the YANG file info set
- */
- public Set<YangFileInfo> getYangFileInfoSet() {
- return yangFileInfoSet;
- }
-
- /**
- * TODO: Delete me and use the tool code for UT test cases
- * Sets the YANG file info set.
- *
- * @param yangFileInfoSet the YANG file info set
- */
- void setYangFileInfoSet(Set<YangFileInfo> yangFileInfoSet) {
- this.yangFileInfoSet = yangFileInfoSet;
- }
-
- /**
- * Adds log info for exception.
- *
- * @param fileName file name
- * @param line line number
- * @param position character position
- * @param msg error message
- * @param localMsg local message
- */
- private void printLog(String fileName, int line, int position, String
- msg, String localMsg) {
- String logInfo = "Error in file: " + fileName;
- if (line != 0) {
- logInfo = logInfo + " at line: " + line + " at position: "
- + position;
-
- }
- if (msg != null) {
- logInfo = logInfo + NEW_LINE + localMsg;
- }
- getLog().info(logInfo);
- }
-
- @Override
- public void addGeneratedCodeToBundle() {
- addToCompilationRoot(codeGenDir, project, context);
- }
-
-
- @Override
- public void addCompiledSchemaToBundle() throws IOException {
- serializeDataModel(outputDir, project, true);
- }
-
- @Override
- public void addYangFilesToBundle() throws IOException {
- copyYangFilesToTarget(outputDir, project);
- }
-}
diff --git a/plugin/maven/src/main/java/org/onosproject/yangutils/plugin/manager/package-info.java b/plugin/maven/src/main/java/org/onosproject/yangutils/plugin/manager/package-info.java
deleted file mode 100644
index 745e91c..0000000
--- a/plugin/maven/src/main/java/org/onosproject/yangutils/plugin/manager/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-/**
- * YANG utility maven plugin.
- */
-package org.onosproject.yangutils.plugin.manager;
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/ietfyang/IetfYangFileTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/ietfyang/IetfYangFileTest.java
deleted file mode 100644
index 4deeb7b..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/ietfyang/IetfYangFileTest.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.ietfyang;
-
-import org.apache.maven.plugin.MojoExecutionException;
-import org.junit.Test;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.plugin.manager.YangUtilManager;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
-
-import java.io.File;
-import java.io.IOException;
-
-import static org.onosproject.yangutils.utils.io.YangPluginConfig.compileCode;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory;
-
-/**
- * Test cases for testing IETF YANG files.
- */
-public class IetfYangFileTest {
-
- private final YangUtilManager utilManager = new YangUtilManager();
-
- /**
- * Checks hierarchical intra with inter file type linking.
- * Reference: https://datatracker.ietf.org/doc/draft-zha-l3sm-l3vpn-onos-deployment
- */
- @Test
- public void l3vpnserviceyang()
- throws IOException, ParserException, MojoExecutionException {
-
- String dir = "target/ietfyang/l3vpnservice/";
- deleteDirectory(dir);
- String searchDir = "src/test/resources/ietfyang/l3vpnservice";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.resolveDependenciesUsingLinker();
-
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir(dir);
-
- utilManager.translateToJava(yangPluginConfig);
- String dir1 = System.getProperty("user.dir") + File.separator + dir;
- compileCode(dir1);
- deleteDirectory("target/ietfyang/");
- }
-
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/CustomExceptionMatcher.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/CustomExceptionMatcher.java
deleted file mode 100644
index 44d0c67..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/CustomExceptionMatcher.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl;
-
-import org.hamcrest.Description;
-import org.hamcrest.TypeSafeMatcher;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-
-/**
- * ExpectedException framework can use the Hamcrest matcher's to test
- * custom/extended exceptions. This class extends the type safe matcher to
- * define the custom exception matcher.
- */
-public final class CustomExceptionMatcher extends TypeSafeMatcher<ParserException> {
-
- private int actualLine;
- private final int expectedLine;
- private int actualCharPosition;
- private final int expectedCharPosition;
-
- /**
- * Customized exception matcher to match error location.
- *
- * @param line error line
- * @param charPosition error character position
- * @return customized exception matcher to match error location
- */
- public static CustomExceptionMatcher errorLocation(int line, int charPosition) {
- return new CustomExceptionMatcher(line, charPosition);
- }
-
- private CustomExceptionMatcher(int expectedLine, int expectedCharPosition) {
- this.expectedLine = expectedLine;
- this.expectedCharPosition = expectedCharPosition;
- }
-
- @Override
- protected boolean matchesSafely(final ParserException exception) {
- actualLine = exception.getLineNumber();
- actualCharPosition = exception.getCharPositionInLine();
- return ((actualLine == expectedLine) && (actualCharPosition == expectedCharPosition));
- }
-
- @Override
- public void describeTo(Description description) {
- description.appendText(" Error reported location ")
- .appendText("Line " + actualLine + ", " + "CharPosition " + actualCharPosition)
- .appendText(" instead of expected ")
- .appendText("Line " + expectedLine + ", " + "CharPosition " + expectedCharPosition);
- }
-}
\ No newline at end of file
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/TreeWalkListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/TreeWalkListenerTest.java
deleted file mode 100644
index 1688d2d..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/TreeWalkListenerTest.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl;
-
-import java.io.IOException;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-
-/**
- * Test cases for testing tree walk listener functionality.
- */
-public class TreeWalkListenerTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- /**
- * Checks whether exception is thrown for ordered statement.
- */
- @Test
- public void processOrderedByStatement() throws IOException, ParserException {
- // Now no exception should be thrown. logs should come.
- manager.getDataModel("src/test/resources/OrderedByStatement.yang");
- }
-
- /**
- * Checks whether exception is thrown for anyxml statement.
- */
- @Test
- public void processAnyXmlStatement() throws IOException, ParserException {
- // Now no exception should be thrown. logs should come.
- 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/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/YangUtilsParserManagerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/YangUtilsParserManagerTest.java
deleted file mode 100644
index 9b3effc..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/YangUtilsParserManagerTest.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-
-/**
- * Test case for testing YANG utils parser manager.
- */
-public class YangUtilsParserManagerTest {
-
- YangUtilsParserManager manager = new YangUtilsParserManager();
- File file;
- BufferedWriter out;
-
- @Before
- public void setUp() throws Exception {
- file = new File("demo.yang");
- out = new BufferedWriter(new FileWriter(file));
- }
- @After
- public void tearDown() throws Exception {
- file.delete();
- }
-
- /**
- * This test case checks whether the null pointer exception is generated
- * when the input YANG file is null.
- */
- @Test(expected = NullPointerException.class)
- public void getDataModelNullFileTest() throws IOException, ParserException {
- YangUtilsParserManager manager = new YangUtilsParserManager();
- YangNode node = manager.getDataModel(null);
- }
-
- /**
- * This test case checks whether the io exception is generated
- * when the input YANG file is non existent.
- */
- @Test(expected = ParserException.class)
- public void getDataModelNonExistentFileTest() throws IOException, ParserException {
-
- YangUtilsParserManager manager = new YangUtilsParserManager();
- YangNode node = manager.getDataModel("nonexistent.yang");
- }
-
- /**
- * This test case checks if the input YANG file is correct no exception
- * should be generated.
- */
- @Test
- public void getDataModelCorrectFileTest() throws IOException, ParserException {
-
- out.write("module ONOS {\n");
- out.write("yang-version 1;\n");
- out.write("namespace urn:ietf:params:xml:ns:yang:ietf-ospf;\n");
- out.write("prefix On;\n");
- out.write("}\n");
- out.close();
-
- YangNode node = manager.getDataModel("demo.yang");
- }
-
- /**
- * This test case checks if the input YANG file with wrong YANG constructs
- * than parser exception should be generated.
- */
- @Test(expected = ParserException.class)
- public void getDataModelIncorrectFileTest() throws IOException, ParserException {
-
- out.write("module ONOS {\n");
- out.write("yang-version 1\n");
- out.write("namespace urn:ietf:params:xml:ns:yang:ietf-ospf;\n");
- out.write("prefix On;\n");
- out.write("}\n");
- out.close();
-
- YangNode node = manager.getDataModel("demo.yang");
- }
-}
\ No newline at end of file
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/AugmentListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/AugmentListenerTest.java
deleted file mode 100644
index 146f410..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/AugmentListenerTest.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.io.IOException;
-import java.util.ListIterator;
-
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangAtomicPath;
-import org.onosproject.yangutils.datamodel.YangAugment;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-
-/**
- * Test cases for testing augment listener functionality.
- */
-public class AugmentListenerTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks valid augment statement.
- */
- @Test
- public void processValidAugmentStatement() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ValidAugmentStatement.yang");
-
- assertThat(node instanceof YangModule, is(true));
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- YangAugment yangAugment = (YangAugment) yangNode.getChild();
- ListIterator<YangAtomicPath> absPathIterator = yangAugment.getTargetNode().listIterator();
- YangAtomicPath absPathIdentifier = absPathIterator.next();
- assertThat(absPathIdentifier.getNodeIdentifier().getPrefix(), is("if"));
- assertThat(absPathIdentifier.getNodeIdentifier().getName(), is("interfaces"));
-
- ListIterator<YangLeaf> leafIterator = yangAugment.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("ds0ChannelNumber"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("ChannelNumber"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.DERIVED));
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/BaseFileListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/BaseFileListenerTest.java
deleted file mode 100644
index fbe961b..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/BaseFileListenerTest.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.javadatamodel.YangJavaModule;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-/**
- * Test cases for testing base rule listener functionality.
- */
-public class BaseFileListenerTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- /**
- * Checks for exception if stack of parsable data is not empty at the entry
- * of yang base rule.
- */
- @Test
- public void processYangFileEntryNonEmptyStack() {
- thrown.expect(ParserException.class);
- thrown.expectMessage("Internal parser error detected: Invalid holder for yangbase before processing.");
-
- YangModule tmpModule = new YangJavaModule();
- TreeWalkListener listener = new TreeWalkListener();
- listener.getParsedDataStack().push(tmpModule);
- GeneratedYangParser.YangfileContext ctx = null;
- BaseFileListener.processYangFileEntry(listener, ctx);
- }
-
- /**
- * Checks that exception shouldn't be generated if stack of parsable data is
- * empty at the entry of yang base rule.
- */
- @Test
- public void processYangFileEntryEmptyStack() {
-
- TreeWalkListener listener = new TreeWalkListener();
- GeneratedYangParser.YangfileContext ctx = null;
- BaseFileListener.processYangFileEntry(listener, ctx);
- }
-
- /**
- * Checks that exception should be generated if stack of parsable data is
- * not empty at the exit of yang base rule.
- */
- @Test
- public void processYangFileExitEmptyStack() {
- thrown.expect(ParserException.class);
- thrown.expectMessage("Internal parser error detected: Missing holder at yangbase after processing.");
-
- TreeWalkListener listener = new TreeWalkListener();
- GeneratedYangParser.YangfileContext ctx = null;
- BaseFileListener.processYangFileExit(listener, ctx);
- }
-
- /**
- * Checks that exception shouldn't be generated if stack of parsable data is
- * empty at the exit of yang base rule.
- */
- @Test
- public void processYangFileExitNonEmptyStack() {
-
- TreeWalkListener listener = new TreeWalkListener();
- GeneratedYangParser.YangfileContext ctx = null;
- BaseFileListener.processYangFileEntry(listener, ctx);
- }
-
- /**
- * Checks that after popping out the parsable node from stack it should be
- * empty.
- */
- @Test
- public void processYangFileExitStackErrorExtraEntryTest() {
- thrown.expect(ParserException.class);
- thrown.expectMessage("Internal parser error detected: Invalid holder for yangbase after processing.");
-
- YangModule tmpModule = new YangJavaModule();
- YangModule tmpModule2 = new YangJavaModule();
- TreeWalkListener listener = new TreeWalkListener();
- listener.getParsedDataStack().push(tmpModule);
- listener.getParsedDataStack().push(tmpModule2);
- GeneratedYangParser.YangfileContext ctx = null;
- BaseFileListener.processYangFileExit(listener, ctx);
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/BelongstoListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/BelongstoListenerTest.java
deleted file mode 100644
index 927a2d6..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/BelongstoListenerTest.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangSubModule;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.CustomExceptionMatcher;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import java.io.IOException;
-
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-
-/**
- * Test cases for testing belongsto listener functionality.
- */
-public class BelongstoListenerTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks if mandatory belongsto parameter "prefix" is not present.
- */
- @Test
- public void processBelongsToWithoutPrefix() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("mismatched input '}' expecting 'prefix'");
- thrown.expect(CustomExceptionMatcher.errorLocation(4, 0));
- YangNode node = manager.getDataModel("src/test/resources/BelongsToWithoutPrefix.yang");
- }
-
- /**
- * Checks that prefix must be present only once in belongsto.
- */
- @Test
- public void processBelongsToDualPrefix() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("mismatched input 'prefix' expecting '}'");
- thrown.expect(CustomExceptionMatcher.errorLocation(5, 0));
- YangNode node = manager.getDataModel("src/test/resources/BelongsToDualPrefix.yang");
- }
-
- /**
- * Checks if belongsto listener updates the date model tree.
- */
- @Test
- public void processBelongsToWithPrefix() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/BelongsToWithPrefix.yang");
- YangSubModule yangNode = (YangSubModule) node;
- assertThat(yangNode.getBelongsTo().getBelongsToModuleName(), is("ONOS"));
- }
-
- /**
- * Checks if mandatory parameter "belongsto" is present.
- */
- @Test
- public void processSubModuleWithoutBelongsTo() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("mismatched input '}' expecting 'belongs-to'");
- thrown.expect(CustomExceptionMatcher.errorLocation(3, 0));
- YangNode node = manager.getDataModel("src/test/resources/SubModuleWithoutBelongsTo.yang");
- }
-}
\ No newline at end of file
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/BitListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/BitListenerTest.java
deleted file mode 100644
index a4410a7..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/BitListenerTest.java
+++ /dev/null
@@ -1,360 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangBit;
-import org.onosproject.yangutils.datamodel.YangBits;
-import org.onosproject.yangutils.datamodel.YangDerivedInfo;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.YangTypeDef;
-import org.onosproject.yangutils.datamodel.YangUnion;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.Map;
-
-/**
- * Test cases for bit listener.
- */
-public class BitListenerTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks bit statement without position.
- */
- @Test
- public void processBitTypeStatement() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/BitTypeStatement.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("mybits"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("bits"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.BITS));
- assertThat(((YangBits) leafInfo.getDataType().getDataTypeExtendedInfo()).getBitsName(),
- is("mybits"));
-
- // Check bit name map
- Map<String, YangBit> bitNameMap = ((YangBits) leafInfo.getDataType().getDataTypeExtendedInfo()).getBitNameMap();
- assertThat(bitNameMap.size(), is(3));
- for (Map.Entry<String, YangBit> element : bitNameMap.entrySet()) {
- String bitName = element.getKey();
- YangBit yangBit = element.getValue();
- if (bitName.equals("disable-nagle")) {
- assertThat(yangBit.getPosition(), is(0));
- } else if (bitName.equals("auto-sense-speed")) {
- assertThat(yangBit.getPosition(), is(1));
- } else if (bitName.equals("Ten-Mb-only")) {
- assertThat(yangBit.getPosition(), is(2));
- } else {
- throw new IOException("Invalid bit name: " + bitName);
- }
- }
-
- // Check bit position map
- Map<Integer, YangBit> bitPositionMap = ((YangBits) leafInfo.getDataType().getDataTypeExtendedInfo())
- .getBitPositionMap();
- assertThat(bitPositionMap.size(), is(3));
- for (Map.Entry<Integer, YangBit> element : bitPositionMap.entrySet()) {
- int position = element.getKey();
- YangBit yangBit = element.getValue();
- if (position == 0) {
- assertThat(yangBit.getBitName(), is("disable-nagle"));
- } else if (position == 1) {
- assertThat(yangBit.getBitName(), is("auto-sense-speed"));
- } else if (position == 2) {
- assertThat(yangBit.getBitName(), is("Ten-Mb-only"));
- } else {
- throw new IOException("Invalid bit position: " + position);
- }
- }
- }
-
- /**
- * Checks bit statement with typedef.
- */
- @Test
- public void processBitTypedefStatement() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/BitTypedefStatement.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- YangTypeDef typedef = (YangTypeDef) yangNode.getChild();
- assertThat(typedef.getName(), is("type15"));
-
- YangType type = typedef.getTypeList().iterator().next();
- assertThat(type.getDataType(), is(YangDataTypes.BITS));
- assertThat(type.getDataTypeName(), is("bits"));
-
- // Check bit name map
- Map<String, YangBit> bitNameMap = ((YangBits) type.getDataTypeExtendedInfo()).getBitNameMap();
- assertThat(bitNameMap.size(), is(3));
- for (Map.Entry<String, YangBit> element : bitNameMap.entrySet()) {
- String bitName = element.getKey();
- YangBit yangBit = element.getValue();
- if (bitName.equals("disable-nagle")) {
- assertThat(yangBit.getPosition(), is(0));
- } else if (bitName.equals("auto-sense-speed")) {
- assertThat(yangBit.getPosition(), is(1));
- } else if (bitName.equals("Mb-only")) {
- assertThat(yangBit.getPosition(), is(2));
- } else {
- throw new IOException("Invalid bit name: " + bitName);
- }
- }
-
- // Check bit position map
- Map<Integer, YangBit> bitPositionMap = ((YangBits) type.getDataTypeExtendedInfo()).getBitPositionMap();
- assertThat(bitPositionMap.size(), is(3));
- for (Map.Entry<Integer, YangBit> element : bitPositionMap.entrySet()) {
- int position = element.getKey();
- YangBit yangBit = element.getValue();
- if (position == 0) {
- assertThat(yangBit.getBitName(), is("disable-nagle"));
- } else if (position == 1) {
- assertThat(yangBit.getBitName(), is("auto-sense-speed"));
- } else if (position == 2) {
- assertThat(yangBit.getBitName(), is("Mb-only"));
- } else {
- throw new IOException("Invalid bit position: " + position);
- }
- }
- }
-
- /**
- * Checks bit statement with typedef with referred leaf.
- */
- @Test
- public void processBitTypedefReferredLeafStatement() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/BitTypedefReferredLeafStatement.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- YangTypeDef typedef = (YangTypeDef) yangNode.getChild();
- assertThat(typedef.getName(), is("topBits"));
-
- YangType type = typedef.getTypeList().iterator().next();
- assertThat(type.getDataType(), is(YangDataTypes.BITS));
- assertThat(type.getDataTypeName(), is("bits"));
-
- // Check bit name map
- Map<String, YangBit> bitNameMap = ((YangBits) type.getDataTypeExtendedInfo()).getBitNameMap();
- assertThat(bitNameMap.size(), is(3));
- for (Map.Entry<String, YangBit> element : bitNameMap.entrySet()) {
- String bitName = element.getKey();
- YangBit yangBit = element.getValue();
- if (bitName.equals("disable-nagle")) {
- assertThat(yangBit.getPosition(), is(0));
- } else if (bitName.equals("auto-sense-speed")) {
- assertThat(yangBit.getPosition(), is(1));
- } else if (bitName.equals("Mb-only")) {
- assertThat(yangBit.getPosition(), is(2));
- } else {
- throw new IOException("Invalid bit name: " + bitName);
- }
- }
-
- // Check bit position map
- Map<Integer, YangBit> bitPositionMap = ((YangBits) type.getDataTypeExtendedInfo()).getBitPositionMap();
- assertThat(bitPositionMap.size(), is(3));
- for (Map.Entry<Integer, YangBit> element : bitPositionMap.entrySet()) {
- int position = element.getKey();
- YangBit yangBit = element.getValue();
- if (position == 0) {
- assertThat(yangBit.getBitName(), is("disable-nagle"));
- } else if (position == 1) {
- assertThat(yangBit.getBitName(), is("auto-sense-speed"));
- } else if (position == 2) {
- assertThat(yangBit.getBitName(), is("Mb-only"));
- } else {
- throw new IOException("Invalid bit position: " + position);
- }
- }
-
- // Check leaf reffered typedef
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("myBits"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("topBits"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.DERIVED));
- YangType<YangDerivedInfo> typeDerived = (YangType<YangDerivedInfo>) leafInfo.getDataType();
- YangDerivedInfo derivedInfo = (YangDerivedInfo) typeDerived.getDataTypeExtendedInfo();
- YangTypeDef prevTypedef = (YangTypeDef) derivedInfo.getReferredTypeDef();
- assertThat(prevTypedef.getName(), is("topBits"));
- YangType topType = prevTypedef.getTypeList().iterator().next();
- assertThat(topType.getDataType(), is(YangDataTypes.BITS));
- assertThat(topType.getDataTypeName(), is("bits"));
- YangType<YangBits> typeBits = (YangType<YangBits>) topType;
- YangBits bits = typeBits.getDataTypeExtendedInfo();
-
- // Check bit name map
- bitNameMap = bits.getBitNameMap();
- assertThat(bitNameMap.size(), is(3));
- for (Map.Entry<String, YangBit> element : bitNameMap.entrySet()) {
- String bitName = element.getKey();
- YangBit yangBit = element.getValue();
- if (bitName.equals("disable-nagle")) {
- assertThat(yangBit.getPosition(), is(0));
- } else if (bitName.equals("auto-sense-speed")) {
- assertThat(yangBit.getPosition(), is(1));
- } else if (bitName.equals("Mb-only")) {
- assertThat(yangBit.getPosition(), is(2));
- } else {
- throw new IOException("Invalid bit name: " + bitName);
- }
- }
-
- // Check bit position map
- bitPositionMap = bits.getBitPositionMap();
- assertThat(bitPositionMap.size(), is(3));
- for (Map.Entry<Integer, YangBit> element : bitPositionMap.entrySet()) {
- int position = element.getKey();
- YangBit yangBit = element.getValue();
- if (position == 0) {
- assertThat(yangBit.getBitName(), is("disable-nagle"));
- } else if (position == 1) {
- assertThat(yangBit.getBitName(), is("auto-sense-speed"));
- } else if (position == 2) {
- assertThat(yangBit.getBitName(), is("Mb-only"));
- } else {
- throw new IOException("Invalid bit position: " + position);
- }
- }
- }
-
- /**
- * Checks bit statement with union.
- */
- @Test
- public void processBitUnionStatement() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/BitUnionStatement.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("type15"));
-
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UNION));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("union"));
-
- YangUnion yangUnion = (YangUnion) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- List<YangType<?>> typeList = yangUnion.getTypeList();
- ListIterator<YangType<?>> typeListIterator = typeList.listIterator();
- YangType<?> yangType = typeListIterator.next();
-
- assertThat(yangType.getDataType(), is(YangDataTypes.BITS));
- assertThat(yangType.getDataTypeName(), is("bits"));
-
- // Check bit name map
- Map<String, YangBit> bitNameMap = ((YangBits) yangType.getDataTypeExtendedInfo()).getBitNameMap();
- assertThat(bitNameMap.size(), is(3));
- for (Map.Entry<String, YangBit> element : bitNameMap.entrySet()) {
- String bitName = element.getKey();
- YangBit yangBit = element.getValue();
- if (bitName.equals("disable-nagle")) {
- assertThat(yangBit.getPosition(), is(0));
- } else if (bitName.equals("auto-sense-speed")) {
- assertThat(yangBit.getPosition(), is(1));
- } else if (bitName.equals("Mb-only")) {
- assertThat(yangBit.getPosition(), is(2));
- } else {
- throw new IOException("Invalid bit name: " + bitName);
- }
- }
-
- // Check bit position map
- Map<Integer, YangBit> bitPositionMap = ((YangBits) yangType.getDataTypeExtendedInfo()).getBitPositionMap();
- assertThat(bitPositionMap.size(), is(3));
- for (Map.Entry<Integer, YangBit> element : bitPositionMap.entrySet()) {
- int position = element.getKey();
- YangBit yangBit = element.getValue();
- if (position == 0) {
- assertThat(yangBit.getBitName(), is("disable-nagle"));
- } else if (position == 1) {
- assertThat(yangBit.getBitName(), is("auto-sense-speed"));
- } else if (position == 2) {
- assertThat(yangBit.getBitName(), is("Mb-only"));
- } else {
- throw new IOException("Invalid bit position: " + position);
- }
- }
- }
-
- /**
- * Checks if enum with same name is not allowed.
- */
- @Test(expected = ParserException.class)
- public void processBitWithDuplicateName() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/BitWithDuplicateName.yang");
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/CaseListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/CaseListenerTest.java
deleted file mode 100644
index 9ebf0df..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/CaseListenerTest.java
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.io.IOException;
-import java.util.ListIterator;
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangAugment;
-import org.onosproject.yangutils.datamodel.YangCase;
-import org.onosproject.yangutils.datamodel.YangChoice;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-
-/**
- * Test cases for case listener.
- */
-public class CaseListenerTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks multiple case statement.
- */
- @Test
- public void processCaseStatement() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/CaseStatement.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- YangContainer yangContainer = (YangContainer) yangNode.getChild();
- assertThat(yangContainer.getName(), is("food"));
-
- YangChoice yangChoice = (YangChoice) yangContainer.getChild();
- assertThat(yangChoice.getName(), is("snack"));
-
- YangCase yangCase1 = (YangCase) yangChoice.getChild();
- assertThat(yangCase1.getName(), is("sports-arena"));
-
- // Check whether leaf properties as set correctly.
- ListIterator<YangLeaf> leafIterator1 = yangCase1.getListOfLeaf().listIterator();
- YangLeaf leafInfo1 = leafIterator1.next();
-
- assertThat(leafInfo1.getName(), is("pretzel"));
-
- YangCase yangCase2 = (YangCase) yangCase1.getNextSibling();
- assertThat(yangCase2.getName(), is("late-night"));
-
- // Check whether leaf properties as set correctly.
- ListIterator<YangLeaf> leafIterator2 = yangCase2.getListOfLeaf().listIterator();
- YangLeaf leafInfo2 = leafIterator2.next();
-
- assertThat(leafInfo2.getName(), is("chocolate"));
- }
-
- /**
- * Checks duplicate case in choice.
- */
- @Test(expected = ParserException.class)
- public void processDuplicateCaseInChoice() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/DuplicateCaseInChoice.yang");
- }
-
- /**
- * Checks duplicate leaf at different hierarchy.
- */
- @Test(expected = ParserException.class)
- public void processDuplicateLeafInHierarchy() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/DuplicateLeafInHierarchy.yang");
- }
-
- /**
- * Checks duplicate leaf in different case within choice.
- */
- @Test(expected = ParserException.class)
- public void processDuplicateLeafInChoice() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/DuplicateLeafInChoice.yang");
- }
-
- /**
- * Checks same case within different choice.
- */
- @Test
- public void processCaseStatementSameEntryDifferentChoice() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/CaseStatementSameEntryDifferentChoice.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- YangContainer yangContainer = (YangContainer) yangNode.getChild();
- assertThat(yangContainer.getName(), is("food"));
-
- YangChoice yangChoice = (YangChoice) yangContainer.getChild();
- assertThat(yangChoice.getName(), is("snack"));
-
- YangCase yangCase1 = (YangCase) yangChoice.getChild();
- assertThat(yangCase1.getName(), is("sports-arena"));
-
- // Check whether leaf properties as set correctly.
- ListIterator<YangLeaf> leafIterator1 = yangCase1.getListOfLeaf().listIterator();
- YangLeaf leafInfo1 = leafIterator1.next();
-
- assertThat(leafInfo1.getName(), is("pretzel"));
-
- YangChoice yangChoice2 = (YangChoice) yangChoice.getNextSibling();
- assertThat(yangChoice2.getName(), is("lunch"));
-
- YangCase yangCase2 = (YangCase) yangChoice2.getChild();
- assertThat(yangCase2.getName(), is("sports-arena"));
-
- // Check whether leaf properties as set correctly.
- ListIterator<YangLeaf> leafIterator2 = yangCase2.getListOfLeaf().listIterator();
- YangLeaf leafInfo2 = leafIterator2.next();
-
- assertThat(leafInfo2.getName(), is("chocolate"));
- }
-
- /**
- * Checks case choice hierarchy.
- */
- @Test
- public void processCaseChoiceHierarchy() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/CaseChoiceHierarchy.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- YangContainer yangContainer = (YangContainer) yangNode.getChild();
- assertThat(yangContainer.getName(), is("food"));
-
- YangChoice yangChoice1 = (YangChoice) yangContainer.getChild();
- assertThat(yangChoice1.getName(), is("snack"));
-
- YangCase yangCase1 = (YangCase) yangChoice1.getChild();
- assertThat(yangCase1.getName(), is("sports-arena"));
-
- // Check whether leaf properties as set correctly.
- ListIterator<YangLeaf> leafIterator1 = yangCase1.getListOfLeaf().listIterator();
- YangLeaf leafInfo1 = leafIterator1.next();
-
- assertThat(leafInfo1.getName(), is("pretzel"));
-
- YangCase yangCase2 = (YangCase) yangCase1.getNextSibling();
- assertThat(yangCase2.getName(), is("late-night"));
-
- YangChoice yangChoice2 = (YangChoice) yangCase2.getChild();
- assertThat(yangChoice2.getName(), is("dinner"));
-
- YangCase yangCase3 = (YangCase) yangChoice2.getChild();
- assertThat(yangCase3.getName(), is("late-night"));
-
- // Check whether leaf properties as set correctly.
- ListIterator<YangLeaf> leafIterator2 = yangCase3.getListOfLeaf().listIterator();
- YangLeaf leafInfo2 = leafIterator2.next();
- assertThat(leafInfo2.getName(), is("beer"));
- }
-
- /**
- * Checks case substatement of augment.
- */
- @Test
- public void processCaseSubStatementOfAugment() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/CaseSubStatementOfAugment.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("event"));
-
- YangAugment augment = ((YangAugment) yangNode.getChild());
- assertThat(augment.getName(), is("/snmp:snmp/snmp:engine/snmp:listen/snmp:transport"));
-
- YangCase yangCase = ((YangCase) augment.getChild());
- assertThat(yangCase.getName(), is("tls"));
-
- YangCase yangCase1 = ((YangCase) yangCase.getNextSibling());
- assertThat(yangCase1.getName(), is("dtls"));
-
- YangContainer container = ((YangContainer) yangCase.getChild());
- assertThat(container.getName(), is("tls"));
- assertThat(container.getListOfLeaf().iterator().next().getName(), is("ip"));
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ChoiceListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ChoiceListenerTest.java
deleted file mode 100644
index 9dcf448..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ChoiceListenerTest.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangChoice;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import java.io.IOException;
-
-/**
- * Test cases for choice listener.
- */
-public class ChoiceListenerTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks choice statement without body.
- */
- @Test
- public void processChoiceStatementWithoutBody() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ChoiceStatementWithoutBody.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- YangContainer yangContainer = (YangContainer) yangNode.getChild();
- assertThat(yangContainer.getName(), is("food"));
-
- YangChoice yangChoice = (YangChoice) yangContainer.getChild();
- assertThat(yangChoice.getName(), is("snack"));
- }
-
- /**
- * Checks choice statement with stmt end.
- */
- @Test
- public void processChoiceStatementWithStmtend() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ChoiceStatementWithStmtend.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- YangContainer yangContainer = (YangContainer) yangNode.getChild();
- assertThat(yangContainer.getName(), is("food"));
-
- YangChoice yangChoice = (YangChoice) yangContainer.getChild();
- assertThat(yangChoice.getName(), is("snack"));
- }
-
- /**
- * Checks choice statement duplicate entry.
- */
- @Test(expected = ParserException.class)
- public void processChoiceStatementDuplicateEntry() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ChoiceStatementDuplicateEntry.yang");
- }
-
- /**
- * Checks choice statement with same entry in two different container.
- */
- @Test
- public void processChoiceStatementSameEntryDifferentContainer() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ChoiceStatementSameEntryDifferentContainer.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- YangContainer yangContainer1 = (YangContainer) yangNode.getChild();
- assertThat(yangContainer1.getName(), is("food1"));
-
- YangChoice yangChoice1 = (YangChoice) yangContainer1.getChild();
- assertThat(yangChoice1.getName(), is("snack"));
-
- YangContainer yangContainer2 = (YangContainer) yangNode.getChild().getNextSibling();
- assertThat(yangContainer2.getName(), is("food2"));
-
- YangChoice yangChoice2 = (YangChoice) yangContainer2.getChild();
- assertThat(yangChoice2.getName(), is("snack"));
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ConfigListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ConfigListenerTest.java
deleted file mode 100644
index 3a174a7..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ConfigListenerTest.java
+++ /dev/null
@@ -1,494 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.io.IOException;
-import java.util.ListIterator;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangLeafList;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.datamodel.YangStatusType;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-
-/**
- * Test cases for config listener.
- */
-public class ConfigListenerTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks valid config statement.
- */
- @Test
- public void processConfigTrue() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ConfigTrue.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- // Check whether the Config value is set correctly.
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.isConfig(), is(true));
- }
-
- /**
- * Checks valid config statement.
- */
- @Test
- public void processConfigFalse() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ConfigFalse.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- // Check whether the Config value is set correctly.
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.isConfig(), is(false));
- }
-
- /**
- * Checks invalid config statement and expects parser exception.
- */
- @Test
- public void processConfigWithoutStatementEnd() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("missing ';' at '}'");
- YangNode node = manager.getDataModel("src/test/resources/ConfigWithoutStatementEnd.yang");
- }
-
- /**
- * Checks invalid config statement and expects parser exception.
- */
- @Test
- public void processConfigInvalidValue() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("YANG file error : config value invalid is not valid.");
- YangNode node = manager.getDataModel("src/test/resources/ConfigInvalidValue.yang");
- }
-
- /**
- * Checks invalid config statement and expects parser exception.
- */
- @Test
- public void processConfigEmptyValue() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("no viable alternative at input ';'");
- YangNode node = manager.getDataModel("src/test/resources/ConfigEmptyValue.yang");
- }
-
- /**
- * Checks config statement as sub-statement of container.
- */
- @Test
- public void processContainerSubStatementConfig() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ContainerSubStatementConfig.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the config value is set correctly.
- YangContainer container = (YangContainer) yangNode.getChild();
- assertThat(container.getName(), is("valid"));
- assertThat(container.isConfig(), is(true));
-
- // Check whether leaf properties as set correctly.
- ListIterator<YangLeaf> leafIterator = container.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
- assertThat(leafInfo.getUnits(), is("\"seconds\""));
- assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
- assertThat(leafInfo.isMandatory(), is(true));
- assertThat(leafInfo.getStatus(), is(YangStatusType.CURRENT));
- assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
- }
-
- /**
- * Checks config statement as sub-statement of list.
- */
- @Test
- public void processListSubStatementConfig() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ListSubStatementConfig.yang");
-
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the list is child of module and config value is set.
- YangList yangList = (YangList) yangNode.getChild();
- assertThat(yangList.getName(), is("valid"));
- assertThat(yangList.isConfig(), is(true));
-
- // Check whether leaf properties as set correctly.
- ListIterator<YangLeaf> leafIterator = yangList.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
- assertThat(leafInfo.getUnits(), is("\"seconds\""));
- assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
- assertThat(leafInfo.isMandatory(), is(true));
- assertThat(leafInfo.getStatus(), is(YangStatusType.CURRENT));
- assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
- }
-
- /**
- * Checks valid config statement as sub-statement of leaf-list.
- */
- @Test
- public void processLeafListSubStatementConfig() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/LeafListSubStatementConfig.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
- YangLeafList leafListInfo = leafListIterator.next();
-
- // Check whether config value is set correctly.
- assertThat(leafListInfo.getName(), is("invalid-interval"));
- assertThat(leafListInfo.isConfig(), is(true));
- }
-
- /**
- * Checks config statement's default Value.
- */
- @Test
- public void processConfigDefaultValue() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ConfigDefaultValue.yang");
-
- assertThat((node instanceof YangModule), is(true));
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the config value is set correctly.
- YangContainer container = (YangContainer) yangNode.getChild();
- assertThat(container.getName(), is("valid"));
- assertThat(container.isConfig(), is(true));
-
- // Check whether leaf properties as set correctly.
- ListIterator<YangLeaf> leafIterator = container.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.isConfig(), is(true));
- }
-
- /**
- * Checks whether exception is throw when node's parent config set to false,
- * no node underneath it can have config set to true.
- */
- @Test
- public void processConfigFalseParentContainerChildLeafList() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("Internal parser error detected: Unhandled parsed data at container \"valid\" after "
- + "processing.\nError Information: If a container has \"config\" set to \"false\", no node underneath "
- + "it can have \"config\" set to \"true\".");
- YangNode node = manager.getDataModel("src/test/resources/ConfigFalseParentContainerChildLeafList.yang");
- }
-
- /**
- * Checks whether exception is throw when node's parent config set to false,
- * no node underneath it can have config set to true.
- */
- @Test
- public void processConfigFalseParentContainerChildLeaf() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("Internal parser error detected: Unhandled parsed data at container \"valid\" after "
- + "processing.\nError Information: If a container has \"config\" set to \"false\", no node underneath "
- + "it can have \"config\" set to \"true\".");
- YangNode node = manager.getDataModel("src/test/resources/ConfigFalseParentContainerChildLeaf.yang");
- }
-
- /**
- * Checks whether exception is throw when node's parent config set to false,
- * no node underneath it can have config set to true.
- */
- @Test
- public void processConfigFalseParentListChildLeafList() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("Internal parser error detected: Unhandled parsed data at list \"valid\" after"
- + " processing.\nError Information: If a list has \"config\" set to \"false\", no node underneath"
- + " it can have \"config\" set to \"true\".");
- YangNode node = manager.getDataModel("src/test/resources/ConfigFalseParentListChildLeafList.yang");
- }
-
- /**
- * Checks whether exception is throw when node's parent config set to false,
- * no node underneath it can have config set to true.
- */
- @Test
- public void processConfigFalseParentListChildLeaf() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("Internal parser error detected: Unhandled parsed data at list \"valid\" after"
- + " processing.\nError Information: If a list has \"config\" set to \"false\", no node underneath"
- + " it can have \"config\" set to \"true\".");
- YangNode node = manager.getDataModel("src/test/resources/ConfigFalseParentListChildLeaf.yang");
- }
-
- /**
- * Checks when config is not specified, the default is same as the parent's schema node's
- * config statement's value.
- */
- @Test
- public void processNoConfigContainerSubStatementContainer() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/NoConfigContainerSubStatementContainer.yang");
-
- assertThat((node instanceof YangModule), is(true));
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the config value is set correctly.
- YangContainer container = (YangContainer) yangNode.getChild();
- assertThat(container.getName(), is("hello"));
- assertThat(container.isConfig(), is(true));
-
- YangNode containerNode = container.getChild();
- assertThat(containerNode instanceof YangContainer, is(true));
- YangContainer childContainer = (YangContainer) containerNode;
- assertThat(childContainer.getName(), is("valid"));
- assertThat(childContainer.isConfig(), is(true));
- }
-
- /**
- * Checks when config is not specified, the default is same as the parent's schema node's
- * config statement's value.
- */
- @Test
- public void processNoConfigContainerSubStatementLeafList() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/NoConfigContainerSubStatementLeafList.yang");
-
- assertThat((node instanceof YangModule), is(true));
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the config value is set correctly.
- YangContainer container = (YangContainer) yangNode.getChild();
- assertThat(container.getName(), is("valid"));
- assertThat(container.isConfig(), is(true));
-
- ListIterator<YangLeafList> leafListIterator = container.getListOfLeafList().listIterator();
- YangLeafList leafListInfo = leafListIterator.next();
-
- // Check whether config value is set correctly.
- assertThat(leafListInfo.getName(), is("invalid-interval"));
- assertThat(leafListInfo.isConfig(), is(true));
-
- }
-
- /**
- * Checks when config is not specified, the default is same as the parent's schema node's
- * config statement's value.
- */
- @Test
- public void processNoConfigContainerSubStatementLeaf() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/NoConfigContainerSubStatementLeaf.yang");
-
- assertThat((node instanceof YangModule), is(true));
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the config value is set correctly.
- YangContainer container = (YangContainer) yangNode.getChild();
- assertThat(container.getName(), is("valid"));
- assertThat(container.isConfig(), is(true));
-
- // Check whether leaf properties as set correctly.
- ListIterator<YangLeaf> leafIterator = container.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.isConfig(), is(true));
- }
-
- /**
- * Checks when config is not specified, the default is same as the parent's schema node's
- * config statement's value.
- */
- @Test
- public void processNoConfigContainerSubStatementList() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/NoConfigContainerSubStatementList.yang");
-
- assertThat((node instanceof YangModule), is(true));
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the config value is set correctly.
- YangContainer container = (YangContainer) yangNode.getChild();
- assertThat(container.getName(), is("hello"));
- assertThat(container.isConfig(), is(true));
-
- YangNode listNode = container.getChild();
- assertThat(listNode instanceof YangList, is(true));
- YangList childList = (YangList) listNode;
- assertThat(childList.getName(), is("valid"));
- assertThat(childList.isConfig(), is(true));
-
- }
-
- /**
- * Checks when config is not specified, the default is same as the parent's schema node's
- * config statement's value.
- */
- @Test
- public void processNoConfigListSubStatementContainer() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/NoConfigListSubStatementContainer.yang");
-
- assertThat((node instanceof YangModule), is(true));
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the config value is set correctly.
- YangList list1 = (YangList) yangNode.getChild();
- assertThat(list1.getName(), is("list1"));
- assertThat(list1.isConfig(), is(true));
-
- YangNode containerNode = list1.getChild();
- assertThat(containerNode instanceof YangContainer, is(true));
- YangContainer childContainer = (YangContainer) containerNode;
- assertThat(childContainer.getName(), is("container1"));
- assertThat(childContainer.isConfig(), is(true));
- }
-
- /**
- * Checks when config is not specified, the default is same as the parent's schema node's
- * config statement's value.
- */
- @Test
- public void processNoConfigListSubStatementLeaf() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/NoConfigListSubStatementLeaf.yang");
-
- assertThat((node instanceof YangModule), is(true));
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the config value is set correctly.
- YangList list1 = (YangList) yangNode.getChild();
- assertThat(list1.getName(), is("valid"));
- assertThat(list1.isConfig(), is(true));
-
- // Check whether leaf properties as set correctly.
- ListIterator<YangLeaf> leafIterator = list1.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.isConfig(), is(true));
- }
-
- /**
- * Checks when config is not specified, the default is same as the parent's schema node's
- * config statement's value.
- */
- @Test
- public void processNoConfigListSubStatementList() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/NoConfigListSubStatementList.yang");
-
- assertThat((node instanceof YangModule), is(true));
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the config value is set correctly.
- YangList list1 = (YangList) yangNode.getChild();
- assertThat(list1.getName(), is("valid"));
- assertThat(list1.isConfig(), is(true));
-
- YangNode listNode = list1.getChild();
- assertThat(listNode instanceof YangList, is(true));
- YangList childList = (YangList) listNode;
- assertThat(childList.getName(), is("list1"));
- assertThat(childList.isConfig(), is(true));
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ContactListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ContactListenerTest.java
deleted file mode 100644
index 7c8c5e9..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ContactListenerTest.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import java.io.IOException;
-
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-
-/**
- * Test cases for testing contact listener functionality.
- */
-public class ContactListenerTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks if contact listener updates the data model tree.
- */
- @Test
- public void processContactValidEntry() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ContactValidEntry.yang");
-
- // Checks for the contact value in data model tree.
- assertThat(((YangModule) node).getContact(), is("\"WG List: <mailto:spring@ietf.org>\nEditor: "
- + "Stephane Litkowski\n " + "<mailto:stephane.litkowski@orange.com>\""));
- }
-
- /**
- * Checks that contact must be present only once.
- */
- @Test(expected = ParserException.class)
- public void processContactDualEntryTest() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ContactDualEntryTest.yang");
-
- }
-
- /**
- * Checks that contact can have a string value without double quotes.
- */
- @Test
- public void processContactWithoutQuotes() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ContactWithoutQuotes.yang");
-
- // Checks for the contact value in data model tree.
- assertThat(((YangModule) node).getContact(), is("WG"));
- }
-
- /**
- * Checks if contact is not empty.
- */
- @Test(expected = ParserException.class)
- public void processContactWithEmptyString() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ContactWithEmptyString.yang");
- }
-
- /**
- * Checks that contact must be present after namespace.
- */
- @Test(expected = ParserException.class)
- public void processContactIncorrectOrder() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ContactIncorrectOrder.yang");
- }
-}
\ No newline at end of file
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ContainerListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ContainerListenerTest.java
deleted file mode 100644
index 2e13741..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ContainerListenerTest.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.io.IOException;
-import java.util.ListIterator;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.datamodel.YangStatusType;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-
-/**
- * Test cases for testing container listener.
- */
-public class ContainerListenerTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks container statement as sub-statement of module.
- */
- @Test
- public void processModuleSubStatementContainer() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ModuleSubStatementContainer.yang");
-
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the container is child of module
- YangContainer yangContainer = (YangContainer) yangNode.getChild();
- assertThat(yangContainer.getName(), is("valid"));
- }
-
- /**
- * Checks if container identifier in module is duplicate.
- */
- @Test(expected = ParserException.class)
- public void processModuleDuplicateContainer() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ModuleDuplicateContainer.yang");
- }
-
- /**
- * Checks if container identifier in container is duplicate.
- */
- @Test(expected = ParserException.class)
- public void processContainerDuplicateContainer() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ContainerDuplicateContainer.yang");
- }
-
- /**
- * Checks if container identifier in list is duplicate.
- */
- @Test(expected = ParserException.class)
- public void processListDuplicateContainer() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ListDuplicateContainer.yang");
- }
-
- /**
- * Checks if container identifier collides with list at same level.
- */
- @Test(expected = ParserException.class)
- public void processDuplicateContainerAndList() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/DuplicateContainerAndList.yang");
- }
-
- /**
- * Checks container statement as sub-statement of container.
- */
- @Test
- public void processContainerSubStatementContainer() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ContainerSubStatementContainer.yang");
-
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the container is child of module
- YangContainer yangContainer = (YangContainer) yangNode.getChild();
- assertThat(yangContainer.getName(), is("ospf"));
-
- // Check whether the container is child of container
- YangContainer yangContainer1 = (YangContainer) yangContainer.getChild();
- assertThat(yangContainer1.getName(), is("valid"));
- }
-
- /**
- * Checks container statement as sub-statement of list.
- */
- @Test
- public void processListSubStatementContainer() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ListSubStatementContainer.yang");
-
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the list is child of module
- YangList yangList1 = (YangList) yangNode.getChild();
- assertThat(yangList1.getName(), is("ospf"));
-
- ListIterator<String> keyList = yangList1.getKeyList().listIterator();
- assertThat(keyList.next(), is("process-id"));
-
- // Check whether the list is child of list
- YangContainer yangContainer = (YangContainer) yangList1.getChild();
- assertThat(yangContainer.getName(), is("interface"));
- }
-
- /**
- * Checks container with all its sub-statements.
- */
- @Test
- public void processContainerSubStatements() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ContainerSubStatements.yang");
-
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the container is child of module
- YangContainer yangContainer = (YangContainer) yangNode.getChild();
-
- // Check whether container properties as set correctly.
- assertThat(yangContainer.getName(), is("ospf"));
-
- assertThat(yangContainer.isConfig(), is(true));
- assertThat(yangContainer.getPresence(), is("\"ospf logs\""));
- assertThat(yangContainer.getDescription(), is("\"container description\""));
- assertThat(yangContainer.getStatus(), is(YangStatusType.CURRENT));
- assertThat(yangContainer.getReference(), is("\"container reference\""));
-
- // Check whether leaf properties as set correctly.
- ListIterator<YangLeaf> leafIterator = yangContainer.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
- assertThat(leafInfo.getUnits(), is("\"seconds\""));
- assertThat(leafInfo.getStatus(), is(YangStatusType.CURRENT));
- assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
- }
-
- /**
- * Checks cardinality of sub-statements of container.
- */
- @Test
- public void processContainerSubStatementCardinality() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("YANG file error: \"reference\" is defined more than once in \"container valid\".");
- YangNode node = manager.getDataModel("src/test/resources/ContainerSubStatementCardinality.yang");
- }
-
- /**
- * Checks container as root node.
- */
- @Test
- public void processContainerRootNode() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("no viable alternative at input 'container'");
- YangNode node = manager.getDataModel("src/test/resources/ContainerRootNode.yang");
- }
-
- /**
- * Checks invalid identifier for container statement.
- */
- @Test
- public void processContainerInvalidIdentifier() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("YANG file error : container name 1valid is not valid.");
- YangNode node = manager.getDataModel("src/test/resources/ContainerInvalidIdentifier.yang");
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/Decimal64ListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/Decimal64ListenerTest.java
deleted file mode 100644
index 9a0373e..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/Decimal64ListenerTest.java
+++ /dev/null
@@ -1,636 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.YangDecimal64;
-import org.onosproject.yangutils.datamodel.YangDerivedInfo;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.datamodel.YangRangeInterval;
-import org.onosproject.yangutils.datamodel.YangRangeRestriction;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.YangTypeDef;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.linker.exceptions.LinkerException;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import java.io.IOException;
-import java.math.BigDecimal;
-import java.util.ListIterator;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-
-/**
- * Test cases for decimal64 listener.
- */
-public class Decimal64ListenerTest {
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks decimal64 statement with fraction-digits.
- */
- @Test
- public void processDecimal64TypeStatement() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/decimal64/Decimal64TypeStatement.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("validDecimal"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("decimal64"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.DECIMAL64));
- assertThat(((YangDecimal64) leafInfo.getDataType().getDataTypeExtendedInfo()).getFractionDigit(),
- is(2));
- }
-
- /**
- * Checks decimal64 statement with range statement.
- */
- @Test
- public void processDecimal64TypeWithRangeStatement() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/decimal64/Decimal64TypeWithRangeStatement.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("validDecimal"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("decimal64"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.DECIMAL64));
- assertThat(((YangDecimal64) leafInfo.getDataType().getDataTypeExtendedInfo()).getFractionDigit(),
- is(8));
-
- YangRangeRestriction rangeRestriction = ((YangDecimal64<YangRangeRestriction>) leafInfo.getDataType()
- .getDataTypeExtendedInfo())
- .getRangeRestrictedExtendedInfo();
-
- ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
- .listIterator();
- YangRangeInterval rangeInterval = rangeListIterator.next();
- assertThat(((YangDecimal64) rangeInterval.getStartValue()).getValue().doubleValue(), is(-92233720368.54775808));
- assertThat(((YangDecimal64) rangeInterval.getEndValue()).getValue().doubleValue(), is(92233720368.54775807));
- }
-
- /**
- * Successful validation of decimal64 statement.
- */
- @Test
- public void processDecimal64ValueSuccessfulValidation() throws IOException, ParserException, DataModelException {
-
- YangNode node = manager.getDataModel("src/test/resources/decimal64/Decimal64TypeValidation.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
- YangDecimal64 decimal64 = (YangDecimal64) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- assertThat(leafInfo.getName(), is("validDecimal"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("decimal64"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.DECIMAL64));
- assertThat(decimal64.getFractionDigit(), is(18));
-
- decimal64.setValue(new BigDecimal(-9.223372036854775808));
- decimal64.validateDecimal64();
- decimal64.setValue(new BigDecimal(9.223372036854775807));
- decimal64.validateDecimal64();
- }
-
- /**
- * Failure validation of decimal64 statement.
- */
- @Test
- public void processDecimal64ValueFailureValidation() throws IOException, ParserException, DataModelException {
- thrown.expect(DataModelException.class);
- thrown.expectMessage(
- "YANG file error : value is not in decimal64 range.");
-
- YangNode node = manager.getDataModel("src/test/resources/decimal64/Decimal64TypeValidation.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
- YangDecimal64 decimal64 = (YangDecimal64) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- assertThat(leafInfo.getName(), is("validDecimal"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("decimal64"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.DECIMAL64));
- assertThat(decimal64.getFractionDigit(), is(18));
-
- decimal64.setValue(new BigDecimal(-92233720368547758.08));
- // validation should fail
- decimal64.validateDecimal64();
- }
-
- /**
- * Validation of invalid maximum value limit of fraction-digits.
- */
- @Test
- public void processDecimal64InvalidMaxFraction() throws IOException, ParserException, DataModelException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("YANG file error : fraction-digits value should be between 1 and 18.");
-
- manager.getDataModel("src/test/resources/decimal64/Decimal64TypeInvalidMaxValueFraction.yang");
- }
-
- /**
- * Validation of invalid (0) minimum value limit of fraction-digits.
- */
- @Test
- public void processDecimal64InvalidMinFraction1() throws IOException, ParserException, DataModelException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("YANG file error : fraction-digits value should be between 1 and 18.");
-
- manager.getDataModel("src/test/resources/decimal64/Decimal64TypeInvalidMinValueFraction1.yang");
- }
-
- /**
- * Validation of invalid (-1) minimum value limit of fraction-digits.
- */
- @Test
- public void processDecimal64InvalidMinFraction2() throws IOException, ParserException, DataModelException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("YANG file error : fraction-digits value should be between 1 and 18.");
-
- manager.getDataModel("src/test/resources/decimal64/Decimal64TypeInvalidMinValueFraction2.yang");
- }
-
- /**
- * Validation of decimal64 range statement.
- */
- @Test
- public void processDecimal64TypeWithMultiValueRangeStatement() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/decimal64/Decimal64TypeWithMultiValueRangeStmnt.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("validDecimal"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("decimal64"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.DECIMAL64));
- assertThat(((YangDecimal64) leafInfo.getDataType().getDataTypeExtendedInfo()).getFractionDigit(),
- is(18));
-
- YangRangeRestriction rangeRestriction = ((YangDecimal64<YangRangeRestriction>) leafInfo.getDataType()
- .getDataTypeExtendedInfo())
- .getRangeRestrictedExtendedInfo();
-
- ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
- .listIterator();
- // range "1 .. 3.14 | 10 | 20..max";
- // check first range 1 .. 3.14
- YangRangeInterval rangeInterval = rangeListIterator.next();
- assertThat(((YangDecimal64) rangeInterval.getStartValue()).getValue().doubleValue(), is(-9.22));
- assertThat(((YangDecimal64) rangeInterval.getEndValue()).getValue().doubleValue(), is(7.22));
- // check second range 10
- rangeInterval = rangeListIterator.next();
- assertThat(((YangDecimal64) rangeInterval.getStartValue()).getValue().doubleValue(), is(8.0));
- assertThat(((YangDecimal64) rangeInterval.getEndValue()).getValue().doubleValue(), is(8.0));
- // check third range 20..max
- rangeInterval = rangeListIterator.next();
- assertThat(((YangDecimal64) rangeInterval.getStartValue()).getValue().doubleValue(), is(9.0));
- assertThat(((YangDecimal64) rangeInterval.getEndValue()).getValue().doubleValue(), is(9.223372036854776));
- }
-
- /**
- * Validation of decimal64 with invalid range.
- */
- @Test
- public void processDecimal64InvalidRange() throws IOException, ParserException, DataModelException {
- thrown.expect(ParserException.class);
- thrown.expectMessage(
- "YANG file error : decimal64 validation failed.decimal64 in 7 at 12" +
- " in src/test/resources/decimal64/Decimal64TypeInvalidRangeStmnt.yang\"");
-
- manager.getDataModel("src/test/resources/decimal64/Decimal64TypeInvalidRangeStmnt.yang");
- }
-
- /**
- * Validation of decimal64 without fraction-digits. Fraction-digits must be present for decimal64.
- */
- @Test
- public void processDecimal64WithoutFraction() throws IOException, ParserException, DataModelException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("YANG file error : a type decimal64 must have fraction-digits statement.");
-
- manager.getDataModel("src/test/resources/decimal64/Decimal64TypeWithoutFraction.yang");
- }
-
- /**
- * Checks decimal64 with typedef statement.
- */
- @Test
- public void processDecimal64TypedefStatement() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/decimal64/Decimal64TypedefStatement.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("setFourDecimal"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("validDecimal"));
- YangType<YangDerivedInfo> derivedInfoType = (YangType<YangDerivedInfo>) leafInfo.getDataType();
- YangDerivedInfo derivedInfo = (YangDerivedInfo) derivedInfoType.getDataTypeExtendedInfo();
- YangTypeDef typedef = (YangTypeDef) derivedInfo.getReferredTypeDef();
- assertThat(typedef.getName(), is("validDecimal"));
-
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.DERIVED));
- YangType type = typedef.getTypeList().iterator().next();
- assertThat(type.getDataType(), is(YangDataTypes.DECIMAL64));
- assertThat(type.getDataTypeName(), is("decimal64"));
- YangType<YangDecimal64> decimal64Type = (YangType<YangDecimal64>) typedef.getTypeList().iterator().next();
- YangDecimal64 decimal64 = decimal64Type.getDataTypeExtendedInfo();
- assertThat(decimal64.getFractionDigit(), is(4));
- }
-
- /**
- * Checks decimal64 with multiple typedef statement.
- */
- @Test
- public void processDecimal64MultiTypedefStatement() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/decimal64/Decimal64MultiTypedefStatement.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- // check leaf type
- assertThat(leafInfo.getName(), is("lowerDecimal"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("midDecimal"));
- YangType<YangDerivedInfo> derivedInfoType = (YangType<YangDerivedInfo>) leafInfo.getDataType();
- assertThat(derivedInfoType.getDataType(), is(YangDataTypes.DERIVED));
- YangDerivedInfo derivedInfo = (YangDerivedInfo) derivedInfoType.getDataTypeExtendedInfo();
-
- // check previous typedef
- YangTypeDef prevTypedef = (YangTypeDef) derivedInfo.getReferredTypeDef();
- assertThat(prevTypedef.getName(), is("midDecimal"));
- YangType type = prevTypedef.getTypeList().iterator().next();
- assertThat(type.getDataType(), is(YangDataTypes.DERIVED));
- derivedInfo = (YangDerivedInfo) type.getDataTypeExtendedInfo();
-
- // check top typedef
- YangTypeDef topTypedef = (YangTypeDef) derivedInfo.getReferredTypeDef();
- assertThat(topTypedef.getName(), is("topDecimal"));
- type = topTypedef.getTypeList().iterator().next();
- assertThat(type.getDataType(), is(YangDataTypes.DECIMAL64));
- assertThat(type.getDataTypeName(), is("decimal64"));
- YangType<YangDecimal64> decimal64Type = (YangType<YangDecimal64>) type;
- YangDecimal64 decimal64 = decimal64Type.getDataTypeExtendedInfo();
- assertThat(decimal64.getFractionDigit(), is(4));
- }
-
- /**
- * Checks decimal64 with multiple typedef with single range statement.
- * Range value in typedef statement.
- */
- @Test
- public void processDecimal64MultiTypedefRangeStatement() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/decimal64/Decimal64MultiTypedefRangeStatement.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- // check leaf type
- assertThat(leafInfo.getName(), is("lowerDecimal"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("midDecimal"));
- YangType<YangDerivedInfo> derivedInfoType = (YangType<YangDerivedInfo>) leafInfo.getDataType();
- assertThat(derivedInfoType.getDataType(), is(YangDataTypes.DERIVED));
- YangDerivedInfo derivedInfo = (YangDerivedInfo) derivedInfoType.getDataTypeExtendedInfo();
-
- // Check range restriction
- YangRangeRestriction rangeRestriction = (YangRangeRestriction) derivedInfo.getResolvedExtendedInfo();
- ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
- .listIterator();
- YangRangeInterval rangeInterval = rangeListIterator.next();
- assertThat(((YangDecimal64) rangeInterval.getStartValue()).getValue().doubleValue(), is(1.0));
- assertThat(((YangDecimal64) rangeInterval.getEndValue()).getValue().doubleValue(), is(12.0));
-
- // check previous typedef
- YangTypeDef prevTypedef = (YangTypeDef) derivedInfo.getReferredTypeDef();
- assertThat(prevTypedef.getName(), is("midDecimal"));
- YangType type = prevTypedef.getTypeList().iterator().next();
- assertThat(type.getDataType(), is(YangDataTypes.DERIVED));
- derivedInfo = (YangDerivedInfo) type.getDataTypeExtendedInfo();
-
- // check top typedef
- YangTypeDef topTypedef = (YangTypeDef) derivedInfo.getReferredTypeDef();
- assertThat(topTypedef.getName(), is("topDecimal"));
- type = topTypedef.getTypeList().iterator().next();
- assertThat(type.getDataType(), is(YangDataTypes.DECIMAL64));
- assertThat(type.getDataTypeName(), is("decimal64"));
- YangType<YangDecimal64> decimal64Type = (YangType<YangDecimal64>) type;
- YangDecimal64 decimal64 = decimal64Type.getDataTypeExtendedInfo();
- assertThat(decimal64.getFractionDigit(), is(4));
-
- // Check range restriction
- rangeRestriction = (YangRangeRestriction) decimal64.getRangeRestrictedExtendedInfo();
- rangeListIterator = rangeRestriction.getAscendingRangeIntervals().listIterator();
- rangeInterval = rangeListIterator.next();
- assertThat(((YangDecimal64) rangeInterval.getStartValue()).getValue().doubleValue(), is(1.0));
- assertThat(((YangDecimal64) rangeInterval.getEndValue()).getValue().doubleValue(), is(12.0));
- }
-
- /**
- * Checks decimal64 with multiple typedef with single range statement.
- * Range value in leaf statement.
- */
- @Test
- public void processDecimal64MultiTypedefRangeInLeafStatement() throws IOException, ParserException {
-
- YangNode node = manager
- .getDataModel("src/test/resources/decimal64/Decimal64MultiTypedefRangeInLeafStatement.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- // check leaf type
- assertThat(leafInfo.getName(), is("lowerDecimal"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("midDecimal"));
- YangType<YangDerivedInfo> derivedInfoType = (YangType<YangDerivedInfo>) leafInfo.getDataType();
- assertThat(derivedInfoType.getDataType(), is(YangDataTypes.DERIVED));
- YangDerivedInfo derivedInfo = (YangDerivedInfo) derivedInfoType.getDataTypeExtendedInfo();
-
- // Check range restriction
- YangRangeRestriction rangeRestriction = (YangRangeRestriction) derivedInfo.getResolvedExtendedInfo();
- ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
- .listIterator();
- YangRangeInterval rangeInterval = rangeListIterator.next();
- assertThat(((YangDecimal64) rangeInterval.getStartValue()).getValue().doubleValue(), is(1.0));
- assertThat(((YangDecimal64) rangeInterval.getEndValue()).getValue().doubleValue(), is(12.0));
-
- // check previous typedef
- YangTypeDef prevTypedef = (YangTypeDef) derivedInfo.getReferredTypeDef();
- assertThat(prevTypedef.getName(), is("midDecimal"));
- YangType type = prevTypedef.getTypeList().iterator().next();
- assertThat(type.getDataType(), is(YangDataTypes.DERIVED));
- derivedInfo = (YangDerivedInfo) type.getDataTypeExtendedInfo();
-
- // check top typedef
- YangTypeDef topTypedef = (YangTypeDef) derivedInfo.getReferredTypeDef();
- assertThat(topTypedef.getName(), is("topDecimal"));
- type = topTypedef.getTypeList().iterator().next();
- assertThat(type.getDataType(), is(YangDataTypes.DECIMAL64));
- assertThat(type.getDataTypeName(), is("decimal64"));
- YangType<YangDecimal64> decimal64Type = (YangType<YangDecimal64>) type;
- YangDecimal64 decimal64 = decimal64Type.getDataTypeExtendedInfo();
- assertThat(decimal64.getFractionDigit(), is(4));
- }
-
- /**
- * Checks decimal64 with multiple typedef with multiple range statement.
- * Having more restricted range at leaf.
- */
- @Test
- public void processDecimal64MultiTypedefMultipleRangeStatement() throws IOException, ParserException {
-
- YangNode node = manager
- .getDataModel("src/test/resources/decimal64/Decimal64MultiTypedefMultiRangeStatement.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- // check leaf type
- assertThat(leafInfo.getName(), is("lowerDecimal"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("midDecimal"));
- YangType<YangDerivedInfo> derivedInfoType = (YangType<YangDerivedInfo>) leafInfo.getDataType();
- assertThat(derivedInfoType.getDataType(), is(YangDataTypes.DERIVED));
- YangDerivedInfo derivedInfo = (YangDerivedInfo) derivedInfoType.getDataTypeExtendedInfo();
-
- // Check range restriction
- YangRangeRestriction rangeRestriction = (YangRangeRestriction) derivedInfo.getResolvedExtendedInfo();
-
- ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
- .listIterator();
- YangRangeInterval rangeInterval = rangeListIterator.next();
- assertThat(((YangDecimal64) rangeInterval.getStartValue()).getValue().doubleValue(), is(4.0));
- assertThat(((YangDecimal64) rangeInterval.getEndValue()).getValue().doubleValue(), is(11.0));
-
- // check previous typedef
- YangTypeDef prevTypedef = (YangTypeDef) derivedInfo.getReferredTypeDef();
- assertThat(prevTypedef.getName(), is("midDecimal"));
- YangType type = prevTypedef.getTypeList().iterator().next();
- assertThat(type.getDataType(), is(YangDataTypes.DERIVED));
- derivedInfo = (YangDerivedInfo) type.getDataTypeExtendedInfo();
-
- // check top typedef
- YangTypeDef topTypedef = (YangTypeDef) derivedInfo.getReferredTypeDef();
- assertThat(topTypedef.getName(), is("topDecimal"));
- type = topTypedef.getTypeList().iterator().next();
- assertThat(type.getDataType(), is(YangDataTypes.DECIMAL64));
- assertThat(type.getDataTypeName(), is("decimal64"));
- YangType<YangDecimal64> decimal64Type = (YangType<YangDecimal64>) type;
- YangDecimal64 decimal64 = decimal64Type.getDataTypeExtendedInfo();
- assertThat(decimal64.getFractionDigit(), is(4));
-
- // Check range restriction
- rangeRestriction = (YangRangeRestriction) decimal64.getRangeRestrictedExtendedInfo();
- rangeListIterator = rangeRestriction.getAscendingRangeIntervals().listIterator();
- rangeInterval = rangeListIterator.next();
- assertThat(((YangDecimal64) rangeInterval.getStartValue()).getValue().doubleValue(), is(1.0));
- assertThat(((YangDecimal64) rangeInterval.getEndValue()).getValue().doubleValue(), is(12.0));
- }
-
- /**
- * Checks decimal64 with multiple typedef with multiple range statement.
- * But having more restricted range at top of typedef.
- */
- @Test
- public void processDecimal64MultiTypedefMultiInvalidRangeStatement() throws IOException, LinkerException {
- thrown.expect(LinkerException.class);
- thrown.expectMessage(
- "Range interval doesn't fall within the referred restriction ranges" +
- " restriction ranges. in 0 at 0 in src/test/resources/decimal64/" +
- "Decimal64MultiTypedefMultiInvalidRangeStatement.yang\"type." +
- " in 19 at 12 in src/test/resources/decimal64/Decimal64MultiTypedef" +
- "MultiInvalidRangeStatement.yang");
-
- manager.getDataModel("src/test/resources/decimal64/Decimal64MultiTypedefMultiInvalidRangeStatement.yang");
- }
-
- /**
- * Checks decimal64 with multiple typedef with max range statement.
- */
- @Test
- public void processDecimal64MultiTypedefWithMaxRange() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/decimal64/Decimal64MultiTypedefWithMaxRange.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- // check leaf type
- assertThat(leafInfo.getName(), is("lowerDecimal"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("midDecimal"));
- YangType<YangDerivedInfo> derivedInfoType = (YangType<YangDerivedInfo>) leafInfo.getDataType();
- assertThat(derivedInfoType.getDataType(), is(YangDataTypes.DERIVED));
- YangDerivedInfo derivedInfo = (YangDerivedInfo) derivedInfoType.getDataTypeExtendedInfo();
-
- // Check range restriction
- YangRangeRestriction rangeRestriction = (YangRangeRestriction) derivedInfo.getResolvedExtendedInfo();
-
- ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
- .listIterator();
- YangRangeInterval rangeInterval = rangeListIterator.next();
- assertThat(((YangDecimal64) rangeInterval.getStartValue()).getValue().doubleValue(), is(4.0));
- assertThat(((YangDecimal64) rangeInterval.getEndValue()).getValue().doubleValue(), is(12.0));
-
- // check previous typedef
- YangTypeDef prevTypedef = (YangTypeDef) derivedInfo.getReferredTypeDef();
- assertThat(prevTypedef.getName(), is("midDecimal"));
- YangType type = prevTypedef.getTypeList().iterator().next();
- assertThat(type.getDataType(), is(YangDataTypes.DERIVED));
- derivedInfo = (YangDerivedInfo) type.getDataTypeExtendedInfo();
-
- // check top typedef
- YangTypeDef topTypedef = (YangTypeDef) derivedInfo.getReferredTypeDef();
- assertThat(topTypedef.getName(), is("topDecimal"));
- type = topTypedef.getTypeList().iterator().next();
- assertThat(type.getDataType(), is(YangDataTypes.DECIMAL64));
- assertThat(type.getDataTypeName(), is("decimal64"));
- YangType<YangDecimal64> decimal64Type = (YangType<YangDecimal64>) type;
- YangDecimal64 decimal64 = decimal64Type.getDataTypeExtendedInfo();
- assertThat(decimal64.getFractionDigit(), is(4));
-
- // Check range restriction
- rangeRestriction = (YangRangeRestriction) decimal64.getRangeRestrictedExtendedInfo();
- rangeListIterator = rangeRestriction.getAscendingRangeIntervals().listIterator();
- rangeInterval = rangeListIterator.next();
- assertThat(((YangDecimal64) rangeInterval.getStartValue()).getValue().doubleValue(), is(1.0));
- assertThat(((YangDecimal64) rangeInterval.getEndValue()).getValue().doubleValue(), is(12.0));
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/DefaultListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/DefaultListenerTest.java
deleted file mode 100644
index b65b948..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/DefaultListenerTest.java
+++ /dev/null
@@ -1,525 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.io.IOException;
-import java.util.ListIterator;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.YangDerivedInfo;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangChoice;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.YangTypeDef;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.DataTypeException;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangInt64;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-
-/**
- * Test cases for testing default listener functionality.
- */
-public class DefaultListenerTest {
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks if default value is set correctly.
- */
- @Test
- public void processDefaultValueInLeafSubStatement() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/default/DefaultValueInLeafSubStatement.yang");
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- 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.getDefaultValueInString(), is("1"));
- }
-
- /**
- * Validates default invalid value in leaf.
- */
- @Test
- public void processDefaultInalueInLeafSubStatement() throws IOException, ParserException {
-
- thrown.expect(DataTypeException.class);
- thrown.expectMessage("YANG file error : Input value \"x\" is not a valid uint16.");
-
- manager.getDataModel("src/test/resources/default/DefaultInvalidValueInLeafSubStatement.yang");
- }
-
- /**
- * Validates default case value in choice statement.
- */
- @Test
- public void processDefaultCaseInChoiceSubStatement() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/default/DefaultCaseInChoiceSubStatement.yang");
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- YangContainer yangContainer = (YangContainer) yangNode.getChild();
- assertThat(yangContainer.getName(), is("food"));
-
- YangChoice yangChoice = (YangChoice) yangContainer.getChild();
- assertThat(yangChoice.getName(), is("snack"));
- assertThat(yangChoice.getDefaultValueInString(), is("sports-arena"));
- }
-
- /**
- * Validates default invalide case in choice statement.
- */
- @Test
- public void processDefaultInvalidCaseInChoiceSubStatement() throws IOException, ParserException {
-
- thrown.expect(ParserException.class);
- thrown.expectMessage("Internal parser error detected: Invalid content in choice \"snack\" after processing.");
-
- manager.getDataModel("src/test/resources/default/DefaultInvalidValueInChoiceSubStmt.yang");
- }
-
- /**
- * Validates default value in typedef.
- */
- @Test
- public void processDefaultInTypedef() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/default/DefaultValueInTypeDef.yang");
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // check typedef
- YangTypeDef typedef = (YangTypeDef) yangNode.getChild();
- assertThat(typedef.getName(), is("topInt"));
- assertThat(typedef.getDefaultValueInString(), is("10"));
-
- YangType type = typedef.getTypeList().iterator().next();
- assertThat(type.getDataType(), is(YangDataTypes.INT64));
- assertThat(type.getDataTypeName(), is("int64"));
-
- // check leaf
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
- assertThat(leafInfo.getName(), is("myValue"));
-
- // Check leaf reffered typedef
- assertThat(leafInfo.getDataType().getDataTypeName(), is("topInt"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.DERIVED));
- YangType<YangDerivedInfo> typeDerived = (YangType<YangDerivedInfo>) leafInfo.getDataType();
- YangDerivedInfo derivedInfo = (YangDerivedInfo) typeDerived.getDataTypeExtendedInfo();
- YangTypeDef prevTypedef = (YangTypeDef) derivedInfo.getReferredTypeDef();
- assertThat(prevTypedef.getName(), is("topInt"));
- assertThat(prevTypedef.getDefaultValueInString(), is("10"));
- YangType topType = prevTypedef.getTypeList().iterator().next();
- assertThat(topType.getDataType(), is(YangDataTypes.INT64));
- assertThat(topType.getDataTypeName(), is("int64"));
- YangType<YangInt64> typeInt64 = (YangType<YangInt64>) topType;
- YangInt64 int64Obj = typeInt64.getDataTypeExtendedInfo();
- }
-
- /**
- * Validates invalid default value in typedef.
- */
- @Test
- public void processInvalidDefaultValueInTypdeDef() throws IOException, ParserException {
- thrown.expect(DataTypeException.class);
- thrown.expectMessage("YANG file error : Input value \"x\" is not a valid int64.");
-
- manager.getDataModel("src/test/resources/default/DefaultInvalidValueInTypeDef.yang");
- }
-
- /**
- * Validates default invalid value in typedef.
- */
- @Test
- public void processDefaultInvalidValueInTypedef() throws IOException, ParserException {
- thrown.expect(DataTypeException.class);
- thrown.expectMessage("YANG file error : Input value \"0\" is not a valid INT32");
-
- manager.getDataModel("src/test/resources/default/DefaultInvalidValueWithRangeInTypedef.yang");
- }
-
- /**
- * Validates default value decimal64 in leaf.
- */
- @Test
- public void processDefaultValueDecimal64InLeaf() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/default/DefaultValueDecimal64InLeaf.yang");
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // check leaf
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- // check the default value
- // This default value is verified by YangType.isValidValue() called from LeafListener.processLeafExit()
- assertThat(leafInfo.getName(), is("mydecimal"));
- assertThat(leafInfo.getDefaultValueInString(), is("5"));
- }
-
- /**
- * Validates default invalid value decimal64 in leaf.
- */
- @Test
- public void processDefaultInvalidValueDecimal64InLeaf() throws IOException, ParserException {
- thrown.expect(DataTypeException.class);
- thrown.expectMessage("YANG file error : Input value \"x\" is not a valid decimal64.");
-
- manager.getDataModel("src/test/resources/default/DefaultInvalidValueDecimal64InLeaf.yang");
- }
-
- /**
- * Validates default value string in leaf.
- */
- @Test
- public void processDefaultValueStringInLeaf() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/default/DefaultValueStringInLeaf.yang");
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // check leaf
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- // check the default value
- // This default value is verified by YangType.isValidValue() called from LeafListener.processLeafExit()
- assertThat(leafInfo.getName(), is("MyString"));
- assertThat(leafInfo.getDefaultValueInString(), is("2bB"));
- }
-
- /**
- * Validates default invalid value string in leaf.
- */
- @Test
- public void processDefaultInvalidValueStringInLeaf() throws IOException, ParserException {
- thrown.expect(DataTypeException.class);
- thrown.expectMessage("YANG file error : Input value \"2bB2bB\" is not a valid STRING");
-
- manager.getDataModel("src/test/resources/default/DefaultInvalidValueStringInLeaf.yang");
- }
-
- /**
- * Validates default value boolean in leaf.
- */
- @Test
- public void processDefaultValueBooleanInLeaf() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/default/DefaultValueBooleanInLeaf.yang");
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // check leaf
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- // check the default value
- // This default value is verified by YangType.isValidValue() called from LeafListener.processLeafExit()
- assertThat(leafInfo.getName(), is("myboolean"));
- assertThat(leafInfo.getDefaultValueInString(), is("true"));
- }
-
- /**
- * Validates default invalid value boolean in leaf.
- */
- @Test
- public void processDefaultInvalidValueBooleanInLeaf() throws IOException, ParserException {
- thrown.expect(DataTypeException.class);
- thrown.expectMessage("YANG file error : Input value \"yes\" is not a valid BOOLEAN");
-
- manager.getDataModel("src/test/resources/default/DefaultInvalidValueBooleanInLeaf.yang");
- }
-
- /**
- * Validates default value enumeration in leaf.
- */
- @Test
- public void processDefaultValueEnumberationInLeaf() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/default/DefaultValueEnumerationInLeaf.yang");
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // check leaf
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- // check the default value
- // This default value is verified by YangType.isValidValue() called from LeafListener.processLeafExit()
- assertThat(leafInfo.getName(), is("myenum"));
- assertThat(leafInfo.getDefaultValueInString(), is("one"));
- }
-
- /**
- * Validates default invalid value enumeration in leaf.
- */
- @Test
- public void processDefaultInvalidValueEnumberationInLeaf() throws IOException, ParserException {
- thrown.expect(DataTypeException.class);
- thrown.expectMessage("YANG file error : Input value \"xyz\" is not a valid ENUMERATION");
-
- manager.getDataModel("src/test/resources/default/DefaultInvalidValueEnumerationInLeaf.yang");
- }
-
- /**
- * Validates default value bits in leaf.
- */
- @Test
- public void processDefaultValueBitsInLeaf() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/default/DefaultValueBitsInLeaf.yang");
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // check leaf
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- // check the default value
- // This default value is verified by YangType.isValidValue() called from LeafListener.processLeafExit()
- assertThat(leafInfo.getName(), is("mybits"));
- assertThat(leafInfo.getDefaultValueInString(), is("auto-sense-speed"));
- }
-
- /**
- * Validates default invalid value bits in leaf.
- */
- @Test
- public void processDefaultInvalidValueBitsInLeaf() throws IOException, ParserException {
- thrown.expect(DataTypeException.class);
- thrown.expectMessage("YANG file error : Input value \"xyz\" is not a valid BITS");
-
- manager.getDataModel("src/test/resources/default/DefaultInvalidValueBitsInLeaf.yang");
- }
-
- /**
- * Validates default value binary in leaf.
- */
- @Test
- public void processDefaultValueBinaryInLeaf() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/default/DefaultValueBinaryInLeaf.yang");
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // check leaf
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- // check the default value
- // This default value is verified by YangType.isValidValue() called from LeafListener.processLeafExit()
- assertThat(leafInfo.getName(), is("message"));
- assertThat(leafInfo.getDefaultValueInString(), is("10010010"));
- }
-
- /**
- * Validates default invalid value binary in leaf.
- */
- @Test
- public void processDefaultInvlaidValueBinaryInLeaf() throws IOException, ParserException {
- thrown.expect(DataTypeException.class);
- thrown.expectMessage("YANG file error : Input value \"000\" is not a valid BINARY");
-
- manager.getDataModel("src/test/resources/default/DefaultInvalidValueBinaryInLeaf.yang");
- }
-
- /**
- * Validates default value empty in leaf.
- */
- @Test
- public void processDefaultValueEmptyInLeaf() throws IOException, ParserException {
- thrown.expect(DataTypeException.class);
- thrown.expectMessage("YANG file error : Input value \"something\" is not allowed for a data type EMPTY");
-
- manager.getDataModel("src/test/resources/default/DefaultValueEmptyInLeaf.yang");
- }
-
- /**
- * Validates default value union in leaf.
- */
- @Test
- public void processDefaultValueUnionInLeaf() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/default/DefaultValueUnionInLeaf.yang");
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // check leaf
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- // check the default value
- // This default value is verified by YangType.isValidValue() called from LeafListener.processLeafExit()
- assertThat(leafInfo.getName(), is("message"));
- assertThat(leafInfo.getDefaultValueInString(), is("unbounded"));
- }
-
- /**
- * Validates default invalid value union in leaf.
- */
- @Test
- public void processDefaultInvalidValueUnionInLeaf() throws IOException, ParserException {
- thrown.expect(DataTypeException.class);
- thrown.expectMessage("YANG file error : Input value \"xyz\" is not a valid UNION");
-
- manager.getDataModel("src/test/resources/default/DefaultInvalidValueUnionInLeaf.yang");
- }
-
- /**
- * Validates default value in multiple typedef.
- */
- @Test
- public void processDefaultInMultiTypedef() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/default/DefaultValueInMultiTypeDef.yang");
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // check typedef
- YangTypeDef typedef = (YangTypeDef) yangNode.getChild();
- assertThat(typedef.getName(), is("topInt"));
- assertThat(typedef.getDefaultValueInString(), is("10"));
-
- YangType type = typedef.getTypeList().iterator().next();
- assertThat(type.getDataType(), is(YangDataTypes.INT64));
- assertThat(type.getDataTypeName(), is("int64"));
-
- // check leaf
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
- assertThat(leafInfo.getName(), is("lowInt"));
-
- // check leaf type
- assertThat(leafInfo.getName(), is("lowInt"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("midInt"));
- YangType<YangDerivedInfo> derivedInfoType = (YangType<YangDerivedInfo>) leafInfo.getDataType();
- assertThat(derivedInfoType.getDataType(), is(YangDataTypes.DERIVED));
- YangDerivedInfo derivedInfo = (YangDerivedInfo) derivedInfoType.getDataTypeExtendedInfo();
-
- // check previous typedef
- YangTypeDef prevTypedef = (YangTypeDef) derivedInfo.getReferredTypeDef();
- assertThat(prevTypedef.getName(), is("midInt"));
- type = prevTypedef.getTypeList().iterator().next();
- assertThat(type.getDataType(), is(YangDataTypes.DERIVED));
- derivedInfo = (YangDerivedInfo) type.getDataTypeExtendedInfo();
-
- // check top typedef
- YangTypeDef topTypedef = (YangTypeDef) derivedInfo.getReferredTypeDef();
- assertThat(topTypedef.getName(), is("topInt"));
- assertThat(topTypedef.getDefaultValueInString(), is("10"));
- YangType topType = topTypedef.getTypeList().iterator().next();
- assertThat(topType.getDataType(), is(YangDataTypes.INT64));
- assertThat(topType.getDataTypeName(), is("int64"));
- YangType<YangInt64> typeInt64 = (YangType<YangInt64>) topType;
- YangInt64 int64Obj = typeInt64.getDataTypeExtendedInfo();
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/DescriptionListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/DescriptionListenerTest.java
deleted file mode 100644
index c01ad54..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/DescriptionListenerTest.java
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.io.IOException;
-import java.util.ListIterator;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangLeafList;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.datamodel.YangStatusType;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-
-/**
- * Test cases for description listener.
- */
-public class DescriptionListenerTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks valid description statement.
- */
- @Test
- public void processDescriptionValidStatement() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/DescriptionValidStatement.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- // Check whether the description is set correctly.
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
- }
-
- /**
- * Checks whether exception is thrown for invalid description statement.
- */
- @Test
- public void processDescriptionWithoutStatementEnd() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("extraneous input '}' expecting {';', '+'}");
- YangNode node = manager.getDataModel("src/test/resources/DescriptionWithoutStatementEnd.yang");
- }
-
- /**
- * Checks valid description statement as sub-statement of module.
- */
- @Test
- public void processModuleSubStatementDescription() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ModuleSubStatementDescription.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the description is set correctly.
- assertThat(yangNode.getDescription(), is("\"Interval before a route is declared invalid\""));
- }
-
- /**
- * Checks valid description statement as sub-statement of module.
- */
- @Test
- public void processDescriptionEmptyStatement() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/DescriptionEmptyStatement.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the description is set correctly.
- assertThat(yangNode.getDescription(), is("\"\""));
- }
-
- /**
- * Checks valid description statement as sub-statement of revision.
- */
- @Test
- public void processRevisionSubStatementRevision() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/RevisionSubStatementRevision.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the description is set correctly.
- assertThat(yangNode.getDescription(), is("\"module description\""));
- assertThat(yangNode.getRevision().getDescription(), is("\"revision description\""));
- }
-
- /**
- * Checks description statement as sub-statement of container.
- */
- @Test
- public void processContainerSubStatementDescription() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ContainerSubStatementDescription.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the description value is set correctly.
- YangContainer container = (YangContainer) yangNode.getChild();
- assertThat(container.getName(), is("valid"));
- assertThat(container.getDescription(), is("\"container description\""));
-
- // Check whether leaf properties as set correctly.
- ListIterator<YangLeaf> leafIterator = container.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
- assertThat(leafInfo.getUnits(), is("\"seconds\""));
- assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
- assertThat(leafInfo.isMandatory(), is(true));
- assertThat(leafInfo.getStatus(), is(YangStatusType.CURRENT));
- assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
- }
-
- /**
- * Checks description statement as sub-statement of list.
- */
- @Test
- public void processListSubStatementDescription() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ListSubStatementDescription.yang");
-
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the list is child of module and description value is set correctly.
- YangList yangList = (YangList) yangNode.getChild();
- assertThat(yangList.getName(), is("valid"));
- assertThat(yangList.isConfig(), is(true));
- assertThat(yangList.getDescription(), is("\"list description\""));
-
- // Check whether leaf properties as set correctly.
- ListIterator<YangLeaf> leafIterator = yangList.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
- assertThat(leafInfo.getUnits(), is("\"seconds\""));
- assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
- assertThat(leafInfo.isMandatory(), is(true));
- assertThat(leafInfo.getStatus(), is(YangStatusType.CURRENT));
- assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
- }
-
- /**
- * Checks valid description statement as sub-statement of leaf-list.
- */
- @Test
- public void processLeafListSubStatementDescription() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/LeafListSubStatementDescription.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
- YangLeafList leafListInfo = leafListIterator.next();
-
- // Check whether description value is set correctly.
- assertThat(leafListInfo.getName(), is("invalid-interval"));
- assertThat(leafListInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/EnumListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/EnumListenerTest.java
deleted file mode 100644
index d5f6645..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/EnumListenerTest.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.datamodel.YangEnum;
-import org.onosproject.yangutils.datamodel.YangEnumeration;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.ListIterator;
-import java.util.SortedSet;
-
-/**
- * Test cases for enum listener.
- */
-public class EnumListenerTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks enum statement without value.
- */
- @Test
- public void processEnumTypeStatement() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/EnumTypeStatement.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("speed"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("enumeration"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.ENUMERATION));
- assertThat(((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getName(),
- is("speed_enum"));
-
- SortedSet<YangEnum> enumSet = ((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getEnumSet();
- for (YangEnum tmp : enumSet) {
- if (tmp.getNamedValue().equals("10m")) {
- assertThat(tmp.getValue(), is(0));
- } else if (tmp.getNamedValue().equals("100m")) {
- assertThat(tmp.getValue(), is(1));
- } else if (tmp.getNamedValue().equals("auto")) {
- assertThat(tmp.getValue(), is(2));
- }
- }
- }
-
- /**
- * Checks if enum with same name is not allowed.
- */
- @Test(expected = ParserException.class)
- public void processEnumWithDuplicateName() throws IOException, ParserException {
- YangNode node = manager.getDataModel("src/test/resources/EnumWithDuplicateName.yang");
- }
-
- /**
- * Checks enum boundary value.
- */
- @Test
- public void processEnumBoundaryValue() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("YANG file error : value value 21474836472147483647 is not valid.");
- YangNode node = manager.getDataModel("src/test/resources/EnumBoundaryValue.yang");
- }
-
- /**
- * Checks whether exception is thrown if value is not specified following max enum value.
- */
- @Test
- public void processEnumMaxNextValue() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("YANG file error : "
- + "An enum value MUST be specified for enum substatements following the one"
- + "with the current highest value");
- YangNode node = manager.getDataModel("src/test/resources/EnumMaxNextValue.yang");
- }
-
- /**
- * Checks enum values stored are sorted.
- */
- @Test
- public void processEnumSorted() throws IOException, ParserException {
- YangNode node = manager.getDataModel("src/test/resources/EnumSorted.yang");
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("ifType"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("enumeration"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.ENUMERATION));
- assertThat(((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getName(),
- is("ifType_enum"));
-
- SortedSet<YangEnum> enumSet = ((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getEnumSet();
- Iterator<YangEnum> enumIterator = enumSet.iterator();
- assertThat(enumIterator.next().getNamedValue(), is("five"));
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ErrorAppTagListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ErrorAppTagListenerTest.java
deleted file mode 100644
index a367942..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ErrorAppTagListenerTest.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangMust;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.YangAppErrorInfo;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import java.io.IOException;
-import java.util.List;
-
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-
-/**
- * Test-cases for testing error app tag message listener functionality.
- */
-public class ErrorAppTagListenerTest {
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks if error app tag message is default updated in the data model.
- */
- @Test
- public void processContainerSubStatementErrorDefaultAppTag() throws IOException, ParserException {
- YangNode node = manager.getDataModel("src/test/resources/ContainerSubStatementErrorDefaultAppTag.yang");
-
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("ErrorAppTag"));
-
- YangContainer yangContainer = (YangContainer) yangNode.getChild();
- assertThat(yangContainer.getName(), is("interface"));
-
- String expectedConstraint = "ifType != 'ethernet' or (ifType = 'ethernet' and ifMTU = 1500)";
- List<YangMust> mustConstraintList = yangContainer.getListOfMust();
- assertThat(mustConstraintList.iterator().next().getConstraint(), is(expectedConstraint));
-
- YangAppErrorInfo yangAppErrorInfo = mustConstraintList.iterator().next().getAppErrorInfo();
- assertThat(yangAppErrorInfo.getGetErrorAppTag(), is("must-violation"));
- assertThat(yangAppErrorInfo.getGetErrorTag(), is("operation-failed"));
- }
-
- /**
- * Checks if error app tag message listener updates the data model.
- */
- @Test
- public void processContainerSubStatementErrorAppTag() throws IOException, ParserException {
- YangNode node = manager.getDataModel("src/test/resources/ContainerSubStatementErrorAppTag.yang");
-
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("ErrorAppTag"));
-
- YangContainer yangContainer = (YangContainer) yangNode.getChild();
- assertThat(yangContainer.getName(), is("interface"));
-
- String expectedConstraint = "ifType != 'ethernet' or (ifType = 'ethernet' and ifMTU = 1500)";
- List<YangMust> mustConstraintList = yangContainer.getListOfMust();
- assertThat(mustConstraintList.iterator().next().getConstraint(), is(expectedConstraint));
-
- YangAppErrorInfo yangAppErrorInfo = mustConstraintList.iterator().next().getAppErrorInfo();
- assertThat(yangAppErrorInfo.getGetErrorAppTag(), is("An ethernet MTU must be 1500"));
- assertThat(yangAppErrorInfo.getGetErrorTag(), is("operation-failed"));
- }
-}
\ No newline at end of file
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ErrorMessageListnerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ErrorMessageListnerTest.java
deleted file mode 100644
index bf53292..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ErrorMessageListnerTest.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangMust;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.YangAppErrorInfo;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import java.io.IOException;
-import java.util.List;
-
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-
-/**
- * Test-cases for testing error message listener functionality.
- */
-public class ErrorMessageListnerTest {
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks if error message listener updates the data model.
- */
- @Test
- public void processContainerSubStatementErrorMessage() throws IOException, ParserException {
- YangNode node = manager.getDataModel("src/test/resources/ContainerSubStatementErrorMessage.yang");
-
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("ErrorMessage"));
-
- YangContainer yangContainer = (YangContainer) yangNode.getChild();
- assertThat(yangContainer.getName(), is("interface"));
-
- String expectedConstraint = "ifType != 'ethernet' or (ifType = 'ethernet' and ifMTU = 1500)";
- List<YangMust> mustConstraintList = yangContainer.getListOfMust();
- assertThat(mustConstraintList.iterator().next().getConstraint(), is(expectedConstraint));
-
- YangAppErrorInfo yangAppErrorInfo = mustConstraintList.iterator().next().getAppErrorInfo();
- assertThat(yangAppErrorInfo.getGetErrorMessage(), is("An ethernet MTU must be 1500"));
- assertThat(yangAppErrorInfo.getGetErrorTag(), is("operation-failed"));
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ExtensionListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ExtensionListenerTest.java
deleted file mode 100644
index d5c3c83..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ExtensionListenerTest.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.io.IOException;
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangExtension;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-
-/**
- * Test cases for testing extension listener.
- */
-public class ExtensionListenerTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks extension statement as sub-statement of module.
- */
- @Test
- public void processValidExtensionStatement() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ValidExtensionStatement.yang");
-
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("ietf-yang-compiler-annotation"));
-
- YangExtension extension = yangNode.getExtensionList().iterator().next();
- assertThat(extension.getName(), is("compiler-annotation"));
- assertThat(extension.getArgumentName(), is("target"));
- assertThat(extension.getDescription(), is("\"This extension allows for defining compiler annotations\""));
- }
-}
-
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/GroupingListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/GroupingListenerTest.java
deleted file mode 100644
index acd0c8a..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/GroupingListenerTest.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.io.IOException;
-import java.util.ListIterator;
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.YangGrouping;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.datamodel.YangStatusType;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-
-/**
- * Test cases for testing grouping listener.
- */
-public class GroupingListenerTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks grouping statement inside module.
- */
- @Test
- public void processGroupingInModule() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/GroupingInModule.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- YangGrouping yangGrouping = (YangGrouping) yangNode.getChild();
- assertThat(yangGrouping.getName(), is("endpoint"));
-
- ListIterator<YangLeaf> leafIterator = yangGrouping.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("address"));
- }
-
- /**
- * Checks grouping statement inside container.
- */
- @Test
- public void processGroupingInContainer() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/GroupingInContainer.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- YangContainer yangContainer = (YangContainer) yangNode.getChild();
- assertThat(yangContainer.getName(), is("valid"));
-
- YangGrouping yangGrouping = (YangGrouping) yangContainer.getChild();
- assertThat(yangGrouping.getName(), is("endpoint"));
-
- ListIterator<YangLeaf> leafIterator = yangGrouping.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("address"));
- }
-
- /**
- * Checks grouping statement inside list.
- */
- @Test
- public void processGroupingInList() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/GroupingInList.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- YangList yangList = (YangList) yangNode.getChild();
- assertThat(yangList.getName(), is("valid"));
-
- YangGrouping yangGrouping = (YangGrouping) yangList.getChild();
- assertThat(yangGrouping.getName(), is("endpoint"));
-
- ListIterator<YangLeaf> leafIterator = yangGrouping.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("address"));
- }
-
- /**
- * Checks grouping with attributes.
- */
- @Test
- public void processGroupingAttributes() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/GroupingAttributes.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- YangList yangList = (YangList) yangNode.getChild();
- assertThat(yangList.getName(), is("valid"));
-
- YangGrouping yangGrouping = (YangGrouping) yangList.getChild();
- assertThat(yangGrouping.getName(), is("endpoint"));
- assertThat(yangGrouping.getStatus(), is(YangStatusType.CURRENT));
- assertThat(yangGrouping.getReference(), is("\"RFC 6020\""));
- assertThat(yangGrouping.getDescription(), is("\"grouping under test\""));
-
- ListIterator<YangLeaf> leafIterator = yangGrouping.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("address"));
- }
-
- /**
- * Checks duplicate grouping in list.
- */
- @Test(expected = ParserException.class)
- public void processDuplicateGroupingInList() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/DuplicateGroupingInList.yang");
- }
-
- /**
- * Checks duplicate grouping in container.
- */
- @Test (expected = ParserException.class)
- public void processDuplicateGroupingInContainer() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/DuplicateGroupingInContainer.yang");
- }
-
- /**
- * Checks duplicate grouping in module.
- */
- @Test (expected = ParserException.class)
- public void processDuplicateGroupingInModule() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/DuplicateGroupingInModule.yang");
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/IdentityListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/IdentityListenerTest.java
deleted file mode 100644
index b407c1b..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/IdentityListenerTest.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.YangDerivedInfo;
-import org.onosproject.yangutils.datamodel.YangIdentity;
-import org.onosproject.yangutils.datamodel.YangIdentityRef;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangLeafList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.YangTypeDef;
-import org.onosproject.yangutils.datamodel.utils.ResolvableStatus;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import java.io.IOException;
-import java.util.ListIterator;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.IDENTITYREF;
-
-/**
- * Test case for identity listener.
- */
-public class IdentityListenerTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- /**
- * Checks for updating datamodel for identity/identityref.
- */
- @Test
- public void processIdentityrefType() throws IOException, ParserException {
-
- YangNode node = manager
- .getDataModel("src/test/resources/IdentityListener.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("IdentityListener"));
-
- YangIdentity yangIdentity = (YangIdentity) yangNode.getChild();
- assertThat(yangIdentity.getName(), is("tunnel"));
-
- yangIdentity = (YangIdentity) yangNode.getChild().getNextSibling();
- assertThat(yangIdentity.getName(), is("tunnel-type"));
-
- yangIdentity = (YangIdentity) yangNode.getChild().getNextSibling().getNextSibling();
- assertThat(yangIdentity.getName(), is("ref-address-family"));
-
- yangIdentity = (YangIdentity) yangNode.getChild().getNextSibling().getNextSibling()
- .getNextSibling();
- assertThat(yangIdentity.getName(), is("ipv4-address-family"));
- assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
- assertThat(yangIdentity.getBaseNode().getReferredIdentity().getName(), is("ref-address-family"));
-
- yangIdentity = (YangIdentity) yangNode.getChild().getNextSibling().getNextSibling()
- .getNextSibling().getNextSibling();
- assertThat(yangIdentity.getName(), is("ipv6-address-family"));
- assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
- assertThat(yangIdentity.getBaseNode().getReferredIdentity().getName(), is("ref-address-family"));
- assertThat(yangIdentity.getBaseNode().getResolvableStatus(), is(ResolvableStatus.RESOLVED));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("tunnel"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("identityref"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.IDENTITYREF));
- YangIdentityRef yangIdentityRef = (YangIdentityRef) leafInfo.getDataType().getDataTypeExtendedInfo();
- assertThat(yangIdentityRef.getName(), is("ref-address-family"));
- assertThat(yangIdentityRef.getBaseIdentity().getName(), is("ref-address-family"));
- assertThat(yangIdentityRef.getReferredIdentity().getName(), is("ref-address-family"));
- assertThat(yangIdentityRef.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
-
- ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
- YangLeafList leafListInfo = leafListIterator.next();
-
- // Check whether the information in the leaf is correct.
- assertThat(leafListInfo.getName(), is("network-ref"));
- assertThat(leafListInfo.getDataType().getDataTypeName(), is("identityref"));
- assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.IDENTITYREF));
- yangIdentityRef = (YangIdentityRef) (leafListInfo.getDataType().getDataTypeExtendedInfo());
-
- // Check whether identityref type got resolved.
- assertThat(yangIdentityRef.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
- }
-
- /**
- * Checks for updating datamodel for intrafile resolution identity/identityref.
- */
- @Test
- public void processIntraIdentityrefType() throws IOException, ParserException {
-
- YangNode node = manager
- .getDataModel("src/test/resources/IdentityIntraFile.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("IdentityIntraFile"));
-
- YangIdentity yangIdentity = (YangIdentity) yangNode.getChild();
- assertThat(yangIdentity.getName(), is("ipv4-address-family"));
- assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
- assertThat(yangIdentity.getBaseNode().getResolvableStatus(), is(ResolvableStatus.INTRA_FILE_RESOLVED));
- }
-
- /**
- * Checks for updating datamodel for identityref used in tydedef.
- */
- @Test
- public void processIdentityTypedefStatement() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/IdentityTypedef.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- YangIdentity yangIdentity = (YangIdentity) yangNode.getChild();
- assertThat(yangIdentity.getName(), is("tunnel"));
-
- YangTypeDef typedef = (YangTypeDef) yangNode.getChild().getNextSibling();
- assertThat(typedef.getName(), is("type15"));
-
- YangType type = typedef.getTypeList().iterator().next();
- assertThat(type.getDataType(), is(YangDataTypes.IDENTITYREF));
- assertThat(type.getDataTypeName(), is("identityref"));
-
- YangIdentityRef identityRef = (YangIdentityRef) type.getDataTypeExtendedInfo();
- assertThat(identityRef.getName(), is("tunnel"));
- assertThat(identityRef.getBaseIdentity().getName(), is("tunnel"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("tunnel-value"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("type15"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.DERIVED));
-
- YangDerivedInfo info = (YangDerivedInfo) leafInfo.getDataType()
- .getDataTypeExtendedInfo();
- assertThat(info.getEffectiveBuiltInType(), is(IDENTITYREF));
- YangType type1 = info.getReferredTypeDef().getTypeList().get(0);
- YangIdentityRef idRef1 =
- (YangIdentityRef) type1.getDataTypeExtendedInfo();
- assertThat(idRef1.getName(), is("tunnel"));
- assertThat(idRef1.getBaseIdentity().getName(), is("tunnel"));
- assertThat(idRef1.getReferredIdentity().getName(), is("tunnel"));
- assertThat(idRef1.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
- }
-
- /**
- * Checks for updating datamodel for unresolved status of identityref used in tydedef.
- */
- @Test
- public void processIdentityUnresolvedTypedefStatement() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/IdentityTypedefUnresolved.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- YangIdentity yangIdentity = (YangIdentity) yangNode.getChild();
- assertThat(yangIdentity.getName(), is("tunnel"));
-
- YangTypeDef typedef = (YangTypeDef) yangNode.getChild().getNextSibling();
- assertThat(typedef.getName(), is("type15"));
-
- YangType type = typedef.getTypeList().iterator().next();
- assertThat(type.getDataType(), is(YangDataTypes.IDENTITYREF));
- assertThat(type.getDataTypeName(), is("identityref"));
-
- YangIdentityRef idRef =
- (YangIdentityRef) type.getDataTypeExtendedInfo();
- assertThat(idRef.getName(), is("tunnel"));
- assertThat(idRef.getBaseIdentity().getName(), is("tunnel"));
- assertThat(idRef.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
-
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ImportListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ImportListenerTest.java
deleted file mode 100644
index b52da4a..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ImportListenerTest.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.io.IOException;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-
-/**
- * Test cases for testing import listener functionality.
- */
-public class ImportListenerTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
- private static final String DATE_FORMAT = "yyyy-MM-dd";
- private final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATE_FORMAT);
-
- /**
- * Checks if mandatory parameter prefix is present in import.
- */
- @Test(expected = ParserException.class)
- public void processImportWithoutPrefix() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ImportWithoutPrefix.yang");
- }
-
- /**
- * Checks that prefix must be present only once in import.
- */
- @Test(expected = ParserException.class)
- public void processImportWithDualPrefix() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ImportWithDualPrefix.yang");
- }
-
- /**
- * Checks for the correct order of prefix in import.
- */
- @Test(expected = ParserException.class)
- public void processImportInvalidOrder() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ImportInvalidOrder.yang");
- }
-
- /**
- * Checks if import listener updates the data model tree.
- */
- @Test
- public void processImportValidEntry() throws IOException, ParserException, ParseException {
-
- YangNode node = manager.getDataModel("src/test/resources/ImportValidEntry.yang");
-
- // Checks for the revision value in data model tree.
- assertThat(((YangModule) node).getImportList().get(0).getRevision(), is(simpleDateFormat.parse("2015-02-03")));
- // Checks for the prefix id in data model tree.
- assertThat(((YangModule) node).getImportList().get(0).getPrefixId(), is("On2"));
- // Checks for the module name in data model tree.
- assertThat(((YangModule) node).getImportList().get(0).getModuleName(), is("ietf"));
- }
-
- /**
- * Checks if optional parameter revision is not mandatory in import.
- */
- @Test
- public void processImportWithoutRevision() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ImportWithoutRevision.yang");
-
- // Checks for the prefix id in data model tree.
- assertThat(((YangModule) node).getImportList().get(0).getPrefixId(), is("On2"));
- // Checks for the module name in data model tree.
- assertThat(((YangModule) node).getImportList().get(0).getModuleName(), is("ietf"));
- }
-
- /**
- * Checks if multiple imports are allowed.
- */
- @Test()
- public void processImportMultipleInstance() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ImportMultipleInstance.yang");
-
- // Checks for the prefix id in data model tree.
- assertThat(((YangModule) node).getImportList().get(0).getPrefixId(), is("On2"));
- // Checks for the module name in data model tree.
- assertThat(((YangModule) node).getImportList().get(0).getModuleName(), is("ietf"));
-
- // Checks for the prefix id in data model tree.
- assertThat(((YangModule) node).getImportList().get(1).getPrefixId(), is("On3"));
- // Checks for the module name in data model tree.
- assertThat(((YangModule) node).getImportList().get(1).getModuleName(), is("itut"));
- }
-}
\ No newline at end of file
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/IncludeListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/IncludeListenerTest.java
deleted file mode 100644
index e2bb239..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/IncludeListenerTest.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.io.IOException;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-
-/**
- * Test cases for testing include listener functionality.
- */
-public class IncludeListenerTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
- private static final String DATE_FORMAT = "yyyy-MM-dd";
- private final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATE_FORMAT);
-
- /**
- * Checks if include listener with ; is valid and updates the data
- * model tree.
- */
- @Test
- public void processIncludeWithStmtend() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/IncludeWithStmtend.yang");
-
- // Checks for the sub module name in data model tree.
- assertThat(((YangModule) node).getIncludeList().get(0).getSubModuleName(), is("itut"));
- }
-
- /**
- * Checks if include listener with braces and without revision date is valid
- * and updates the data model tree.
- */
- @Test
- public void processIncludeWithEmptyBody() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/IncludeWithEmptyBody.yang");
-
- // Checks for the sub module name in data model tree.
- assertThat(((YangModule) node).getIncludeList().get(0).getSubModuleName(), is("itut"));
- }
-
- /**
- * Checks if include listener with braces and with revision date is valid
- * and updates the data model tree.
- */
- @Test
- public void processIncludeWithDate() throws IOException, ParserException, ParseException {
-
- YangNode node = manager.getDataModel("src/test/resources/IncludeWithDate.yang");
-
- // Checks for the sub module name in data model tree.
- assertThat(((YangModule) node).getIncludeList().get(0).getSubModuleName(), is("itut"));
- assertThat(((YangModule) node).getIncludeList().get(0).getRevision(), is(simpleDateFormat.parse("2016-02-03")));
- }
-
- /**
- * Checks if include has more than one occurrence.
- */
- @Test
- public void processIncludeMultiInstance() throws IOException, ParserException, ParseException {
-
- YangNode node = manager.getDataModel("src/test/resources/IncludeMultiInstance.yang");
-
- // Checks for the sub module name in data model tree.
- assertThat(((YangModule) node).getIncludeList().get(0).getSubModuleName(), is("itut"));
- assertThat(((YangModule) node).getIncludeList().get(0).getRevision(), is(simpleDateFormat.parse("2016-02-03")));
- assertThat(((YangModule) node).getIncludeList().get(1).getSubModuleName(), is("sdn"));
- assertThat(((YangModule) node).getIncludeList().get(1).getRevision(), is(simpleDateFormat.parse("2014-02-03")));
- }
-
- /**
- * Checks if include and import can come in any order.
- */
- @Test
- public void processIncludeImportAnyOrder() throws IOException, ParserException, ParseException {
-
- YangNode node = manager.getDataModel("src/test/resources/IncludeImportAnyOrder.yang");
-
- // Checks for the sub module name in data model tree.
- assertThat(((YangModule) node).getIncludeList().get(0).getSubModuleName(), is("itut"));
- assertThat(((YangModule) node).getIncludeList().get(0).getRevision(), is(simpleDateFormat.parse("2016-02-03")));
- assertThat(((YangModule) node).getIncludeList().get(1).getSubModuleName(), is("sdn"));
- assertThat(((YangModule) node).getIncludeList().get(1).getRevision(), is(simpleDateFormat.parse("2014-02-03")));
- }
-
- /**
- * Checks if syntax of Include is not correct.
- */
- @Test(expected = ParserException.class)
- public void processIncludeInvalidSyntax() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/IncludeInvalidSyntax.yang");
- }
-
- /**
- * Checks if syntax of revision date in Include is not correct.
- */
- @Test(expected = ParserException.class)
- public void processIncludeInvalidDateSyntax() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/IncludeInvalidDateSyntax.yang");
- }
-}
\ No newline at end of file
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/InputListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/InputListenerTest.java
deleted file mode 100644
index 277eafe..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/InputListenerTest.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.YangInput;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.datamodel.YangRpc;
-import org.onosproject.yangutils.datamodel.YangStatusType;
-import org.onosproject.yangutils.datamodel.YangTypeDef;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import java.io.IOException;
-import java.util.ListIterator;
-
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-
-/**
- * Test cases for testing Input listener functionality.
- */
-public class InputListenerTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks input statements with data definition statements as sub-statements.
- */
- @Test
- public void processInputStatementWithDataDefinition() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/InputStatementWithDataDefinition.yang");
-
- assertThat((node instanceof YangModule), is(true));
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("rock"));
-
- YangRpc yangRpc = (YangRpc) yangNode.getChild();
- assertThat(yangRpc.getName(), is("activate-software-image"));
-
- YangInput yangInput = (YangInput) yangRpc.getChild();
- assertThat(yangInput.getName(), is("input"));
- ListIterator<YangLeaf> leafIterator = yangInput.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("image-name"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
-
- YangList yangList = (YangList) yangInput.getChild();
- assertThat(yangList.getName(), is("ospf"));
- assertThat(yangList.getKeyList().contains("invalid-interval"), is(true));
- assertThat(yangList.isConfig(), is(true));
- assertThat(yangList.getMaxElements().getMaxElement(), is(10));
- assertThat(yangList.getMinElements().getMinElement(), is(3));
- leafIterator = yangList.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
-
- YangContainer yangContainer = (YangContainer) yangList.getNextSibling();
- assertThat(yangContainer.getName(), is("isis"));
-
- leafIterator = yangContainer.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
- }
-
- /**
- * Checks input statements with type-def statement as sub-statements.
- */
- @Test
- public void processInputStatementWithTypedef() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/InputStatementWithTypedef.yang");
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("rock"));
-
- YangRpc yangRpc = (YangRpc) yangNode.getChild();
- assertThat(yangRpc.getName(), is("activate-software-image"));
-
- YangInput yangInput = (YangInput) yangRpc.getChild();
- assertThat(yangInput.getName(), is("input"));
- YangTypeDef typeDef = (YangTypeDef) yangInput.getChild();
- assertThat(typeDef.getName(), is("my-type"));
- assertThat(typeDef.getStatus(), is(YangStatusType.DEPRECATED));
- assertThat(typeDef.getTypeDefBaseType().getDataType(), is(YangDataTypes.INT32));
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/KeyListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/KeyListenerTest.java
deleted file mode 100644
index 5134f27..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/KeyListenerTest.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.junit.Rule;
-import org.junit.Test;
-
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.ListIterator;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-
-/**
- * Test cases for key listener.
- */
-public class KeyListenerTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks key statement as sub-statement of list.
- */
- @Test
- public void processListSubStatementKey() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ListSubStatementKey.yang");
-
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the list is child of module
- YangList yangList = (YangList) yangNode.getChild();
- assertThat(yangList.getName(), is("valid"));
-
- ListIterator<String> keyList = yangList.getKeyList().listIterator();
- assertThat(keyList.next(), is("invalid-interval"));
- }
-
- /**
- * Check multiple key values.
- */
- @Test
- public void processMultipleKeyValues() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/MultipleKeyValues.yang");
-
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the list is child of module
- YangList yangList = (YangList) yangNode.getChild();
- assertThat(yangList.getName(), is("valid"));
-
- List<String> keyList = yangList.getKeyList();
- assertThat(keyList.contains("ospf"), is(true));
- assertThat(keyList.contains("isis"), is(true));
- }
-
- /**
- * Checks key statement without statement end.
- */
- @Test
- public void processKeyWithoutStatementEnd() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("mismatched input 'leaf' expecting {';', '+'}");
- YangNode node = manager.getDataModel("src/test/resources/KeyWithoutStatementEnd.yang");
- }
-
- /**
- * Checks key values are set correctly.
- */
- @Test
- public void processConfigFalseNoKey() throws IOException, ParserException {
- YangNode node = manager.getDataModel("src/test/resources/ConfigFalseNoKey.yang");
-
- assertThat((node instanceof YangModule), is(true));
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the list is child of module
- YangList yangList = (YangList) yangNode.getChild();
- assertThat(yangList.getName(), is("valid"));
- }
-
- /**
- * Checks key values are set correctly.
- */
- @Test
- public void processConfigFalseValidKeyValidLeaf() throws IOException, ParserException {
- YangNode node = manager.getDataModel("src/test/resources/ConfigFalseValidKeyValidLeaf.yang");
-
- assertThat((node instanceof YangModule), is(true));
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the list is child of module
- YangList yangList = (YangList) yangNode.getChild();
- assertThat(yangList.getName(), is("valid"));
-
- ListIterator<String> keyList = yangList.getKeyList().listIterator();
- assertThat(keyList.next(), is("invalid-interval"));
- }
-
- /**
- * Checks whether exception is thrown when list's config is set to true and there is no key.
- */
- @Test
- public void processConfigTrueNoKey() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("A list must have atleast one key leaf if config is true");
- YangNode node = manager.getDataModel("src/test/resources/ConfigTrueNoKey.yang");
- }
-
- /**
- * Checks whether exception is thrown when list's config is set to true and there is no leaf.
- */
- @Test
- public void processConfigTrueNoleafNoLeafList() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("A list must have atleast one key leaf if config is true");
- YangNode node = manager.getDataModel("src/test/resources/ConfigTrueNoleafNoLeafList.yang");
- }
-
- /**
- * Checks key values are set correctly.
- */
- @Test
- public void processConfigTrueValidKeyValidLeaf() throws IOException, ParserException {
- YangNode node = manager.getDataModel("src/test/resources/ConfigTrueValidKeyValidLeaf.yang");
-
- assertThat((node instanceof YangModule), is(true));
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the list is child of module
- YangList yangList = (YangList) yangNode.getChild();
- assertThat(yangList.getName(), is("valid"));
-
- ListIterator<String> keyList = yangList.getKeyList().listIterator();
- assertThat(keyList.next(), is("invalid-interval"));
- }
-
- /**
- * Checks key values are set correctly.
- */
- @Test
- public void processKeyWithUsesInList() throws IOException, ParserException {
- YangNode node = manager.getDataModel("src/test/resources/KeyWithUsesInList.yang");
-
- assertThat((node instanceof YangModule), is(true));
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the list is child of module
- YangList yangList = (YangList) yangNode.getChild().getNextSibling();
- assertThat(yangList.getName(), is("valid"));
-
- ListIterator<String> keyList = yangList.getKeyList().listIterator();
- assertThat(keyList.next(), is("invalid-interval"));
- }
-
- /**
- * Checks whether exception is thrown when key leaf identifier is not found in list.
- */
- @Test
- public void processInvalidLeafIdentifier() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("An identifier, in key, must refer to a child leaf of the list");
- YangNode node = manager.getDataModel("src/test/resources/InvalidLeafIdentifier.yang");
- }
-
- /**
- * Checks whether exception is thrown when key leaf is of type empty.
- */
- @Test
- public void processKeyLeafTypeEmpty() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("A leaf that is part of the key must not be the built-in type \"empty\".");
- YangNode node = manager.getDataModel("src/test/resources/KeyLeafTypeEmpty.yang");
- }
-}
\ No newline at end of file
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LeafListListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LeafListListenerTest.java
deleted file mode 100644
index 083bf81..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LeafListListenerTest.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.io.IOException;
-import java.util.ListIterator;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.datamodel.YangLeafList;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.datamodel.YangStatusType;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-
-/**
- * Test cases for testing leaf-list listener.
- */
-public class LeafListListenerTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks all the values of leaf-list sub-statements are set correctly.
- */
- @Test
- public void processLeafListSubStatements() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/LeafListSubStatements.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
- YangLeafList leafListInfo = leafListIterator.next();
-
- assertThat(leafListInfo.getName(), is("invalid-interval"));
- assertThat(leafListInfo.getDataType().getDataTypeName(), is("uint16"));
- assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
- assertThat(leafListInfo.getUnits(), is("\"seconds\""));
- assertThat(leafListInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
- assertThat(leafListInfo.isConfig(), is(true));
- assertThat(leafListInfo.getMaxElements().getMaxElement(), is(3));
- assertThat(leafListInfo.getStatus(), is(YangStatusType.CURRENT));
- assertThat(leafListInfo.getReference(), is("\"RFC 6020\""));
- }
-
- /**
- * Checks whether exception is thrown when leaf-list identifier starts with
- * digit.
- */
- @Test
- public void processLeafListInvalidIdentifier() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("YANG file error : leaf-list name 1invalid-interval is not valid.");
- YangNode node = manager.getDataModel("src/test/resources/LeafListInvalidIdentifier.yang");
- }
-
- /**
- * Checks whether exception is thrown when leaf-list keyword is incorrect.
- */
- @Test(expected = ParserException.class)
- public void processLeafListInvalidStatement() throws IOException, ParserException {
- YangNode node = manager.getDataModel("src/test/resources/LeafListInvalidStatement.yang");
- }
-
- /**
- * Checks whether exception is thrown when leaf-list keyword without Left
- * brace as per grammar.
- */
- @Test
- public void processLeafListWithoutLeftBrace() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("missing '{' at 'type'");
- YangNode node = manager.getDataModel("src/test/resources/LeafListWithoutLeftBrace.yang");
- }
-
- /**
- * Checks whether exception is thrown when config statement cardinality is
- * not as per grammar.
- */
- @Test
- public void processLeafListConfigInvalidCardinality() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("YANG file error: \"config\" is defined more than once in \"leaf-list " +
- "invalid-interval\".");
- YangNode node = manager.getDataModel("src/test/resources/LeafListConfigInvalidCardinality.yang");
- }
-
- /**
- * Checks whether exception is thrown when units statement cardinality is
- * not as per grammar.
- */
- @Test
- public void processLeafListUnitsInvalidCardinality() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("YANG file error: \"units\" is defined more than once in \"leaf-list invalid-interval\"");
- YangNode node = manager.getDataModel("src/test/resources/LeafListUnitsInvalidCardinality.yang");
- }
-
- /**
- * Checks leaf-list statement as sub-statement of container.
- */
- @Test
- public void processContainerSubStatementLeafList() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ContainerSubStatementLeafList.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- //Check whether the container is child of module.
- YangContainer container = (YangContainer) yangNode.getChild();
- assertThat(container.getName(), is("valid"));
-
- // Check whether leaf-list properties as set correctly.
- ListIterator<YangLeafList> leafListIterator = container.getListOfLeafList().listIterator();
- YangLeafList leafListInfo = leafListIterator.next();
-
- assertThat(leafListInfo.getName(), is("invalid-interval"));
- assertThat(leafListInfo.getDataType().getDataTypeName(), is("uint16"));
- assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
- assertThat(leafListInfo.getUnits(), is("\"seconds\""));
- assertThat(leafListInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
- assertThat(leafListInfo.isConfig(), is(true));
- assertThat(leafListInfo.getMinElements().getMinElement(), is(1));
- assertThat(leafListInfo.getMaxElements().getMaxElement(), is(2147483647));
- assertThat(leafListInfo.getStatus(), is(YangStatusType.CURRENT));
- assertThat(leafListInfo.getReference(), is("\"RFC 6020\""));
- }
-
- /**
- * Checks leaf-list statement as sub-statement of list.
- */
- @Test
- public void processListSubStatementLeafList() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ListSubStatementLeafList.yang");
-
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the list is child of module
- YangList yangList = (YangList) yangNode.getChild();
- assertThat(yangList.getName(), is("valid"));
-
- // Check whether leaf-list properties as set correctly.
- ListIterator<YangLeafList> leafListIterator = yangList.getListOfLeafList().listIterator();
- YangLeafList leafListInfo = leafListIterator.next();
-
- assertThat(leafListInfo.getName(), is("invalid-interval"));
- assertThat(leafListInfo.getDataType().getDataTypeName(), is("uint16"));
- assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
- assertThat(leafListInfo.getUnits(), is("\"seconds\""));
- assertThat(leafListInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
- assertThat(leafListInfo.isConfig(), is(true));
-
- assertThat(leafListInfo.getStatus(), is(YangStatusType.CURRENT));
- assertThat(leafListInfo.getReference(), is("\"RFC 6020\""));
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LeafListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LeafListenerTest.java
deleted file mode 100644
index 9bbd0f5..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LeafListenerTest.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.io.IOException;
-import java.util.ListIterator;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.datamodel.YangStatusType;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-
-/**
- * Test cases for testing leaf listener.
- */
-public class LeafListenerTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks all the values of leaf sub-statements are set correctly.
- */
- @Test
- public void processLeafSubStatements() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/LeafSubStatements.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- 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("uint16"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
- assertThat(leafInfo.getUnits(), is("\"seconds\""));
- assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
- assertThat(leafInfo.isConfig(), is(true));
- assertThat(leafInfo.isMandatory(), is(true));
- assertThat(leafInfo.getStatus(), is(YangStatusType.CURRENT));
- assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
- }
-
- /**
- * Checks whether exception is thrown when leaf identifier starts with
- * digit.
- */
- @Test
- public void processLeafInvalidIdentifier() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("YANG file error : leaf name 1invalid-interval is not valid.");
- YangNode node = manager.getDataModel("src/test/resources/LeafInvalidIdentifier.yang");
- }
-
- /**
- * Checks whether exception is thrown when leaf keyword without Left brace
- * as per grammar.
- */
- @Test
- public void processLeafWithoutLeftBrace() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("missing '{' at 'type'");
- YangNode node = manager.getDataModel("src/test/resources/LeafWithoutLeftBrace.yang");
- }
-
- /**
- * Checks whether exception is thrown when config statement cardinality is
- * not as per grammar.
- */
- @Test
- public void processLeafConfigInvalidCardinality() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("YANG file error: \"config\" is defined more than once in \"leaf invalid-interval\".");
- YangNode node = manager.getDataModel("src/test/resources/LeafConfigInvalidCardinality.yang");
- }
-
- /**
- * Checks whether exception is thrown when mandatory statement cardinality
- * is not as per grammar.
- */
- @Test
- public void processLeafMandatoryInvalidCardinality() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("YANG file error: \"mandatory\" is defined more than once in \"leaf invalid-interval\".");
- YangNode node = manager.getDataModel("src/test/resources/LeafMandatoryInvalidCardinality.yang");
- }
-
- /**
- * Checks leaf statement as sub-statement of container.
- */
- @Test
- public void processContainerSubStatementLeaf() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ContainerSubStatementLeaf.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- //Check whether the container is child of module.
- YangContainer container = (YangContainer) yangNode.getChild();
- assertThat(container.getName(), is("valid"));
-
- // Check whether leaf properties as set correctly.
- ListIterator<YangLeaf> leafIterator = container.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
- assertThat(leafInfo.getUnits(), is("\"seconds\""));
- assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
- assertThat(leafInfo.isConfig(), is(true));
- assertThat(leafInfo.isMandatory(), is(true));
- assertThat(leafInfo.getStatus(), is(YangStatusType.CURRENT));
- assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
- }
-
- /**
- * Checks duplicate leaf statement as sub-statement of module.
- */
- @Test(expected = ParserException.class)
- public void processModuleWithDuplicateLeaf() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ModuleWithDuplicateLeaf.yang");
- }
-
- /**
- * Checks duplicate leaf statement as sub-statement of container.
- */
- @Test(expected = ParserException.class)
- public void processContainerWithDuplicateLeaf() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ContainerWithDuplicateLeaf.yang");
- }
-
- /**
- * Checks duplicate leaf statement as sub-statement of list.
- */
- @Test(expected = ParserException.class)
- public void processListWithDuplicateLeaf() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ListWithDuplicateLeaf.yang");
- }
-
- /**
- * Checks leaf statement as sub-statement of list.
- */
- @Test
- public void processListSubStatementLeaf() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ListSubStatementLeaf.yang");
-
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the list is child of module
- YangList yangList = (YangList) yangNode.getChild();
- assertThat(yangList.getName(), is("valid"));
-
- // Check whether leaf properties as set correctly.
- ListIterator<YangLeaf> leafIterator = yangList.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
- assertThat(leafInfo.getUnits(), is("\"seconds\""));
- assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
- assertThat(leafInfo.isConfig(), is(true));
- assertThat(leafInfo.isMandatory(), is(true));
- assertThat(leafInfo.getStatus(), is(YangStatusType.CURRENT));
- assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LengthRestrictionListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LengthRestrictionListenerTest.java
deleted file mode 100644
index a67aa53..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/LengthRestrictionListenerTest.java
+++ /dev/null
@@ -1,333 +0,0 @@
-/*
- * Copyright 2016 Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.io.IOException;
-import java.math.BigInteger;
-import java.util.ListIterator;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangLeafList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.datamodel.YangRangeInterval;
-import org.onosproject.yangutils.datamodel.YangRangeRestriction;
-import org.onosproject.yangutils.datamodel.YangStringRestriction;
-import org.onosproject.yangutils.datamodel.YangTypeDef;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangUint64;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-
-/**
- * Test cases for length restriction listener.
- */
-public class LengthRestrictionListenerTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks valid length statement as sub-statement of leaf statement.
- */
- @Test
- public void processValidLengthStatement() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ValidLengthStatement.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)));
- }
-
- /**
- * Checks valid length statement as sub-statement of leaf-list.
- */
- @Test
- public void processLengthStatementInsideLeafList() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/LengthStatementInsideLeafList.yang");
-
- assertThat((node instanceof YangModule), is(true));
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
- YangLeafList leafListInfo = leafListIterator.next();
-
- assertThat(leafListInfo.getName(), is("invalid-interval"));
- assertThat(leafListInfo.getDataType().getDataTypeName(), is("string"));
- assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
- YangStringRestriction stringRestriction = (YangStringRestriction) leafListInfo
- .getDataType().getDataTypeExtendedInfo();
- YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
-
- ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
- .listIterator();
-
- YangRangeInterval rangeInterval = lengthListIterator.next();
- assertThat(((YangUint64) rangeInterval.getStartValue()).getValue(), is(BigInteger.valueOf(1)));
- assertThat(((YangUint64) rangeInterval.getEndValue()).getValue(), is(BigInteger.valueOf(100)));
- }
-
- /**
- * Checks valid length statement as sub-statement of typedef.
- */
- @Test
- public void processLengthStatementInsideTypeDef() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/LengthStatementInsideTypeDef.yang");
-
- assertThat((node instanceof YangModule), is(true));
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- YangTypeDef typedef = (YangTypeDef) yangNode.getChild();
- YangStringRestriction stringRestriction = (YangStringRestriction) typedef.getTypeDefBaseType()
- .getDataTypeExtendedInfo();
-
- YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
- ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
- .listIterator();
- YangRangeInterval rangeInterval = lengthListIterator.next();
- assertThat(((YangUint64) rangeInterval.getStartValue()).getValue(), is(BigInteger.valueOf(1)));
- assertThat(((YangUint64) rangeInterval.getEndValue()).getValue(), is(BigInteger.valueOf(100)));
- }
-
- /**
- * Checks valid length statement as sub-statement of binary statement.
- */
- @Test
- public void processValidBinaryLengthStatement() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ValidBinaryLengthStatement.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("message"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("binary"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.BINARY));
- YangRangeRestriction lengthRestriction = (YangRangeRestriction) leafInfo
- .getDataType().getDataTypeExtendedInfo();
-
- ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
- .listIterator();
-
- YangRangeInterval rangeInterval = lengthListIterator.next();
-
- assertThat(((YangUint64) rangeInterval.getStartValue()).getValue(), is(BigInteger.valueOf(4)));
- assertThat(((YangUint64) rangeInterval.getEndValue()).getValue(), is(BigInteger.valueOf(4)));
- }
-
- /**
- * Checks length statement with invalid type.
- */
- @Test
- public void processLengthWithInvalidType() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("YANG file error : length name \"1..100\" can be used to restrict the built-in type" +
- " string/binary or types derived from string/binary.");
- YangNode node = manager.getDataModel("src/test/resources/LengthWithInvalidType.yang");
- }
-
- /**
- * Checks length statement with only start interval.
- */
- @Test
- public void processLengthWithOneInterval() throws IOException, ParserException {
-
-
- YangNode node = manager.getDataModel("src/test/resources/LengthWithOneInterval.yang");
-
- assertThat((node instanceof YangModule), is(true));
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
- YangLeafList leafListInfo = leafListIterator.next();
-
- assertThat(leafListInfo.getName(), is("invalid-interval"));
- assertThat(leafListInfo.getDataType().getDataTypeName(), is("string"));
- assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
- YangStringRestriction stringRestriction = (YangStringRestriction) leafListInfo
- .getDataType().getDataTypeExtendedInfo();
- YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
-
- ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
- .listIterator();
-
- YangRangeInterval rangeInterval = lengthListIterator.next();
- assertThat(((YangUint64) rangeInterval.getStartValue()).getValue(), is(BigInteger.valueOf(1)));
- assertThat(((YangUint64) rangeInterval.getEndValue()).getValue(), is(BigInteger.valueOf(1)));
- }
-
- /**
- * Checks length statement with min and max.
- */
- @Test
- public void processLengthWithMinMax() throws IOException, ParserException {
-
-
- YangNode node = manager.getDataModel("src/test/resources/LengthWithMinMax.yang");
-
- assertThat((node instanceof YangModule), is(true));
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
- YangLeafList leafListInfo = leafListIterator.next();
-
- assertThat(leafListInfo.getName(), is("invalid-interval"));
- assertThat(leafListInfo.getDataType().getDataTypeName(), is("string"));
- assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
- YangStringRestriction stringRestriction = (YangStringRestriction) leafListInfo
- .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(new BigInteger("18446744073709551615")));
- }
-
- /**
- * Checks length statement with invalid integer pattern.
- */
- @Test
- public void processLengthWithInvalidIntegerPattern() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("YANG file error : Input value \"a\" is not a valid uint64.");
- YangNode node = manager.getDataModel("src/test/resources/LengthWithInvalidIntegerPattern.yang");
- }
-
- /**
- * Checks length statement with invalid interval.
- */
- @Test
- public void processLengthWithInvalidInterval() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("YANG file error : 18446744073709551617 is greater than maximum value" +
- " 18446744073709551615.");
- YangNode node = manager.getDataModel("src/test/resources/LengthWithInvalidInterval.yang");
- }
-
- /**
- * Checks valid length substatements.
- */
- @Test
- public void processLengthSubStatements() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/LengthSubStatements.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();
-
- assertThat(lengthRestriction.getDescription(), is("\"length description\""));
- assertThat(lengthRestriction.getReference(), is("\"length reference\""));
-
- 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)));
- }
-
- /**
- * 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/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ListListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ListListenerTest.java
deleted file mode 100644
index 7c0dae6..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ListListenerTest.java
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.io.IOException;
-import java.util.ListIterator;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.datamodel.YangStatusType;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-
-/**
- * Test cases for testing list listener.
- */
-public class ListListenerTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks list statement as sub-statement of module.
- */
- @Test
- public void processModuleSubStatementList() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ModuleSubStatementList.yang");
-
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the list is child of module
- YangList yangList = (YangList) yangNode.getChild();
- assertThat(yangList.getName(), is("valid"));
-
- ListIterator<String> keyList = yangList.getKeyList().listIterator();
- assertThat(keyList.next(), is("invalid-interval"));
- }
-
- /**
- * Checks list statement as sub-statement of container.
- */
- @Test
- public void processContainerSubStatementList() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ContainerSubStatementList.yang");
-
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the container is child of module
- YangContainer yangContainer = (YangContainer) yangNode.getChild();
- assertThat(yangContainer.getName(), is("ospf"));
-
- // Check whether the list is child of container
- YangList yangList = (YangList) yangContainer.getChild();
- assertThat(yangList.getName(), is("valid"));
- assertThat(yangList.getKeyList().contains("invalid-interval"), is(true));
- }
-
- /**
- * Checks list statement as sub-statement of list.
- */
- @Test
- public void processListSubStatementList() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ListSubStatementList.yang");
-
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the list is child of module
- YangList yangList1 = (YangList) yangNode.getChild();
- assertThat(yangList1.getName(), is("ospf"));
- assertThat(yangList1.getKeyList().contains("process-id"), is(true));
-
- // Check whether the list is child of list
- YangList yangList = (YangList) yangList1.getChild();
- assertThat(yangList.getName(), is("valid"));
- assertThat(yangList.getKeyList().contains("invalid-interval"), is(true));
- }
-
- /**
- * Checks list with all its sub-statements.
- */
- @Test
- public void processListSubStatements() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ListSubStatements.yang");
-
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the list is child of module
- YangList yangList = (YangList) yangNode.getChild();
-
- // Check whether list properties as set correctly.
- assertThat(yangList.getName(), is("ospf"));
- assertThat(yangList.getKeyList().contains("invalid-interval"), is(true));
-
- assertThat(yangList.isConfig(), is(true));
- assertThat(yangList.getMaxElements().getMaxElement(), is(10));
- assertThat(yangList.getMinElements().getMinElement(), is(3));
- assertThat(yangList.getDescription(), is("\"list description\""));
- assertThat(yangList.getStatus(), is(YangStatusType.CURRENT));
- assertThat(yangList.getReference(), is("\"list reference\""));
-
- // Check whether leaf properties as set correctly.
- ListIterator<YangLeaf> leafIterator = yangList.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
- assertThat(leafInfo.getUnits(), is("\"seconds\""));
- assertThat(leafInfo.getStatus(), is(YangStatusType.CURRENT));
- assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
- }
-
- /**
- * Checks cardinality of sub-statements of list.
- */
- @Test
- public void processListSubStatementsCardinality() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("YANG file error: \"reference\" is defined more than once in \"list valid\".");
- YangNode node = manager.getDataModel("src/test/resources/ListSubStatementsCardinality.yang");
- }
-
- /**
- * Checks list statement without child.
- */
- @Test
- public void processListStatementWithoutChild() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("YANG file error: Missing \"data-def-substatements\" in \"list valid\".");
- YangNode node = manager.getDataModel("src/test/resources/ListStatementWithoutChild.yang");
- }
-
- /**
- * Checks list as root node.
- */
- @Test
- public void processListAsRootNode() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("no viable alternative at input 'list'");
- YangNode node = manager.getDataModel("src/test/resources/ListAsRootNode.yang");
- }
-
- /**
- * Checks invalid identifier for list statement.
- */
- @Test
- public void processListInvalidIdentifier() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("YANG file error : list name 1valid is not valid.");
- YangNode node = manager.getDataModel("src/test/resources/ListInvalidIdentifier.yang");
- }
-
- /**
- * Checks list with identifier name as enum.
- */
- @Test
- public void processListWithIdentifierNameEnum() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ListWithIdentifierNameEnum.yang");
-
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the list is child of module
- YangList yangList = (YangList) yangNode.getChild();
- assertThat(yangList.getName(), is("enumList"));
- assertThat(yangList.getKeyList().contains("enum"), is(true));
- YangLeaf leaf = yangList.getListOfLeaf().iterator().next();
- assertThat(leaf.getName(), is("enum"));
- assertThat(leaf.getDataType().getDataType(), is(YangDataTypes.ENUMERATION));
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/MandatoryListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/MandatoryListenerTest.java
deleted file mode 100644
index fef5599..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/MandatoryListenerTest.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.io.IOException;
-import java.util.ListIterator;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-
-/**
- * Test case for mandatory listener.
- */
-public class MandatoryListenerTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks valid mandatory with value true statement.
- */
- @Test
- public void processMandatoryTrue() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/MandatoryTrue.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- // Check whether the mandatory value is set correctly.
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.isMandatory(), is(true));
- }
-
- /**
- * Checks valid mandatory with value false statement.
- */
- @Test
- public void processMandatoryFalse() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/MandatoryFalse.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- // Check whether the mandatory value is set correctly.
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.isMandatory(), is(false));
- }
-
- /**
- * Checks default value of mandatory statement.
- */
- @Test
- public void processMandatoryDefaultValue() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/MandatoryDefaultValue.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- // Check whether the mandatory value is set correctly.
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.isMandatory(), is(false));
- }
-
- /**
- * Checks invalid of mandatory statement and expects exception.
- */
- @Test
- public void processMandatoryEmptyStatement() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("no viable alternative at input ';'");
- YangNode node = manager.getDataModel("src/test/resources/MandatoryEmptyStatement.yang");
- }
-
- /**
- * Checks invalid mandatory statement(without statement end) and expects
- * exception.
- */
- @Test
- public void processMandatoryWithoutStatementEnd() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("missing ';' at '}'");
- YangNode node = manager.getDataModel("src/test/resources/MandatoryWithoutStatementEnd.yang");
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/MaxElementsListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/MaxElementsListenerTest.java
deleted file mode 100644
index ab47d2c..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/MaxElementsListenerTest.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.io.IOException;
-import java.util.ListIterator;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.YangLeafList;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-
-/**
- * Test cases for testing max-elements listener.
- */
-public class MaxElementsListenerTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks max-elements as sub-statements of leaf-list.
- */
- @Test
- public void processLeafListSubStatementMaxElements() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/LeafListSubStatementMaxElements.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
- YangLeafList leafListInfo = leafListIterator.next();
-
- assertThat(leafListInfo.getName(), is("invalid-interval"));
- assertThat(leafListInfo.getMaxElements().getMaxElement(), is(3));
- }
-
- /**
- * Checks max-elements as sub-statements of list.
- */
- @Test
- public void processListSubStatementMaxElements() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ListSubStatementMaxElements.yang");
-
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the list is child of module
- YangList yangList = (YangList) yangNode.getChild();
- assertThat(yangList.getName(), is("valid"));
- assertThat(yangList.getMaxElements().getMaxElement(), is(3));
- }
-
- /**
- * Checks whether exception is thrown when max-elements statement without
- * statement end is given as input.
- */
- @Test
- public void processMaxElementsWithoutStatementEnd() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("missing ';' at 'description'");
- YangNode node = manager.getDataModel("src/test/resources/MaxElementsWithoutStatementEnd.yang");
- }
-
- /**
- * Checks whether exception is thrown when max-elements cardinality is not
- * as per the grammar.
- */
- @Test
- public void processMaxElementsCardinality() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("YANG file error: \"max-elements\" is defined more than once in \"leaf-list " +
- "invalid-interval\".");
- YangNode node = manager.getDataModel("src/test/resources/MaxElementsCardinality.yang");
- }
-
- /**
- * Checks unbounded value of max-elements statement.
- */
- @Test
- public void processMaxElementsUnbounded() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/MaxElementsUnbounded.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
- YangLeafList leafListInfo = leafListIterator.next();
-
- assertThat(leafListInfo.getName(), is("invalid-interval"));
- assertThat(leafListInfo.getMaxElements().getMaxElement(), is(2147483647));
- }
-
- /**
- * Checks default value of max-elements statement.
- */
- @Test
- public void processMaxElementsDefaultValue() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/MaxElementsDefaultValue.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
- YangLeafList leafListInfo = leafListIterator.next();
-
- assertThat(leafListInfo.getName(), is("invalid-interval"));
- assertThat(leafListInfo.getMaxElements().getMaxElement(), is(2147483647));
- }
-
- /**
- * Checks whether exception is thrown when invalid min-elements value is
- * given as input.
- */
- @Test
- public void processMaxElementsMaxValue() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("YANG file error : max-elements value 77777777777777777777777 is not valid.");
- YangNode node = manager.getDataModel("src/test/resources/MaxElementsMaxValue.yang");
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/MinElementsListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/MinElementsListenerTest.java
deleted file mode 100644
index fcf6c39..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/MinElementsListenerTest.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.io.IOException;
-import java.util.ListIterator;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.YangLeafList;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-
-/**
- * Test cases for testing min-elements listener.
- */
-public class MinElementsListenerTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks min-elements as sub-statements of leaf-list.
- */
- @Test
- public void processLeafListSubStatementMinElements() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/LeafListSubStatementMinElements.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
- YangLeafList leafListInfo = leafListIterator.next();
-
- assertThat(leafListInfo.getName(), is("invalid-interval"));
- assertThat(leafListInfo.getMinElements().getMinElement(), is(3));
- }
-
- /**
- * Checks min-elements as sub-statements of list.
- */
- @Test
- public void processListSubStatementMinElements() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ListSubStatementMinElements.yang");
-
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the list is child of module
- YangList yangList = (YangList) yangNode.getChild();
- assertThat(yangList.getName(), is("valid"));
- assertThat(yangList.getMinElements().getMinElement(), is(3));
- }
-
- /**
- * Checks whether exception is thrown when invalid min-elements value is
- * given as input.
- */
- @Test
- public void processMinElementsInvalidValue() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("YANG file error : min-elements value asd is not valid.");
- YangNode node = manager.getDataModel("src/test/resources/MinElementsInvalidValue.yang");
- }
-
- /**
- * Checks whether exception is thrown when invalid min-elements value is
- * given as input.
- */
- @Test
- public void processMinElementsMaxValue() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("YANG file error : min-elements value 77777777777777777777777 is not valid.");
- YangNode node = manager.getDataModel("src/test/resources/MinElementsMaxValue.yang");
- }
-
- /**
- * Checks whether exception is thrown when min-elements statement without
- * statement end is given as input.
- */
- @Test
- public void processMinElementsWithoutStatementEnd() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("missing ';' at 'description'");
- YangNode node = manager.getDataModel("src/test/resources/MinElementsWithoutStatementEnd.yang");
- }
-
- /**
- * Checks whether exception is thrown when min-elements cardinality is not
- * as per the grammar.
- */
- @Test
- public void processMinElementsInvalidCardinality() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("YANG file error: \"min-elements\" is defined more than once in \"leaf-list " +
- "invalid-interval\".");
- YangNode node = manager.getDataModel("src/test/resources/MinElementsInvalidCardinality.yang");
- }
-
- /**
- * Checks min-element's default value.
- */
- @Test
- public void processMinElementsDefaultValue() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/MinElementsDefaultValue.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
- YangLeafList leafListInfo = leafListIterator.next();
-
- assertThat(leafListInfo.getName(), is("invalid-interval"));
- assertThat(leafListInfo.getMinElements().getMinElement(), is(0));
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ModuleListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ModuleListenerTest.java
deleted file mode 100644
index f77050a..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ModuleListenerTest.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import java.io.IOException;
-
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-
-/**
- * Test cases for testing module listener functionality.
- */
-public class ModuleListenerTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- /**
- * Checks if module listener updates the data model root node.
- */
- @Test
- public void processModuleValidEntry() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ModuleValidEntry.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
- }
-
- /**
- * Checks if module name is set correctly.
- */
- @Test(expected = ParserException.class)
- public void processModuleInvalidEntryTest() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ModuleWithInvalidIdentifier.yang");
- }
-
- /**
- * Checks whether exception is thrown when module length is greater than 64 characters.
- */
- @Test
- public void processModuleInvalidIdentifierLength() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("YANG file error : module name Testttttttttttttttttttttttttttttttttttttttttttttttttttt" +
- "tttttttttt is greater than 64 characters.");
- YangNode node = manager.getDataModel("src/test/resources/ModuleInvalidIdentifierLength.yang");
- }
-}
\ No newline at end of file
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/MustListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/MustListenerTest.java
deleted file mode 100644
index ea6708b..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/MustListenerTest.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangMust;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.ListIterator;
-
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-
-/**
- * Test cases for testing must listener functionality.
- */
-public class MustListenerTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks if must listener updates the data model.
- */
- @Test
- public void processContainerSubStatementMust() throws IOException, ParserException {
- YangNode node = manager.getDataModel("src/test/resources/ContainerSubStatementMust.yang");
-
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- YangContainer yangContainer = (YangContainer) yangNode.getChild();
- assertThat(yangContainer.getName(), is("interface"));
-
- String expectedConstraint = "ifType != 'ethernet' or (ifType = 'ethernet' and ifMTU = 1500)";
- List<YangMust> mustConstraintList = yangContainer.getListOfMust();
- assertThat(mustConstraintList.iterator().next().getConstraint(), is(expectedConstraint));
- }
-
- /**
- * Checks if must listener updates the data model.
- */
- @Test
- public void processLeafSubStatementMust() throws IOException, ParserException {
- YangNode node = manager.getDataModel("src/test/resources/LeafSubStatementMust.yang");
-
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getListOfMust().iterator().next().getConstraint(), is("ifType != 'ethernet'"));
- }
-
- /**
- * Checks whether there is no parser exception when must statement is sub-statement of
- * unsupported yang construct.
- */
- @Test
- public void processUnsupportedSubStatementMust() throws IOException, ParserException {
- YangNode node = manager.getDataModel("src/test/resources/UnsupportedYangConstructSubStatementMust.yang");
- }
-}
\ No newline at end of file
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/NamespaceListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/NamespaceListenerTest.java
deleted file mode 100644
index 53ed289..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/NamespaceListenerTest.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.io.IOException;
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-
-/**
- * Test cases for testing namespace listener functionality.
- */
-public class NamespaceListenerTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks that value of namespace shouldn't have invalid spaces.
- */
- @Test(expected = ParserException.class)
- public void processNamespaceWithInvalidSpaces() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/NamespaceWithInvalidSpaces.yang");
- }
-
- /**
- * Checks if namespace with double quotes is allowed.
- */
- @Test()
- public void processNamespaceInDoubleQuotes() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/NamespaceInDoubleQuotes.yang");
-
- // Checks for the version value in data model tree.
- assertThat(((YangModule) node).getModuleNamespace(), is
- ("urn:ietf:params:xml:ns:yang:ietf-ospf"));
- }
-
- /**
- * Checks if namespace without double quotes is allowed.
- */
- @Test()
- public void processNamespaceWithoutQuotes() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/NamespaceWithoutQuotes.yang");
-
- // Checks for the version value in data model tree.
- assertThat(((YangModule) node).getModuleNamespace(), is("urn:ietf:params:xml:ns:yang:ietf-ospf"));
- }
-
- /**
- * Checks if namespace is present only once.
- */
- @Test(expected = ParserException.class)
- public void processNamespaceDualEntry() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/NamespaceDualEntry.yang");
- }
-
- /**
- * Checks if mandatory parameter namespace is present.
- */
- @Test(expected = ParserException.class)
- public void processNamespaceNoEntryTest() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/NamespaceNoEntryTest.yang");
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/NotificationListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/NotificationListenerTest.java
deleted file mode 100644
index 7da2468..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/NotificationListenerTest.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.io.IOException;
-import java.util.ListIterator;
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.datamodel.YangNotification;
-import org.onosproject.yangutils.datamodel.YangStatusType;
-import org.onosproject.yangutils.datamodel.YangTypeDef;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-
-/**
- * Test cases for testing notification listener functionality.
- */
-public class NotificationListenerTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks valid notification statement.
- */
- @Test
- public void processValidNotificationStatement() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ValidNotificationStatement.yang");
-
- assertThat((node instanceof YangModule), is(true));
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("rock"));
-
- YangNotification yangNotification = (YangNotification) yangNode.getChild();
- assertThat(yangNotification.getName(), is("link-failure"));
- assertThat(yangNotification.getDescription(), is("\"A link failure has been detected\""));
- assertThat(yangNotification.getStatus(), is(YangStatusType.DEPRECATED));
- assertThat(yangNotification.getReference(), is("\"reference\""));
-
- YangTypeDef typeDef = (YangTypeDef) yangNotification.getChild();
- assertThat(typeDef.getName(), is("my-type"));
- assertThat(typeDef.getStatus(), is(YangStatusType.DEPRECATED));
-
- ListIterator<YangLeaf> leafIterator = yangNotification.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("if-name"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/OrganizationListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/OrganizationListenerTest.java
deleted file mode 100644
index e9098d3..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/OrganizationListenerTest.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import java.io.IOException;
-
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-
-/**
- * Test cases for testing organization listener functionality.
- */
-public class OrganizationListenerTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks if organization listener updates the data model tree.
- */
- @Test
- public void processOrganizationValidEntry() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/OrganizationValidEntry.yang");
-
- // Checks for the version value in data model tree.
- assertThat(((YangModule) node).getOrganization(), is("\"IETF SPRING Working Group\""));
- }
-
- /**
- * Checks that organization must be present only once.
- */
- @Test(expected = ParserException.class)
- public void processOrganizationDualEntry() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/OrganizationDualEntry.yang");
- }
-
- /**
- * Checks if organization entry syntax is correct.
- */
- @Test(expected = ParserException.class)
- public void processOrganizationMissingValue() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/OrganizationMissingValue.yang");
- }
-
- /**
- * Checks if organization and namespace is present in correct order.
- */
- @Test(expected = ParserException.class)
- public void processOrganizationInvalidOrder() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/OrganizationInvalidOrder.yang");
- }
-}
\ No newline at end of file
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/OutputListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/OutputListenerTest.java
deleted file mode 100644
index 6ee23dc..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/OutputListenerTest.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.datamodel.YangOutput;
-import org.onosproject.yangutils.datamodel.YangRpc;
-import org.onosproject.yangutils.datamodel.YangStatusType;
-import org.onosproject.yangutils.datamodel.YangTypeDef;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import java.io.IOException;
-import java.util.ListIterator;
-
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-
-/**
- * Test cases for testing output listener functionality.
- */
-public class OutputListenerTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks output statements with data definition statements as sub-statements.
- */
- @Test
- public void processOutputStatementWithDataDefinition() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/OutputStatementWithDataDefinition.yang");
-
- assertThat((node instanceof YangModule), is(true));
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("rock"));
-
- YangRpc yangRpc = (YangRpc) yangNode.getChild();
- assertThat(yangRpc.getName(), is("activate-software-image"));
-
- YangOutput yangOutput = (YangOutput) yangRpc.getChild();
- assertThat(yangOutput.getName(), is("output"));
-
- ListIterator<YangLeaf> leafIterator = yangOutput.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("image-name"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
-
- YangList yangList = (YangList) yangOutput.getChild();
- assertThat(yangList.getName(), is("ospf"));
- assertThat(yangList.getKeyList().contains("invalid-interval"), is(true));
- assertThat(yangList.isConfig(), is(true));
- assertThat(yangList.getMaxElements().getMaxElement(), is(10));
- assertThat(yangList.getMinElements().getMinElement(), is(3));
- leafIterator = yangList.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
-
- YangContainer yangContainer = (YangContainer) yangList.getNextSibling();
- assertThat(yangContainer.getName(), is("isis"));
-
- leafIterator = yangContainer.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
- }
-
- /**
- * Checks output statements with type-def statement as sub-statements.
- */
- @Test
- public void processOutputStatementWithTypedef() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/OutputStatementWithTypedef.yang");
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("rock"));
-
- YangRpc yangRpc = (YangRpc) yangNode.getChild();
- assertThat(yangRpc.getName(), is("activate-software-image"));
-
- YangOutput yangOutput = (YangOutput) yangRpc.getChild();
- assertThat(yangOutput.getName(), is("output"));
-
- YangTypeDef typeDef = (YangTypeDef) yangOutput.getChild();
- assertThat(typeDef.getName(), is("my-type"));
- assertThat(typeDef.getStatus(), is(YangStatusType.DEPRECATED));
- assertThat(typeDef.getName(), is("my-type"));
- assertThat(typeDef.getStatus(), is(YangStatusType.DEPRECATED));
- assertThat(typeDef.getTypeDefBaseType().getDataType(), is(YangDataTypes.INT32));
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/PatternRestrictionListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/PatternRestrictionListenerTest.java
deleted file mode 100644
index 8c7def0..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/PatternRestrictionListenerTest.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * Copyright 2016 Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangLeafList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.datamodel.YangPatternRestriction;
-import org.onosproject.yangutils.datamodel.YangStringRestriction;
-import org.onosproject.yangutils.datamodel.YangTypeDef;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import java.io.IOException;
-import java.util.ListIterator;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-
-/**
- * Test cases for pattern restriction listener.
- */
-public class PatternRestrictionListenerTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks valid pattern statement as sub-statement of leaf statement.
- */
- @Test
- public void processValidPatternStatement() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ValidPatternStatement.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();
- ListIterator<String> patternListIterator = stringRestriction.getPatternRestriction()
- .getPatternList().listIterator();
- assertThat(patternListIterator.next(), is("[a-zA-Z]"));
-
- leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("ipv4-address"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
- stringRestriction = (YangStringRestriction) leafInfo
- .getDataType().getDataTypeExtendedInfo();
- patternListIterator = stringRestriction.getPatternRestriction()
- .getPatternList().listIterator();
- assertThat(patternListIterator.next(), is(
- "(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.){3}" +
- "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])" +
- "(%[\\p{N}\\p{L}]+)?"));
- }
-
- /**
- * Checks valid pattern statement as sub-statement of leaf-list.
- */
- @Test
- public void processPatternStatementInsideLeafList() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/PatternStatementInsideLeafList.yang");
-
- assertThat((node instanceof YangModule), is(true));
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
- YangLeafList leafListInfo = leafListIterator.next();
-
- assertThat(leafListInfo.getName(), is("invalid-interval"));
- assertThat(leafListInfo.getDataType().getDataTypeName(), is("string"));
- assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
- YangStringRestriction stringRestriction = (YangStringRestriction) leafListInfo
- .getDataType().getDataTypeExtendedInfo();
- ListIterator<String> patternListIterator = stringRestriction.getPatternRestriction()
- .getPatternList().listIterator();
- assertThat(patternListIterator.next(), is("[a-zA-Z]"));
- }
-
- /**
- * Checks valid pattern statement as sub-statement of typedef.
- */
- @Test
- public void processPatternStatementInsideTypeDef() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/PatternStatementInsideTypeDef.yang");
-
- assertThat((node instanceof YangModule), is(true));
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- YangTypeDef typedef = (YangTypeDef) yangNode.getChild();
- YangStringRestriction stringRestriction = (YangStringRestriction) typedef.getTypeDefBaseType()
- .getDataTypeExtendedInfo();
-
- YangPatternRestriction yangPatternRestriction = stringRestriction.getPatternRestriction();
- assertThat(yangPatternRestriction.getPatternList().listIterator().next(), is("[a-zA-Z]"));
- }
-
- /**
- * Checks valid multiple pattern statements.
- */
- @Test
- public void processMultiplePatternStatement() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/MultiplePatternStatement.yang");
-
- assertThat((node instanceof YangModule), is(true));
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
- YangLeafList leafListInfo = leafListIterator.next();
-
- assertThat(leafListInfo.getName(), is("invalid-interval"));
- assertThat(leafListInfo.getDataType().getDataTypeName(), is("string"));
- assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
- YangStringRestriction stringRestriction = (YangStringRestriction) leafListInfo
- .getDataType().getDataTypeExtendedInfo();
- ListIterator<String> patternListIterator = stringRestriction.getPatternRestriction()
- .getPatternList().listIterator();
- assertThat(patternListIterator.next(), is("[a-zA-Z]"));
- }
-
- /**
- * Checks valid pattern statement with plus symbol in pattern.
- */
- @Test
- public void processPatternStatementWithPlus() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/PatternStatementWithPlus.yang");
-
- assertThat((node instanceof YangModule), is(true));
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
- YangLeafList leafListInfo = leafListIterator.next();
-
- assertThat(leafListInfo.getName(), is("invalid-interval"));
- assertThat(leafListInfo.getDataType().getDataTypeName(), is("string"));
- assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
- YangStringRestriction stringRestriction = (YangStringRestriction) leafListInfo
- .getDataType().getDataTypeExtendedInfo();
- ListIterator<String> patternListIterator = stringRestriction.getPatternRestriction()
- .getPatternList().listIterator();
- //FIXME: + should not be remove from the end.
- //assertThat(patternListIterator.next(), is("-[0-9]+|[0-9]+"));
- }
-
- /**
- * Checks valid pattern substatement.
- */
- @Test
- public void processPatternSubStatements() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/PatternSubStatements.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();
- assertThat(stringRestriction.getDescription(), is("\"pattern description\""));
- assertThat(stringRestriction.getReference(), is("\"pattern reference\""));
- ListIterator<String> patternListIterator = stringRestriction.getPatternRestriction()
- .getPatternList().listIterator();
- assertThat(patternListIterator.next(), is("[a-zA-Z]"));
- }
-
- /**
- * Checks invalid pattern sub-statement.
- */
- @Test(expected = ParserException.class)
- public void processInvalidPatternSubStatements() throws IOException, ParserException {
- YangNode node = manager.getDataModel("src/test/resources/InvalidPatternSubStatements.yang");
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/PositionListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/PositionListenerTest.java
deleted file mode 100644
index 7b59894..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/PositionListenerTest.java
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangBit;
-import org.onosproject.yangutils.datamodel.YangBits;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import java.io.IOException;
-import java.util.ListIterator;
-import java.util.Map;
-
-/**
- * Test cases for position listener.
- */
-public class PositionListenerTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks explicitly configured value.
- */
- @Test
- public void processPositionStatement() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/PositionStatement.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("mybits"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("bits"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.BITS));
- assertThat(((YangBits) leafInfo.getDataType().getDataTypeExtendedInfo()).getBitsName(),
- is("mybits"));
-
- // Check bit name map
- Map<String, YangBit> bitNameMap = ((YangBits) leafInfo.getDataType().getDataTypeExtendedInfo()).getBitNameMap();
- assertThat(bitNameMap.size(), is(3));
- for (Map.Entry<String, YangBit> element : bitNameMap.entrySet()) {
- String bitName = element.getKey();
- YangBit yangBit = element.getValue();
- if (bitName.equals("disable-nagle")) {
- assertThat(yangBit.getPosition(), is(0));
- } else if (bitName.equals("auto-sense-speed")) {
- assertThat(yangBit.getPosition(), is(1));
- } else if (bitName.equals("Ten-Mb-only")) {
- assertThat(yangBit.getPosition(), is(2));
- } else {
- throw new IOException("Invalid bit name: " + bitName);
- }
- }
-
- // Check bit position map
- Map<Integer, YangBit> bitPositionMap = ((YangBits) leafInfo.getDataType().getDataTypeExtendedInfo())
- .getBitPositionMap();
- assertThat(bitPositionMap.size(), is(3));
- for (Map.Entry<Integer, YangBit> element : bitPositionMap.entrySet()) {
- int position = element.getKey();
- YangBit yangBit = element.getValue();
- if (position == 0) {
- assertThat(yangBit.getBitName(), is("disable-nagle"));
- } else if (position == 1) {
- assertThat(yangBit.getBitName(), is("auto-sense-speed"));
- } else if (position == 2) {
- assertThat(yangBit.getBitName(), is("Ten-Mb-only"));
- } else {
- throw new IOException("Invalid bit position: " + position);
- }
- }
- }
-
- /**
- * Checks position value with double quotes.
- */
- @Test
- public void processPositionWithDoubleQuotes() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/PositionWithDoubleQuotes.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("mybits"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("bits"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.BITS));
- assertThat(((YangBits) leafInfo.getDataType().getDataTypeExtendedInfo()).getBitsName(),
- is("mybits"));
-
- // Check bit name map
- Map<String, YangBit> bitNameMap = ((YangBits) leafInfo.getDataType().getDataTypeExtendedInfo()).getBitNameMap();
- assertThat(bitNameMap.size(), is(3));
- for (Map.Entry<String, YangBit> element : bitNameMap.entrySet()) {
- String bitName = element.getKey();
- YangBit yangBit = element.getValue();
- if (bitName.equals("disable-nagle")) {
- assertThat(yangBit.getPosition(), is(0));
- } else if (bitName.equals("auto-sense-speed")) {
- assertThat(yangBit.getPosition(), is(1));
- } else if (bitName.equals("Ten-Mb-only")) {
- assertThat(yangBit.getPosition(), is(2));
- } else {
- throw new IOException("Invalid bit name: " + bitName);
- }
- }
-
- // Check bit position map
- Map<Integer, YangBit> bitPositionMap = ((YangBits) leafInfo.getDataType().getDataTypeExtendedInfo())
- .getBitPositionMap();
- assertThat(bitPositionMap.size(), is(3));
- for (Map.Entry<Integer, YangBit> element : bitPositionMap.entrySet()) {
- int position = element.getKey();
- YangBit yangBit = element.getValue();
- if (position == 0) {
- assertThat(yangBit.getBitName(), is("disable-nagle"));
- } else if (position == 1) {
- assertThat(yangBit.getBitName(), is("auto-sense-speed"));
- } else if (position == 2) {
- assertThat(yangBit.getBitName(), is("Ten-Mb-only"));
- } else {
- throw new IOException("Invalid bit position: " + position);
- }
- }
- }
-
- /**
- * Checks explicit value and auto generated value.
- */
- @Test
- public void processPositionImplicitAndExplicit() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/PositionImplicitAndExplicit.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("mybits"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("bits"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.BITS));
- assertThat(((YangBits) leafInfo.getDataType().getDataTypeExtendedInfo()).getBitsName(),
- is("mybits"));
-
- // Check bit name map
- Map<String, YangBit> bitNameMap = ((YangBits) leafInfo.getDataType().getDataTypeExtendedInfo()).getBitNameMap();
- assertThat(bitNameMap.size(), is(3));
- for (Map.Entry<String, YangBit> element : bitNameMap.entrySet()) {
- String bitName = element.getKey();
- YangBit yangBit = element.getValue();
- if (bitName.equals("disable-nagle")) {
- assertThat(yangBit.getPosition(), is(0));
- } else if (bitName.equals("auto-sense-speed")) {
- assertThat(yangBit.getPosition(), is(1));
- } else if (bitName.equals("Ten-Mb-only")) {
- assertThat(yangBit.getPosition(), is(2));
- } else {
- throw new IOException("Invalid bit name: " + bitName);
- }
- }
-
- // Check bit position map
- Map<Integer, YangBit> bitPositionMap = ((YangBits) leafInfo.getDataType().getDataTypeExtendedInfo())
- .getBitPositionMap();
- assertThat(bitPositionMap.size(), is(3));
- for (Map.Entry<Integer, YangBit> element : bitPositionMap.entrySet()) {
- int position = element.getKey();
- YangBit yangBit = element.getValue();
- if (position == 0) {
- assertThat(yangBit.getBitName(), is("disable-nagle"));
- } else if (position == 1) {
- assertThat(yangBit.getBitName(), is("auto-sense-speed"));
- } else if (position == 2) {
- assertThat(yangBit.getBitName(), is("Ten-Mb-only"));
- } else {
- throw new IOException("Invalid bit position: " + position);
- }
- }
- }
-
- /**
- * Checks explicit value should not be repeated.
- */
- @Test(expected = ParserException.class)
- public void processPositionDuplication() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/PositionDuplication.yang");
- }
-
- /**
- * Checks explicit or auto generated value should not be repeated.
- */
- @Test(expected = ParserException.class)
- public void processPositionImplicitAndExplicitDuplication() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/PositionImplicitAndExplicitDuplication.yang");
- }
-
- /**
- * Checks if negative value of position is not allowed.
- */
- @Test(expected = ParserException.class)
- public void processPositionNegativeValue() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/PositionNegativeValue.yang");
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/PrefixListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/PrefixListenerTest.java
deleted file mode 100644
index ef89a78..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/PrefixListenerTest.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import java.io.IOException;
-
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-
-/**
- * Test cases for testing prefix listener functionality.
- */
-public class PrefixListenerTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks if value of prefix is correct.
- */
- @Test(expected = ParserException.class)
- public void processPrefixInvalidValue() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/PrefixInvalidValue.yang");
- }
-
- /**
- * Checks if prefix listener updates the data model tree.
- */
- @Test
- public void processPrefixValidEntry() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/PrefixValidEntry.yang");
-
- // Checks for the version value in data model tree.
- assertThat(((YangModule) node).getPrefix(), is("On"));
- }
-
- /**
- * Checks prefix value with double quotes.
- */
- @Test
- public void processPrefixWithDoubleQuotes() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/PrefixWithDoubleQuotes.yang");
- assertThat(((YangModule) node).getPrefix(), is("On"));
- }
-
- /**
- * Checks that prefix should be present just once.
- */
- @Test(expected = ParserException.class)
- public void processPrefixDualEntry() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/PrefixDualEntry.yang");
- }
-
- /**
- * Checks if prefix syntax is followed.
- */
- @Test(expected = ParserException.class)
- public void processPrefixMissingValue() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/PrefixMissingValue.yang");
- }
-
- /**
- * Checks that exception should be reported if prefix is missing.
- */
- @Test(expected = ParserException.class)
- public void processPrefixOrder() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/PrefixOrder.yang");
- }
-}
\ No newline at end of file
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/PresenceListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/PresenceListenerTest.java
deleted file mode 100644
index 2d0e376..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/PresenceListenerTest.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.junit.Rule;
-import org.junit.Test;
-
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import java.io.IOException;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.nullValue;
-
-/**
- * Test cases for presence listener.
- */
-public class PresenceListenerTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks presence statement as sub-statement of container.
- */
- @Test
- public void processContainerSubStatementPresence() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ContainerSubStatementPresence.yang");
-
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the list is child of module
- YangContainer yangContainer = (YangContainer) yangNode.getChild();
- assertThat(yangContainer.getName(), is("valid"));
- assertThat(yangContainer.getPresence(), is("\"invalid\""));
- }
-
- /**
- * checks default value of presence statement.
- */
- @Test
- public void processPresenceDefaultValue() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/PresenceDefaultValue.yang");
-
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the list is child of module
- YangContainer yangContainer = (YangContainer) yangNode.getChild();
- assertThat(yangContainer.getName(), is("valid"));
- assertThat(yangContainer.getPresence(), is(nullValue()));
- }
-
- /**
- * Checks presence statement without statement end.
- */
- @Test
- public void processPresenceWithoutStatementEnd() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("mismatched input 'leaf' expecting {';', '+'}");
- YangNode node = manager.getDataModel("src/test/resources/PresenceWithoutStatementEnd.yang");
- }
-}
\ No newline at end of file
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/RangeRestrictionListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/RangeRestrictionListenerTest.java
deleted file mode 100644
index 0725d49..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/RangeRestrictionListenerTest.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.io.IOException;
-import java.util.ListIterator;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangLeafList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.datamodel.YangRangeInterval;
-import org.onosproject.yangutils.datamodel.YangRangeRestriction;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangInt32;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-
-/**
- * Test cases for range restriction listener.
- */
-public class RangeRestrictionListenerTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks valid range statement as sub-statement of leaf statement.
- */
- @Test
- public void processValidRangeStatement() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ValidRangeStatement.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));
- }
-
- /**
- * Checks valid range statement as sub-statement of leaf-list.
- */
- @Test
- public void processRangeStatementInsideLeafList() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/RangeStatementInsideLeafList.yang");
-
- assertThat((node instanceof YangModule), is(true));
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
- YangLeafList leafListInfo = leafListIterator.next();
-
- assertThat(leafListInfo.getName(), is("invalid-interval"));
- assertThat(leafListInfo.getDataType().getDataTypeName(), is("int32"));
- assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.INT32));
- YangRangeRestriction rangeRestriction = (YangRangeRestriction) leafListInfo
- .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));
- }
-
- /**
- * Checks valid range statement with one interval.
- */
- @Test
- public void processRangeWithOneInterval() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/RangeWithOneInterval.yang");
-
- assertThat((node instanceof YangModule), is(true));
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
- YangLeafList leafListInfo = leafListIterator.next();
-
- assertThat(leafListInfo.getName(), is("invalid-interval"));
- assertThat(leafListInfo.getDataType().getDataTypeName(), is("int32"));
- assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.INT32));
- YangRangeRestriction rangeRestriction = (YangRangeRestriction) leafListInfo
- .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(1));
- }
-
- /**
- * Checks valid range statement with min and max.
- */
- @Test
- public void processRangeWithMinMax() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/RangeWithMinMax.yang");
-
- assertThat((node instanceof YangModule), is(true));
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
- YangLeafList leafListInfo = leafListIterator.next();
-
- assertThat(leafListInfo.getName(), is("invalid-interval"));
- assertThat(leafListInfo.getDataType().getDataTypeName(), is("int32"));
- assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.INT32));
- YangRangeRestriction rangeRestriction = (YangRangeRestriction) leafListInfo
- .getDataType().getDataTypeExtendedInfo();
-
- ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
- .listIterator();
- YangRangeInterval rangeInterval = rangeListIterator.next();
-
- assertThat(((YangInt32) rangeInterval.getStartValue()).getValue(), is(-2147483648));
- assertThat(((YangInt32) rangeInterval.getEndValue()).getValue(), is(2147483647));
- }
-
- /**
- * Checks valid range statement with invalid integer pattern.
- */
- @Test
- public void processRangeWithInvalidIntegerPattern() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("YANG file error : Input value \"a\" is not a valid int32.");
- YangNode node = manager.getDataModel("src/test/resources/RangeWithInvalidIntegerPattern.yang");
- }
-
- /**
- * Checks valid range statement with description.
- */
- @Test
- public void processRangeSubStatements() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/RangeSubStatements.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();
-
- assertThat(rangeRestriction.getDescription(), is("\"range description\""));
- assertThat(rangeRestriction.getReference(), is("\"range reference\""));
-
- ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
- .listIterator();
- YangRangeInterval rangeInterval = rangeListIterator.next();
- assertThat(((YangInt32) rangeInterval.getStartValue()).getValue(), is(1));
- 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/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ReferenceListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ReferenceListenerTest.java
deleted file mode 100644
index 8a8d02a..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ReferenceListenerTest.java
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.io.IOException;
-import java.util.ListIterator;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangLeafList;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.datamodel.YangStatusType;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-
-/**
- * Test case for reference listener.
- */
-public class ReferenceListenerTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks valid reference statement.
- */
- @Test
- public void processReferenceStatement() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ReferenceStatement.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- // Check whether the reference is set correctly.
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
- }
-
- /**
- * Checks whether exception is thrown for invalid reference statement.
- */
- @Test
- public void processReferenceWithoutStatementEnd() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("mismatched input '}' expecting {';', '+'}");
- YangNode node = manager.getDataModel("src/test/resources/ReferenceWithoutStatementEnd.yang");
- }
-
- /**
- * Checks valid reference statement under module.
- */
- @Test
- public void processModuleSubStatementReference() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ModuleSubStatementReference.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the reference is set correctly.
- assertThat(yangNode.getReference(), is("\"RFC 6020\""));
- }
-
- /**
- * Checks valid reference statement under module.
- */
- @Test
- public void processReferenceEmptyStatement() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ReferenceEmptyStatement.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the reference is set correctly.
- assertThat(yangNode.getReference(), is("\"\""));
- }
-
- /**
- * Checks valid reference statement as sub-statement of revision.
- */
- @Test
- public void processRevisionSubStatementReference() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/RevisionSubStatementReference.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the reference is set correctly.
- assertThat(yangNode.getRevision().getReference(), is("\"revision reference\""));
- }
-
- /**
- * Checks reference statement as sub-statement of container.
- */
- @Test
- public void processContainerSubStatementReference() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ContainerSubStatementReference.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the reference value is set correctly.
- YangContainer container = (YangContainer) yangNode.getChild();
- assertThat(container.getName(), is("valid"));
- assertThat(container.getReference(), is("\"container reference\""));
-
- // Check whether leaf properties as set correctly.
- ListIterator<YangLeaf> leafIterator = container.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
- assertThat(leafInfo.getUnits(), is("\"seconds\""));
- assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
- assertThat(leafInfo.isMandatory(), is(true));
- assertThat(leafInfo.getStatus(), is(YangStatusType.CURRENT));
- assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
- }
-
- /**
- * Checks reference statement as sub-statement of list.
- */
- @Test
- public void processListSubStatementReference() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ListSubStatementReference.yang");
-
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the list is child of module and description value is set correctly.
- YangList yangList = (YangList) yangNode.getChild();
- assertThat(yangList.getName(), is("valid"));
- assertThat(yangList.isConfig(), is(true));
- assertThat(yangList.getReference(), is("\"list reference\""));
-
- // Check whether leaf properties as set correctly.
- ListIterator<YangLeaf> leafIterator = yangList.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
- assertThat(leafInfo.getUnits(), is("\"seconds\""));
- assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
- assertThat(leafInfo.isMandatory(), is(true));
- assertThat(leafInfo.getStatus(), is(YangStatusType.CURRENT));
- assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
- }
-
- /**
- * Checks valid reference statement as sub-statement of leaf-list.
- */
- @Test
- public void processLeafListSubStatementReference() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/LeafListSubStatementReference.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
- YangLeafList leafListInfo = leafListIterator.next();
-
- // Check whether description value is set correctly.
- assertThat(leafListInfo.getName(), is("invalid-interval"));
- assertThat(leafListInfo.getReference(), is("\"RFC 6020\""));
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/RequireInstanceListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/RequireInstanceListenerTest.java
deleted file mode 100644
index 70bb875..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/RequireInstanceListenerTest.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.io.IOException;
-import java.util.ListIterator;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangLeafRef;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-/**
- * Test cases for require-instance listener.
- */
-public class RequireInstanceListenerTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks require-statement with true as status.
- */
- @Test
- public void processRequireInstanceTrue() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/RequireInstanceTrue.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("PathListener"));
-
- YangContainer container = (YangContainer) yangNode.getChild().getNextSibling();
- ListIterator<YangLeaf> leafIterator = container.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- // Check whether the require-instance value is set correctly in leafref.
- assertThat(leafInfo.getName(), is("ifname"));
- YangLeafRef yangLeafRef = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
- assertThat(yangLeafRef.getRequireInstance(), is(true));
- }
-
- /**
- * Checks require-statement with false as status.
- */
- @Test
- public void processRequireInstanceFalse() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/RequireInstanceFalse.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("PathListener"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- // Check whether the require-instance value is set correctly in instance-identifier.
- assertThat(leafInfo.getName(), is("admin-status"));
-
- YangType type = leafInfo.getDataType();
-
- assertThat(type.getDataType(), is(YangDataTypes.INSTANCE_IDENTIFIER));
- boolean status = ((YangType<Boolean>) type).getDataTypeExtendedInfo();
-
- assertThat(status, is(false));
- }
-
- /**
- * Checks require-statement default value when its not there in YANG under instance-identifier.
- */
- @Test
- public void processRequireInstanceDefaultValueInInstanceIdentifier() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/RequireInstanceDefaultValueInInstanceIdentifier.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("PathListener"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- // Check whether the require-instance value is set correctly in instance-identifier.
- assertThat(leafInfo.getName(), is("admin-status"));
-
- YangType type = leafInfo.getDataType();
-
- assertThat(type.getDataType(), is(YangDataTypes.INSTANCE_IDENTIFIER));
-
- boolean status = ((YangType<Boolean>) type).getDataTypeExtendedInfo();
- assertThat(status, is(true));
- }
-
- /**
- * Checks require-statement default value when its not there in YANG under leafref.
- */
- @Test
- public void processRequireInstanceDefaultValueForLeafref() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/RequireInstanceDefaultValueForLeafref.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("PathListener"));
-
- YangContainer container = (YangContainer) yangNode.getChild().getNextSibling();
- ListIterator<YangLeaf> leafIterator = container.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- // Check whether the require-instance value is set correctly in leafref.
- assertThat(leafInfo.getName(), is("ifname"));
- YangLeafRef yangLeafRef = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
- assertThat(yangLeafRef.getRequireInstance(), is(true));
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/RevisionDateListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/RevisionDateListenerTest.java
deleted file mode 100644
index 8a00480..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/RevisionDateListenerTest.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.io.IOException;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-
-/**
- * Test cases for testing revision date listener functionality.
- */
-public class RevisionDateListenerTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
- private static final String DATE_FORMAT = "yyyy-MM-dd";
- private final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATE_FORMAT);
-
- /**
- * Checks if revision date syntax is correct in include.
- */
- @Test(expected = ParserException.class)
- public void processRevisionDateInvalidSyntaxAtInclude() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/RevisionDateInvalidSyntaxAtInclude.yang");
- }
-
- /**
- * Checks if revision date syntax is correct in import.
- */
- @Test(expected = ParserException.class)
- public void processRevisionDateInvalidSyntaxAtImport() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/RevisionDateInvalidSyntaxAtImport.yang");
- }
-
- /**
- * Checks revision date in quotes inside include.
- */
- @Test
- public void processRevisionDateInQuotesAtInclude() throws IOException, ParserException, ParseException {
-
- YangNode node = manager.getDataModel("src/test/resources/RevisionDateInQuotesAtInclude.yang");
- // Checks for the version value in data model tree.
- assertThat(((YangModule) node).getImportList().get(0).getRevision(), is(simpleDateFormat.parse("2015-02-03")));
- assertThat(((YangModule) node).getIncludeList().get(0).getRevision(), is(simpleDateFormat.parse("2016-02-03")));
- assertThat(((YangModule) node).getIncludeList().get(1).getRevision(), is(simpleDateFormat.parse("2014-02-03")));
- }
-
- /**
- * Checks revision date in quotes inside import.
- */
- @Test
- public void processRevisionDateInQuotesAtImport() throws IOException, ParserException, ParseException {
-
- YangNode node = manager.getDataModel("src/test/resources/RevisionDateInQuotesAtImport.yang");
- // Checks for the version value in data model tree.
- assertThat(((YangModule) node).getImportList().get(0).getRevision(), is(simpleDateFormat.parse("2015-02-03")));
- assertThat(((YangModule) node).getIncludeList().get(0).getRevision(), is(simpleDateFormat.parse("2016-02-03")));
- assertThat(((YangModule) node).getIncludeList().get(1).getRevision(), is(simpleDateFormat.parse("2014-02-03")));
- }
-
- /**
- * Checks if revision date follows YYYY-MM-DD format.
- */
- @Test(expected = ParserException.class)
- public void processRevisionDateInvalidFormat() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/RevisionDateInvalidFormat.yang");
- }
-
- /**
- * Checks if revision date is correct.
- */
- @Test(expected = ParserException.class)
- public void processRevisionDateInvalid() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/RevisionDateInvalid.yang");
- }
-
- /**
- * Checks if revision date listener updates the data model tree.
- */
- @Test
- public void processRevisionDateValidEntry() throws IOException, ParserException, ParseException {
-
- YangNode node = manager.getDataModel("src/test/resources/RevisionDateValidEntry.yang");
-
- // Checks for the version value in data model tree.
- assertThat(((YangModule) node).getImportList().get(0).getRevision(), is(simpleDateFormat.parse("2015-02-03")));
- assertThat(((YangModule) node).getIncludeList().get(0).getRevision(), is(simpleDateFormat.parse("2016-02-03")));
- assertThat(((YangModule) node).getIncludeList().get(1).getRevision(), is(simpleDateFormat.parse("2014-02-03")));
- }
-}
\ No newline at end of file
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/RevisionListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/RevisionListenerTest.java
deleted file mode 100644
index 88c4278..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/RevisionListenerTest.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import java.io.IOException;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-
-/**
- * Test cases for testing revision listener functionality.
- */
-public class RevisionListenerTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
- private static final String DATE_FORMAT = "yyyy-MM-dd";
- private final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATE_FORMAT);
-
- /**
- * Checks if revision doesn't have optional parameters "revision and
- * description".
- */
- @Test
- public void processRevisionNoOptionalParameter() throws IOException, ParserException, ParseException {
-
- YangNode node = manager.getDataModel("src/test/resources/RevisionNoOptionalParameter.yang");
- // Checks for the version value in data model tree.
- assertThat(((YangModule) node).getRevision().getRevDate(), is(simpleDateFormat.parse("2016-02-03")));
- }
-
- /**
- * Checks if the syntax of revision is correct.
- */
- @Test(expected = ParserException.class)
- public void processRevisionInValidSyntax() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/RevisionInValidSyntax.yang");
- }
-
- /**
- * Checks if the correct order is followed.
- */
- @Test(expected = ParserException.class)
- public void processRevisionInValidOrder() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/RevisionInValidOrder.yang");
- }
-
- /**
- * Checks the revision with current date is created for empty revision statement.
- */
- @Test
- public void processWithoutRevision() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/RevisionAbsence.yang");
- assertThat(true, is((node).getRevision() == null));
- }
-
- /**
- * Checks latest date is stored when there are multiple revisions.
- */
- @Test
- public void processWithMultipleRevision() throws IOException, ParserException, ParseException {
-
- YangNode node = manager.getDataModel("src/test/resources/MultipleRevision.yang");
- assertThat((node).getRevision().getRevDate(), is(simpleDateFormat.parse("2013-07-15")));
- }
-}
\ No newline at end of file
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/RpcListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/RpcListenerTest.java
deleted file mode 100644
index 5e1f2cb..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/RpcListenerTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.io.IOException;
-
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangRpc;
-import org.onosproject.yangutils.datamodel.YangTypeDef;
-import org.onosproject.yangutils.datamodel.YangStatusType;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-
-/**
- * Test cases for testing Rpc listener functionality.
- */
-public class RpcListenerTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks valid rpc statements.
- */
- @Test
- public void processValidRpcStatement() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ValidRpcStatement.yang");
-
- assertThat((node instanceof YangModule), is(true));
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("rock"));
-
- YangRpc yangRpc = (YangRpc) yangNode.getChild();
- assertThat(yangRpc.getName(), is("rock-the-house"));
- assertThat(yangRpc.getDescription(), is("\"description\""));
- assertThat(yangRpc.getReference(), is("\"reference\""));
- assertThat(yangRpc.getStatus(), is(YangStatusType.CURRENT));
-
- YangTypeDef typeDef = (YangTypeDef) yangRpc.getChild();
- assertThat(typeDef.getName(), is("my-type"));
- assertThat(typeDef.getStatus(), is(YangStatusType.DEPRECATED));
- assertThat(typeDef.getTypeDefBaseType().getDataType(), is(YangDataTypes.INT32));
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ShortCaseListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ShortCaseListenerTest.java
deleted file mode 100644
index 132f7f4..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ShortCaseListenerTest.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangCase;
-import org.onosproject.yangutils.datamodel.YangChoice;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import java.io.IOException;
-
-/**
- * Test cases for short case listener.
- */
-public class ShortCaseListenerTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks short case listener with container.
- */
- @Test
- public void processShortCaseListenerWithContainer() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ShortCaseListenerWithContainer.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- YangContainer yangContainer = (YangContainer) yangNode.getChild();
- assertThat(yangContainer.getName(), is("food"));
-
- YangChoice yangChoice = (YangChoice) yangContainer.getChild();
- assertThat(yangChoice.getName(), is("snack"));
-
- YangCase yangCase = (YangCase) yangChoice.getChild();
- assertThat(yangCase.getName(), is("sports-arena"));
-
- YangContainer yangContainer1 = (YangContainer) yangCase.getChild();
- assertThat(yangContainer1.getName(), is("sports-arena"));
- }
-
- /**
- * Checks short case listener with list.
- */
- @Test
- public void processShortCaseListenerWithList() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ShortCaseListenerWithList.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- YangContainer yangContainer = (YangContainer) yangNode.getChild();
- assertThat(yangContainer.getName(), is("food"));
-
- YangChoice yangChoice = (YangChoice) yangContainer.getChild();
- assertThat(yangChoice.getName(), is("snack"));
-
- YangCase yangCase = (YangCase) yangChoice.getChild();
- assertThat(yangCase.getName(), is("sports-arena"));
-
- YangList yangList = (YangList) yangCase.getChild();
- assertThat(yangList.getName(), is("sports-arena"));
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/StatusListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/StatusListenerTest.java
deleted file mode 100644
index 6d97bb8..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/StatusListenerTest.java
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.io.IOException;
-import java.util.ListIterator;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangLeafList;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.datamodel.YangStatusType;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-
-/**
- * Test cases for status listener.
- */
-public class StatusListenerTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks valid status statement.
- */
- @Test
- public void processStatusStatementCurrent() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/StatusStatementCurrent.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- // Check whether the status is set correctly.
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getStatus(), is(YangStatusType.CURRENT));
- }
-
- /**
- * Checks valid status statement.
- */
- @Test
- public void processStatusStatementDeprecated() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/StatusStatementDeprecated.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- // Check whether the status is set correctly.
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getStatus(), is(YangStatusType.DEPRECATED));
- }
-
- /**
- * Checks valid status statement.
- */
- @Test
- public void processStatusStatementObsolete() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/StatusStatementObsolete.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- // Check whether the status is set correctly.
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getStatus(), is(YangStatusType.OBSOLETE));
- }
-
- /**
- * Checks whether exception is thrown for invalid status statement.
- */
- @Test
- public void processStatusWithoutStatementEnd() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("missing ';' at '}'");
- YangNode node = manager.getDataModel("src/test/resources/StatusWithoutStatementEnd.yang");
- }
-
- /**
- * Checks whether exception is thrown for invalid status statement.
- */
- @Test
- public void processStatusInvalidValue() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("YANG file error : status invalid is not valid.");
- YangNode node = manager.getDataModel("src/test/resources/StatusInvalidValue.yang");
- }
-
- /**
- * Checks status statement as sub-statement of container.
- */
- @Test
- public void processContainerSubStatementStatus() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ContainerSubStatementStatus.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether status is set correctly.
- YangContainer container = (YangContainer) yangNode.getChild();
- assertThat(container.getName(), is("valid"));
- assertThat(container.isConfig(), is(true));
- assertThat(container.getStatus(), is(YangStatusType.OBSOLETE));
-
- // Check whether leaf properties as set correctly.
- ListIterator<YangLeaf> leafIterator = container.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
- assertThat(leafInfo.getUnits(), is("\"seconds\""));
- assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
- assertThat(leafInfo.isMandatory(), is(true));
- assertThat(leafInfo.getStatus(), is(YangStatusType.CURRENT));
- assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
- }
-
- /**
- * Checks status statement as sub-statement of list.
- */
- @Test
- public void processListSubStatementStatus() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ListSubStatementStatus.yang");
-
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the list is child of module and status is set.
- YangList yangList = (YangList) yangNode.getChild();
- assertThat(yangList.getName(), is("valid"));
- assertThat(yangList.isConfig(), is(true));
- assertThat(yangList.getStatus(), is(YangStatusType.CURRENT));
-
- // Check whether leaf properties as set correctly.
- ListIterator<YangLeaf> leafIterator = yangList.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
- assertThat(leafInfo.getUnits(), is("\"seconds\""));
- assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
- assertThat(leafInfo.isMandatory(), is(true));
- assertThat(leafInfo.getStatus(), is(YangStatusType.CURRENT));
- assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
- }
-
- /**
- * Checks valid status statement as sub-statement of leaf-list.
- */
- @Test
- public void processLeafListSubStatementStatus() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/LeafListSubStatementStatus.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
- YangLeafList leafListInfo = leafListIterator.next();
-
- // Check whether status is set correctly.
- assertThat(leafListInfo.getName(), is("invalid-interval"));
- assertThat(leafListInfo.isConfig(), is(true));
- assertThat(leafListInfo.getStatus(), is(YangStatusType.CURRENT));
- }
-
- /**
- * Checks default value of status statement.
- */
- @Test
- public void processStatusDefaultValue() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/StatusDefaultValue.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
- YangLeafList leafListInfo = leafListIterator.next();
-
- // Check whether status is set correctly.
- assertThat(leafListInfo.getName(), is("invalid-interval"));
- assertThat(leafListInfo.isConfig(), is(true));
- assertThat(leafListInfo.getStatus(), is(YangStatusType.CURRENT));
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/SubModuleListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/SubModuleListenerTest.java
deleted file mode 100644
index 3210948..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/SubModuleListenerTest.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.datamodel.YangSubModule;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import java.io.IOException;
-
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-
-/**
- * Test cases for testing submodule listener functionality.
- */
-public class SubModuleListenerTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks if the sub module listeners updates the data model tree.
- */
- @Test
- public void processSubModuleValidEntry() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/SubModuleValidEntry.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangSubModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.SUB_MODULE_NODE));
-
- YangSubModule yangNode = (YangSubModule) node;
- // Check whether the module name is set correctly.
- assertThat(yangNode.getName(), is("Test"));
- // Checks for the version value in data model tree.
- assertThat(yangNode.getVersion(), is((byte) 1));
- // Checks identifier of belongsto in data model tree.
- assertThat(yangNode.getBelongsTo().getBelongsToModuleName(), is("ONOS"));
- // Checks for the version value in data model tree.
- assertThat(yangNode.getBelongsTo().getPrefix(), is("On1"));
- }
-
- /**
- * Checks if the yang version and belongs to can come in any order in sub
- * module.
- */
- @Test
- public void processSubModuleOrder() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/SubModuleOrder.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangSubModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.SUB_MODULE_NODE));
-
- YangSubModule yangNode = (YangSubModule) node;
- // Check whether the module name is set correctly.
- assertThat(yangNode.getName(), is("Test"));
- // Checks for the version value in data model tree.
- assertThat(yangNode.getVersion(), is((byte) 1));
- // Checks identifier of belongsto in data model tree.
- assertThat(yangNode.getBelongsTo().getBelongsToModuleName(), is("ONOS"));
- // Checks for the version value in data model tree.
- assertThat(yangNode.getBelongsTo().getPrefix(), is("On1"));
- }
-
- /**
- * Checks if yang version is optional.
- */
- @Test
- public void processSubModuleWithoutVersion() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/SubModuleWithoutVersion.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangSubModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.SUB_MODULE_NODE));
-
- YangSubModule yangNode = (YangSubModule) node;
- // Check whether the module name is set correctly.
- assertThat(yangNode.getName(), is("Test"));
- // Checks identifier of belongsto in data model tree.
- assertThat(yangNode.getBelongsTo().getBelongsToModuleName(), is("ONOS"));
- // Checks for the version value in data model tree.
- assertThat(yangNode.getBelongsTo().getPrefix(), is("On1"));
- //Checks the revision with current date is created for empty revision statement.
- assertThat(true, is(node.getRevision() == null));
- }
-
- /**
- * Checks if sub module name is correct.
- */
- @Test(expected = ParserException.class)
- public void processSubModuleInvalidName() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/SubModuleInvalidName.yang");
- }
-
- /**
- * Checks if sub module has invalid modules construct eg namespace.
- */
- @Test(expected = ParserException.class)
- public void processSubModuleWithNamespace() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/SubModuleWithNamespace.yang");
- }
-}
\ No newline at end of file
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/TypeListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/TypeListenerTest.java
deleted file mode 100644
index 60da95e..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/TypeListenerTest.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.io.IOException;
-import java.util.ListIterator;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.YangLeafRef;
-import org.onosproject.yangutils.datamodel.YangTypeDef;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangLeafList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-
-/**
- * Test case for type listener.
- */
-public class TypeListenerTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks derived statement without contraints.
- */
- @Test
- public void processDerivedTypeStatement() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/DerivedTypeStatement.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- 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("hello"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.DERIVED));
- }
-
- /**
- * Checks valid yang data type.
- */
- @Test
- public void processIntegerTypeStatement() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/IntegerTypeStatement.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- 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("uint16"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
- }
-
- /**
- * Checks type for leaf-list.
- */
- @Test
- public void processLeafListSubStatementType() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/LeafListSubStatementType.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
- YangLeafList leafListInfo = leafListIterator.next();
-
- assertThat(leafListInfo.getName(), is("invalid-interval"));
- assertThat(leafListInfo.getDataType().getDataTypeName(), is("uint16"));
- assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
- }
-
- /**
- * Checks for type instance-identifier.
- */
- @Test
- public void processInstanceIdentifierType() throws IOException, ParserException {
-
- YangNode node = manager
- .getDataModel("src/test/resources/InstanceIdentifierListener.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
- YangContainer container = (YangContainer) yangNode.getChild();
- ListIterator<YangLeaf> leafIterator = container.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("instance-identifier"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.INSTANCE_IDENTIFIER));
- }
-
- /**
- * Checks for leaf ref path concatenation.
- */
- @Test
- public void processLeafRefPathConcatenation() throws IOException, ParserException {
-
- YangNode node = manager
- .getDataModel("src/test/resources/leafRefPathConcatenation.yang");
-
- assertThat((node instanceof YangModule), is(true));
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("test"));
-
- YangTypeDef typeDef = (YangTypeDef) yangNode.getChild();
- assertThat(typeDef.getName(), is("isis-instance-state-ref"));
- assertThat(typeDef.getTypeDefBaseType().getDataType(), is(YangDataTypes.LEAFREF));
- YangLeafRef leafRef = ((YangLeafRef) typeDef.getTypeDefBaseType().getDataTypeExtendedInfo());
- assertThat(leafRef.getPath(), is("/isis-prefix-ipv4-std/default-metric"));
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/UnionListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/UnionListenerTest.java
deleted file mode 100644
index 1fe7218..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/UnionListenerTest.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.ListIterator;
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangLeafList;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.YangUnion;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-
-/**
- * Test cases for testing union listener.
- */
-public class UnionListenerTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks union when type is in leaf.
- */
- @Test
- public void processUnionWhenTypeInLeaf() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/UnionWhenTypeInLeaf.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- YangList yangList = (YangList) yangNode.getChild();
- assertThat(yangList.getName(), is("valid"));
-
- ListIterator<YangLeaf> leafIterator = yangList.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("invalid-interval"));
-
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UNION));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("union"));
-
- YangUnion yangUnion = (YangUnion) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- List<YangType<?>> typeList = yangUnion.getTypeList();
- ListIterator<YangType<?>> typeListIterator = typeList.listIterator();
- YangType<?> yangType = typeListIterator.next();
-
- assertThat(yangType.getDataTypeName(), is("int32"));
- assertThat(yangType.getDataType(), is(YangDataTypes.INT32));
-
- YangType<?> yangTypeEnum = typeListIterator.next();
-
- assertThat(yangTypeEnum.getDataTypeName(), is("enumeration"));
- assertThat(yangTypeEnum.getDataType(), is(YangDataTypes.ENUMERATION));
- }
-
- /**
- * Checks union when type is in leaflist.
- */
- @Test
- public void processUnionWhenTypeInLeafList() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/UnionWhenTypeInLeafList.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- YangList yangList = (YangList) yangNode.getChild();
- assertThat(yangList.getName(), is("valid"));
-
- ListIterator<YangLeafList> leafListIterator = yangList.getListOfLeafList().listIterator();
- YangLeafList leafListInfo = leafListIterator.next();
-
- assertThat(leafListInfo.getName(), is("invalid-interval"));
-
- assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.UNION));
- assertThat(leafListInfo.getDataType().getDataTypeName(), is("union"));
-
- YangUnion yangUnion = (YangUnion) leafListInfo.getDataType().getDataTypeExtendedInfo();
-
- List<YangType<?>> typeList = yangUnion.getTypeList();
- ListIterator<YangType<?>> typeListIterator = typeList.listIterator();
- YangType<?> yangType = typeListIterator.next();
-
- assertThat(yangType.getDataTypeName(), is("int32"));
- assertThat(yangType.getDataType(), is(YangDataTypes.INT32));
-
- YangType<?> yangTypeEnum = typeListIterator.next();
-
- assertThat(yangTypeEnum.getDataTypeName(), is("enumeration"));
- assertThat(yangTypeEnum.getDataType(), is(YangDataTypes.ENUMERATION));
- }
-
- /**
- * Checks union with empty type.
- */
- @Test (expected = ParserException.class)
- public void processUnionWithEmptyType() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/UnionWithEmptyType.yang");
- }
-
- /**
- * Checks whether type union has atleast one type statement.
- */
- @Test (expected = ParserException.class)
- public void processUnionWithoutChild() throws IOException, ParserException {
- manager.getDataModel("src/test/resources/UnionWithoutChild.yang");
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/UniqueListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/UniqueListenerTest.java
deleted file mode 100644
index 95ee043..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/UniqueListenerTest.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import java.io.IOException;
-import java.util.ListIterator;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-
-/**
- * Test cases for unique listener.
- */
-public class UniqueListenerTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks unique statement as sub-statement of list.
- */
- @Test
- public void processListSubStatementUnique() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ListSubStatementUnique.yang");
-
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the list is child of module
- YangList yangList = (YangList) yangNode.getChild();
- assertThat(yangList.getName(), is("valid"));
- assertThat(yangList.getUniqueList().listIterator().next(), is("invalid-interval"));
- }
-
- /**
- * Check multiple unique values.
- */
- @Test
- public void processMultipleUniqueValues() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/MultipleUniqueValues.yang");
-
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether the list is child of module
- YangList yangList = (YangList) yangNode.getChild();
- assertThat(yangList.getName(), is("valid"));
- ListIterator<String> listIterator;
- String list;
- listIterator = yangList.getUniqueList().listIterator();
- list = listIterator.next();
- assertThat(list, is("ospf"));
- list = listIterator.next();
- assertThat(list, is("isis"));
- }
-}
\ No newline at end of file
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/UnitsListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/UnitsListenerTest.java
deleted file mode 100644
index fe2bed1..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/UnitsListenerTest.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.io.IOException;
-import java.util.ListIterator;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangLeafList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.datamodel.YangStatusType;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.nullValue;
-import static org.hamcrest.core.Is.is;
-
-/**
- * Test cases for units listener.
- */
-public class UnitsListenerTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks valid units statement.
- */
- @Test
- public void processUnitsStatement() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/UnitsStatement.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat(node instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- // Check whether units value is set correctly.
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getUnits(), is("\"seconds\""));
- }
-
- /**
- * Checks invalid units statement(without statement end).
- */
- @Test
- public void processUnitsWithoutStatementEnd() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("mismatched input '}' expecting {';', '+'}");
- YangNode node = manager.getDataModel("src/test/resources/UnitsWithoutStatementEnd.yang");
- }
-
- /**
- * Checks order of units statement in leaf.
- */
- @Test
- public void processUnitsStatementOrder() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/UnitsStatementOrder.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat(node instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- // Check whether leaf properties is set correctly.
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
- assertThat(leafInfo.getUnits(), is("\"seconds\""));
- assertThat(leafInfo.getDescription(), is("\"Interval before a route is declared invalid\""));
- assertThat(leafInfo.isConfig(), is(true));
- assertThat(leafInfo.isMandatory(), is(true));
- assertThat(leafInfo.getStatus(), is(YangStatusType.CURRENT));
- assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
- }
-
- /**
- * Checks the default value of unit statement.
- */
- @Test
- public void processUnitsDefaultValue() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/UnitsDefaultValue.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat(node instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- 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.getUnits(), is(nullValue()));
- }
-
- /**
- * Checks invalid occurance of units statement as sub-statement of leaf.
- */
- @Test
- public void processUnitsStatementCardinality() throws IOException, ParserException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("YANG file error: \"units\" is defined more than once in \"leaf invalid-interval\".");
- YangNode node = manager.getDataModel("src/test/resources/UnitsStatementCardinality.yang");
- }
-
- /**
- * Checks valid units statement as sub-statement of leaf-list.
- */
- @Test
- public void processLeafListSubStatementUnits() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/LeafListSubStatementUnits.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat(node instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
- YangLeafList leafListInfo = leafListIterator.next();
-
- // Check whether units value is set correctly.
- assertThat(leafListInfo.getName(), is("invalid-interval"));
- assertThat(leafListInfo.getUnits(), is("\"seconds\""));
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/UsesListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/UsesListenerTest.java
deleted file mode 100644
index a20c43e..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/UsesListenerTest.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.io.IOException;
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.YangGrouping;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.datamodel.YangStatusType;
-import org.onosproject.yangutils.datamodel.YangUses;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-
-/**
- * Test cases for testing uses listener.
- */
-public class UsesListenerTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks uses statement inside module.
- */
- @Test
- public void processUsesInModule() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/UsesInModule.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- YangGrouping yangGrouping = (YangGrouping) yangNode.getChild();
- assertThat(yangGrouping.getName(), is("endpoint"));
-
- YangUses yangUses = (YangUses) yangGrouping.getNextSibling();
- assertThat(yangUses.getName(), is("endpoint"));
- }
-
- /**
- * Checks uses statement inside container.
- */
- @Test
- public void processUsesInContainer() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/UsesInContainer.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- YangGrouping yangGrouping = (YangGrouping) yangNode.getChild();
- assertThat(yangGrouping.getName(), is("endpoint"));
-
- YangContainer yangContainer = (YangContainer) yangGrouping.getNextSibling();
- assertThat(yangContainer.getName(), is("valid"));
-
- YangUses yangUses = (YangUses) yangContainer.getChild();
- assertThat(yangUses.getName(), is("endpoint"));
-
- // Check attributes associated with uses.
- assertThat(yangUses.getStatus(), is(YangStatusType.CURRENT));
- assertThat(yangUses.getReference(), is("\"RFC 6020\""));
- assertThat(yangUses.getDescription(), is("\"grouping under test\""));
- }
-
- /**
- * Checks uses statement inside list.
- */
- @Test
- public void processUsesInList() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/UsesInList.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- YangGrouping yangGrouping = (YangGrouping) yangNode.getChild();
- assertThat(yangGrouping.getName(), is("endpoint"));
-
- YangList yangList = (YangList) yangGrouping.getNextSibling();
- assertThat(yangList.getName(), is("valid"));
-
- YangUses yangUses = (YangUses) yangList.getChild();
- assertThat(yangUses.getName(), is("endpoint"));
-
- // Check attributes associated with uses.
- assertThat(yangUses.getStatus(), is(YangStatusType.CURRENT));
- assertThat(yangUses.getReference(), is("\"RFC 6020\""));
- assertThat(yangUses.getDescription(), is("\"grouping under test\""));
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ValueListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ValueListenerTest.java
deleted file mode 100644
index 20497e0..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/ValueListenerTest.java
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.datamodel.YangEnum;
-import org.onosproject.yangutils.datamodel.YangEnumeration;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import java.io.IOException;
-import java.util.ListIterator;
-import java.util.Set;
-
-/**
- * Test cases for value listener.
- */
-public class ValueListenerTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks explicitly configured value.
- */
- @Test
- public void processValueStatement() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ValueStatement.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("speed"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("enumeration"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.ENUMERATION));
- assertThat(((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getName(),
- is("speed_enum"));
-
- Set<YangEnum> enumSet = ((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getEnumSet();
- for (YangEnum tmp : enumSet) {
- if (tmp.getNamedValue().equals("10m")) {
- assertThat(tmp.getValue(), is(10));
- } else if (tmp.getNamedValue().equals("100m")) {
- assertThat(tmp.getValue(), is(100));
- } else if (tmp.getNamedValue().equals("auto")) {
- assertThat(tmp.getValue(), is(1000));
- }
- }
- }
-
- /**
- * Checks explicitly configured negative value.
- */
- @Test
- public void processValueStatementWithNegativeValue() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ValueStatementWithNegativeValue.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("speed"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("enumeration"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.ENUMERATION));
- assertThat(((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getName(),
- is("speed_enum"));
-
- Set<YangEnum> enumSet = ((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getEnumSet();
- for (YangEnum tmp : enumSet) {
- if (tmp.getNamedValue().equals("10m")) {
- assertThat(tmp.getValue(), is(-2));
- } else if (tmp.getNamedValue().equals("100m")) {
- assertThat(tmp.getValue(), is(-1));
- } else if (tmp.getNamedValue().equals("auto")) {
- assertThat(tmp.getValue(), is(0));
- }
- }
- }
-
- /**
- * Checks explicitly configured value with double quotes.
- */
- @Test
- public void processValueStatementWithQuotes() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ValueStatementWithQuotes.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("speed"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("enumeration"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.ENUMERATION));
- assertThat(((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getName(),
- is("speed_enum"));
-
- Set<YangEnum> enumSet = ((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getEnumSet();
- for (YangEnum tmp : enumSet) {
- if (tmp.getNamedValue().equals("10m")) {
- assertThat(tmp.getValue(), is(10));
- } else if (tmp.getNamedValue().equals("100m")) {
- assertThat(tmp.getValue(), is(100));
- } else if (tmp.getNamedValue().equals("auto")) {
- assertThat(tmp.getValue(), is(1000));
- }
- }
- }
-
- /**
- * Checks explicit value and auto generated value.
- */
- @Test
- public void processValueAndAutoStatement() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ValueAndAutoStatement.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("speed"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("enumeration"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.ENUMERATION));
- assertThat(((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getName(),
- is("speed_enum"));
-
- Set<YangEnum> enumSet = ((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getEnumSet();
- for (YangEnum tmp : enumSet) {
- if (tmp.getNamedValue().equals("10m")) {
- assertThat(tmp.getValue(), is(10));
- } else if (tmp.getNamedValue().equals("100m")) {
- assertThat(tmp.getValue(), is(11));
- } else if (tmp.getNamedValue().equals("auto")) {
- assertThat(tmp.getValue(), is(1000));
- }
- }
- }
-
- /**
- * Checks explicit value should not be repeated.
- */
- @Test(expected = ParserException.class)
- public void processValueDuplication() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ValueDuplication.yang");
- }
-
- /**
- * Checks explicit or auto generated value should not be repeated.
- */
- @Test(expected = ParserException.class)
- public void processValueExplicitAndAutoDuplication() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ValueExplicitAndAutoDuplication.yang");
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/VersionListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/VersionListenerTest.java
deleted file mode 100644
index 3d9de83..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/VersionListenerTest.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.io.IOException;
-
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-
-/**
- * Test cases for testing version listener functionality.
- */
-public class VersionListenerTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks if value of version is correct.
- */
- @Test(expected = ParserException.class)
- public void processVersionInvalidValue() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/VersionInvalidValue.yang");
- }
-
- /**
- * Checks if version listener updates the data model tree.
- */
- @Test
- public void processVersionValidEntry() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/VersionValidEntry.yang");
-
- // Checks for the version value in data model tree.
- assertThat(((YangModule) node).getVersion(), is((byte) 1));
- }
-
- /**
- * Checks version in double quotes.
- */
- @Test
- public void processValidVersionWithDoubleQuotes() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/ValidVersionWithDoubleQuotes.yang");
-
- // Checks for the version value in data model tree.
- assertThat(((YangModule) node).getVersion(), is((byte) 1));
- }
-
- /**
- * Checks if version which is optional paramater is not present.
- */
- @Test
- public void processVersionNotPresent() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/VersionNotPresent.yang");
-
- // Checks for the version value in data model tree.
- assertThat(((YangModule) node).getVersion(), is((byte) 1));
- }
-
- /**
- * Checks that version should be present only once.
- */
- @Test(expected = ParserException.class)
- public void processVersionDualEntry() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/VersionDualEntry.yang");
- }
-
- /**
- * Checks if version can appear in any order in module header.
- */
- @Test
- public void processVersionOrder() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/VersionOrder.yang");
-
- // Checks for the version value in data model tree.
- assertThat(((YangModule) node).getVersion(), is((byte) 1));
- }
-
- /**
- * Checks if sytax of version entry is not correct.
- */
- @Test(expected = ParserException.class)
- public void processVersionInvalidSyntax() throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/VersionInvalidSyntax.yang");
- }
-}
\ No newline at end of file
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/WhenListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/WhenListenerTest.java
deleted file mode 100644
index fadbc01..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/listeners/WhenListenerTest.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.listeners;
-
-import java.io.IOException;
-import java.util.ListIterator;
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-
-/**
- * Test cases for testing when listener functionality.
- */
-public class WhenListenerTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks if when listener updates the data model.
- */
- @Test
- public void processContainerSubStatementWhen() throws IOException, ParserException {
- YangNode node = manager.getDataModel("src/test/resources/ContainerSubStatementWhen.yang");
-
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- YangList yangList = (YangList) yangNode.getChild();
- String expectedConstraint = "../switching-capability = 'TDM'";
- assertThat(yangList.getName(), is("interface-switching-capability"));
- assertThat(yangList.getWhen().getCondition(), is(expectedConstraint));
-
- YangContainer container = (YangContainer) yangList.getNextSibling();
- assertThat(container.getName(), is("time-division-multiplex-capable"));
- assertThat(container.getWhen().getCondition(), is(expectedConstraint));
- }
-
- /**
- * Checks if when listener updates the data model.
- */
- @Test
- public void processLeafSubStatementWhen() throws IOException, ParserException {
- YangNode node = manager.getDataModel("src/test/resources/LeafSubStatementWhen.yang");
-
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getWhen().getCondition(), is("ifType != 'ethernet'"));
- }
-}
\ No newline at end of file
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/parseutils/ListenerErrorMessageConstructionTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/parseutils/ListenerErrorMessageConstructionTest.java
deleted file mode 100644
index bcfaf20..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/parseutils/ListenerErrorMessageConstructionTest.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.parseutils;
-
-import org.junit.Test;
-
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.CONTACT_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
-
-/**
- * Test case for testing listener error message construction util.
- */
-public class ListenerErrorMessageConstructionTest {
-
- /**
- * Checks for error message construction with parsable data type name.
- */
- @Test
- public void checkErrorMsgConstructionWithName() {
-
- // Create an test error message
- String testErrorMessage = constructListenerErrorMessage(INVALID_HOLDER, CONTACT_DATA, "Test Instance", ENTRY);
-
- // Check message.
- assertThat(testErrorMessage, is("Internal parser error detected: Invalid holder for contact "
- + "\"Test Instance\" before processing."));
- }
-
- /**
- * Checks for error message construction without parsable data type name.
- */
- @Test
- public void checkErrorMsgConstructionWithoutName() {
-
- // Create an test error message
- String testErrorMessage = constructListenerErrorMessage(INVALID_HOLDER, CONTACT_DATA, "Test Instance", ENTRY);
-
- // Check message.
- assertThat(testErrorMessage,
- is("Internal parser error detected: Invalid holder for contact \"Test Instance\""
- + " before processing."));
- }
-
- /**
- * Checks for extended error message construction with parsable data type
- * name.
- */
- @Test
- public void checkExtendedErrorMsgConstructionWithName() {
-
- // Create an test error message
- String testErrorMessage = constructExtendedListenerErrorMessage(INVALID_HOLDER, CONTACT_DATA,
- "Test Instance", ENTRY,
- "Extended Information");
-
- // Check message.
- assertThat(testErrorMessage,
- is("Internal parser error detected: Invalid holder for contact \"Test Instance\""
- + " before processing.\n" + "Error Information: Extended Information"));
- }
-
- /**
- * Checks for extended error message construction without parsable data type
- * name.
- */
- @Test
- public void checkExtendedErrorMsgConstructionWithoutName() {
-
- // Create an test error message
- String testErrorMessage = constructExtendedListenerErrorMessage(INVALID_HOLDER, CONTACT_DATA, "", ENTRY,
- "Extended Information");
-
- // Check message.
- assertThat(testErrorMessage, is("Internal parser error detected: Invalid holder for contact"
- + " before processing.\n" + "Error Information: Extended Information"));
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/parseutils/ListenerUtilTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/parseutils/ListenerUtilTest.java
deleted file mode 100644
index c29b126..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/parseutils/ListenerUtilTest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.parseutils;
-
-import java.io.IOException;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-/**
- * Test case for testing listener util.
- */
-public class ListenerUtilTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks whether exception is thrown when identifier starts with xml.
- */
- @Test
- public void validateIdentifierStartsWithXml() throws IOException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("YANG file error : module identifier xMlTest must not start" +
- " with (('X'|'x') ('M'|'m') ('L'|'l'))");
- manager.getDataModel("src/test/resources/InValidIdentifierXML.yang");
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/parseutils/ListenerValidationTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/parseutils/ListenerValidationTest.java
deleted file mode 100644
index ce347d6..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/parseutils/ListenerValidationTest.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.parseutils;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.YangRevision;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.TreeWalkListener;
-
-import static org.onosproject.yangutils.datamodel.utils.YangConstructType.YANGBASE_DATA;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsEmpty;
-import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
-
-/**
- * Test case for testing listener validation util.
- */
-public class ListenerValidationTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- /**
- * Checks for exception in case parsable stack is empty while validating for
- * not empty scenario.
- */
- @Test
- public void validateStackIsNotEmptyForEmptyStack() {
-
- String expectedError = constructListenerErrorMessage(MISSING_HOLDER, YANGBASE_DATA, "", EXIT);
-
- // Get the exception occurred during parsing.
- thrown.expect(ParserException.class);
- thrown.expectMessage(expectedError);
-
- // Create test walker and assign test error to it.
- TreeWalkListener testWalker = new TreeWalkListener();
-
- checkStackIsNotEmpty(testWalker, MISSING_HOLDER, YANGBASE_DATA, "", EXIT);
- }
-
- /**
- * Checks if there is no exception in case parsable stack is not empty while
- * validating for not empty scenario.
- */
- @Test
- public void validateStackIsNotEmptyForNonEmptyStack() {
-
- // Create test walker and assign test error to it.
- TreeWalkListener testWalker = new TreeWalkListener();
-
- // Create a temporary node of parsable.
- YangRevision tmpNode = new YangRevision();
- testWalker.getParsedDataStack().push(tmpNode);
-
- checkStackIsNotEmpty(testWalker, MISSING_HOLDER, YANGBASE_DATA, "", EXIT);
- }
-
- /**
- * Checks for exception in case parsable stack is not empty while validating
- * for empty scenario.
- */
- @Test
- public void validateStackIsEmptyForNonEmptyStack() {
-
- String expectedError = constructListenerErrorMessage(MISSING_HOLDER, YANGBASE_DATA, "", EXIT);
-
- // Get the exception occurred during parsing.
- thrown.expect(ParserException.class);
- thrown.expectMessage(expectedError);
-
- // Create test walker and assign test error to it.
- TreeWalkListener testWalker = new TreeWalkListener();
-
- // Create a temporary node of parsable.
- YangRevision tmpNode = new YangRevision();
- testWalker.getParsedDataStack().push(tmpNode);
-
- checkStackIsEmpty(testWalker, MISSING_HOLDER, YANGBASE_DATA, "", EXIT);
- }
-
- /**
- * Checks if there is no exception in case parsable stack is empty while
- * validating for empty scenario.
- */
- @Test
- public void validateStackIsEmptyForEmptyStack() {
-
- // Create test walker and assign test error to it.
- TreeWalkListener testWalker = new TreeWalkListener();
-
- checkStackIsEmpty(testWalker, MISSING_HOLDER, YANGBASE_DATA, "", EXIT);
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/parseutils/ParseTreeErrorListenerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/parseutils/ParseTreeErrorListenerTest.java
deleted file mode 100644
index 4489e77..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/parser/impl/parseutils/ParseTreeErrorListenerTest.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.parser.impl.parseutils;
-
-import org.antlr.v4.runtime.ANTLRFileStream;
-import org.antlr.v4.runtime.ANTLRInputStream;
-import org.antlr.v4.runtime.CommonTokenStream;
-import org.antlr.v4.runtime.tree.ParseTree;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangLexer;
-import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.CustomExceptionMatcher;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-import org.onosproject.yangutils.parser.impl.parserutils.ParseTreeErrorListener;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.IOException;
-
-/**
- * Test case for testing parse tree error listener.
- */
-public class ParseTreeErrorListenerTest {
-
- YangUtilsParserManager manager = new YangUtilsParserManager();
- File file;
- BufferedWriter out;
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- /**
- * Checks that no exception is generated for YANG file with valid syntax.
- */
- @Test
- public void checkValidYangFileForNoSyntaxError() throws IOException {
-
- ANTLRInputStream input = new ANTLRFileStream("src/test/resources/YangFileWithoutSyntaxError.yang");
-
- // Create a lexer that feeds off of input char stream.
- GeneratedYangLexer lexer = new GeneratedYangLexer(input);
- // Create a buffer of tokens pulled from the lexer.
- CommonTokenStream tokens = new CommonTokenStream(lexer);
- // Create a parser that feeds off the tokens buffer.
- GeneratedYangParser parser = new GeneratedYangParser(tokens);
- // Remove console error listener.
- parser.removeErrorListeners();
- // Create instance of customized error listener.
- ParseTreeErrorListener parseTreeErrorListener = new ParseTreeErrorListener();
- // Add customized error listener to catch errors during parsing.
- parser.addErrorListener(parseTreeErrorListener);
- // Begin parsing YANG file and generate parse tree.
- ParseTree tree = parser.yangfile();
- }
-
- /**
- * Checks that exception is generated for YANG file with invalid syntax.
- */
- @Test
- public void checkInvalidYangFileForSyntaxError() throws IOException {
-
- // Get the exception occurred during parsing.
- thrown.expect(ParserException.class);
- thrown.expect(CustomExceptionMatcher.errorLocation(3, 0));
- thrown.expectMessage("no viable alternative at input 'yang-version 1\\nnamespace'");
-
- ANTLRInputStream input = new ANTLRFileStream("src/test/resources/YangFileWithSyntaxError.yang");
-
- // Create a lexer that feeds off of input char stream.
- GeneratedYangLexer lexer = new GeneratedYangLexer(input);
- // Create a buffer of tokens pulled from the lexer.
- CommonTokenStream tokens = new CommonTokenStream(lexer);
- // Create a parser that feeds off the tokens buffer.
- GeneratedYangParser parser = new GeneratedYangParser(tokens);
- // Remove console error listener.
- parser.removeErrorListeners();
- // Create instance of customized error listener.
- ParseTreeErrorListener parseTreeErrorListener = new ParseTreeErrorListener();
- // Add customized error listener to catch errors during parsing.
- parser.addErrorListener(parseTreeErrorListener);
- // Begin parsing YANG file and generate parse tree.
- ParseTree tree = parser.yangfile();
- }
-}
\ No newline at end of file
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/AugmentTranslatorTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/AugmentTranslatorTest.java
deleted file mode 100644
index 531a285..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/AugmentTranslatorTest.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.plugin.manager;
-
-import org.apache.maven.plugin.MojoExecutionException;
-import org.junit.Test;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
-
-import java.io.File;
-import java.io.IOException;
-
-import static org.onosproject.yangutils.utils.io.YangPluginConfig.compileCode;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory;
-
-/**
- * Unit test case for augment translator.
- */
-public class AugmentTranslatorTest {
-
- private final YangUtilManager utilManager = new YangUtilManager();
- private static final String DIR = "target/augmentTranslator/";
- private static final String COMP = System.getProperty("user.dir") + File
- .separator + DIR;
-
- /**
- * Checks augment translation should not result in any exception.
- *
- * @throws MojoExecutionException
- */
- @Test
- public void processAugmentTranslator() throws IOException, ParserException, MojoExecutionException {
-
- deleteDirectory(DIR);
- String searchDir = "src/test/resources/augmentTranslator";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
-
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir(DIR);
- utilManager.translateToJava(yangPluginConfig);
- compileCode(COMP);
- deleteDirectory(DIR);
- }
-
- /**
- * Checks augment translation should not result in any exception.
- * compiler not added because it contains a notification which depends on
- * onos api.
- *
- * @throws MojoExecutionException
- */
- @Test
- public void processRpcAugmentIntraTranslator() throws IOException,
- ParserException, MojoExecutionException {
- deleteDirectory(DIR);
- String searchDir = "src/test/resources/rpcAugment/intra";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
-
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir(DIR);
- utilManager.translateToJava(yangPluginConfig);
- deleteDirectory(DIR);
- }
-
- /**
- * Checks augment translation should not result in any exception.
- *
- * @throws MojoExecutionException
- */
- @Test
- public void processRpcAugmentInterTranslator() throws IOException,
- ParserException, MojoExecutionException {
- deleteDirectory(DIR);
- String searchDir = "src/test/resources/rpcAugment/inter";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
-
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir(DIR);
- utilManager.translateToJava(yangPluginConfig);
- compileCode(COMP);
- deleteDirectory(DIR);
- }
-
- /**
- * Checks augment translation should not result in any exception.
- *
- * @throws MojoExecutionException
- */
- @Test
- public void processChoiceAugmentInterTranslator() throws IOException,
- ParserException, MojoExecutionException {
- deleteDirectory(DIR);
- String searchDir = "src/test/resources/choiceAugment";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
-
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir(DIR);
- utilManager.translateToJava(yangPluginConfig);
- compileCode(COMP);
- deleteDirectory(DIR);
- }
-
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/ChoiceCaseTranslatorTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/ChoiceCaseTranslatorTest.java
deleted file mode 100644
index 367bf82..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/ChoiceCaseTranslatorTest.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.plugin.manager;
-
-import org.apache.maven.plugin.MojoExecutionException;
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
-
-import java.io.File;
-import java.io.IOException;
-
-import static org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorUtil.generateJavaCode;
-import static org.onosproject.yangutils.utils.io.YangPluginConfig.compileCode;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory;
-
-/**
- * Unit tests for choice-case translator.
- */
-public final class ChoiceCaseTranslatorTest {
- private final YangUtilManager utilManager = new YangUtilManager();
- private static final String DIR = "target/ChoiceCaseTestGenFile/";
- private static final String COMP = System.getProperty("user.dir") + File
- .separator + DIR;
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks choice-case translation should not result in any exception.
- */
- @Test
- public void processChoiceCaseTranslator() throws IOException, ParserException {
-
- String dir = "target/ChoiceCaseTestGenFile/";
- deleteDirectory(dir);
- YangNode node = manager.getDataModel("src/test/resources/ChoiceCaseTranslator.yang");
-
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir(dir);
-
- generateJavaCode(node, yangPluginConfig);
- String dir1 = System.getProperty("user.dir") + File.separator + dir;
- compileCode(dir1);
- deleteDirectory(dir);
- }
-
- /**
- * Checks augment translation should not result in any exception.
- *
- * @throws MojoExecutionException
- */
- @Test
- public void processChoiceAllTranslator() throws IOException,
- ParserException, MojoExecutionException {
- deleteDirectory(DIR);
- String searchDir = "src/test/resources/choiceTranslator";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
-
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir(DIR);
- utilManager.translateToJava(yangPluginConfig);
- compileCode(COMP);
- deleteDirectory(DIR);
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/CompilerAnnotationTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/CompilerAnnotationTest.java
deleted file mode 100644
index f5891bf..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/CompilerAnnotationTest.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-
-package org.onosproject.yangutils.plugin.manager;
-
-import org.apache.maven.plugin.MojoExecutionException;
-import org.junit.Test;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
-
-import java.io.File;
-import java.io.IOException;
-
-import static org.onosproject.yangutils.utils.io.YangPluginConfig.compileCode;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory;
-
-/**
- * Unit test case for compiler annotation.
- */
-public class CompilerAnnotationTest {
- private final YangUtilManager utilManager = new YangUtilManager();
- private static final String DIR = "target/compiler/";
- private static final String COMP = System.getProperty("user.dir") + File
- .separator + DIR;
-
-
- /**
- * Checks compiler annotation translation should not result in any exception.
- *
- * @throws MojoExecutionException
- */
- @Test
- public void processTranslator() throws IOException,
- ParserException, MojoExecutionException {
- deleteDirectory(DIR);
- String searchDir = "src/test/resources/compilerAnnotation";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
-
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir(DIR);
- utilManager.translateToJava(yangPluginConfig);
- compileCode(COMP);
- deleteDirectory(DIR);
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/EnumTranslatorTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/EnumTranslatorTest.java
deleted file mode 100644
index 3790e41..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/EnumTranslatorTest.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.plugin.manager;
-
-import java.io.File;
-import java.io.IOException;
-
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-
-import static org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorUtil.generateJavaCode;
-import static org.onosproject.yangutils.utils.io.YangPluginConfig.compileCode;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory;
-
-/**
- * Unit test case for enum translator.
- */
-public final class EnumTranslatorTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks enum translation should not result in any exception.
- */
- @Test
- public void processEnumTranslator()
- throws IOException, ParserException {
- YangNode node = manager.getDataModel("src/test/resources/EnumTranslator.yang");
-
- String dir = "target/enumTranslator/";
- deleteDirectory(dir);
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir(dir);
-
- generateJavaCode(node, yangPluginConfig);
- String dir1 = System.getProperty("user.dir") + File.separator + dir;
- compileCode(dir1);
- deleteDirectory(dir);
- }
- // TODO enhance the test cases, after having a framework of translator test.
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/GroupingTranslatorTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/GroupingTranslatorTest.java
deleted file mode 100644
index a590cc0..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/GroupingTranslatorTest.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.plugin.manager;
-
-import org.apache.maven.plugin.MojoExecutionException;
-import org.junit.Test;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
-
-import java.io.File;
-import java.io.IOException;
-
-import static org.onosproject.yangutils.utils.io.YangPluginConfig.compileCode;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory;
-
-/**
- * Unit test case for grouping translator.
- */
-public class GroupingTranslatorTest {
-
- private final YangUtilManager utilManager = new YangUtilManager();
- private static final String DIR = "target/groupingTranslator/";
- private static final String COMP = System.getProperty("user.dir") + File
- .separator + DIR;
-
- /**
- * Checks grouping translation should not result in any exception.
- *
- * @throws MojoExecutionException
- */
- @Test
- public void processTranslator() throws IOException, ParserException, MojoExecutionException {
-
- deleteDirectory(DIR);
- String searchDir = "src/test/resources/grouping";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
-
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir(DIR);
- utilManager.translateToJava(yangPluginConfig);
- compileCode(COMP);
- deleteDirectory(DIR);
- }
-
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/IdentityTranslatorTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/IdentityTranslatorTest.java
deleted file mode 100644
index 683867d..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/IdentityTranslatorTest.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.plugin.manager;
-
-import org.apache.maven.plugin.MojoExecutionException;
-import org.junit.Test;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
-
-import java.io.File;
-import java.io.IOException;
-
-import static org.onosproject.yangutils.utils.io.YangPluginConfig.compileCode;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory;
-
-/**
- * Translator test case for identity.
- */
-public class IdentityTranslatorTest {
-
- private final YangUtilManager utilManager = new YangUtilManager();
- private static final String DIR = "target/identity/";
- private static final String COMP = System.getProperty("user.dir") + File
- .separator + DIR;
-
- /**
- * Checks translation should not result in any exception.
- *
- * @throws MojoExecutionException
- */
- @Test
- public void processTranslator() throws IOException,
- ParserException, MojoExecutionException {
- deleteDirectory(DIR);
- String searchDir = "src/test/resources/identityTranslator";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
-
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir(DIR);
- utilManager.translateToJava(yangPluginConfig);
- compileCode(COMP);
- deleteDirectory(DIR);
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/IncludeReferenceWithPrefix.java b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/IncludeReferenceWithPrefix.java
deleted file mode 100644
index 2baba8e..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/IncludeReferenceWithPrefix.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.plugin.manager;
-
-import org.apache.maven.plugin.MojoExecutionException;
-import org.junit.Test;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
-
-import java.io.File;
-import java.io.IOException;
-
-import static org.onosproject.yangutils.utils.io.YangPluginConfig.compileCode;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory;
-
-/**
- * Test cases for testing YANG schema node.
- */
-public class IncludeReferenceWithPrefix {
-
- private final YangUtilManager utilManager = new YangUtilManager();
-
- /**
- * Checks method to get schema node from map.
- *
- * @throws MojoExecutionException
- */
- @Test
- public void processRefToIncludeWithPrefix() throws IOException, ParserException, MojoExecutionException {
-
- String dir = "target/refincludecontentwithprefix/";
- deleteDirectory(dir);
- String searchDir = "src/test/resources/refincludecontentwithprefix";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir(dir);
- utilManager.translateToJava(yangPluginConfig);
- String dir1 = System.getProperty("user.dir") + File.separator + dir;
- compileCode(dir1);
- deleteDirectory(dir);
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/InterFileIdentityLinkingTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/InterFileIdentityLinkingTest.java
deleted file mode 100644
index 19610b1..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/InterFileIdentityLinkingTest.java
+++ /dev/null
@@ -1,685 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-package org.onosproject.yangutils.plugin.manager;
-
-import org.apache.maven.plugin.MojoExecutionException;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.YangDerivedInfo;
-import org.onosproject.yangutils.datamodel.YangIdentity;
-import org.onosproject.yangutils.datamodel.YangIdentityRef;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangLeafList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.YangTypeDef;
-import org.onosproject.yangutils.datamodel.utils.ResolvableStatus;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.linker.exceptions.LinkerException;
-import org.onosproject.yangutils.linker.impl.YangLinkerManager;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ListIterator;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-import static org.onosproject.yangutils.datamodel.YangNodeType.MODULE_NODE;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.IDENTITYREF;
-import static org.onosproject.yangutils.linker.impl.YangLinkerUtils.updateFilePriority;
-import static org.onosproject.yangutils.utils.io.YangPluginConfig.compileCode;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory;
-
-/**
- * Test cases for testing inter file linking for identity.
- */
-public class InterFileIdentityLinkingTest {
-
- private final YangUtilManager utilManager = new YangUtilManager();
- private final YangLinkerManager yangLinkerManager = new YangLinkerManager();
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- /**
- * Checks inter file feature linking with imported file.
- */
- @Test
- public void processIdentityInImportedFile()
- throws IOException, ParserException, MojoExecutionException {
-
- String searchDir = "src/test/resources/interfileidentityimport";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
-
- YangNode selfNode = null;
- YangNode refNode1 = null;
- YangNode refNode2 = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- for (YangNode rootNode : utilManager.getYangNodeSet()) {
- if (rootNode.getName().equals("IdentityIntraFile")) {
- selfNode = rootNode;
- } else if (rootNode.getName().equals("IdentityInModule")) {
- refNode1 = rootNode;
- } else {
- refNode2 = rootNode;
- }
- }
-
- // Check whether the data model tree returned is of type module.
- assertThat(selfNode instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("IdentityIntraFile"));
-
- YangIdentity yangIdentity = (YangIdentity) yangNode.getChild();
- assertThat(yangIdentity.getName(), is("ipv4-address-family"));
- assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
- assertThat(yangIdentity.getBaseNode().getReferredIdentity().getName(), is("ref-address-family"));
- assertThat(yangIdentity.getBaseNode().getResolvableStatus(), is(ResolvableStatus.RESOLVED));
-
- yangIdentity = (YangIdentity) yangNode.getChild().getNextSibling();
- assertThat(yangIdentity.getName(), is("ipv6-address-family"));
- assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
- assertThat(yangIdentity.getBaseNode().getReferredIdentity().getName(), is("ref-address-family"));
- assertThat(yangIdentity.getBaseNode().getResolvableStatus(), is(ResolvableStatus.RESOLVED));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("tunnel"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("identityref"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.IDENTITYREF));
- YangIdentityRef yangIdentityRef = (YangIdentityRef) leafInfo.getDataType().getDataTypeExtendedInfo();
- assertThat(yangIdentityRef.getName(), is("ref-address-family"));
- assertThat(yangIdentityRef.getBaseIdentity().getName(), is("ref-address-family"));
- assertThat(yangIdentityRef.getReferredIdentity().getName(), is("ref-address-family"));
- assertThat(yangIdentityRef.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
-
- ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
- YangLeafList leafListInfo = leafListIterator.next();
-
- // Check whether the information in the leaf is correct.
- assertThat(leafListInfo.getName(), is("network-ref"));
- assertThat(leafListInfo.getDataType().getDataTypeName(), is("identityref"));
- assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.IDENTITYREF));
- yangIdentityRef = (YangIdentityRef) (leafListInfo.getDataType().getDataTypeExtendedInfo());
- assertThat(yangIdentityRef.getBaseIdentity().getName(), is("ref-address-family"));
- assertThat(yangIdentityRef.getReferredIdentity().getName(), is("ref-address-family"));
- assertThat(yangIdentityRef.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
-
- }
-
- @Test
- public void processTranslator() throws IOException, ParserException, MojoExecutionException {
-
- deleteDirectory("target/identityTranslator/");
- String searchDir = "src/test/resources/interfileidentityimport";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
-
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir("target/identityTranslator/");
- utilManager.translateToJava(yangPluginConfig);
- compileCode(System.getProperty("user.dir") + File
- .separator + "target/identityTranslator/");
- deleteDirectory("target/identityTranslator/");
- }
-
- /**
- * Checks inter file feature linking with included file.
- */
- @Test
- public void processIdentityInIncludedFile()
- throws IOException, ParserException, MojoExecutionException {
-
- String searchDir = "src/test/resources/interfileidentityinlude";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
-
- YangNode selfNode = null;
- YangNode refNode1 = null;
- YangNode refNode2 = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Carry out linking of sub module with module.
- yangLinkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- // Add references to include list.
- yangLinkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- for (YangNode rootNode : utilManager.getYangNodeSet()) {
- if (rootNode.getName().equals("syslog3")) {
- selfNode = rootNode;
- } else if (rootNode.getName().equals("syslog4")) {
- refNode1 = rootNode;
- } else {
- refNode2 = rootNode;
- }
- }
-
- // Check whether the data model tree returned is of type module.
- assertThat(selfNode instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("syslog3"));
-
- YangIdentity yangIdentity = (YangIdentity) yangNode.getChild();
- assertThat(yangIdentity.getName(), is("ipv4-address-family"));
- assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
- assertThat(yangIdentity.getBaseNode().getReferredIdentity().getName(), is("ref-address-family"));
- assertThat(yangIdentity.getBaseNode().getResolvableStatus(), is(ResolvableStatus.RESOLVED));
-
- yangIdentity = (YangIdentity) yangNode.getChild().getNextSibling();
- assertThat(yangIdentity.getName(), is("ipv6-address-family"));
- assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
- assertThat(yangIdentity.getBaseNode().getReferredIdentity().getName(), is("ref-address-family"));
- assertThat(yangIdentity.getBaseNode().getResolvableStatus(), is(ResolvableStatus.RESOLVED));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("tunnel"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("identityref"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.IDENTITYREF));
- YangIdentityRef yangIdentityRef = (YangIdentityRef) leafInfo.getDataType().getDataTypeExtendedInfo();
- assertThat(yangIdentityRef.getName(), is("ref-address-family"));
- assertThat(yangIdentityRef.getBaseIdentity().getName(), is("ref-address-family"));
- assertThat(yangIdentityRef.getReferredIdentity().getName(), is("ref-address-family"));
- assertThat(yangIdentityRef.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
-
- ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
- YangLeafList leafListInfo = leafListIterator.next();
-
- // Check whether the information in the leaf is correct.
- assertThat(leafListInfo.getName(), is("network-ref"));
- assertThat(leafListInfo.getDataType().getDataTypeName(), is("identityref"));
- assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.IDENTITYREF));
- yangIdentityRef = (YangIdentityRef) (leafListInfo.getDataType().getDataTypeExtendedInfo());
- assertThat(yangIdentityRef.getBaseIdentity().getName(), is("ref-address-family"));
- assertThat(yangIdentityRef.getReferredIdentity().getName(), is("ref-address-family"));
- assertThat(yangIdentityRef.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
- }
-
- /**
- * Checks inter file feature linking with imported file with dependency.
- */
- @Test
- public void processIdentityInImportedFileWithDependency()
- throws IOException, ParserException, MojoExecutionException {
-
- String searchDir = "src/test/resources/interfileidentityimportdependency";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
-
- YangNode selfNode = null;
- YangNode refNode1 = null;
- YangNode refNode2 = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- for (YangNode rootNode : utilManager.getYangNodeSet()) {
- if (rootNode.getName().equals("syslog1")) {
- selfNode = rootNode;
- } else if (rootNode.getName().equals("syslog2")) {
- refNode1 = rootNode;
- } else {
- refNode2 = rootNode;
- }
- }
-
- // Check whether the data model tree returned is of type module.
- assertThat(selfNode instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("syslog1"));
-
- YangIdentity yangIdentity = (YangIdentity) yangNode.getChild();
- assertThat(yangIdentity.getName(), is("ipv4-address-family"));
- assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
- assertThat(yangIdentity.getBaseNode().getReferredIdentity().getName(), is("ref-address-family"));
- assertThat(yangIdentity.getBaseNode().getResolvableStatus(), is(ResolvableStatus.RESOLVED));
-
- yangIdentity = (YangIdentity) yangNode.getChild().getNextSibling();
- assertThat(yangIdentity.getName(), is("ipv6-address-family"));
- assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
- assertThat(yangIdentity.getBaseNode().getReferredIdentity().getName(), is("ref-address-family"));
- assertThat(yangIdentity.getBaseNode().getResolvableStatus(), is(ResolvableStatus.RESOLVED));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("tunnel"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("identityref"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.IDENTITYREF));
- YangIdentityRef yangIdentityRef = (YangIdentityRef) leafInfo.getDataType().getDataTypeExtendedInfo();
- assertThat(yangIdentityRef.getName(), is("ref-address-family"));
- assertThat(yangIdentityRef.getBaseIdentity().getName(), is("ref-address-family"));
- assertThat(yangIdentityRef.getReferredIdentity().getName(), is("ref-address-family"));
- assertThat(yangIdentityRef.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
-
- ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
- YangLeafList leafListInfo = leafListIterator.next();
-
- // Check whether the information in the leaf is correct.
- assertThat(leafListInfo.getName(), is("network-ref"));
- assertThat(leafListInfo.getDataType().getDataTypeName(), is("identityref"));
- assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.IDENTITYREF));
- yangIdentityRef = (YangIdentityRef) (leafListInfo.getDataType().getDataTypeExtendedInfo());
- assertThat(yangIdentityRef.getBaseIdentity().getName(), is("ref-address-family"));
- assertThat(yangIdentityRef.getReferredIdentity().getName(), is("ref-address-family"));
- assertThat(yangIdentityRef.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
- }
-
- /**
- * Checks inter file feature linking with included file with dependency.
- */
- @Test
- public void processIdentityInIncludedFileWithDependency()
- throws IOException, ParserException, MojoExecutionException {
-
- String searchDir = "src/test/resources/interfileidentityincludedependency";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
-
- YangNode selfNode = null;
- YangNode refNode1 = null;
- YangNode refNode2 = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Carry out linking of sub module with module.
- yangLinkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
-
- // Add references to include list.
- yangLinkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- for (YangNode rootNode : utilManager.getYangNodeSet()) {
- if (rootNode.getName().equals("syslog1")) {
- selfNode = rootNode;
- } else if (rootNode.getName().equals("syslog2")) {
- refNode1 = rootNode;
- } else {
- refNode2 = rootNode;
- }
- }
-
- // Check whether the data model tree returned is of type module.
- assertThat(selfNode instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("syslog1"));
-
- YangIdentity yangIdentity = (YangIdentity) yangNode.getChild();
- assertThat(yangIdentity.getName(), is("ipv4-address-family"));
- assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
- assertThat(yangIdentity.getBaseNode().getReferredIdentity().getName(), is("ref-address-family"));
- assertThat(yangIdentity.getBaseNode().getResolvableStatus(), is(ResolvableStatus.RESOLVED));
-
- yangIdentity = (YangIdentity) yangNode.getChild().getNextSibling();
- assertThat(yangIdentity.getName(), is("ipv6-address-family"));
- assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
- assertThat(yangIdentity.getBaseNode().getReferredIdentity().getName(), is("ref-address-family"));
- assertThat(yangIdentity.getBaseNode().getResolvableStatus(), is(ResolvableStatus.RESOLVED));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("tunnel"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("identityref"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.IDENTITYREF));
- YangIdentityRef yangIdentityRef = (YangIdentityRef) leafInfo.getDataType().getDataTypeExtendedInfo();
- assertThat(yangIdentityRef.getName(), is("ref-address-family"));
- assertThat(yangIdentityRef.getBaseIdentity().getName(), is("ref-address-family"));
- assertThat(yangIdentityRef.getReferredIdentity().getName(), is("ref-address-family"));
- assertThat(yangIdentityRef.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
-
- ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
- YangLeafList leafListInfo = leafListIterator.next();
-
- // Check whether the information in the leaf is correct.
- assertThat(leafListInfo.getName(), is("network-ref"));
- assertThat(leafListInfo.getDataType().getDataTypeName(), is("identityref"));
- assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.IDENTITYREF));
- yangIdentityRef = (YangIdentityRef) (leafListInfo.getDataType().getDataTypeExtendedInfo());
- assertThat(yangIdentityRef.getBaseIdentity().getName(), is("ref-address-family"));
- assertThat(yangIdentityRef.getReferredIdentity().getName(), is("ref-address-family"));
- assertThat(yangIdentityRef.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
- }
-
- /**
- * Checks inter file feature linking with imported file with dependency
- * feature undefined.
- */
- @Test
- public void processIdentityInImportedFileWithDependencyUndefined()
- throws IOException, LinkerException, MojoExecutionException {
- thrown.expect(LinkerException.class);
- thrown.expectMessage("YANG file error: Unable to find base identity for given base");
-
- String searchDir = "src/test/resources/interfileidentityimportdependencyUndefined";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
-
- YangNode selfNode = null;
- YangNode refNode1 = null;
- YangNode refNode2 = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
- }
-
- /**
- * Checks inter file feature linking with included file with dependency
- * feature undefined.
- */
- @Test
- public void processIdentityInIncludedFileWithDependencyUndefined()
- throws IOException, LinkerException, MojoExecutionException {
- thrown.expect(LinkerException.class);
- thrown.expectMessage("YANG file error: Unable to find base identity for given base");
-
- String searchDir = "src/test/resources/interfileidentityincludedependencyUndefined";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Carry out linking of sub module with module.
- yangLinkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- // Add references to include list.
- yangLinkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
-
- // Update the priority for all the files.
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
- }
-
- /**
- * Checks inter file feature linking with imported file.
- */
- @Test
- public void processIdentityTypedefUnresolvedInImportedFile()
- throws IOException, ParserException, MojoExecutionException {
-
- String searchDir = "src/test/resources/interfileidentitytypedef";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
-
- YangNode selfNode = null;
- YangNode refNode1 = null;
- YangNode refNode2 = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- for (YangNode rootNode : utilManager.getYangNodeSet()) {
- if (rootNode.getName().equals("IdentityIntraFile")) {
- selfNode = rootNode;
- } else if (rootNode.getName().equals("IdentityInModule")) {
- refNode1 = rootNode;
- } else {
- refNode2 = rootNode;
- }
- }
- // Check whether the data model tree returned is of type module.
- assertThat(selfNode instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("IdentityIntraFile"));
-
- YangIdentity yangIdentity = (YangIdentity) yangNode.getChild();
- assertThat(yangIdentity.getName(), is("ipv4-address-family"));
- assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
- assertThat(yangIdentity.getBaseNode().getReferredIdentity().getName(), is("ref-address-family"));
- assertThat(yangIdentity.getBaseNode().getResolvableStatus(), is(ResolvableStatus.RESOLVED));
-
- yangIdentity = (YangIdentity) yangNode.getChild().getNextSibling();
- assertThat(yangIdentity.getName(), is("ipv6-address-family"));
- assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
- assertThat(yangIdentity.getBaseNode().getReferredIdentity().getName(), is("ref-address-family"));
- assertThat(yangIdentity.getBaseNode().getResolvableStatus(), is(ResolvableStatus.RESOLVED));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("tunnel"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("identityref"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.IDENTITYREF));
- YangIdentityRef yangIdentityRef = (YangIdentityRef) leafInfo.getDataType().getDataTypeExtendedInfo();
- assertThat(yangIdentityRef.getName(), is("ref-address-family"));
- assertThat(yangIdentityRef.getBaseIdentity().getName(), is("ref-address-family"));
- assertThat(yangIdentityRef.getReferredIdentity().getName(), is("ref-address-family"));
- assertThat(yangIdentityRef.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
-
- ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
- YangLeafList leafListInfo = leafListIterator.next();
-
- // Check whether the information in the leaf is correct.
- assertThat(leafListInfo.getName(), is("network-ref"));
- assertThat(leafListInfo.getDataType().getDataTypeName(), is("identityref"));
- assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.IDENTITYREF));
- yangIdentityRef = (YangIdentityRef) (leafListInfo.getDataType().getDataTypeExtendedInfo());
- // Check whether leafref type got resolved.
- assertThat(yangIdentityRef.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
-
- YangTypeDef typedef = (YangTypeDef) yangNode.getChild().getNextSibling().getNextSibling();
- assertThat(typedef.getName(), is("type15"));
-
- YangType type = typedef.getTypeList().iterator().next();
- assertThat(type.getDataType(), is(YangDataTypes.IDENTITYREF));
- assertThat(type.getDataTypeName(), is("identityref"));
-
- YangIdentityRef identityRef = (YangIdentityRef) type.getDataTypeExtendedInfo();
- assertThat(identityRef.getName(), is("ref-address-family"));
- assertThat(identityRef.getBaseIdentity().getName(), is("ref-address-family"));
- assertThat(identityRef.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
- }
-
- /**
- * Checks inter file feature linking with imported file.
- */
- @Test
- public void processIdentityTypedefInImportedFile()
- throws IOException, ParserException, MojoExecutionException {
-
- String searchDir = "src/test/resources/interfileidentitytypedef";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
-
- YangNode selfNode = null;
- YangNode refNode1 = null;
- YangNode refNode2 = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- for (YangNode rootNode : utilManager.getYangNodeSet()) {
- if (rootNode.getName().equals("IdentityTypedef")) {
- selfNode = rootNode;
- } else if (rootNode.getName().equals("IdentityInModule")) {
- refNode1 = rootNode;
- } else {
- refNode2 = rootNode;
- }
- }
-
- // Check whether the data model tree returned is of type module.
- assertThat(selfNode instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("IdentityTypedef"));
-
- YangIdentity yangIdentity = (YangIdentity) yangNode.getChild();
- assertThat(yangIdentity.getName(), is("ipv4-address-family"));
- assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
- assertThat(yangIdentity.getBaseNode().getReferredIdentity().getName(), is("ref-address-family"));
- assertThat(yangIdentity.getBaseNode().getResolvableStatus(), is(ResolvableStatus.RESOLVED));
-
- yangIdentity = (YangIdentity) yangNode.getChild().getNextSibling();
- assertThat(yangIdentity.getName(), is("ipv6-address-family"));
- assertThat(yangIdentity.getBaseNode().getBaseIdentifier().getName(), is("ref-address-family"));
- assertThat(yangIdentity.getBaseNode().getReferredIdentity().getName(), is("ref-address-family"));
- assertThat(yangIdentity.getBaseNode().getResolvableStatus(), is(ResolvableStatus.RESOLVED));
-
- YangTypeDef typedef = (YangTypeDef) yangNode.getChild().getNextSibling().getNextSibling();
- assertThat(typedef.getName(), is("type15"));
-
- YangType type = typedef.getTypeList().iterator().next();
- assertThat(type.getDataType(), is(YangDataTypes.IDENTITYREF));
- assertThat(type.getDataTypeName(), is("identityref"));
-
- YangIdentityRef identityRef = (YangIdentityRef) type.getDataTypeExtendedInfo();
- assertThat(identityRef.getName(), is("ref-address-family"));
- assertThat(identityRef.getBaseIdentity().getName(), is("ref-address-family"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("tunnel"));
- YangDerivedInfo info = (YangDerivedInfo) leafInfo.getDataType()
- .getDataTypeExtendedInfo();
- assertThat(info.getEffectiveBuiltInType(), is(IDENTITYREF));
- YangType type1 = info.getReferredTypeDef().getTypeList().get(0);
- YangIdentityRef idRef1 =
- (YangIdentityRef) type1.getDataTypeExtendedInfo();
- assertThat(idRef1.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
-
- ListIterator<YangLeafList> itr =
- yangNode.getListOfLeafList().listIterator();
- YangLeafList leafListInfo = itr.next();
-
- // Check whether the information in the leaf is correct.
- assertThat(leafListInfo.getName(), is("network-ref"));
- info = (YangDerivedInfo) leafListInfo.getDataType()
- .getDataTypeExtendedInfo();
- assertThat(info.getEffectiveBuiltInType(), is(IDENTITYREF));
- type1 = info.getReferredTypeDef().getTypeList().get(0);
- idRef1 = (YangIdentityRef) type1.getDataTypeExtendedInfo();
- assertThat(idRef1.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/InterFileIfFeatureLinkingTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/InterFileIfFeatureLinkingTest.java
deleted file mode 100644
index 4f914ab..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/InterFileIfFeatureLinkingTest.java
+++ /dev/null
@@ -1,468 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.plugin.manager;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.ListIterator;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.YangFeature;
-import org.onosproject.yangutils.datamodel.YangIfFeature;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.linker.impl.YangLinkerManager;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-import static org.onosproject.yangutils.datamodel.YangNodeType.MODULE_NODE;
-import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.INTRA_FILE_RESOLVED;
-import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.RESOLVED;
-import static org.onosproject.yangutils.linker.impl.YangLinkerUtils.updateFilePriority;
-
-/**
- * Test cases for testing inter file linking.
- */
-public class InterFileIfFeatureLinkingTest {
-
- private final YangUtilManager utilManager = new YangUtilManager();
- private final YangLinkerManager yangLinkerManager = new YangLinkerManager();
-
- /**
- * Checks inter file feature linking with imported file.
- */
- @Test
- public void processFeatureInImportedFile()
- throws IOException, ParserException, MojoExecutionException {
-
- String searchDir = "src/test/resources/interfilefeatureimport";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
-
- YangNode selfNode = null;
- YangNode refNode1 = null;
- YangNode refNode2 = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- for (YangNode rootNode : utilManager.getYangNodeSet()) {
- if (rootNode.getName().equals("syslog1")) {
- selfNode = rootNode;
- } else if (rootNode.getName().equals("syslog2")) {
- refNode1 = rootNode;
- } else {
- refNode2 = rootNode;
- }
- }
- // Check whether the data model tree returned is of type module.
- assertThat(selfNode instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("syslog1"));
-
- ListIterator<YangFeature> featureIterator = yangNode.getFeatureList().listIterator();
- YangFeature feature = featureIterator.next();
- assertThat(feature.getName(), is("frr-te"));
-
- YangIfFeature ifFeature = feature.getIfFeatureList().iterator().next();
- assertThat(ifFeature.getName().getName(), is("p2mp-te"));
- assertThat(ifFeature.getName().getPrefix(), is("sys2"));
- assertThat(ifFeature.getResolvableStatus(), is(RESOLVED));
-
- YangContainer container = (YangContainer) selfNode.getChild();
- assertThat(container.getName(), is("speed"));
- YangLeaf leaf = container.getListOfLeaf().iterator().next();
- assertThat(leaf.getName(), is("local-storage-limit"));
-
- List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
- ifFeature = ifFeatureList.iterator().next();
- assertThat(ifFeature.getName().getName(), is("frr-te"));
- assertThat(ifFeature.getResolvableStatus(), is(RESOLVED));
- }
-
- /**
- * Checks inter file feature linking with included file.
- */
- @Test
- public void processFeatureInIncludedFile()
- throws IOException, ParserException, MojoExecutionException {
-
- String searchDir = "src/test/resources/interfilefeatureinclude";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
-
- YangNode selfNode = null;
- YangNode refNode1 = null;
- YangNode refNode2 = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Carry out linking of sub module with module.
- yangLinkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- // Add references to include list.
- yangLinkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- for (YangNode rootNode : utilManager.getYangNodeSet()) {
- if (rootNode.getName().equals("syslog3")) {
- selfNode = rootNode;
- } else if (rootNode.getName().equals("syslog4")) {
- refNode1 = rootNode;
- } else {
- refNode2 = rootNode;
- }
- }
-
- // Check whether the data model tree returned is of type module.
- assertThat(selfNode instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("syslog3"));
-
- ListIterator<YangFeature> featureIterator = yangNode.getFeatureList().listIterator();
- YangFeature feature = featureIterator.next();
- assertThat(feature.getName(), is("frr-te"));
-
- YangIfFeature ifFeature = feature.getIfFeatureList().iterator().next();
- assertThat(ifFeature.getName().getName(), is("p2mp-te"));
- assertThat(ifFeature.getResolvableStatus(), is(RESOLVED));
-
- YangContainer container = (YangContainer) selfNode.getChild();
- assertThat(container.getName(), is("speed"));
- YangLeaf leaf = container.getListOfLeaf().iterator().next();
- assertThat(leaf.getName(), is("local-storage-limit"));
-
- List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
- ifFeature = ifFeatureList.iterator().next();
- assertThat(ifFeature.getName().getName(), is("frr-te"));
- assertThat(ifFeature.getResolvableStatus(), is(RESOLVED));
- }
-
- /**
- * Checks inter file feature linking with imported file with dependency.
- */
- @Test
- public void processFeatureInImportedFileWithDependency()
- throws IOException, ParserException, MojoExecutionException {
-
- String searchDir = "src/test/resources/interfilefeatureimportdependency";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
-
- YangNode selfNode = null;
- YangNode refNode1 = null;
- YangNode refNode2 = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- // Update the priority for all the files.
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- for (YangNode rootNode : utilManager.getYangNodeSet()) {
- if (rootNode.getName().equals("syslog1")) {
- selfNode = rootNode;
- } else if (rootNode.getName().equals("syslog2")) {
- refNode1 = rootNode;
- } else {
- refNode2 = rootNode;
- }
- }
-
- // Check whether the data model tree returned is of type module.
- assertThat(selfNode instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("syslog1"));
-
- ListIterator<YangFeature> featureIterator = yangNode.getFeatureList().listIterator();
- YangFeature feature = featureIterator.next();
- assertThat(feature.getName(), is("frr-te"));
-
- YangIfFeature ifFeature = feature.getIfFeatureList().iterator().next();
- assertThat(ifFeature.getName().getName(), is("p2mp-te"));
- assertThat(ifFeature.getName().getPrefix(), is("sys2"));
- assertThat(ifFeature.getResolvableStatus(), is(RESOLVED));
-
- YangContainer container = (YangContainer) selfNode.getChild();
- assertThat(container.getName(), is("speed"));
- YangLeaf leaf = container.getListOfLeaf().iterator().next();
- assertThat(leaf.getName(), is("local-storage-limit"));
-
- List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
- ifFeature = ifFeatureList.iterator().next();
- assertThat(ifFeature.getName().getName(), is("frr-te"));
- assertThat(ifFeature.getResolvableStatus(), is(RESOLVED));
- }
-
- /**
- * Checks inter file feature linking with included file with dependency.
- */
- @Test
- public void processFeatureInIncludedFileWithDependency()
- throws IOException, ParserException, MojoExecutionException {
-
- String searchDir = "src/test/resources/interfilefeatureincludedependency";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
-
- YangNode selfNode = null;
- YangNode refNode1 = null;
- YangNode refNode2 = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Carry out linking of sub module with module.
- yangLinkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
-
- // Add references to include list.
- yangLinkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- for (YangNode rootNode : utilManager.getYangNodeSet()) {
- if (rootNode.getName().equals("syslog1")) {
- selfNode = rootNode;
- } else if (rootNode.getName().equals("syslog2")) {
- refNode1 = rootNode;
- } else {
- refNode2 = rootNode;
- }
- }
-
- // Check whether the data model tree returned is of type module.
- assertThat(selfNode instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("syslog1"));
-
- ListIterator<YangFeature> featureIterator = yangNode.getFeatureList().listIterator();
- YangFeature feature = featureIterator.next();
- assertThat(feature.getName(), is("frr-te"));
-
- YangIfFeature ifFeature = feature.getIfFeatureList().iterator().next();
- assertThat(ifFeature.getName().getName(), is("p2mp-te"));
- assertThat(ifFeature.getResolvableStatus(), is(RESOLVED));
-
- YangContainer container = (YangContainer) selfNode.getChild();
- assertThat(container.getName(), is("speed"));
- YangLeaf leaf = container.getListOfLeaf().iterator().next();
- assertThat(leaf.getName(), is("local-storage-limit"));
-
- List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
- ifFeature = ifFeatureList.iterator().next();
- assertThat(ifFeature.getName().getName(), is("frr-te"));
- assertThat(ifFeature.getResolvableStatus(), is(RESOLVED));
- }
-
- /**
- * Checks inter file feature linking with imported file with dependency
- * feature undefined.
- */
- @Test
- public void processFeatureInImportedFileWithDependencyUndefined()
- throws IOException, ParserException, MojoExecutionException {
-
- String searchDir = "src/test/resources/interfilefeatureimportdependencyUndefined";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
-
- YangNode selfNode = null;
- YangNode refNode1 = null;
- YangNode refNode2 = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- for (YangNode rootNode : utilManager.getYangNodeSet()) {
- if (rootNode.getName().equals("syslog1")) {
- selfNode = rootNode;
- } else if (rootNode.getName().equals("syslog2")) {
- refNode1 = rootNode;
- } else {
- refNode2 = rootNode;
- }
- }
-
- // Check whether the data model tree returned is of type module.
- assertThat(selfNode instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("syslog1"));
-
- ListIterator<YangFeature> featureIterator = yangNode.getFeatureList().listIterator();
- YangFeature feature = featureIterator.next();
- assertThat(feature.getName(), is("frr-te"));
-
- YangIfFeature ifFeature = feature.getIfFeatureList().iterator().next();
- assertThat(ifFeature.getName().getName(), is("p2mp-te"));
- assertThat(ifFeature.getName().getPrefix(), is("sys2"));
- assertThat(ifFeature.getResolvableStatus(), is(INTRA_FILE_RESOLVED));
-
- YangContainer container = (YangContainer) selfNode.getChild();
- assertThat(container.getName(), is("speed"));
- YangLeaf leaf = container.getListOfLeaf().iterator().next();
- assertThat(leaf.getName(), is("local-storage-limit"));
-
- List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
- ifFeature = ifFeatureList.iterator().next();
- assertThat(ifFeature.getName().getName(), is("frr-te"));
- assertThat(ifFeature.getResolvableStatus(), is(INTRA_FILE_RESOLVED));
- }
-
- /**
- * Checks inter file feature linking with included file with dependency
- * feature undefined.
- */
- @Test
- public void processFeatureInIncludedFileWithDependencyUndefined()
- throws IOException, ParserException, MojoExecutionException {
-
- String searchDir = "src/test/resources/interfilefeatureincludedependencyUndefined";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
-
- YangNode selfNode = null;
- YangNode refNode1 = null;
- YangNode refNode2 = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Carry out linking of sub module with module.
- yangLinkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- // Add references to include list.
- yangLinkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- for (YangNode rootNode : utilManager.getYangNodeSet()) {
- if (rootNode.getName().equals("syslog1")) {
- selfNode = rootNode;
- } else if (rootNode.getName().equals("syslog2")) {
- refNode1 = rootNode;
- } else {
- refNode2 = rootNode;
- }
- }
-
- // Check whether the data model tree returned is of type module.
- assertThat(selfNode instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("syslog1"));
-
- ListIterator<YangFeature> featureIterator = yangNode.getFeatureList().listIterator();
- YangFeature feature = featureIterator.next();
- assertThat(feature.getName(), is("frr-te"));
-
- YangIfFeature ifFeature = feature.getIfFeatureList().iterator().next();
- assertThat(ifFeature.getName().getName(), is("p2mp-te"));
- assertThat(ifFeature.getResolvableStatus(), is(INTRA_FILE_RESOLVED));
-
- YangContainer container = (YangContainer) selfNode.getChild();
- assertThat(container.getName(), is("speed"));
- YangLeaf leaf = container.getListOfLeaf().iterator().next();
- assertThat(leaf.getName(), is("local-storage-limit"));
-
- List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
- ifFeature = ifFeatureList.iterator().next();
- assertThat(ifFeature.getName().getName(), is("frr-te"));
- assertThat(ifFeature.getResolvableStatus(), is(INTRA_FILE_RESOLVED));
- }
-}
-
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/InterFileLeafrefLinkingTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/InterFileLeafrefLinkingTest.java
deleted file mode 100644
index cfa59cb..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/InterFileLeafrefLinkingTest.java
+++ /dev/null
@@ -1,437 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.plugin.manager;
-
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.ListIterator;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangLeafList;
-import org.onosproject.yangutils.datamodel.YangLeafRef;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.datamodel.utils.ResolvableStatus;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.linker.impl.YangLinkerManager;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-import static org.onosproject.yangutils.datamodel.YangNodeType.MODULE_NODE;
-import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.RESOLVED;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.LEAFREF;
-import static org.onosproject.yangutils.linker.impl.YangLinkerUtils.updateFilePriority;
-
-/**
- * Test cases for testing leafref inter file linking.
- */
-public class InterFileLeafrefLinkingTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private final YangUtilManager utilManager = new YangUtilManager();
- private final YangLinkerManager yangLinkerManager = new YangLinkerManager();
-
- /**
- * Checks inter file leafref linking.
- */
- @Test
- public void processInterFileLeafrefLinking()
- throws IOException, ParserException, MojoExecutionException {
-
- String searchDir = "src/test/resources/leafreflinker/interfile/interfileleafrefwithimport";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- YangNode refNode = null;
- YangNode selfNode = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("module1")) {
- selfNode = rootNode;
- refNode = yangNodeIterator.next();
- } else {
- refNode = rootNode;
- selfNode = yangNodeIterator.next();
- }
-
- // Check whether the data model tree returned is of type module.
- assertThat(selfNode instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("module1"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
- assertThat(leafInfo.getDataType().getDataType(), is(LEAFREF));
-
- // Check whether the data model tree returned is of type module.
- assertThat(refNode instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(refNode.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode1 = (YangModule) refNode;
- assertThat(yangNode1.getName(), is("module2"));
- YangLeaf leafInfo1 = yangNode1.getListOfLeaf().listIterator().next();
-
- YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- assertThat(leafref.getReferredLeafOrLeafList(), is(leafInfo1));
- assertThat(leafref.getResolvableStatus(), is(RESOLVED));
-
- assertThat(leafref.getEffectiveDataType().getDataType(),
- is(YangDataTypes.STRING));
- }
-
- /**
- * Checks inter file resolution when leafref from grouping refers to other file.
- */
- @Test
- public void processInterFileLeafrefFromGroupingRefersToOtherFile()
- throws IOException, ParserException {
-
- String searchDir = "src/test/resources/leafreflinker/interfile/interfileleafreffromgroupingreferstootherfile";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- YangNode selfNode = null;
- YangNode refNode = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("module1")) {
- selfNode = rootNode;
- refNode = yangNodeIterator.next();
- } else {
- refNode = rootNode;
- selfNode = yangNodeIterator.next();
- }
-
- // Check whether the data model tree returned is of type module.
- assertThat(selfNode instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("module1"));
-
- YangList list = (YangList) yangNode.getChild().getChild();
- ListIterator<YangLeaf> leafIterator = list.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("link-tp"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
- assertThat(leafInfo.getDataType().getDataType(), is(LEAFREF));
-
- YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- YangLeaf leafInfo2 = (YangLeaf) leafref.getReferredLeafOrLeafList();
- assertThat(leafref.getReferredLeafOrLeafList(), is(leafInfo2));
- assertThat(leafref.getResolvableStatus(), is(RESOLVED));
-
- assertThat(leafref.getEffectiveDataType().getDataType(),
- is(YangDataTypes.STRING));
- }
-
- /**
- * Checks inter file resolution when leafref from grouping with prefix is changed properly during cloning.
- */
- @Test
- public void processInterFileLeafrefFromGroupingWithPrefixIsCloned()
- throws IOException, ParserException {
-
- String searchDir = "src/test/resources/leafreflinker/interfile/leafrefInGroupingWithPrefix";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- YangNode selfNode = null;
- YangNode refNode = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("LeafrefInGroupingOfModule1")) {
- selfNode = rootNode;
- refNode = yangNodeIterator.next();
- } else {
- refNode = rootNode;
- selfNode = yangNodeIterator.next();
- }
-
- // Check whether the data model tree returned is of type module.
- assertThat(selfNode instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("LeafrefInGroupingOfModule1"));
-
- // Check whether the module name is set correctly.
- YangModule yangNode1 = (YangModule) refNode;
- assertThat(yangNode1.getName(), is("GroupingCopiedInModule2"));
-
- YangContainer yangContainer = (YangContainer) yangNode1.getChild();
-
- ListIterator<YangLeaf> leafIterator = yangContainer.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("network-ref"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
- assertThat(leafInfo.getDataType().getDataType(), is(LEAFREF));
-
- YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- YangLeaf leafInfo2 = (YangLeaf) leafref.getReferredLeafOrLeafList();
- assertThat(leafref.getReferredLeafOrLeafList(), is(leafInfo2));
- assertThat(leafref.getResolvableStatus(), is(RESOLVED));
-
- assertThat(leafref.getEffectiveDataType().getDataType(),
- is(YangDataTypes.STRING));
- }
-
- /**
- * Checks inter file resolution when leafref from grouping with prefix is changed properly during cloning with
- * multi reference.
- */
- @Test
- public void processInterFileLeafrefFromGroupingWithPrefixIsClonedMultiReference()
- throws IOException, ParserException {
-
- String searchDir = "src/test/resources/leafreflinker/interfile/leafrefInGroupingWithPrefixAndManyReference";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- YangNode selfNode = null;
- YangNode refNode = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("ietf-network")) {
- selfNode = rootNode;
- refNode = yangNodeIterator.next();
- } else {
- refNode = rootNode;
- selfNode = yangNodeIterator.next();
- }
-
- // Check whether the data model tree returned is of type module.
- assertThat(selfNode instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("ietf-network"));
-
- // Check whether the module name is set correctly.
- YangModule yangNode1 = (YangModule) refNode;
- assertThat(yangNode1.getName(), is("ietf-te-topology"));
-
- YangContainer yangContainer = (YangContainer) yangNode1.getChild().getNextSibling();
- ListIterator<YangLeaf> leafIterator;
- YangLeaf leafInfo;
-
- leafIterator = yangContainer.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
- leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("node-ref"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
- assertThat(leafInfo.getDataType().getDataType(), is(LEAFREF));
-
- YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- YangLeaf leafInfo2 = (YangLeaf) leafref.getReferredLeafOrLeafList();
- assertThat(leafref.getReferredLeafOrLeafList(), is(leafInfo2));
- assertThat(leafref.getResolvableStatus(), is(RESOLVED));
-
- assertThat(leafref.getEffectiveDataType().getDataType(),
- is(YangDataTypes.DERIVED));
-
- leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("network-ref"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
- assertThat(leafInfo.getDataType().getDataType(), is(LEAFREF));
-
- YangLeafRef leafref1 = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- YangLeaf leafInfo4 = (YangLeaf) leafref1.getReferredLeafOrLeafList();
- assertThat(leafref1.getReferredLeafOrLeafList(), is(leafInfo4));
- assertThat(leafref1.getResolvableStatus(), is(RESOLVED));
-
- assertThat(leafref1.getEffectiveDataType().getDataType(),
- is(YangDataTypes.DERIVED));
- }
-
- /**
- * Checks self resolution when leafref under typedef been referred multiple times.
- */
- @Test
- public void processLeafrefWhenUsedMultipleTimes()
- throws IOException, ParserException {
- String searchDir = "src/test/resources/leafreflinker/interfile/typedefreferredmultipletimes";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- YangNode selfNode = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("ietf-interfaces")) {
- selfNode = rootNode;
- }
-
- // Check whether the data model tree returned is of type module.
- assertThat((selfNode instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("ietf-interfaces"));
-
- YangContainer container = (YangContainer) yangNode.getChild().getNextSibling();
-
- YangList list = (YangList) container.getChild();
-
- ListIterator<YangLeafList> leafIterator;
- YangLeafList leafInfo;
-
- leafIterator = list.getListOfLeafList().listIterator();
- leafInfo = leafIterator.next();
-
- // Check whether the information in the leaf is correct.
- assertThat(leafInfo.getName(), is("higher-layer-if"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
- YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
-
- // Check whether leafref type got resolved.
- assertThat(leafref.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
-
- // Check the effective type for the leaf.
- assertThat(leafref.getEffectiveDataType().getDataType(),
- is(YangDataTypes.STRING));
-
- leafInfo = leafIterator.next();
-
- // Check whether the information in the leaf is correct.
- assertThat(leafInfo.getName(), is("lower-layer-if"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
- YangLeafRef leafref1 = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
-
- // Check whether leafref type got resolved.
- assertThat(leafref1.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
-
- // Check the effective type for the leaf.
- assertThat(leafref1.getEffectiveDataType().getDataType(),
- is(YangDataTypes.STRING));
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/InterFileLinkingTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/InterFileLinkingTest.java
deleted file mode 100644
index 876c389..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/InterFileLinkingTest.java
+++ /dev/null
@@ -1,936 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.plugin.manager;
-
-import org.apache.maven.plugin.MojoExecutionException;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.YangAugment;
-import org.onosproject.yangutils.datamodel.YangChoice;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.YangDerivedInfo;
-import org.onosproject.yangutils.datamodel.YangGrouping;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.datamodel.YangTypeDef;
-import org.onosproject.yangutils.datamodel.YangUses;
-import org.onosproject.yangutils.datamodel.utils.ResolvableStatus;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.linker.impl.YangLinkerManager;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
-
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.ListIterator;
-
-import static org.hamcrest.CoreMatchers.nullValue;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-import static org.onosproject.yangutils.datamodel.YangNodeType.MODULE_NODE;
-import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.RESOLVED;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.STRING;
-import static org.onosproject.yangutils.linker.impl.YangLinkerUtils.updateFilePriority;
-import static org.onosproject.yangutils.utils.io.YangPluginConfig.compileCode;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory;
-
-/**
- * Test cases for testing inter file linking.
- */
-public class InterFileLinkingTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
- private final YangUtilManager utilManager = new YangUtilManager();
- private final YangLinkerManager yangLinkerManager = new YangLinkerManager();
-
- /**
- * Checks inter file type linking.
- */
- @Test
- public void processInterFileTypeLinking()
- throws IOException, ParserException, MojoExecutionException {
-
- String searchDir = "src/test/resources/interfiletype";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
-
- YangNode refNode = null;
- YangNode selfNode = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("module1")) {
- selfNode = rootNode;
- refNode = yangNodeIterator.next();
- } else {
- refNode = rootNode;
- selfNode = yangNodeIterator.next();
- }
-
- // Check whether the data model tree returned is of type module.
- assertThat(selfNode instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("module1"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
- assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
-
- assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
- is((YangTypeDef) refNode.getChild()));
-
- assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
-
- YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- // Check for the effective built-in type.
- assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
-
- // Check for the restriction.
- assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
- assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
- }
-
- /**
- * Checks inter file uses linking.
- */
- @Test
- public void processInterFileUsesLinking()
- throws IOException, ParserException, MojoExecutionException {
-
- String searchDir = "src/test/resources/interfileuses";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
-
- YangNode refNode = null;
- YangNode selfNode = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("module1")) {
- selfNode = rootNode;
- refNode = yangNodeIterator.next();
- } else {
- refNode = rootNode;
- selfNode = yangNodeIterator.next();
- }
-
- // Check whether the data model tree returned is of type module.
- assertThat(selfNode instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("module1"));
-
- ListIterator<YangLeaf> leafIterator;
- YangLeaf leafInfo;
-
- // Check whether grouping is the sibling of module's child.
- assertThat(refNode.getChild() instanceof YangGrouping, is(true));
-
- YangGrouping grouping = (YangGrouping) refNode.getChild();
- leafIterator = grouping.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
-
- // Check whether the information in the leaf is correct under grouping.
- assertThat(leafInfo.getName(), is("hello"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
-
- // Check whether uses is module's child.
- assertThat(yangNode.getChild() instanceof YangUses, is(true));
- YangUses uses = (YangUses) yangNode.getChild();
-
- // Check whether uses get resolved.
- assertThat(uses.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
- }
-
- /**
- * Checks inter file type linking with include list.
- */
- @Test
- public void processInterFileTypeLinkingWithIncludeList()
- throws IOException, ParserException, MojoExecutionException {
-
- String searchDir = "src/test/resources/interfiletypewithinclude";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
-
- YangNode refNode = null;
- YangNode selfNode = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Carry out linking of sub module with module.
- yangLinkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
-
- // Add reference to include list.
- yangLinkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("module1")) {
- selfNode = rootNode;
- refNode = yangNodeIterator.next();
- } else {
- refNode = rootNode;
- selfNode = yangNodeIterator.next();
- }
-
- // Check whether the data model tree returned is of type module.
- assertThat(selfNode instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("module1"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
- assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
-
- assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
- is((YangTypeDef) refNode.getChild()));
-
- assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
-
- YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- // Check for the effective built-in type.
- assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
-
- // Check for the restriction.
- assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
- assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
- }
-
- /**
- * Checks inter file uses linking with include list.
- */
- @Test
- public void processInterFileUsesLinkingWithInclude()
- throws IOException, ParserException, MojoExecutionException {
-
- String searchDir = "src/test/resources/interfileuseswithinclude";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
-
- YangNode refNode = null;
- YangNode selfNode = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Carry out linking of sub module with module.
- yangLinkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
-
- // Add reference to include list.
- yangLinkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("module1")) {
- selfNode = rootNode;
- refNode = yangNodeIterator.next();
- } else {
- refNode = rootNode;
- selfNode = yangNodeIterator.next();
- }
-
- // Check whether the data model tree returned is of type module.
- assertThat(selfNode instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("module1"));
-
- ListIterator<YangLeaf> leafIterator;
- YangLeaf leafInfo;
-
- // Check whether grouping is the sibling of module's child.
- assertThat(refNode.getChild() instanceof YangGrouping, is(true));
-
- YangGrouping grouping = (YangGrouping) refNode.getChild();
- leafIterator = grouping.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
-
- // Check whether the information in the leaf is correct under grouping.
- assertThat(leafInfo.getName(), is("hello"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
-
- // Check whether uses is module's child.
- assertThat(yangNode.getChild() instanceof YangUses, is(true));
- YangUses uses = (YangUses) yangNode.getChild();
-
- // Check whether uses get resolved.
- assertThat(uses.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
- }
-
- /**
- * Checks inter file type linking with revision.
- */
- @Test
- public void processInterFileTypeLinkingWithRevision()
- throws IOException, ParserException, MojoExecutionException {
-
- String searchDir = "src/test/resources/interfiletypewithrevision";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
-
- YangNode refNode = null;
- YangNode selfNode = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("module1")) {
- selfNode = rootNode;
- refNode = yangNodeIterator.next();
- } else {
- refNode = rootNode;
- selfNode = yangNodeIterator.next();
- }
-
- // Check whether the data model tree returned is of type module.
- assertThat(selfNode instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("module1"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
- assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
-
- assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
- is((YangTypeDef) refNode.getChild()));
-
- assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
-
- YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- // Check for the effective built-in type.
- assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
-
- // Check for the restriction.
- assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
- assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
- }
-
- /**
- * Checks inter file type linking with revision in name.
- */
- @Test
- public void processInterFileTypeLinkingWithRevisionInName()
- throws IOException, ParserException, MojoExecutionException {
-
- String searchDir = "src/test/resources/interfiletypewithrevisioninname";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
-
- YangNode refNode = null;
- YangNode selfNode = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("module1")) {
- selfNode = rootNode;
- refNode = yangNodeIterator.next();
- } else {
- refNode = rootNode;
- selfNode = yangNodeIterator.next();
- }
-
- // Check whether the data model tree returned is of type module.
- assertThat(selfNode instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("module1"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
- assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
-
- assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
- is((YangTypeDef) refNode.getChild()));
-
- assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
-
- YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- // Check for the effective built-in type.
- assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
-
- // Check for the restriction.
- assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
- assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
- }
-
- /**
- * Checks hierarchical inter file type linking.
- */
- @Test
- public void processHierarchicalInterFileTypeLinking()
- throws IOException, ParserException, MojoExecutionException {
-
- String searchDir = "src/test/resources/hierarchicalinterfiletype";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
-
- YangNode refNode1 = null;
- YangNode refNode2 = null;
- YangNode selfNode = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- for (YangNode rootNode : utilManager.getYangNodeSet()) {
- if (rootNode.getName().equals("ietf-network-topology")) {
- selfNode = rootNode;
- } else if (rootNode.getName().equals("ietf-network")) {
- refNode1 = rootNode;
- } else {
- refNode2 = rootNode;
- }
- }
-
- // Check whether the data model tree returned is of type module.
- assertThat(selfNode instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("ietf-network-topology"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("source-node"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("node-id"));
- assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
-
- assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
- is((YangTypeDef) refNode1.getChild()));
-
- assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
-
- YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- // Check for the effective built-in type.
- assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
-
- // Check for the restriction.
- assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
- assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
- }
-
- /**
- * Checks hierarchical intra with inter file type linking.
- */
- @Test
- public void processHierarchicalIntraWithInterFileTypeLinking()
- throws IOException, ParserException, MojoExecutionException {
-
- String searchDir = "src/test/resources/hierarchicalintrawithinterfiletype";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
-
- YangNode refNode1 = null;
- YangNode selfNode = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- for (YangNode rootNode : utilManager.getYangNodeSet()) {
- if (rootNode.getName().equals("ietf-network")) {
- selfNode = rootNode;
- } else if (rootNode.getName().equals("ietf-inet-types")) {
- refNode1 = rootNode;
- }
- }
-
- // Check whether the data model tree returned is of type module.
- assertThat(selfNode instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("ietf-network"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("node-ref"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("node-id"));
- assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
-
- assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
- is((YangTypeDef) selfNode.getChild()));
-
- assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
-
- YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- // Check for the effective built-in type.
- assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
-
- // Check for the restriction.
- assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
- assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
- }
-
- /**
- * Checks hierarchical intra with inter file type linking.
- */
- @Test
- public void interFileWithUsesReferringType()
- throws IOException, ParserException, MojoExecutionException {
-
- String searchDir = "src/test/resources/interfilewithusesreferringtype";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.resolveDependenciesUsingLinker();
-
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir("target/interfilewithusesreferringtype/");
-
- utilManager.translateToJava(yangPluginConfig);
-
- deleteDirectory("target/interfilewithusesreferringtype/");
-
- }
-
- /**
- * Checks hierarchical intra with inter file type linking.
- */
- @Test
- public void file1UsesFile2TypeDefFile3Type()
- throws IOException, ParserException, MojoExecutionException {
-
- String searchDir = "src/test/resources/file1UsesFile2TypeDefFile3Type";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.resolveDependenciesUsingLinker();
-
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir("target/file1UsesFile2TypeDefFile3Type/");
-
- utilManager.translateToJava(yangPluginConfig);
- String dir1 = System.getProperty("user.dir") + "/"
- + "target/file1UsesFile2TypeDefFile3Type/";
- compileCode(dir1);
- deleteDirectory("target/file1UsesFile2TypeDefFile3Type/");
-
- }
-
- /**
- * Checks hierarchical intra with inter file type linking.
- */
- @Test
- public void interFileIetf()
- throws IOException, ParserException, MojoExecutionException {
-
- deleteDirectory("target/interfileietf/");
- String searchDir = "src/test/resources/interfileietf";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.resolveDependenciesUsingLinker();
-
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir("target/interfileietf/");
-
- utilManager.translateToJava(yangPluginConfig);
-
- deleteDirectory("target/interfileietf/");
-
- }
-
- /**
- * Checks hierarchical intra with inter file type linking.
- */
- @Test
- public void usesInContainer()
- throws IOException, ParserException, MojoExecutionException {
-
- String searchDir = "src/test/resources/usesInContainer";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.resolveDependenciesUsingLinker();
-
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir("target/usesInContainer/");
-
- utilManager.translateToJava(yangPluginConfig);
-
- deleteDirectory("target/usesInContainer/");
-
- }
-
- /**
- * Checks hierarchical intra with inter file type linking.
- */
- @Test
- public void groupingNodeSameAsModule()
- throws IOException, ParserException, MojoExecutionException {
-
- String searchDir = "src/test/resources/groupingNodeSameAsModule";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.resolveDependenciesUsingLinker();
-
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir("target/groupingNodeSameAsModule/");
-
- utilManager.translateToJava(yangPluginConfig);
- String dir1 = System.getProperty("user.dir") + "/"
- + "target/groupingNodeSameAsModule/";
- compileCode(dir1);
- deleteDirectory("target/groupingNodeSameAsModule/");
-
- }
-
- /**
- * Checks priority of the file.
- */
- @Test
- public void interFilePriority()
- throws IOException, ParserException, MojoExecutionException {
-
- String searchDir = "src/test/resources/interfilepriority";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.resolveDependenciesUsingLinker();
-
- YangNode selfNode = null;
- YangNode refNode1 = null;
- YangNode refNode2 = null;
-
- for (YangNode rootNode : utilManager.getYangNodeSet()) {
- if (rootNode.getName().equals("module1")) {
- selfNode = rootNode;
- } else if (rootNode.getName().equals("module2")) {
- refNode1 = rootNode;
- } else {
- refNode2 = rootNode;
- }
- }
-
- // Check whether the data model tree returned is of type module.
- assertThat(selfNode instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("module1"));
- assertThat(yangNode.getPriority(), is(2));
-
- // Check whether the data model tree returned is of type module.
- assertThat(refNode1 instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(refNode1.getNodeType(), is(MODULE_NODE));
-
- YangModule referredNode1 = (YangModule) refNode1;
- assertThat(referredNode1.getName(), is("module2"));
- assertThat(referredNode1.getPriority(), is(3));
- }
-
- /**
- * Checks contents of uses are copied as child of grouping.
- */
- @Test
- public void usesInsideChildOfGrouping()
- throws IOException, ParserException, MojoExecutionException {
-
- String searchDir = "src/test/resources/usesInsideChildOfGrouping";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.resolveDependenciesUsingLinker();
-
- YangNode selfNode = null;
- YangNode refNode1 = null;
-
- for (YangNode rootNode : utilManager.getYangNodeSet()) {
- if (rootNode.getName().equals("ietf-network")) {
- selfNode = rootNode;
- } else if (rootNode.getName().equals("ietf-te-topology")) {
- refNode1 = rootNode;
- }
- }
-
- // Check whether the data model tree returned is of type module.
- assertThat(selfNode instanceof YangModule, is(true));
- assertThat(selfNode.getNodeType(), is(MODULE_NODE));
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("ietf-network"));
-
- YangModule refNode = (YangModule) refNode1;
- assertThat(refNode.getName(), is("ietf-te-topology"));
-
- YangAugment augment = ((YangAugment) refNode.getChild().getNextSibling().
- getNextSibling().getNextSibling().getNextSibling());
- assertThat(augment.getName(), is("/nw:networks/nw:network/nw:node"));
-
- YangUses uses = ((YangUses) augment.getChild());
- YangContainer container = ((YangContainer) uses.getNextSibling());
- assertThat(container.getName(), is("te"));
-
- container = ((YangContainer) container.getChild());
- assertThat(container.getName(), is("config"));
-
- uses = ((YangUses) container.getChild().getNextSibling());
- assertThat(uses.getName(), is("te-node-config-attributes"));
-
- YangContainer container1 = ((YangContainer) uses.getNextSibling());
- assertThat(container1.getName(), is("te-node-attributes"));
-
- uses = ((YangUses) container1.getChild());
- assertThat(uses.getName(), is("te-node-connectivity-matrix"));
-
- YangList list = ((YangList) uses.getNextSibling());
- assertThat(list.getName(), is("connectivity-matrix"));
- }
-
- /**
- * Checks contents of uses are copied as child of grouping.
- */
- @Test
- public void interFileUsesInsideChildOfGrouping()
- throws IOException, ParserException, MojoExecutionException {
-
- String searchDir = "src/test/resources/interFileUsesInsideChildOfGrouping";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.resolveDependenciesUsingLinker();
-
- YangNode selfNode = null;
- YangNode refNode1 = null;
-
- for (YangNode rootNode : utilManager.getYangNodeSet()) {
- if (rootNode.getName().equals("ietf-network")) {
- selfNode = rootNode;
- } else if (rootNode.getName().equals("ietf-te-topology")) {
- refNode1 = rootNode;
- }
- }
-
- // Check whether the data model tree returned is of type module.
- assertThat(selfNode instanceof YangModule, is(true));
- assertThat(selfNode.getNodeType(), is(MODULE_NODE));
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("ietf-network"));
-
- YangModule refNode = (YangModule) refNode1;
- assertThat(refNode.getName(), is("ietf-te-topology"));
-
- YangAugment augment = ((YangAugment) refNode.getChild().getNextSibling().
- getNextSibling().getNextSibling().getNextSibling().getNextSibling());
- assertThat(augment.getName(), is("/nw:networks/nw:network/nt:link"));
-
- YangUses uses = ((YangUses) augment.getChild());
- assertThat(uses.getResolvableStatus(), is(RESOLVED));
- YangContainer container = ((YangContainer) uses.getNextSibling());
- assertThat(container.getName(), is("te"));
-
- container = ((YangContainer) container.getChild());
- assertThat(container.getName(), is("config"));
-
- uses = ((YangUses) container.getChild().getNextSibling());
- assertThat(uses.getName(), is("te-link-config-attributes"));
- assertThat(uses.getResolvableStatus(), is(RESOLVED));
-
- YangContainer container1 = ((YangContainer) uses.getNextSibling());
- assertThat(container1.getName(), is("te-link-attributes"));
-
- container = ((YangContainer) container1.getChild());
- assertThat(container.getName(), is("underlay"));
-
- uses = ((YangUses) container.getChild());
- assertThat(uses.getName(), is("te-link-underlay-attributes"));
- assertThat(uses.getResolvableStatus(), is(RESOLVED));
-
- container = ((YangContainer) uses.getNextSibling());
- assertThat(container.getName(), is("underlay-primary-path"));
-
- YangList yangList = ((YangList) container.getChild());
- assertThat(yangList.getName(), is("path-element"));
-
- uses = ((YangUses) yangList.getChild());
- assertThat(uses.getName(), is("te-path-element"));
- assertThat(uses.getResolvableStatus(), is(RESOLVED));
-
- uses = ((YangUses) uses.getNextSibling());
- assertThat(uses.getName(), is("explicit-route-subobject"));
- assertThat(uses.getResolvableStatus(), is(RESOLVED));
-
- YangChoice choice = ((YangChoice) uses.getNextSibling());
- assertThat(choice.getName(), is("type"));
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/InterJarLinkerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/InterJarLinkerTest.java
deleted file mode 100644
index e2e704c..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/InterJarLinkerTest.java
+++ /dev/null
@@ -1,364 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.plugin.manager;
-
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.project.MavenProject;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.tool.YangFileInfo;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-import java.util.jar.JarEntry;
-import java.util.jar.JarOutputStream;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.parseJarFile;
-import static org.onosproject.yangutils.plugin.manager.YangPluginUtils.serializeDataModel;
-import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
-import static org.onosproject.yangutils.utils.UtilConstants.TEMP;
-import static org.onosproject.yangutils.utils.UtilConstants.YANG_RESOURCES;
-
-/**
- * Unit test case for inter jar linker.
- */
-public class InterJarLinkerTest {
-
- private final YangUtilManager utilManager = new YangUtilManager();
-
- private static final String TARGET = "target/interJarFileLinking/";
- private static final String YANG_FILES_DIR = "src/test/resources/interJarFileLinking/yangFiles/";
-
- private static final String FLOW_CLASSIFIER_FOLDER = "target/interJarFileLinking/org/onosproject"
- + "/yang/gen/v1/sfc/flowclassifier/rev20160524";
- private static final String PORT_PAIR_FOLDER = "target/interJarFileLinking/org/onosproject"
- + "/yang/gen/v1/sfc/portpair/rev20160524";
- private static final String FLOW_CLASSIFIER_MANAGER = FLOW_CLASSIFIER_FOLDER + SLASH + "FlowClassifierManager.java";
-
- private MockJarFileProvider mockJarFileProvider = new MockJarFileProvider();
-
- /**
- * Unit test case for a single jar dependency.
- *
- * @throws IOException when fails to do IO operations
- * @throws MojoExecutionException when fails to do mojo operations
- */
-//TODO: FIX the interJAR test case for using toolmanger instead of plugin mgr
- // @Test
-// public void processSingleJarLinking()
-// throws IOException, MojoExecutionException {
-// utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(YANG_FILES_DIR));
-// Set<YangFileInfo> info = utilManager.getYangFileInfoSet();
-// int size1 = info.size();
-// utilManager.parseYangFileInfoSet();
-//
-// mockJarFileProvider.provideTestJarFile(utilManager);
-// utilManager.setYangFileInfoSet(removeFileInfoFromSet(info));
-// utilManager.resolveDependenciesUsingLinker();
-//
-// int size2 = info.size();
-// assertThat(true, is(size1 != size2));
-// assertThat(true, is(parseFileInfoSet(info.iterator())));
-//
-// deleteDirectory(TARGET);
-// mockJarFileProvider.deleteTestSerFile(YANG_FILES_DIR);
-// }
-//
-// /**
-// * Unit test case for a multiple jar dependency.
-// *
-// * @throws IOException when fails to do IO operations
-// * @throws MojoExecutionException when fails to do mojo operations
-// */
-// @Test
-// public void processMultipleJarLinking()
-// throws IOException, MojoExecutionException {
-// utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(YANG_FILES_DIR));
-//
-// Set<YangFileInfo> info = utilManager.getYangFileInfoSet();
-// int size1 = info.size();
-// utilManager.parseYangFileInfoSet();
-//
-// mockJarFileProvider.provideTestJarFile(utilManager);
-// utilManager.setYangFileInfoSet(removeFileInfoFromSet(info));
-//
-// utilManager.resolveDependenciesUsingLinker();
-// int size2 = info.size();
-// assertThat(true, is(size1 != size2));
-// assertThat(true, is(parseFileInfoSet(info.iterator())));
-// assertThat(true, is(parseFileInfoSet(info.iterator())));
-//
-// /*
-// * grouping flow-classifier {
-// * container flow-classifier {
-// * leaf id {
-// * type flow-classifier-id;
-// * }
-// *
-// * leaf tenant-id {
-// * type port-pair:tenant-id;
-// * }
-// * .
-// * .
-// * .
-// *
-// */
-//
-// Iterator<YangFileInfo> yangFileInfoIterator = info.iterator();
-//
-// YangFileInfo yangFileInfo = yangFileInfoIterator.next();
-//
-// while (yangFileInfoIterator.hasNext()) {
-// if (yangFileInfo.getRootNode().getName().equals("flow-classifier")) {
-// break;
-// }
-// yangFileInfo = yangFileInfoIterator.next();
-// }
-//
-// YangNode node = yangFileInfo.getRootNode();
-// node = node.getChild();
-// while (node != null) {
-// if (node instanceof YangGrouping) {
-// break;
-// }
-// node = node.getNextSibling();
-// }
-//
-// node = node.getChild();
-// ListIterator<YangLeaf> leafIterator = ((YangContainer) node).getListOfLeaf().listIterator();
-// YangLeaf leafInfo = leafIterator.next();
-//
-// assertThat(leafInfo.getName(), is("id"));
-// assertThat(leafInfo.getDataType().getDataTypeName(), is("flow-classifier-id"));
-// assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
-//
-// leafInfo = leafIterator.next();
-//
-// assertThat(leafInfo.getName(), is("tenant-id"));
-// assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
-//
-// assertThat(true, is(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef()
-// .getName().equals("tenant-id")));
-//
-// assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
-//
-// YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
-//
-// // Check for the effective built-in type.
-// assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
-//
-// YangPluginConfig yangPluginConfig = new YangPluginConfig();
-// yangPluginConfig.setCodeGenDir(TARGET);
-//
-// utilManager.translateToJava(yangPluginConfig);
-// testIfFlowClassifierFilesExists();
-// testIfPortPairFileDoesNotExist();
-// deleteDirectory(TARGET);
-// mockJarFileProvider.deleteTestSerFile(YANG_FILES_DIR);
-// }
-
- /**
- * Test if flow classifier code is generated.
- */
- private void testIfFlowClassifierFilesExists() {
- File folder = new File(System.getProperty("user.dir") + SLASH + FLOW_CLASSIFIER_FOLDER);
- File file = new File(System.getProperty("user.dir") + SLASH + FLOW_CLASSIFIER_MANAGER);
- assertThat(true, is(folder.exists()));
- assertThat(false, is(file.exists()));
- }
-
- /**
- * Tests if port pair code is not generated.
- */
- private void testIfPortPairFileDoesNotExist() {
- File folder = new File(System.getProperty("user.dir") + SLASH + PORT_PAIR_FOLDER);
- assertThat(false, is(folder.exists()));
- }
-
- /**
- * Need to remove port-pair YANG file info from the set so , serialized file info can be
- * tested.
- *
- * @param fileInfoSet YANG file info set
- * @return updated file info set
- */
- private Set<YangFileInfo> removeFileInfoFromSet(Set<YangFileInfo> fileInfoSet) {
- String portPairFile = System.getProperty("user.dir") + SLASH + YANG_FILES_DIR + "portpair.yang";
- for (YangFileInfo fileInfo : fileInfoSet) {
- if (fileInfo.getYangFileName().equals(portPairFile)) {
- fileInfoSet.remove(fileInfo);
- return fileInfoSet;
- }
- }
- return fileInfoSet;
- }
-
- /**
- * Parses file info list and returns true if file info list contains the serialized file info.
- *
- * @param yangFileInfoIterator file info list iterator
- * @return true if present
- */
- private boolean parseFileInfoSet(Iterator<YangFileInfo> yangFileInfoIterator) {
- YangFileInfo yangFileInfo = yangFileInfoIterator.next();
- while (yangFileInfoIterator.hasNext()) {
- if (yangFileInfo.getRootNode().getName().equals("port-pair")) {
- return true;
- } else if (yangFileInfo.getRootNode().getName().equals("flow-classifier")) {
- return true;
- }
- yangFileInfo = yangFileInfoIterator.next();
- }
- return false;
-
- }
-
- /**
- * Represents jar file provider for testing.
- */
- private static class MockJarFileProvider {
-
- private static final String TARGET = "target/interJarFileLinking/";
- private static final String TARGET_RESOURCE_PATH = SLASH + TEMP + SLASH + YANG_RESOURCES + SLASH;
- private static final String JAR_FILE_NAME = "onlab-test-1.7.0-SNAPSHOT.jar";
- private static final String SER_FILE_NAME = "portPair.ser";
-
- /**
- * Creates an instance of jar file provider.
- */
- MockJarFileProvider() {
-
- }
-
- /**
- * Provides test jar files for linker.
- *
- * @throws IOException when fails to do IO operations
- */
- void provideTestJarFile(YangUtilManager utilManager) throws IOException {
-
- Set<YangFileInfo> info = utilManager.getYangFileInfoSet();
-
- Set<YangNode> compiledSchemas = new HashSet<>();
- for (YangFileInfo fileInfo : info) {
- compiledSchemas.add(fileInfo.getRootNode());
- }
-
- MavenProject project = new MavenProject();
- serializeDataModel(TARGET, project, false);
- createTestJar();
-
- for (String file : getListOfTestJar(TARGET)) {
- addInterJarRootNodes(file, info);
- }
- }
-
- /**
- * Deletes serialized file.
- */
- void deleteTestSerFile(String yangFileDir) {
- File ser = new File(System.getProperty("user.dir") + SLASH + yangFileDir +
- SLASH + SER_FILE_NAME);
- ser.delete();
- }
-
- /**
- * Returns list of test jar files.
- *
- * @param searchDir search directory
- * @return list of test jar files
- */
- private List<String> getListOfTestJar(String searchDir) {
- List<String> jarFiles = new ArrayList<>();
-
- File directory = new File(searchDir + "/");
- File[] files = directory.listFiles();
-
- for (File file : files) {
- if (!file.isDirectory()) {
- jarFiles.add(file.toString());
- }
- }
-
- return jarFiles;
- }
-
- /**
- * Adds data model nodes of jar to file info set.
- *
- * @param jarFile jar file name
- * @param info file info
- * @throws IOException when fails to do IO operations
- */
- private void addInterJarRootNodes(String jarFile, Set<YangFileInfo> info) throws IOException {
- try {
- List<YangNode> interJarResolvedNodes = parseJarFile(jarFile, TARGET);
-
- for (YangNode node : interJarResolvedNodes) {
- YangFileInfo dependentFileInfo = new YangFileInfo();
- node.setToTranslate(false);
- dependentFileInfo.setRootNode(node);
- dependentFileInfo.setForTranslator(false);
- dependentFileInfo.setYangFileName(node.getName());
- info.add(dependentFileInfo);
- }
- } catch (IOException e) {
- throw new IOException("failed to resolve in interjar scenario.");
- }
- }
-
- /**
- * Creates a temporary test jar files.
- */
- private void createTestJar() {
-
- File file = new File(TARGET + TARGET_RESOURCE_PATH);
- File[] files = file.listFiles();
- String[] source = new String[files.length];
-
- for (int i = 0; i < files.length; i++) {
- source[i] = files[i].toString();
- }
- byte[] buf = new byte[1024];
-
- try {
- String target = TARGET + JAR_FILE_NAME;
- JarOutputStream out = new JarOutputStream(new FileOutputStream(target));
- for (String element : source) {
- FileInputStream in = new FileInputStream(element);
- out.putNextEntry(new JarEntry(element));
- int len;
- while ((len = in.read(buf)) > 0) {
- out.write(buf, 0, len);
- }
- out.closeEntry();
- in.close();
- }
- out.close();
- } catch (IOException e) {
- }
- }
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/IntraFileIfFeatureLinkingTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/IntraFileIfFeatureLinkingTest.java
deleted file mode 100644
index 179d57d..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/IntraFileIfFeatureLinkingTest.java
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.plugin.manager;
-
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.YangFeature;
-import org.onosproject.yangutils.datamodel.YangIfFeature;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.datamodel.YangSubModule;
-import org.onosproject.yangutils.datamodel.utils.ResolvableStatus;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import java.io.IOException;
-import java.util.List;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-
-/**
- * Test cases for testing if-feature intra file linking.
- */
-public class IntraFileIfFeatureLinkingTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks self resolution when feature defined in same file.
- */
- @Test
- public void processSelfFileLinkingWithFeature()
- throws IOException, ParserException {
-
- YangNode node = manager
- .getDataModel("src/test/resources/SelfFileLinkingWithFeature.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("syslog"));
-
- List<YangFeature> featureList = yangNode.getFeatureList();
- YangFeature feature = featureList.iterator().next();
- assertThat(feature.getName(), is("local-storage"));
-
- YangContainer container = (YangContainer) yangNode.getChild();
- assertThat(container.getName(), is("speed"));
-
- List<YangLeaf> listOfLeaf = container.getListOfLeaf();
- YangLeaf leaf = listOfLeaf.iterator().next();
- assertThat(leaf.getName(), is("local-storage-limit"));
-
- List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
- YangIfFeature ifFeature = ifFeatureList.iterator().next();
- assertThat(ifFeature.getName().getName(), is("local-storage"));
- assertThat(ifFeature.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
- }
-
- /**
- * Checks self resolution when feature is undefined.
- */
- @Test
- public void processSelfFileLinkingWithFeatureUndefined()
- throws IOException, ParserException {
-
- YangNode node = manager
- .getDataModel("src/test/resources/SelfFileLinkingWithFeatureUndefined.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("syslog"));
-
- YangContainer container = (YangContainer) yangNode.getChild();
- assertThat(container.getName(), is("speed"));
-
- List<YangLeaf> listOfLeaf = container.getListOfLeaf();
- YangLeaf leaf = listOfLeaf.iterator().next();
- assertThat(leaf.getName(), is("local-storage-limit"));
-
- List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
- YangIfFeature ifFeature = ifFeatureList.iterator().next();
- assertThat(ifFeature.getName().getName(), is("local-storage"));
- assertThat(ifFeature.getResolvableStatus(), is(ResolvableStatus.INTRA_FILE_RESOLVED));
- }
-
- /**
- * Checks self resolution of feature with multiple dependency.
- */
- @Test
- public void processSelfFileLinkingWithMultipleDependency() throws IOException, ParserException {
- YangNode node = manager
- .getDataModel("src/test/resources/SelfFileLinkingWithMultipleDependency.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("syslog"));
-
- List<YangFeature> featureList = yangNode.getFeatureList();
- YangFeature feature = featureList.iterator().next();
- assertThat(feature.getName(), is("p2mp-te"));
-
- YangContainer container = (YangContainer) yangNode.getChild();
- assertThat(container.getName(), is("speed"));
-
- List<YangLeaf> listOfLeaf = container.getListOfLeaf();
- YangLeaf leaf = listOfLeaf.iterator().next();
- assertThat(leaf.getName(), is("local-storage-limit"));
-
- List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
- YangIfFeature ifFeature = ifFeatureList.iterator().next();
- assertThat(ifFeature.getName().getName(), is("frr-te"));
- assertThat(ifFeature.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
- }
-
- /**
- * Checks self resolution of feature with multiple dependency undefined.
- */
- @Test
- public void processSelfFileLinkingWithMultipleDependencyUnresolved() throws IOException, ParserException {
- YangNode node = manager
- .getDataModel("src/test/resources/SelfFileLinkingWithMultipleDependencyUnresolved.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("syslog"));
-
- List<YangFeature> featureList = yangNode.getFeatureList();
- YangFeature feature = featureList.iterator().next();
- assertThat(feature.getName(), is("frr-te"));
-
- YangContainer container = (YangContainer) yangNode.getChild();
- assertThat(container.getName(), is("speed"));
-
- List<YangLeaf> listOfLeaf = container.getListOfLeaf();
- YangLeaf leaf = listOfLeaf.iterator().next();
- assertThat(leaf.getName(), is("local-storage-limit"));
-
- List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
- YangIfFeature ifFeature = ifFeatureList.iterator().next();
- assertThat(ifFeature.getName().getName(), is("frr-te"));
- assertThat(ifFeature.getResolvableStatus(), is(ResolvableStatus.INTRA_FILE_RESOLVED));
- }
-
- /**
- * Checks self resolution when feature is defined in same file in submodule.
- */
- @Test
- public void processSelfFileLinkingWithFeatureInSubModule()
- throws IOException, ParserException {
-
- YangNode node = manager
- .getDataModel("src/test/resources/SelfFileLinkingWithFeatureInSubModule.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangSubModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.SUB_MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangSubModule yangNode = (YangSubModule) node;
- assertThat(yangNode.getName(), is("syslog"));
-
- List<YangFeature> featureList = yangNode.getFeatureList();
- YangFeature feature = featureList.iterator().next();
- assertThat(feature.getName(), is("local-storage"));
-
- YangContainer container = (YangContainer) yangNode.getChild();
- assertThat(container.getName(), is("speed"));
-
- List<YangLeaf> listOfLeaf = container.getListOfLeaf();
- YangLeaf leaf = listOfLeaf.iterator().next();
- assertThat(leaf.getName(), is("local-storage-limit"));
-
- List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
- YangIfFeature ifFeature = ifFeatureList.iterator().next();
- assertThat(ifFeature.getName().getName(), is("local-storage"));
- assertThat(ifFeature.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/IntraFileLeafrefLinkingTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/IntraFileLeafrefLinkingTest.java
deleted file mode 100644
index fbdcc67..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/IntraFileLeafrefLinkingTest.java
+++ /dev/null
@@ -1,1987 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.plugin.manager;
-
-import org.junit.Ignore;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.YangAtomicPath;
-import org.onosproject.yangutils.datamodel.YangAugment;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.YangFeature;
-import org.onosproject.yangutils.datamodel.YangIfFeature;
-import org.onosproject.yangutils.datamodel.YangInput;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangLeafList;
-import org.onosproject.yangutils.datamodel.YangLeafRef;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.datamodel.YangPathArgType;
-import org.onosproject.yangutils.datamodel.YangPathOperator;
-import org.onosproject.yangutils.datamodel.YangPathPredicate;
-import org.onosproject.yangutils.datamodel.YangRelativePath;
-import org.onosproject.yangutils.datamodel.utils.ResolvableStatus;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.linker.exceptions.LinkerException;
-import org.onosproject.yangutils.linker.impl.YangLinkerManager;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
-
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-import static org.hamcrest.core.IsNull.nullValue;
-import static org.onosproject.yangutils.datamodel.YangNodeType.MODULE_NODE;
-import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.RESOLVED;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.LEAFREF;
-import static org.onosproject.yangutils.linker.impl.YangLinkerUtils.updateFilePriority;
-
-/**
- * Test cases for testing leafref intra file linking.
- */
-public class IntraFileLeafrefLinkingTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private final YangUtilManager utilManager = new YangUtilManager();
- private final YangLinkerManager yangLinkerManager = new YangLinkerManager();
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks self resolution when leafref under module refers to leaf in container.
- */
- @Test
- public void processSelfResolutionWhenLeafrefReferToContainerLeaf()
- throws IOException, ParserException {
-
- String searchDir = "src/test/resources/leafreflinker/intrafile/simpleleafref";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- YangNode selfNode = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("SelfResolutionWhenLeafrefReferToContainerLeaf")) {
- selfNode = rootNode;
- }
-
- // Check whether the data model tree returned is of type module.
- assertThat((selfNode instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("SelfResolutionWhenLeafrefReferToContainerLeaf"));
-
- ListIterator<YangLeaf> leafIterator;
- YangLeaf leafInfo;
-
- leafIterator = yangNode.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
-
- // Check whether the information in the leaf is correct.
- assertThat(leafInfo.getName(), is("network-ref"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
- YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
-
- // Check whether leafref type got resolved.
- assertThat(leafref.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
-
- // Check the effective type for the leaf.
- assertThat(leafref.getEffectiveDataType().getDataType(),
- is(YangDataTypes.UINT8));
- }
-
- /**
- * Checks self resolution when leafref under module refers to leaf in input of rpc.
- */
- @Test
- public void processSelfResolutionWhenLeafrefInModuleReferToLeafInInputOfRpc()
- throws IOException, ParserException {
-
- String searchDir = "src/test/resources/leafreflinker/intrafile/leafrefwithrpc";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- YangNode selfNode = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("SelfResolutionWhenLeafrefInModuleReferToLeafInInputOfRpc")) {
- selfNode = rootNode;
- }
-
- // Check whether the data model tree returned is of type module.
- assertThat((selfNode instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("SelfResolutionWhenLeafrefInModuleReferToLeafInInputOfRpc"));
-
- ListIterator<YangLeaf> leafIterator;
- YangLeaf leafInfo;
-
- leafIterator = yangNode.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
-
- // Check whether the information in the leaf is correct.
- assertThat(leafInfo.getName(), is("network-ref"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
- YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
-
- // Check whether leafref type got resolved.
- assertThat(leafref.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
-
- // Check the effective type for the leaf.
- assertThat(leafref.getEffectiveDataType().getDataType(),
- is(YangDataTypes.UINT8));
- }
-
- /**
- * Checks self resolution when leafref under module refers to grouping rpc with input as name.
- * Rpc has input child also. So here the node search must be done by taking input node.
- * TODO: When path has RPC's input but grouping & typedef with the same name occurs.
- */
- @Ignore
- public void processSelfResolutionWhenLeafrefInModuleReferToGroupingWithInputInRpc()
- throws IOException, ParserException {
-
- String searchDir = "src/test/resources/leafreflinker/intrafile/leafrefwithrpcandgrouping";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- YangNode selfNode = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("SelfResolutionWhenLeafrefInModuleReferToGroupingWithInputInRpc")) {
- selfNode = rootNode;
- }
-
- // Check whether the data model tree returned is of type module.
- assertThat((selfNode instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("SelfResolutionWhenLeafrefInModuleReferToGroupingWithInputInRpc"));
-
- ListIterator<YangLeaf> leafIterator;
- YangLeaf leafInfo;
-
- leafIterator = yangNode.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
-
- // Check whether the information in the leaf is correct.
- assertThat(leafInfo.getName(), is("network-ref"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
- YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
-
- // Check whether leafref type got resolved.
- assertThat(leafref.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
-
- // Check the effective type for the leaf.
- assertThat(leafref.getEffectiveDataType().getDataType(),
- is(YangDataTypes.UINT8));
- }
-
- /**
- * Checks self resolution when leafref under module refers to grouping under module.
- * Grouping/typedef cannot be referred.
- */
- @Test
- public void processSelfResolutionWhenLeafrefInModuleReferToGrouping()
- throws IOException, ParserException {
-/*
- thrown.expect(LinkerException.class);
- thrown.expectMessage(
- "YANG file error: The target node, in the leafref path /networks/network-id, is invalid.");
-*/
- String searchDir = "src/test/resources/leafreflinker/intrafile/invalidscenerioforgrouping";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
- }
-
- /**
- * Checks self resolution error scenerio where leafref is without path.
- */
- @Test
- public void processSelfResolutionWhenLeafrefDoesntHavePath()
- throws IOException, ParserException {
-
- thrown.expect(ParserException.class);
- thrown.expectMessage(
- "YANG file error : a type leafref must have one path statement.");
- YangNode node = manager
- .getDataModel("src/test/resources/SelfResolutionWhenLeafrefDoesntHavePath.yang");
- }
-
- /**
- * Checks self resolution when leafref under module refers to invalid node.
- */
- @Test
- public void processSelfResolutionWhenLeafrefInModuleReferToInvalidNode()
- throws IOException, ParserException {
-
- thrown.expect(LinkerException.class);
- thrown.expectMessage(
- "YANG file error: Unable to find base leaf/leaf-list for given leafref path /define/network-id");
- String searchDir = "src/test/resources/leafreflinker/intrafile/invalidsceneriowithinvalidnode";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
- }
-
- /**
- * Checks self resolution when leafref under module refers to invalid node.
- * Inter file linking also has to be done to know the error message.
- */
- @Test
- public void processSelfResolutionWhenLeafrefIsInDeepTreeAndLeafIsInModuleWithReferredTypeUnion()
- throws IOException, ParserException {
-
- String searchDir = "src/test/resources/leafreflinker/intrafile/leafreflinking";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- YangNode selfNode = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("Test")) {
- selfNode = rootNode;
- }
-
- // Check whether the data model tree returned is of type module.
- assertThat((selfNode instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("Test"));
-
- YangContainer containerParent = (YangContainer) yangNode.getChild().getChild().getChild();
- ListIterator<YangLeaf> leafIterator;
- YangLeaf leafInfo;
-
- leafIterator = containerParent.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
-
- // Check whether the information in the leaf is correct.
- assertThat(leafInfo.getName(), is("name"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
- YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
-
- // Check whether leafref type got resolved.
- assertThat(leafref.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
-
- // Check the effective type for the leaf.
- assertThat(leafref.getEffectiveDataType().getDataType(),
- is(YangDataTypes.UNION));
- }
-
- /**
- * Checks self resolution when leafref of leaf-list under module refers to leaf in container.
- */
- @Test
- public void processSelfResolutionWhenLeafrefReferToContainerLeafList()
- throws IOException, ParserException {
-
- String searchDir = "src/test/resources/leafreflinker/intrafile/leafrefreferingtoleaflist";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- YangNode selfNode = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("ietf-network")) {
- selfNode = rootNode;
- }
-
- // Check whether the data model tree returned is of type module.
- assertThat((selfNode instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("ietf-network"));
-
- ListIterator<YangLeafList> leafListIterator;
- YangLeafList leafListInfo;
-
- leafListIterator = yangNode.getListOfLeafList().listIterator();
- leafListInfo = leafListIterator.next();
-
- // Check whether the information in the leaf is correct.
- assertThat(leafListInfo.getName(), is("network-ref"));
- assertThat(leafListInfo.getDataType().getDataTypeName(), is("leafref"));
- assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
- YangLeafRef leafref = (YangLeafRef) (leafListInfo.getDataType().getDataTypeExtendedInfo());
-
- // Check whether leafref type got resolved.
- assertThat(leafref.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
-
- // Check the effective type for the leaf.
- assertThat(leafref.getEffectiveDataType().getDataType(),
- is(YangDataTypes.UINT8));
- }
-
- /**
- * Checks self resolution when leafref of leaf-list under module refers to leaf-list in input of rpc.
- */
- @Test
- public void processSelfResolutionWhenLeafrefInModuleReferToLeafListInInputOfRpc()
- throws IOException, ParserException {
-
- String searchDir = "src/test/resources/leafreflinker/intrafile/leafreftoinputinrpc";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- YangNode selfNode = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("ietf-network")) {
- selfNode = rootNode;
- }
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("ietf-network"));
-
- ListIterator<YangLeafList> leafListIterator;
- YangLeafList leafListInfo;
-
- leafListIterator = yangNode.getListOfLeafList().listIterator();
- leafListInfo = leafListIterator.next();
-
- // Check whether the information in the leaf is correct.
- assertThat(leafListInfo.getName(), is("network-ref"));
- assertThat(leafListInfo.getDataType().getDataTypeName(), is("leafref"));
- assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
- YangLeafRef leafref = (YangLeafRef) (leafListInfo.getDataType().getDataTypeExtendedInfo());
-
- // Check whether leafref type got resolved.
- assertThat(leafref.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
-
- // Check the effective type for the leaf.
- assertThat(leafref.getEffectiveDataType().getDataType(),
- is(YangDataTypes.UINT8));
- }
-
- /**
- * Checks self resolution when leafref of leaf-list under module refers to invalid node.
- * Inter file linking also has to be done to know the error message.
- */
- @Test
- public void processSelfResolutionWhenLeafrefIsInDeepTreeAndLeafListIsInModuleWithReferredTypeEnumeration()
- throws IOException, ParserException {
-
- String searchDir = "src/test/resources/leafreflinker/intrafile/leafrefwithrefleafderived";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- YangNode selfNode = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("Test")) {
- selfNode = rootNode;
- }
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
-
- assertThat(yangNode.getName(), is("Test"));
-
- YangContainer containerParent = (YangContainer) yangNode.getChild().getChild().getChild();
- ListIterator<YangLeafList> leafListListIterator;
- YangLeafList leafListInfo;
-
- leafListListIterator = containerParent.getListOfLeafList().listIterator();
- leafListInfo = leafListListIterator.next();
-
- // Check whether the information in the leaf is correct.
- assertThat(leafListInfo.getName(), is("name"));
- assertThat(leafListInfo.getDataType().getDataTypeName(), is("leafref"));
- assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
- YangLeafRef leafref = (YangLeafRef) (leafListInfo.getDataType().getDataTypeExtendedInfo());
-
- // Check whether leafref type got resolved.
- assertThat(leafref.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
-
- // Check the effective type for the leaf.
- assertThat(leafref.getEffectiveDataType().getDataType(),
- is(YangDataTypes.ENUMERATION));
- }
-
- /**
- * Checks the error scenerio when the referred node is not a leaf or leaf-list.
- */
- @Test
- public void processSelfResolutionWhenLeafrefDoesNotReferToLeafOrLeafList()
- throws IOException, ParserException {
-
- thrown.expect(LinkerException.class);
- thrown.expectMessage(
- "YANG file error: Unable to find base leaf/leaf-list for given leafref path /networks");
- String searchDir = "src/test/resources/leafreflinker/intrafile/invalidsceneriowithnorefleaf";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
- }
-
- /**
- * Checks self resolution when leafref of leaf-list under module refers to leaf in container.
- */
- @Test
- public void processSelfResolutionWhenLeafrefInTypedefReferToContainer()
- throws IOException, ParserException {
- String searchDir = "src/test/resources/leafreflinker/intrafile/leafrefintypedef";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- YangNode selfNode = null;
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("ietf-network")) {
- selfNode = rootNode;
- }
- // Check whether the data model tree returned is of type module.
- assertThat((selfNode instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("ietf-network"));
-
- YangContainer yangContainer = (YangContainer) yangNode.getChild();
- ListIterator<YangLeaf> leafIterator;
- YangLeaf leafInfo;
- leafIterator = yangContainer.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
-
- // Check whether the information in the leaf is correct under grouping.
- assertThat(leafInfo.getName(), is("network-id"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
-
- YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
-
- // Check whether leafref type got resolved.
- assertThat(leafref.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
-
- // Check the effective type for the leaf.
- assertThat(leafref.getEffectiveDataType().getDataType(),
- is(YangDataTypes.UINT8));
- }
-
- /**
- * Checks self resolution when leafref of leaf-list under module refers to leaf-list in input of rpc.
- */
- @Test
- public void processSelfResolutionWhenLeafrefInTypedefModuleReferToLeafListInInputOfRpc()
- throws IOException, ParserException {
-
- String searchDir = "src/test/resources/leafreflinker/intrafile/leafreftorpcinputleaflist";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- YangNode selfNode = null;
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("ietf-network")) {
- selfNode = rootNode;
- }
- // Check whether the data model tree returned is of type module.
- assertThat((selfNode instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("ietf-network"));
-
- YangInput yangInput = (YangInput) yangNode.getChild().getChild();
-
- ListIterator<YangLeafList> leafListIterator;
- YangLeafList yangLeafListInfo;
- leafListIterator = yangInput.getListOfLeafList().listIterator();
- yangLeafListInfo = leafListIterator.next();
-
- // Check whether the information in the leaf is correct under grouping.
- assertThat(yangLeafListInfo.getName(), is("network-id"));
- assertThat(yangLeafListInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
-
- YangLeafRef leafref = (YangLeafRef) (yangLeafListInfo.getDataType().getDataTypeExtendedInfo());
-
- // Check whether leafref type got resolved.
- assertThat(leafref.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
-
- // Check the effective type for the leaf.
- assertThat(leafref.getEffectiveDataType().getDataType(),
- is(YangDataTypes.UINT8));
- }
-
- /**
- * Checks self resolution when leafref of leaf-list under module refers to invalid node.
- * Inter file linking also has to be done to know the error message.
- */
- @Test
- public void processSelfResolutionWhenLeafrefInTypedefIsInDeepTreeAndLeafListIsInModuleWithReferredTypeEnumeration()
- throws IOException, ParserException {
-
- String searchDir = "src/test/resources/leafreflinker/intrafile/leafreftoleafrefwithtypedef";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- YangNode selfNode = null;
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("Test")) {
- selfNode = rootNode;
- }
- // Check whether the data model tree returned is of type module.
- assertThat((selfNode instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("Test"));
-
- YangContainer yangContainer = (YangContainer) yangNode.getChild().getChild().getChild().getNextSibling();
-
- ListIterator<YangLeaf> leafIterator;
- YangLeaf yangLeafInfo;
- leafIterator = yangContainer.getListOfLeaf().listIterator();
- yangLeafInfo = leafIterator.next();
-
- // Check whether the information in the leaf is correct under grouping.
- assertThat(yangLeafInfo.getName(), is("interval"));
- assertThat(yangLeafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
-
- YangLeafRef leafref = (YangLeafRef) (yangLeafInfo.getDataType().getDataTypeExtendedInfo());
-
- // Check whether leafref type got resolved.
- assertThat(leafref.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
-
- // Check the effective type for the leaf.
- assertThat(leafref.getEffectiveDataType().getDataType(),
- is(YangDataTypes.ENUMERATION));
- }
-
- /**
- * Checks self resolution when grouping and uses are siblings.
- * Grouping followed by uses.
- */
- @Test
- public void processSelfResolutionWhenLeafrefRefersAnotherLeafref()
- throws IOException, ParserException {
-
- String searchDir = "src/test/resources/leafreflinker/intrafile/leafreftoleafref";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- YangNode selfNode = null;
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("ietf-network")) {
- selfNode = rootNode;
- }
- // Check whether the data model tree returned is of type module.
- assertThat((selfNode instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("ietf-network"));
-
- ListIterator<YangLeaf> leafIterator;
- YangLeaf leafInfo;
-
- //YangGrouping grouping = (YangGrouping) yangNode.getChild().getNextSibling();
- leafIterator = yangNode.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
-
- // Check whether the information in the leaf is correct under grouping.
- assertThat(leafInfo.getName(), is("network-ref"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
- YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
-
- assertThat(leafref.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
-
- assertThat(leafref.getEffectiveDataType().getDataType(),
- is(YangDataTypes.UINT8));
- }
-
- /**
- * Checks self resolution when leafref refers to many other leafref.
- */
- @Test
- public void processSelfResolutionWhenLeafrefReferToMultipleLeafref()
- throws IOException, ParserException {
-
- String searchDir = "src/test/resources/leafreflinker/intrafile/leafreftomultileafref";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- YangNode selfNode = null;
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("Test")) {
- selfNode = rootNode;
- }
- // Check whether the data model tree returned is of type module.
- assertThat((selfNode instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("Test"));
-
- YangContainer containerInModule = (YangContainer) yangNode.getChild().getNextSibling();
- YangContainer containerInList = (YangContainer) containerInModule.getChild().getChild();
-
- ListIterator<YangLeaf> leafIterator;
- YangLeaf leafInfo;
-
- leafIterator = containerInList.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
-
- // Check whether the information in the leaf is correct under grouping.
- assertThat(leafInfo.getName(), is("remove"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
- YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
-
- assertThat(leafref.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
-
- assertThat(leafref.getEffectiveDataType().getDataType(),
- is(YangDataTypes.ENUMERATION));
- }
-
- /**
- * Checks self resolution when grouping and uses are siblings.
- * Grouping followed by uses.
- */
- @Test
- public void processSelfResolutionWhenLeafrefRefersAnotherDerivedType()
- throws IOException, ParserException {
-
- String searchDir = "src/test/resources/leafreflinker/intrafile/leafreftoderivedtype";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- YangNode selfNode = null;
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("ietf-network")) {
- selfNode = rootNode;
- }
- // Check whether the data model tree returned is of type module.
- assertThat((selfNode instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("ietf-network"));
-
- ListIterator<YangLeaf> leafIterator;
- YangLeaf leafInfo;
-
- //YangGrouping grouping = (YangGrouping) yangNode.getChild().getNextSibling();
- leafIterator = yangNode.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
-
- // Check whether the information in the leaf is correct under grouping.
- assertThat(leafInfo.getName(), is("network-ref"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
- YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
-
- assertThat(leafref.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
-
- assertThat(leafref.getEffectiveDataType().getDataType(),
- is(YangDataTypes.DERIVED));
- }
-
- /**
- * Checks self resolution when leafref refers to many other leafref.
- */
- @Test
- public void processSelfResolutionWhenLeafrefReferToMultipleTypedef()
- throws IOException, ParserException {
-
- String searchDir = "src/test/resources/leafreflinker/intrafile/leafreftomultitypedef";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- YangNode selfNode = null;
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("Test")) {
- selfNode = rootNode;
- }
- // Check whether the data model tree returned is of type module.
- assertThat((selfNode instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("Test"));
-
- YangContainer containerInModule = (YangContainer) yangNode.getChild().getNextSibling();
- YangContainer containerInList = (YangContainer) containerInModule.getChild().getChild();
-
- ListIterator<YangLeaf> leafIterator;
- YangLeaf leafInfo;
-
- leafIterator = containerInList.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
-
- // Check whether the information in the leaf is correct under grouping.
- assertThat(leafInfo.getName(), is("remove"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
- YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
-
- assertThat(leafref.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
-
- assertThat(leafref.getEffectiveDataType().getDataType(),
- is(YangDataTypes.DERIVED));
- }
-
- /**
- * Checks self resolution when leafref refers to many other leaf with derived type
- * which in turn referring to another leaf.
- */
- @Test
- public void processSelfResolutionWhenLeafrefReferToDerivedTypeReferringToLeafWithLeafref()
- throws IOException, ParserException {
-
- String searchDir = "src/test/resources/leafreflinker/intrafile/leafreftotypedefwithleafref";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- YangNode selfNode = null;
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("Test")) {
- selfNode = rootNode;
- }
- // Check whether the data model tree returned is of type module.
- assertThat((selfNode instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("Test"));
-
- YangContainer containerInModule = (YangContainer) yangNode.getChild().getNextSibling();
- YangContainer containerInList = (YangContainer) containerInModule.getChild().getChild();
-
- ListIterator<YangLeaf> leafIterator;
- YangLeaf leafInfo;
-
- leafIterator = containerInList.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
-
- // Check whether the information in the leaf is correct under grouping.
- assertThat(leafInfo.getName(), is("remove"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
- YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- assertThat(leafref.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
-
- assertThat(leafref.getEffectiveDataType().getDataType(),
- is(YangDataTypes.ENUMERATION));
- }
-
- /**
- * Checks self resolution when leafref under module refers to leaf in container with relative path.
- */
- @Test
- public void processSelfResolutionWhenLeafrefReferToContainerLeafRelPath()
- throws IOException, ParserException {
-
- String searchDir = "src/test/resources/leafreflinker/intrafile/relativepath/simpleleafref";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- YangNode selfNode = null;
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("ietf-network")) {
- selfNode = rootNode;
- }
- // Check whether the data model tree returned is of type module.
- assertThat((selfNode instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("ietf-network"));
-
- ListIterator<YangLeaf> leafIterator;
- YangLeaf leafInfo;
-
- leafIterator = yangNode.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
-
- // Check whether the information in the leaf is correct.
- assertThat(leafInfo.getName(), is("network-ref"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
- YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
-
- // Check whether leafref type got resolved.
- assertThat(leafref.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
-
- // Check the effective type for the leaf.
- assertThat(leafref.getEffectiveDataType().getDataType(),
- is(YangDataTypes.UINT8));
- }
-
- /**
- * Checks self resolution when leafref under module refers to grouping rpc with input as name.
- * Rpc has input child also. So here the node search must be done by taking input node using relative path.
- */
- @Ignore
- public void processSelfResolutionWhenLeafrefInModuleReferToGroupingWithInputInRpcRelPath()
- throws IOException, ParserException {
-
- String searchDir = "src/test/resources/leafreflinker/intrafile/relativepath/leafreftoinputwithgroupinginrpc";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- YangNode selfNode = null;
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("ietf-network")) {
- selfNode = rootNode;
- }
- // Check whether the data model tree returned is of type module.
- assertThat((selfNode instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("ietf-network"));
-
- ListIterator<YangLeaf> leafIterator;
- YangLeaf leafInfo;
-
- leafIterator = yangNode.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
-
- // Check whether the information in the leaf is correct.
- assertThat(leafInfo.getName(), is("network-ref"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
- YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
-
- // Check whether leafref type got resolved.
- assertThat(leafref.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
-
- // Check the effective type for the leaf.
- assertThat(leafref.getEffectiveDataType().getDataType(),
- is(YangDataTypes.UINT8));
- }
-
- /**
- * Checks self resolution when leafref under module refers to invalid root node with relative path.
- */
- @Test
- public void processSelfResolutionWhenLeafrefInModuleReferToInvalidRootNodeRelPath()
- throws IOException, ParserException {
-
- thrown.expect(LinkerException.class);
- thrown.expectMessage(
- "YANG file error: The target node, in the leafref path ../../../define/network-id, is invalid.");
- String searchDir = "src/test/resources/leafreflinker/intrafile/relativepath/invalidrelativeancestoraccess";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
- }
-
- /**
- * Checks self resolution when leafref under module refers to invalid node.
- * Inter file linking also has to be done to know the error message with relative path.
- */
- @Test
- public void processSelfResolutionWhenLeafrefInModuleReferToInvalidNodeRelPath()
- throws IOException, ParserException {
-
-
- thrown.expect(LinkerException.class);
- thrown.expectMessage(
- "YANG file error: Unable to find base leaf/leaf-list for given leafref path ../define/network-id");
- String searchDir = "src/test/resources/leafreflinker/intrafile/relativepath/invalidnode";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- //Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
- }
-
- /**
- * Checks self resolution when leafref of leaf-list under module refers to leaf in container with relative path.
- */
- @Test
- public void processSelfResolutionWhenLeafrefInTypedefReferToContainerRelPath()
- throws IOException, ParserException {
-
- String searchDir = "src/test/resources/leafreflinker/intrafile/relativepath/leafrefintypedef";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- YangNode selfNode = null;
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("ietf-network")) {
- selfNode = rootNode;
- }
- // Check whether the data model tree returned is of type module.
- assertThat((selfNode instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("ietf-network"));
- ListIterator<YangLeaf> leafIterator;
- YangLeaf leafInfo;
- YangContainer yangContainer = (YangContainer) yangNode.getChild();
- leafIterator = yangContainer.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
-
- // Check whether the information in the leaf is correct under grouping.
- assertThat(leafInfo.getName(), is("network-id"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
-
- YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
-
- // Check whether leafref type got resolved.
- assertThat(leafref.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
-
- // Check the effective type for the leaf.
- assertThat(leafref.getEffectiveDataType().getDataType(),
- is(YangDataTypes.UINT8));
- }
-
- /**
- * Checks self resolution when leafref refers to many other leafref with relative path.
- */
- @Test
- public void processSelfResolutionWhenLeafrefReferToMultipleLeafrefRelPath()
- throws IOException, ParserException {
-
- String searchDir = "src/test/resources/leafreflinker/intrafile/relativepath/leafreftomultileafref";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- YangNode selfNode = null;
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("Test")) {
- selfNode = rootNode;
- }
- // Check whether the data model tree returned is of type module.
- assertThat((selfNode instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("Test"));
-
- YangContainer containerInModule = (YangContainer) yangNode.getChild().getNextSibling();
- YangContainer containerInList = (YangContainer) containerInModule.getChild().getChild();
-
- ListIterator<YangLeaf> leafIterator;
- YangLeaf leafInfo;
-
- leafIterator = containerInList.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
-
- // Check whether the information in the leaf is correct under grouping.
- assertThat(leafInfo.getName(), is("remove"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
- YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
-
- assertThat(leafref.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
-
- assertThat(leafref.getEffectiveDataType().getDataType(),
- is(YangDataTypes.ENUMERATION));
- }
-
- /**
- * Checks self resolution when leafref refers to many other leaf with derived type
- * which in turn referring to another leaf with relative type.
- */
- @Test
- public void processSelfResolutionWhenLeafrefReferToDerivedTypeReferringToLeafWithLeafrefRelType()
- throws IOException, ParserException {
-
- String searchDir = "src/test/resources/leafreflinker/intrafile/relativepath/leafreftotypedef";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- YangNode selfNode = null;
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("Test")) {
- selfNode = rootNode;
- }
- // Check whether the data model tree returned is of type module.
- assertThat((selfNode instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("Test"));
-
- YangContainer containerInModule = (YangContainer) yangNode.getChild().getNextSibling();
- YangContainer containerInList = (YangContainer) containerInModule.getChild().getChild();
-
- ListIterator<YangLeaf> leafIterator;
- YangLeaf leafInfo;
-
- leafIterator = containerInList.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
-
- // Check whether the information in the leaf is correct under grouping.
- assertThat(leafInfo.getName(), is("remove"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
- YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- assertThat(leafref.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
-
- assertThat(leafref.getEffectiveDataType().getDataType(),
- is(YangDataTypes.ENUMERATION));
- }
-
- /**
- * Checks the valid scenerios of path argument having proper setters.
- */
- @Test
- public void processPathArgumentStatement()
- throws IOException, ParserException {
-
- String searchDir = "src/test/resources/leafreflinker/intrafile/relativepath/pathlistener";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- YangNode selfNode = null;
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("PathListener")) {
- selfNode = rootNode;
- }
- // Check whether the data model tree returned is of type module.
- assertThat((selfNode instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("PathListener"));
- YangList listInModule = (YangList) yangNode.getChild();
-
- YangContainer containerInModule = (YangContainer) yangNode.getChild().getNextSibling();
- ListIterator<YangLeaf> leafIterator;
- YangLeaf leafInfo;
-
- YangLeaf leafNameInList = listInModule.getListOfLeaf().listIterator().next();
-
- leafIterator = containerInModule.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
-
- // Check whether the information in the leaf is correct under grouping.
- assertThat(leafInfo.getName(), is("ifname"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
- YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
- assertThat(leafref.getPathType(), is(YangPathArgType.ABSOLUTE_PATH));
-
- YangRelativePath relativePathForName = leafref.getRelativePath();
- assertThat(relativePathForName.getAncestorNodeCount(), is(2));
- List<YangAtomicPath> absPathForName = relativePathForName.getAtomicPathList();
- Iterator<YangAtomicPath> absPathIteratorForName = absPathForName.listIterator();
- YangAtomicPath abspathForName = absPathIteratorForName.next();
- assertThat(abspathForName.getNodeIdentifier().getName(), is("interface"));
- assertThat(abspathForName.getNodeIdentifier().getPrefix(), is("test"));
- YangAtomicPath abspath1 = absPathIteratorForName.next();
- assertThat(abspath1.getNodeIdentifier().getName(), is("name"));
- assertThat(abspath1.getNodeIdentifier().getPrefix(), is("test"));
-
- YangLeaf leafInfo1 = leafIterator.next();
- // Check whether the information in the leaf is correct under grouping.
- assertThat(leafInfo1.getName(), is("status"));
- assertThat(leafInfo1.getDataType().getDataTypeName(), is("leafref"));
- assertThat(leafInfo1.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
-
- YangLeafRef leafref1 = (YangLeafRef) leafInfo1.getDataType().getDataTypeExtendedInfo();
- assertThat(leafref1.getPathType(), is(YangPathArgType.ABSOLUTE_PATH));
-
- List<YangAtomicPath> absolutePathList = leafref1.getAtomicPath();
- Iterator<YangAtomicPath> absPathIterator = absolutePathList.listIterator();
- YangAtomicPath abspath = absPathIterator.next();
- assertThat(abspath.getNodeIdentifier().getName(), is("interface"));
- assertThat(abspath.getNodeIdentifier().getPrefix(), is("test"));
-
- List<YangPathPredicate> pathPredicateList = abspath.getPathPredicatesList();
- Iterator<YangPathPredicate> pathPredicate = pathPredicateList.listIterator();
- YangPathPredicate pathPredicate1 = pathPredicate.next();
- assertThat(pathPredicate1.getNodeId().getName(), is("name"));
- assertThat(pathPredicate1.getNodeId().getPrefix(), nullValue());
- assertThat(pathPredicate1.getRelPath().getAncestorNodeCount(), is(1));
- assertThat(pathPredicate1.getPathOp(), is(YangPathOperator.EQUALTO));
- assertThat(pathPredicate1.getRelPath().getAtomicPathList().listIterator().next().getNodeIdentifier()
- .getName(), is("ifname"));
- //TODO : Fill the path predicates
-// assertThat(pathPredicate1.getLeftAxisNode(), is(leafNameInList));
-// assertThat(pathPredicate1.getRightAxisNode(), is(leafInfo));
- }
-
- /**
- * Checks inter file resolution when leafref refers to multiple leafrefs through many files.
- */
- @Test
- public void processInterFileLeafrefRefersToMultipleLeafrefInMultipleFiles()
- throws IOException, ParserException {
-
- String searchDir = "src/test/resources/leafreflinker/interfile" +
- "/interfileleafrefreferstomultipleleafrefinmultiplefiles";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- YangNode refNode1 = null;
- YangNode refNode2 = null;
- YangNode selfNode = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- for (YangNode rootNode : utilManager.getYangNodeSet()) {
- if (rootNode.getName().equals("ietf-network-topology")) {
- selfNode = rootNode;
- } else if (rootNode.getName().equals("ietf-network")) {
- refNode1 = rootNode;
- } else {
- refNode2 = rootNode;
- }
- }
- // Check whether the data model tree returned is of type module.
- assertThat(selfNode instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("ietf-network-topology"));
-
- YangList list = (YangList) yangNode.getChild().getChild();
- ListIterator<YangLeaf> leafIterator = list.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("link-tp"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
- assertThat(leafInfo.getDataType().getDataType(), is(LEAFREF));
-
- YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- YangLeaf leafInfo2 = (YangLeaf) leafref.getReferredLeafOrLeafList();
- assertThat(leafref.getReferredLeafOrLeafList(), is(leafInfo2));
- assertThat(leafref.getResolvableStatus(), is(RESOLVED));
-
- assertThat(leafref.getEffectiveDataType().getDataType(),
- is(YangDataTypes.STRING));
- }
-
-
- /**
- * Checks addition of if-feature list to leafref.
- */
- @Test
- public void processSelfFileLinkingWithFeatureReferredByLeafref()
- throws IOException, ParserException {
-
- String searchDir = "src/test/resources/leafreflinker/iffeatuinleafref/simpleleafrefwithiffeature";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- YangNode selfNode = null;
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("syslog")) {
- selfNode = rootNode;
- }
- // Check whether the data model tree returned is of type module.
- assertThat((selfNode instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("syslog"));
-
- List<YangFeature> featureList = yangNode.getFeatureList();
- YangFeature feature = featureList.iterator().next();
- assertThat(feature.getName(), is("local-storage"));
-
- YangContainer container = (YangContainer) yangNode.getChild();
- assertThat(container.getName(), is("speed"));
-
- List<YangLeaf> listOfLeaf = container.getListOfLeaf();
- YangLeaf leaf = listOfLeaf.iterator().next();
- assertThat(leaf.getName(), is("local-storage-limit"));
-
- List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
- YangIfFeature ifFeature = ifFeatureList.iterator().next();
- assertThat(ifFeature.getName().getName(), is("local-storage"));
- assertThat(ifFeature.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
-
- ListIterator<YangLeaf> listOfLeafInModule = yangNode.getListOfLeaf().listIterator();
- YangLeaf yangLeaf = listOfLeafInModule.next();
- assertThat(yangLeaf.getName(), is("storage-value"));
-
- YangLeafRef leafRef = (YangLeafRef) yangLeaf.getDataType().getDataTypeExtendedInfo();
-
- assertThat(leafRef.getEffectiveDataType().getDataType(), is(YangDataTypes.UINT64));
-
- List<YangIfFeature> ifFeatureListInLeafref = leafRef.getIfFeatureList();
- YangIfFeature ifFeatureInLeafref = ifFeatureListInLeafref.iterator().next();
- assertThat(ifFeatureInLeafref.getName().getName(), is("local-storage"));
- assertThat(ifFeatureInLeafref.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
- }
-
- /**
- * Checks addition of if-feature list to leafref when referred leaf is again having leafref in it.
- */
- @Test
- public void processSelfFileLinkingWithFeatureReferredByMultiLeafref()
- throws IOException, ParserException {
-
- String searchDir = "src/test/resources/leafreflinker/iffeatuinleafref/featurebymultileafref";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- YangNode selfNode = null;
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("syslog")) {
- selfNode = rootNode;
- }
- // Check whether the data model tree returned is of type module.
- assertThat((selfNode instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("syslog"));
-
- List<YangFeature> featureList = yangNode.getFeatureList();
- YangFeature feature = featureList.iterator().next();
- assertThat(feature.getName(), is("local-storage"));
-
- YangContainer container = (YangContainer) yangNode.getChild();
- assertThat(container.getName(), is("speed"));
-
- List<YangLeaf> listOfLeaf = container.getListOfLeaf();
- YangLeaf leaf = listOfLeaf.iterator().next();
- assertThat(leaf.getName(), is("local-storage-limit"));
-
- List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
- YangIfFeature ifFeature = ifFeatureList.iterator().next();
- assertThat(ifFeature.getName().getName(), is("local-storage"));
- assertThat(ifFeature.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
-
- ListIterator<YangLeaf> listOfLeafInModule = yangNode.getListOfLeaf().listIterator();
- YangLeaf yangLeaf = listOfLeafInModule.next();
- assertThat(yangLeaf.getName(), is("storage-value"));
-
- YangLeafRef leafRef = (YangLeafRef) yangLeaf.getDataType().getDataTypeExtendedInfo();
-
- assertThat(leafRef.getEffectiveDataType().getDataType(), is(YangDataTypes.UINT64));
-
- List<YangIfFeature> ifFeatureListInLeafref = leafRef.getIfFeatureList();
- YangIfFeature ifFeatureInLeafref = ifFeatureListInLeafref.iterator().next();
-
- assertThat(ifFeatureInLeafref.getName().getName(), is("main-storage"));
- assertThat(ifFeatureInLeafref.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
-
- YangIfFeature ifFeatureInLeafref1 = ifFeatureListInLeafref.iterator().next();
-
- assertThat(ifFeatureInLeafref1.getName().getName(), is("main-storage"));
- assertThat(ifFeatureInLeafref1.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
- }
-
- /**
- * Checks self resolution when leafref in grouping is copied to augment.
- */
- @Test
- public void processSelfResolutionWhenLeafrefInGroupingIsUnderAugment()
- throws IOException, ParserException {
-
- String searchDir = "src/test/resources/leafreflinker/intrafile/leafrefInAugment";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- YangNode selfNode = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("topology")) {
- selfNode = rootNode;
- }
-
- // Check whether the data model tree returned is of type module.
- assertThat((selfNode instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("topology"));
-
- ListIterator<YangLeaf> leafIterator;
- YangLeaf leafInfo;
-
- YangAugment augment = (YangAugment) yangNode.getChild().getNextSibling();
-
- YangList list = (YangList) augment.getChild().getChild().getChild().getChild().getChild();
-
- leafIterator = list.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
-
- // Check whether the information in the leaf is correct.
- assertThat(leafInfo.getName(), is("src-tp-ref"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
- YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
-
- // Check whether leafref type got resolved.
- assertThat(leafref.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
-
- // Check the effective type for the leaf.
- assertThat(leafref.getEffectiveDataType().getDataType(),
- is(YangDataTypes.UINT8));
- }
-
- /**
- * Checks self resolution when leafref under grouping's uses.
- */
- @Test
- public void processSelfResolutionWhenLeafrefUnderGroupingUses()
- throws IOException, ParserException {
-
- String searchDir = "src/test/resources/leafreflinker/intrafile/leafrefinusesundergrouping";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- YangNode selfNode = null;
- YangNode refNode = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("ietf-network")) {
- selfNode = rootNode;
- refNode = yangNodeIterator.next();
- } else {
- refNode = rootNode;
- selfNode = yangNodeIterator.next();
- }
-
- // Check whether the data model tree returned is of type module.
- assertThat(selfNode instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("ietf-network"));
-
- // Check whether the module name is set correctly.
- YangModule yangNode1 = (YangModule) refNode;
- assertThat(yangNode1.getName(), is("network"));
-
- YangContainer yangContainer = (YangContainer) yangNode.getChild().getNextSibling().getNextSibling();
- assertThat(yangContainer.getName(), is("fine"));
-
- YangContainer yangContainer1 = (YangContainer) yangContainer.getChild().getNextSibling();
- assertThat(yangContainer1.getName(), is("hi"));
-
- ListIterator<YangLeaf> leafIterator;
- YangLeaf leafInfo;
-
- leafIterator = yangContainer1.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
-
- // Check whether the information in the leaf is correct.
- assertThat(leafInfo.getName(), is("network-id-ref"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
- YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
-
- // Check whether leafref type got resolved.
- assertThat(leafref.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
-
- // Check the effective type for the leaf.
- assertThat(leafref.getEffectiveDataType().getDataType(),
- is(YangDataTypes.DERIVED));
- }
-
- /**
- * Checks self resolution when leafref under typedef refers to the node where it is used.
- */
- @Test
- public void processSelfResolutionWhenLeafrefInTypedefIsUsedInSameReferredNode()
- throws IOException, ParserException {
-
- String searchDir = "src/test/resources/leafreflinker/intrafile/leafrefintypedefwithsamereferpath";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- YangNode selfNode = null;
-
- // Create YANG node set
- yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
-
- // Add references to import list.
- yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- updateFilePriority(utilManager.getYangNodeSet());
-
- // Carry out inter-file linking.
- yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
-
- YangNode rootNode = yangNodeIterator.next();
-
- if (rootNode.getName().equals("typedef")) {
- selfNode = rootNode;
- }
-
- // Check whether the data model tree returned is of type module.
- assertThat((selfNode instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) selfNode;
- assertThat(yangNode.getName(), is("typedef"));
-
- ListIterator<YangLeaf> leafIterator;
- YangLeaf leafInfo;
-
- YangContainer yangContainer = (YangContainer) yangNode.getChild().getNextSibling();
-
- leafIterator = yangContainer.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
-
- // Check whether the information in the leaf is correct.
- assertThat(leafInfo.getName(), is("reference"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
- YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
-
- // Check whether leafref type got resolved.
- assertThat(leafref.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
-
- // Check the effective type for the leaf.
- assertThat(leafref.getEffectiveDataType().getDataType(),
- is(YangDataTypes.UINT8));
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/IntraFileTypeLinkingTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/IntraFileTypeLinkingTest.java
deleted file mode 100644
index 06111f8..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/IntraFileTypeLinkingTest.java
+++ /dev/null
@@ -1,567 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.plugin.manager;
-
-import java.io.IOException;
-import java.util.ListIterator;
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.YangDerivedInfo;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangTypeDef;
-import org.onosproject.yangutils.linker.exceptions.LinkerException;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import static org.hamcrest.CoreMatchers.nullValue;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-import static org.onosproject.yangutils.datamodel.YangNodeType.MODULE_NODE;
-import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.INTRA_FILE_RESOLVED;
-import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.RESOLVED;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BINARY;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.INT32;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.STRING;
-
-/**
- * Test cases for testing "type" intra file linking.
- */
-public class IntraFileTypeLinkingTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks self resolution when typedef and leaf using type are siblings.
- */
- @Test
- public void processSelfResolutionWhenTypeAndTypedefAtRootLevel()
- throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/SelfResolutionWhenTypeAndTypedefAtRootLevel.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat(node instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- 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("hello"));
- assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
-
- assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
- is((YangTypeDef) node.getChild()));
-
- assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
-
- YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- // Check for the effective built-in type.
- assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
-
- // Check for the restriction.
- assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
- assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
- }
-
- /**
- * Checks self resolution when typedef and leaf using type are at different
- * level where typedef is at the root.
- */
- @Test
- public void processSelfFileLinkingTypedefAtRootTypeTwoLevelInHierarchy()
- throws IOException, ParserException {
-
- YangNode node =
- manager.getDataModel("src/test/resources/SelfFileLinkingTypedefAtRootTypeTwoLevelInHierarchy.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- YangContainer yangContainer = (YangContainer) node.getChild().getNextSibling();
-
- YangList yangList = (YangList) yangContainer.getChild();
-
- ListIterator<YangLeaf> leafIterator = yangList.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
- assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
-
- assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
- is((YangTypeDef) node.getChild()));
-
- assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
-
- YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- // Check for the effective built-in type.
- assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
-
- // Check for the restriction.
- assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
- assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
- }
-
- /**
- * Checks self resolution when typedef and leaf using type are at different
- * level where typedef is at the root and defined after parent holder
- * of type.
- */
- @Test
- public void processSelfFileLinkingTypedefAtRootIsAfterContainerHavingType()
- throws IOException, ParserException {
-
- YangNode node =
- manager.getDataModel("src/test/resources/SelfFileLinkingTypedefAtRootIsAfterContainerHavingType.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- YangContainer yangContainer = (YangContainer) node.getChild();
-
- YangList yangList = (YangList) yangContainer.getChild();
-
- ListIterator<YangLeaf> leafIterator = yangList.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
- assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
-
- assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
- is((YangTypeDef) node.getChild().getNextSibling()));
-
- assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
-
- YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- // Check for the effective built-in type.
- assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
-
- // Check for the restriction.
- assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
- assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
- }
-
- /**
- * Checks self resolution when typedef and leaf using type are at different
- * level where typedef is at the level of root+1 and defined after parent
- * holder of type.
- */
- @Test
- public void processSelfFileLinkingTypedefAtMiddleLevelAfterParentHolder()
- throws IOException, ParserException {
-
- YangNode node =
- manager.getDataModel("src/test/resources/SelfFileLinkingTypedefAtMiddleLevelAfterParentHolder.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- YangContainer yangContainer = (YangContainer) node.getChild();
-
- YangList yangList = (YangList) yangContainer.getChild();
-
- ListIterator<YangLeaf> leafIterator = yangList.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
- assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
-
- assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
- is((YangTypeDef) yangContainer.getChild().getNextSibling()));
-
- assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
-
- YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- // Check for the effective built-in type.
- assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
-
- // Check for the restriction.
- assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
- assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
- }
-
- /**
- * Checks self resolution when typedef hierarchical references are present.
- */
- @Test
- public void processSelfFileLinkingWithTypdefHierarchicalReference()
- throws IOException, ParserException {
-
- YangNode node =
- manager.getDataModel("src/test/resources/SelfFileLinkingWithTypdefHierarchicalReference.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- YangContainer yangContainer = (YangContainer) node.getChild().getNextSibling();
-
- YangList yangList = (YangList) yangContainer.getChild();
-
- ListIterator<YangLeaf> leafIterator = yangList.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("FirstClass"));
- assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
-
- assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
- is((YangTypeDef) yangList.getChild()));
- assertThat(leafInfo.getDataType().getResolvableStatus(),
- is(RESOLVED));
-
- YangTypeDef typeDef1 = (YangTypeDef) yangList.getChild();
-
- assertThat(((YangDerivedInfo<?>) typeDef1.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(),
- is((YangTypeDef) yangContainer.getChild().getNextSibling()));
- assertThat(typeDef1.getTypeDefBaseType().getResolvableStatus(),
- is(RESOLVED));
-
- YangTypeDef typeDef2 = (YangTypeDef) yangContainer.getChild().getNextSibling();
-
- assertThat(((YangDerivedInfo<?>) typeDef2.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(),
- is((YangTypeDef) node.getChild()));
- assertThat(typeDef2.getTypeDefBaseType().getResolvableStatus(),
- is(RESOLVED));
-
- YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- // Check for the effective built-in type.
- assertThat(derivedInfo.getEffectiveBuiltInType(), is(INT32));
-
- // Check for the restriction.
- assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
- assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
- }
-
- /**
- * Checks self resolution when typedef hierarchical references are present
- * with last type is unresolved.
- */
- @Test
- public void processSelfFileLinkingWithTypdefHierarchicalRefUnresolved()
- throws IOException, ParserException {
-
- YangNode node =
- manager.getDataModel("src/test/resources/SelfFileLinkingWithTypdefHierarchicalRefUnresolved.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- YangContainer yangContainer = (YangContainer) node.getChild().getNextSibling();
-
- YangList yangList = (YangList) yangContainer.getChild();
-
- ListIterator<YangLeaf> leafIterator = yangList.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("FirstClass"));
- assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
-
- assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
- is((YangTypeDef) yangList.getChild()));
- assertThat(leafInfo.getDataType().getResolvableStatus(),
- is(INTRA_FILE_RESOLVED));
-
- YangTypeDef typeDef1 = (YangTypeDef) yangList.getChild();
-
- assertThat(((YangDerivedInfo<?>) typeDef1.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(),
- is((YangTypeDef) yangContainer.getChild().getNextSibling()));
- assertThat(typeDef1.getTypeDefBaseType().getResolvableStatus(),
- is(INTRA_FILE_RESOLVED));
-
- YangTypeDef typeDef2 = (YangTypeDef) yangContainer.getChild().getNextSibling();
-
- assertThat(((YangDerivedInfo<?>) typeDef2.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(),
- is((YangTypeDef) node.getChild()));
- assertThat(typeDef2.getTypeDefBaseType().getResolvableStatus(),
- is(INTRA_FILE_RESOLVED));
-
- YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- // Check for the effective built-in type.
- assertThat(derivedInfo.getEffectiveBuiltInType(), is(nullValue()));
-
- // Check for the restriction.
- assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
- assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
- }
-
- /**
- * Checks self resolution when type uses prefix of self module.
- */
- @Test
- public void processSelfFileLinkingWithTypeWithSelfModulePrefix()
- throws IOException, ParserException {
-
- YangNode node =
- manager.getDataModel("src/test/resources/SelfFileLinkingWithTypeWithSelfModulePrefix.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- YangContainer yangContainer = (YangContainer) node.getChild().getNextSibling();
-
- YangList yangList = (YangList) yangContainer.getChild();
-
- ListIterator<YangLeaf> leafIterator = yangList.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("FirstClass"));
- assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
-
- assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
- is((YangTypeDef) yangList.getChild()));
- assertThat(leafInfo.getDataType().getResolvableStatus(),
- is(RESOLVED));
-
- YangTypeDef typeDef1 = (YangTypeDef) yangList.getChild();
-
- assertThat(((YangDerivedInfo<?>) typeDef1.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(),
- is((YangTypeDef) yangContainer.getChild().getNextSibling()));
- assertThat(typeDef1.getTypeDefBaseType().getResolvableStatus(),
- is(RESOLVED));
-
- YangTypeDef typeDef2 = (YangTypeDef) yangContainer.getChild().getNextSibling();
-
- assertThat(((YangDerivedInfo<?>) typeDef2.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(),
- is((YangTypeDef) node.getChild()));
- assertThat(typeDef2.getTypeDefBaseType().getResolvableStatus(),
- is(RESOLVED));
-
- YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- // Check for the effective built-in type.
- assertThat(derivedInfo.getEffectiveBuiltInType(), is(INT32));
-
- // Check for the restriction.
- assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
- assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
- }
-
- /**
- * Checks self resolution when some type uses prefix of self module
- * some uses external prefix.
- */
- @Test
- public void processSelfFileLinkingWithTypeWithSelfAndExternalPrefixMix()
- throws IOException, ParserException {
-
- YangNode node =
- manager.getDataModel("src/test/resources/SelfFileLinkingWithTypeWithSelfAndExternalPrefixMix.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- YangContainer yangContainer = (YangContainer) node.getChild().getNextSibling();
-
- YangList yangList = (YangList) yangContainer.getChild();
-
- ListIterator<YangLeaf> leafIterator = yangList.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("FirstClass"));
- assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
-
- assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
- is((YangTypeDef) yangList.getChild()));
- assertThat(leafInfo.getDataType().getResolvableStatus(),
- is(INTRA_FILE_RESOLVED));
-
- YangTypeDef typeDef1 = (YangTypeDef) yangList.getChild();
-
- YangTypeDef typeDef2 = (YangTypeDef) yangContainer.getChild().getNextSibling();
-
- assertThat(((YangDerivedInfo<?>) typeDef2.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(),
- is((YangTypeDef) node.getChild()));
- assertThat(typeDef2.getTypeDefBaseType().getResolvableStatus(),
- is(RESOLVED));
-
- YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- // Check for the effective built-in type.
- assertThat(derivedInfo.getEffectiveBuiltInType(), is(nullValue()));
-
- // Check for the restriction.
- assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
- assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
- }
-
- /**
- * Check self resolution when type referred typedef is not available in
- * file, it should not result in exception.
- */
- @Test
- public void processSelfResolutionWhenTypeReferredTypedefNotDefined()
- throws IOException, LinkerException {
-
- YangNode node =
- manager.getDataModel("src/test/resources/SelfResolutionWhenTypeReferredTypedefNotDefined.yang");
- }
-
- /**
- * Checks self resolution when typedef and leaf using type are at different
- * level where typedef is is not an ancestor of type, it should not result
- * in exception.
- */
- @Test
- public void processSelfFileLinkingTypedefNotFound()
- throws IOException, LinkerException {
-
- YangNode node = manager.getDataModel("src/test/resources/SelfFileLinkingTypedefNotFound.yang");
- }
-
- /**
- * Checks hierarchical self resolution with self resolution failure scenario.
- * It should not result in exception.
- */
- @Test
- public void processSelfFileLinkingWithHierarchicalTypeFailureScenario()
- throws IOException, LinkerException {
-
- YangNode node =
- manager.getDataModel("src/test/resources/SelfFileLinkingWithHierarchicalTypeFailureScenario.yang");
- }
-
- /**
- * Checks self resolution when typedef and leaf using type are siblings for binary type.
- */
- @Test
- public void processSelfResolutionWhenTypeAndTypedefAtRootLevelForBinary()
- throws IOException, ParserException {
-
- YangNode node
- = manager.getDataModel("src/test/resources/SelfResolutionWhenTypeAndTypedefAtRootLevelForBinary.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat(node instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("ospf"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- assertThat(leafInfo.getName(), is("typedef14"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("type14"));
- assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
-
- assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
- is((YangTypeDef) node.getChild()));
-
- assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
-
- YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- // Check for the effective built-in type.
- assertThat(derivedInfo.getEffectiveBuiltInType(), is(BINARY));
-
- // Check for the restriction.
- assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
- assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/IntraFileUsesLinkingTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/IntraFileUsesLinkingTest.java
deleted file mode 100644
index 2115176..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/IntraFileUsesLinkingTest.java
+++ /dev/null
@@ -1,652 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.plugin.manager;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.YangGrouping;
-import org.onosproject.yangutils.datamodel.YangInput;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangNodeType;
-import org.onosproject.yangutils.datamodel.YangTypeDef;
-import org.onosproject.yangutils.datamodel.YangUses;
-import org.onosproject.yangutils.datamodel.utils.ResolvableStatus;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.linker.exceptions.LinkerException;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import java.io.IOException;
-import java.util.ListIterator;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-
-/**
- * Test cases for testing uses intra file linking.
- */
-public class IntraFileUsesLinkingTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks self resolution when grouping and uses are siblings.
- * Grouping followed by uses.
- */
- @Test
- public void processSelfResolutionWhenUsesAndGroupingAtRootLevel()
- throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/SelfResolutionWhenUsesAndGroupingAtRootLevel.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafIterator.next();
-
- // Check whether the information in the leaf is correct under module.
- assertThat(leafInfo.getName(), is("hello"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
-
- // Check whether grouping is the sibling of module's child.
- assertThat((yangNode.getChild().getNextSibling() instanceof YangGrouping), is(true));
-
- YangGrouping grouping = (YangGrouping) yangNode.getChild().getNextSibling();
- leafIterator = grouping.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
-
- // Check whether the information in the leaf is correct under grouping.
- assertThat(leafInfo.getName(), is("hello"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
-
- // Check whether uses is module's child.
- assertThat((yangNode.getChild() instanceof YangUses), is(true));
- YangUses uses = (YangUses) yangNode.getChild();
-
- // Check whether uses get resolved
- assertThat(uses.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
- }
-
- /**
- * Checks self resolution when grouping and uses are siblings.
- * Grouping has a child node.
- */
- @Test
- public void processSelfResolutionWhenUsesAndGroupingAtRootLevelGroupingWithChild()
- throws IOException, ParserException {
-
- YangNode node = manager.getDataModel(
- "src/test/resources/SelfResolutionWhenUsesAndGroupingAtRootLevelGroupingWithChild.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator;
- YangLeaf leafInfo;
-
- ListIterator<YangLeaf> leafIterator1 = yangNode.getListOfLeaf().listIterator();
- YangLeaf leafInfo1 = leafIterator1.next();
-
- // Check whether the information in the leaf is correct under module.
- assertThat(leafInfo1.getName(), is("treat"));
- assertThat(leafInfo1.getDataType().getDataTypeName(), is("string"));
- assertThat(leafInfo1.getDataType().getDataType(), is(YangDataTypes.STRING));
-
- YangContainer container = (YangContainer) yangNode.getChild().getNextSibling().getNextSibling();
-
- // Check whether the container name is set correctly which is under module.
- assertThat(container.getName(), is("test"));
-
- leafIterator = container.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
-
- // Check whether the information in the leaf is correct under container which is under module.
- assertThat(leafInfo.getName(), is("leaf2"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
-
- // Check whether grouping is the sibling of module's child.
- assertThat((yangNode.getChild().getNextSibling() instanceof YangGrouping), is(true));
-
- YangGrouping grouping = (YangGrouping) yangNode.getChild().getNextSibling();
- leafIterator = grouping.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
-
- // Check whether the information in the leaf is correct under grouping.
- assertThat(leafInfo.getName(), is("treat"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
-
- // Check whether container is the child of grouping.
- assertThat((grouping.getChild() instanceof YangContainer), is(true));
- container = (YangContainer) grouping.getChild();
-
- // Check whether the container name is set correctly which is under grouping.
- assertThat(container.getName(), is("test"));
-
- leafIterator = container.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
-
- // Check whether the information in the leaf is correct under container which is under grouping.
- assertThat(leafInfo.getName(), is("leaf2"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
-
- // Check whether uses is module's child.
- assertThat((yangNode.getChild() instanceof YangUses), is(true));
- YangUses uses = (YangUses) yangNode.getChild();
-
- // Check whether uses get resolved.
- assertThat(uses.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
-
- }
-
- /**
- * Checks self resolution when grouping in rpc and uses in output of the same rpc.
- * Uses is followed by grouping.
- */
- @Test
- public void processSelfResolutionGroupingInRpcAndUsesInOutput()
- throws IOException, ParserException {
-
- YangNode node = manager
- .getDataModel("src/test/resources/SelfResolutionGroupingInRpcAndUsesInOutput.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("rock"));
-
- ListIterator<YangLeaf> leafIterator;
- YangLeaf leafInfo;
-
- // Check whether grouping is the child of rpc.
- assertThat((yangNode.getChild().getChild() instanceof YangGrouping), is(true));
- YangGrouping grouping = (YangGrouping) yangNode.getChild().getChild();
-
- // Check whether the grouping name is set correctly.
- assertThat(grouping.getName(), is("hello"));
-
- // Check whether list is the child of grouping.
- assertThat((grouping.getChild() instanceof YangList), is(true));
- YangList yangListNode = (YangList) grouping.getChild();
-
- // Check whether the list name is set correctly.
- assertThat(yangListNode.getName(), is("valid"));
-
- leafIterator = yangListNode.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
-
- // Check whether the information in the leaf is correct under list which is under grouping.
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
- assertThat(leafInfo.getUnits(), is("\"seconds\""));
- assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
-
- // Check whether uses is input's child.
- assertThat((yangNode.getChild().getChild().getNextSibling().getChild() instanceof YangUses), is(true));
- YangUses uses = (YangUses) yangNode.getChild().getChild().getNextSibling().getChild();
-
- // Check whether uses get resolved.
- assertThat(uses.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
-
- YangInput inputNode = ((YangInput) yangNode.getChild().getChild().getNextSibling());
- assertThat((inputNode.getChild() instanceof YangUses), is(true));
-
- YangList yangList = ((YangList) inputNode.getChild().getNextSibling());
- assertThat(yangList.getName(), is("valid"));
-
- leafIterator = yangList.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
-
- // Check whether the information in the leaf is correct under list which is deep copied.
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
- assertThat(leafInfo.getUnits(), is("\"seconds\""));
- assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
- }
-
- /**
- * Checks the failure scenario when uses is referring to its own grouping directly.
- */
- @Test
- public void processSelfResolutionGroupingReferencingItselfFailureScenerio()
- throws IOException {
-
- thrown.expect(LinkerException.class);
- thrown.expectMessage(
- "YANG file error: Duplicate input identifier detected, same as leaf \"zip-code in 7 at 13 in " +
- "src/test/resources/SelfResolutionGroupingReferencingItselfFailureScenerio.yang\"");
- YangNode node = manager
- .getDataModel("src/test/resources/SelfResolutionGroupingReferencingItselfFailureScenerio.yang");
-
- }
-
- /**
- * Checks the when multiple uses are present and are referred to the grouping at different levels.
- */
- @Test
- public void processSelfResolutionGroupingWithMultipleUses()
- throws IOException, ParserException {
-
- YangNode node = manager
- .getDataModel("src/test/resources/SelfResolutionGroupingWithMultipleUses.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- ListIterator<YangLeaf> leafIterator;
- YangLeaf leafInfo;
-
- // Check whether grouping is the child of container.
- assertThat((yangNode.getChild().getChild() instanceof YangGrouping), is(true));
- YangGrouping grouping = (YangGrouping) yangNode.getChild().getChild();
-
- // Check whether the grouping name is set correctly.
- assertThat(grouping.getName(), is("endpoint"));
-
- // Check whether uses is endpoint-grouping's child.
- assertThat((grouping.getChild() instanceof YangUses), is(true));
- YangUses firstUses = (YangUses) grouping.getChild();
-
- // Check whether uses get resolved.
- assertThat(firstUses.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
-
- // Validate first uses child is cloned properly
- assertThat((firstUses.getNextSibling().getNextSibling()
- .getNextSibling().getNextSibling() instanceof YangList), is(true));
- YangList firstUsesChild = ((YangList) firstUses.getNextSibling().getNextSibling().getNextSibling()
- .getNextSibling());
- assertThat(firstUsesChild.getName(), is("valid"));
-
- leafIterator = firstUsesChild.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
-
- // Check whether the information in the leaf is correct under list which has been deep copied from grouping.
- assertThat(leafInfo.getName(), is("invalid-interval"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("uint16"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.UINT16));
- assertThat(leafInfo.getUnits(), is("\"seconds\""));
- assertThat(leafInfo.getReference(), is("\"RFC 6020\""));
-
- //validate uses second
- assertThat((firstUses.getNextSibling() instanceof YangContainer), is(true));
- YangContainer container = (YangContainer) firstUses.getNextSibling();
- assertThat(container.getName(), is("design"));
-
- assertThat((container.getChild() instanceof YangUses), is(true));
- assertThat((container.getListOfLeaf().iterator().next().getName()), is("ink"));
-
- //validate uses third
- assertThat((container.getChild().getNextSibling() instanceof YangContainer), is(true));
- YangContainer container2 = ((YangContainer) container.getChild().getNextSibling());
- assertThat(container2.getName(), is("correct"));
- assertThat((container2.getChild() instanceof YangUses), is(true));
- assertThat((container2.getChild().getNextSibling() instanceof YangContainer), is(true));
- YangContainer thirdUsesChild = ((YangContainer) container2.getChild().getNextSibling());
- assertThat(thirdUsesChild.getListOfLeaf().iterator().next().getName(), is("zip-code"));
-
- //validate fourth uses
- assertThat((firstUses.getNextSibling().getNextSibling() instanceof YangUses), is(true));
- YangUses fourthUses = ((YangUses) firstUses.getNextSibling().getNextSibling());
- assertThat((fourthUses.getNextSibling().getNextSibling().getNextSibling() instanceof YangTypeDef),
- is(true));
- assertThat(fourthUses.getNextSibling().getNextSibling().getNextSibling().getName(), is("my-type"));
-
- //validate fifth uses
- assertThat((firstUses.getNextSibling().getNextSibling().getNextSibling() instanceof YangUses),
- is(true));
-
- //validate end point uses
- assertThat(grouping.getNextSibling() instanceof YangUses, is(true));
- assertThat(grouping.getNextSibling().getNextSibling().getNextSibling().getNextSibling()
- .getNextSibling().getNextSibling().getNextSibling().getNextSibling() instanceof YangContainer,
- is(true));
- container = (YangContainer) grouping.getNextSibling().getNextSibling().getNextSibling().getNextSibling()
- .getNextSibling().getNextSibling().getNextSibling().getNextSibling();
- assertThat(container.getName(), is("design"));
- container2 = (YangContainer) container.getChild().getNextSibling();
- assertThat(container2.getName(), is("correct"));
- assertThat(container2.getChild().getNextSibling().getName(), is("value"));
- }
-
- /**
- * Checks the failure scenario when uses is present under the same node many times.
- */
- @Test
- public void processSelfResolutionGroupingHavingSameUsesManyTimes()
- throws IOException, ParserException {
-
- thrown.expect(ParserException.class);
- thrown.expectMessage(
- "YANG File Error: Identifier collision detected in uses as " +
- "\"failure in 10 at 13 in src/test/resources/SelfResolutionGroupingHavingSameUsesManyTimes.yang");
- YangNode node = manager
- .getDataModel("src/test/resources/SelfResolutionGroupingHavingSameUsesManyTimes.yang");
- }
-
- /**
- * Checks the rpc having both typedef and grouping.
- * It also checks that the grouping under different nodes will not give any problem in resolving uses.
- */
- @Test
- public void processSelfResolutionRpcWithOneTypedefAndTwoGroupingUnderDifferentNode()
- throws IOException, ParserException {
-
- YangNode node = manager
- .getDataModel(
- "src/test/resources/SelfResolutionRpcWithOneTypedefAndTwoGroupingUnderDifferentNode.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("rock"));
-
- ListIterator<YangLeaf> leafIterator;
- YangLeaf leafInfo;
-
- // Check whether grouping is the child of input.
- assertThat((yangNode.getChild().getChild().getChild() instanceof YangGrouping), is(true));
- YangGrouping groupingUnderInput = (YangGrouping) yangNode.getChild().getChild().getChild();
-
- // Check whether the grouping name is set correctly.
- assertThat(groupingUnderInput.getName(), is("creative"));
-
- leafIterator = groupingUnderInput.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
-
- // Check whether the information in the leaf is correct under grouping.
- assertThat(leafInfo.getName(), is("carry"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
-
- // Check whether grouping is the child of output.
- assertThat((yangNode.getChild().getChild().getNextSibling().getChild() instanceof YangGrouping), is(true));
- YangGrouping grouping = (YangGrouping) yangNode.getChild().getChild().getNextSibling().getChild();
- assertThat(grouping.getName(), is("creative"));
-
- // Check whether typedef is the sibling of grouping.
- assertThat((grouping.getNextSibling() instanceof YangTypeDef), is(true));
-
- YangTypeDef typedef = (YangTypeDef) grouping.getNextSibling();
- assertThat(typedef.getName(), is("my-type"));
-
- // Check whether uses is the sibling of typedef.
- assertThat((typedef.getNextSibling() instanceof YangUses), is(true));
-
- // Check whether uses get resolved.
- YangUses uses = (YangUses) typedef.getNextSibling();
- assertThat(uses.getName(), is("creative"));
- assertThat(uses.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
- }
-
- /**
- * Checks the failure scenario when uses is cannot resolve its grouping.
- * It shouldnt result in exception
- */
- @Test
- public void processSelfResolutionNestedGroupingWithUnresolvedUses()
- throws IOException, LinkerException {
-
- YangNode node = manager
- .getDataModel("src/test/resources/SelfResolutionNestedGroupingWithUnresolvedUses.yang");
- }
-
- /**
- * Checks self resolution when typedef hierarchical references are present
- * with last type is unresolved.
- */
- @Test
- public void processSelfFileLinkingWithGroupingHierarchicalRefUnresolved()
- throws IOException, ParserException {
-
- YangNode node = manager
- .getDataModel("src/test/resources/SelfFileLinkingWithGroupingHierarchicalRefUnresolved.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether container is the sibling of grouping.
- assertThat((yangNode.getChild().getNextSibling() instanceof YangContainer), is(true));
- YangContainer containerWithUses = (YangContainer) yangNode.getChild().getNextSibling();
- assertThat(containerWithUses.getName(), is("test"));
-
- // Check whether uses is the child of container.
- assertThat((containerWithUses.getChild() instanceof YangUses), is(true));
- YangUses uses = (YangUses) containerWithUses.getChild();
- assertThat(uses.getName(), is("create"));
-
- // Check whether uses is getting resolved.
- assertThat(uses.getResolvableStatus(),
- is(ResolvableStatus.INTRA_FILE_RESOLVED));
-
- // Check whether grouping is the child of module.
- assertThat((yangNode.getChild() instanceof YangGrouping), is(true));
- YangGrouping groupingWithUses = (YangGrouping) yangNode.getChild();
- assertThat(groupingWithUses.getName(), is("create"));
-
- // Check whether uses with prefix from from other file, is the child of grouping.
- assertThat((groupingWithUses.getChild() instanceof YangUses), is(true));
- YangUses uses1 = (YangUses) groupingWithUses.getChild();
- assertThat(uses1.getName(), is("valid"));
-
- // Check whether this uses is getting intra-file-resolved.
- assertThat(uses1.getResolvableStatus(),
- is(ResolvableStatus.INTRA_FILE_RESOLVED));
- }
-
- /**
- * Checks self resolution when uses has prefix of self module.
- */
- @Test
- public void processSelfFileLinkingWithGroupingWithSelfModulePrefix()
- throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/SelfFileLinkingWithGroupingWithSelfModulePrefix.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether container is the sibling of grouping.
- YangContainer yangContainer = (YangContainer) node.getChild().getNextSibling();
-
- // Check whether list is the child of container.
- YangList yangList = (YangList) yangContainer.getChild();
-
- // Check whether uses is the child of list.
- assertThat((yangList.getChild() instanceof YangUses), is(true));
- YangUses yangUses1 = (YangUses) yangList.getChild();
- assertThat(yangUses1.getName(), is("FirstClass"));
-
- // Check whether uses is getting resolved.
- assertThat(yangUses1.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
-
- // Check whether grouping is the sibling of uses.
- YangGrouping yangGrouping1 = (YangGrouping) yangUses1.getNextSibling();
- assertThat(yangGrouping1.getName(), is("FirstClass"));
-
- // Check whether uses is the child of grouping.
- YangUses yangUses2 = (YangUses) yangGrouping1.getChild();
- assertThat(yangUses2.getName(), is("PassingClass"));
-
- // Check the uses gets resolved.
- assertThat(yangUses2.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
-
- // Check whether grouping is the sibling of list.
- YangGrouping yangGrouping2 = (YangGrouping) yangList.getNextSibling();
- assertThat(yangGrouping2.getName(), is("PassingClass"));
-
- // Check uses is the child of that grouping which has prefix of the same module.
- YangUses yangUses3 = (YangUses) yangGrouping2.getChild();
- assertThat(yangUses3.getName(), is("Percentage"));
-
- // Check uses is getting resolved.
- assertThat(yangUses3.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
-
- // Check grouping is the child of module.
- YangGrouping yangGrouping3 = (YangGrouping) node.getChild();
-
- ListIterator<YangLeaf> leafIterator;
- YangLeaf leafInfo;
- leafIterator = yangGrouping3.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
-
- // Check whether the information in the leaf is correct under grouping.
- assertThat(leafInfo.getName(), is("hello"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
-
- }
-
- /**
- * Checks self resolution when some type uses prefix of self module
- * some uses external prefix.
- */
- @Test
- public void processSelfFileLinkingWithGroupingWithSelfAndExternalPrefixMix()
- throws IOException, ParserException {
-
- YangNode node = manager
- .getDataModel("src/test/resources/SelfFileLinkingWithGroupingWithSelfAndExternalPrefixMix.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat((node instanceof YangModule), is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // Check whether container is the sibling of grouping.
- YangContainer yangContainer = (YangContainer) node.getChild().getNextSibling();
-
- // Check whether list is the child of container.
- YangList yangList = (YangList) yangContainer.getChild();
-
- // Check whether uses is the child of list.
- assertThat((yangList.getChild() instanceof YangUses), is(true));
- YangUses yangUses1 = (YangUses) yangList.getChild();
- assertThat(yangUses1.getName(), is("FirstClass"));
-
- // Check whether uses is getting resolved.
- assertThat(yangUses1.getResolvableStatus(),
- is(ResolvableStatus.INTRA_FILE_RESOLVED));
-
- // Check whether grouping is the sibling of uses.
- YangGrouping yangGrouping1 = (YangGrouping) yangUses1.getNextSibling();
- assertThat(yangGrouping1.getName(), is("FirstClass"));
-
- // Check whether uses is the child of grouping which has prefix from other module.
- YangUses yangUses2 = (YangUses) yangGrouping1.getChild();
- assertThat(yangUses2.getName(), is("PassingClass"));
-
- // Check whether uses gets intra-file-resolved.
- assertThat(yangUses2.getResolvableStatus(),
- is(ResolvableStatus.INTRA_FILE_RESOLVED));
-
- // Check whether grouping is the sibling of list.
- YangGrouping yangGrouping2 = (YangGrouping) yangList.getNextSibling();
- assertThat(yangGrouping2.getName(), is("PassingClass"));
-
- // Check uses is the child of that grouping which has prefix of the same module.
- YangUses yangUses3 = (YangUses) yangGrouping2.getChild();
- assertThat(yangUses3.getName(), is("Percentage"));
-
- // Check uses is getting resolved.
- assertThat(yangUses3.getResolvableStatus(),
- is(ResolvableStatus.RESOLVED));
-
- // Check grouping is the child of module.
- YangGrouping yangGrouping3 = (YangGrouping) node.getChild();
- ListIterator<YangLeaf> leafIterator;
- YangLeaf leafInfo;
- leafIterator = yangGrouping3.getListOfLeaf().listIterator();
- leafInfo = leafIterator.next();
-
- // Check whether the information in the leaf is correct under grouping.
- assertThat(leafInfo.getName(), is("hello"));
- assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
- assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
- }
-
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/NotificationTranslatorTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/NotificationTranslatorTest.java
deleted file mode 100644
index f60676d..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/NotificationTranslatorTest.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.plugin.manager;
-
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-
-import java.io.IOException;
-
-import static org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorUtil.generateJavaCode;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory;
-
-/**
- * Unit tests for union translator.
- */
-public final class NotificationTranslatorTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
- private final static String YANG = "src/test/resources/NotificationTest" +
- ".yang";
- private final static String DIR = "target/notificationTranslator/";
-
- /**
- * Checks union translation should not result in any exception.
- */
- @Test
- public void processNotificationTranslator()
- throws IOException, ParserException {
- deleteDirectory(DIR);
- YangNode node = manager.getDataModel(YANG);
-
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir(DIR);
-
- generateJavaCode(node, yangPluginConfig);
- deleteDirectory(DIR);
- }
-
- // TODO enhance the test cases, after having a framework of translator test.
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/PathPredicateLinkingTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/PathPredicateLinkingTest.java
deleted file mode 100644
index b6f20cd..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/PathPredicateLinkingTest.java
+++ /dev/null
@@ -1,360 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.plugin.manager;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.YangAtomicPath;
-import org.onosproject.yangutils.datamodel.YangAugment;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangLeafRef;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangPathPredicate;
-import org.onosproject.yangutils.linker.exceptions.LinkerException;
-import org.onosproject.yangutils.linker.impl.YangLinkerManager;
-
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.ListIterator;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-import static org.onosproject.yangutils.linker.impl.YangLinkerUtils.updateFilePriority;
-import static org.onosproject.yangutils.utils.io.impl.YangFileScanner.getYangFiles;
-
-/**
- * Test cases for path predicate linking in leaf-ref.
- */
-public class PathPredicateLinkingTest {
-
- private final YangUtilManager utilMgr = new YangUtilManager();
- private final YangLinkerManager linkerMgr = new YangLinkerManager();
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private ListIterator<YangLeaf> leafItr;
- private YangLeaf ifName;
- private YangLeaf address;
- private YangLeaf name;
- private Iterator<YangAtomicPath> pathItr;
- private YangAtomicPath atomicPath;
- private Iterator<YangPathPredicate> predicateItr;
- private YangPathPredicate predicate;
-
- /**
- * Processes simple path predicate which gets linked within the same file
- * using relative path.
- *
- * @throws IOException IO file error
- */
- @Test
- public void processSimplePathPredicate() throws IOException {
-
- String searchDir = "src/test/resources/pathpredicate/simple";
- utilMgr.createYangFileInfoSet(getYangFiles(searchDir));
- utilMgr.parseYangFileInfoSet();
- utilMgr.createYangNodeSet();
- YangNode selfNode;
-
- linkerMgr.createYangNodeSet(utilMgr.getYangNodeSet());
- linkerMgr.addRefToYangFilesImportList(utilMgr.getYangNodeSet());
-
- updateFilePriority(utilMgr.getYangNodeSet());
-
- linkerMgr.processInterFileLinking(utilMgr.getYangNodeSet());
- Iterator<YangNode> nodeItr = utilMgr.getYangNodeSet().iterator();
- selfNode = nodeItr.next();
-
- // Gets the list node.
- YangList yangList = (YangList) selfNode.getChild();
- // Gets the container node.
- YangContainer container = (YangContainer) yangList.getNextSibling();
-
- ListIterator<YangLeaf> leafIterator;
- YangLeaf ifName;
- YangLeaf address;
- YangLeaf name;
- Iterator<YangAtomicPath> pathItr;
- YangAtomicPath atomicPath;
- Iterator<YangPathPredicate> predicateItr;
- YangPathPredicate predicate;
-
- leafIterator = container.getListOfLeaf().listIterator();
- ifName = leafIterator.next();
- address = leafIterator.next();
-
- // Gets the address leaf's leaf-ref type.
- YangLeafRef<?> leafRef2 = (YangLeafRef) address.getDataType()
- .getDataTypeExtendedInfo();
- pathItr = leafRef2.getAtomicPath().listIterator();
- atomicPath = pathItr.next();
-
- // Gets the path-predicate.
- predicateItr = atomicPath.getPathPredicatesList().listIterator();
- predicate = predicateItr.next();
-
- // Gets the left and right axis node in path-predicate.
- YangLeaf yangLeftLeaf = (YangLeaf) predicate.getLeftAxisNode();
- YangLeaf yangRightLeaf = (YangLeaf) predicate.getRightAxisNode();
-
- leafIterator = yangList.getListOfLeaf().listIterator();
- name = leafIterator.next();
-
- // Checks that right and left path-predicates are correct.
- assertThat(yangLeftLeaf, is(name));
- assertThat(yangRightLeaf, is(ifName));
- }
-
- /**
- * Processes simple inter file path predicate which gets linked to another
- * file using absolute path.
- *
- * @throws IOException IO file error
- */
- @Test
- public void processSimpleInterFilePathPredicate() throws IOException {
-
- String searchDir = "src/test/resources/pathpredicate/simpleinterfile";
- utilMgr.createYangFileInfoSet(getYangFiles(searchDir));
- utilMgr.parseYangFileInfoSet();
- utilMgr.createYangNodeSet();
- YangModule selfNode;
-
- linkerMgr.createYangNodeSet(utilMgr.getYangNodeSet());
- linkerMgr.addRefToYangFilesImportList(utilMgr.getYangNodeSet());
-
- updateFilePriority(utilMgr.getYangNodeSet());
-
- linkerMgr.processInterFileLinking(utilMgr.getYangNodeSet());
- Iterator<YangNode> nodeItr = utilMgr.getYangNodeSet().iterator();
-
- YangNode rootNode = nodeItr.next();
- YangModule refNode;
- if (rootNode.getName().equals("ietf-network")) {
- selfNode = (YangModule) rootNode;
- refNode = (YangModule) nodeItr.next();
- } else {
- refNode = (YangModule) rootNode;
- selfNode = (YangModule) nodeItr.next();
- }
-
- // Gets the container node.
- YangContainer container = (YangContainer) selfNode.getChild();
- // Gets the list node.
- YangList yangList = (YangList) refNode.getChild();
-
- ListIterator<YangLeaf> leafItr;
- YangLeaf ifName;
- YangLeaf address;
- YangLeaf name;
- Iterator<YangAtomicPath> pathItr;
- YangAtomicPath atomicPath;
- Iterator<YangPathPredicate> predicateItr;
- YangPathPredicate predicate;
-
- leafItr = container.getListOfLeaf().listIterator();
- ifName = leafItr.next();
- address = leafItr.next();
-
- // Gets the address leaf's leaf-ref type.
- YangLeafRef<?> leafRef2 = (YangLeafRef) address.getDataType()
- .getDataTypeExtendedInfo();
- pathItr = leafRef2.getAtomicPath().listIterator();
- atomicPath = pathItr.next();
-
- // Gets the path-predicate.
- predicateItr = atomicPath.getPathPredicatesList().listIterator();
- predicate = predicateItr.next();
-
- // Gets the left and right axis node in path-predicate.
- YangLeaf yangLeftLeaf = (YangLeaf) predicate.getLeftAxisNode();
- YangLeaf yangRightLeaf = (YangLeaf) predicate.getRightAxisNode();
-
- leafItr = yangList.getListOfLeaf().listIterator();
- name = leafItr.next();
-
- // Checks that right and left path-predicates are correct.
- assertThat(yangLeftLeaf, is(name));
- assertThat(yangRightLeaf, is(ifName));
- }
-
- /**
- * Processes inter file path predicate, where leaf-ref is present under
- * YANG augment.
- *
- * @throws IOException IO file error
- */
- @Test
- public void processInterFilePathPredicateFromAugment() throws IOException {
-
- String searchDir = "src/test/resources/pathpredicate/interfileaugment";
- utilMgr.createYangFileInfoSet(getYangFiles(searchDir));
- utilMgr.parseYangFileInfoSet();
- utilMgr.createYangNodeSet();
- YangModule selfNode;
-
- linkerMgr.createYangNodeSet(utilMgr.getYangNodeSet());
- linkerMgr.addRefToYangFilesImportList(utilMgr.getYangNodeSet());
-
- updateFilePriority(utilMgr.getYangNodeSet());
-
- linkerMgr.processInterFileLinking(utilMgr.getYangNodeSet());
- Iterator<YangNode> nodeItr = utilMgr.getYangNodeSet().iterator();
-
- YangNode rootNode = nodeItr.next();
- YangModule refNode;
- if (rootNode.getName().equals("ietf-network")) {
- selfNode = (YangModule) rootNode;
- refNode = (YangModule) nodeItr.next();
- } else {
- refNode = (YangModule) rootNode;
- selfNode = (YangModule) nodeItr.next();
- }
-
- // Gets the augment node.
- YangList list = (YangList) selfNode.getChild().getChild();
-
- // Gets the augment node.
- YangAugment augment = (YangAugment) refNode.getChild();
-
- ListIterator<YangLeaf> leafItr;
- YangLeaf test;
- YangLeaf networkId;
- YangLeaf networkRef;
- Iterator<YangAtomicPath> pathItr;
- YangAtomicPath atomicPath;
- Iterator<YangPathPredicate> predicateItr;
- YangPathPredicate predicate;
-
- leafItr = augment.getListOfLeaf().listIterator();
- test = leafItr.next();
-
- YangLeafRef<?> leafRef =
- (YangLeafRef) test.getDataType().getDataTypeExtendedInfo();
- pathItr = leafRef.getAtomicPath().listIterator();
- pathItr.next();
- atomicPath = pathItr.next();
-
- // Gets the path-predicate.
- predicateItr = atomicPath.getPathPredicatesList().listIterator();
- predicate = predicateItr.next();
-
- // Gets the left and right axis node in path-predicate.
- YangLeaf yangLeftLeaf = (YangLeaf) predicate.getLeftAxisNode();
- YangLeaf yangRightLeaf = (YangLeaf) predicate.getRightAxisNode();
-
- leafItr = list.getListOfLeaf().listIterator();
- networkId = leafItr.next();
- YangContainer reference = (YangContainer) list.getChild();
- leafItr = reference.getListOfLeaf().listIterator();
- networkRef = leafItr.next();
-
- // Checks that right and left path-predicates are correct.
- assertThat(yangLeftLeaf, is(networkId));
- assertThat(yangRightLeaf, is(networkRef));
- }
-
- /**
- * Processes an invalid scenario where the target leaf/leaf-list in
- * path-predicate is not found.
- *
- * @throws IOException IO file error
- */
- @Test
- public void processInvalidPathLink() throws IOException {
- thrown.expect(LinkerException.class);
- thrown.expectMessage(
- "YANG file error: There is no leaf/leaf-list in YANG node as " +
- "mentioned in the path predicate of the leafref path " +
- "../../interface[ifname = current()/../../ifname]" +
- "/address/ip");
-
- String searchDir = "src/test/resources/pathpredicate/invalidlinking";
- utilMgr.createYangFileInfoSet(getYangFiles(searchDir));
- utilMgr.parseYangFileInfoSet();
- utilMgr.createYangNodeSet();
-
- linkerMgr.createYangNodeSet(utilMgr.getYangNodeSet());
- linkerMgr.addRefToYangFilesImportList(utilMgr.getYangNodeSet());
-
- updateFilePriority(utilMgr.getYangNodeSet());
-
- linkerMgr.processInterFileLinking(utilMgr.getYangNodeSet());
- }
-
- /**
- * Processes an invalid scenario where the right axis node doesn't come
- * under YANG list node.
- *
- * @throws IOException IO file error
- */
- @Test
- public void processInvalidPathLinkForList() throws IOException {
- thrown.expect(LinkerException.class);
- thrown.expectMessage(
- "YANG file error: Path predicates are only applicable for " +
- "YANG list. The leafref path has path predicate for" +
- " non-list node in the path ../../default-address" +
- "[ifname = current()/../ifname]/ifname");
-
- String searchDir = "src/test/resources/pathpredicate/invalidlinking2";
- utilMgr.createYangFileInfoSet(getYangFiles(searchDir));
- utilMgr.parseYangFileInfoSet();
- utilMgr.createYangNodeSet();
- YangNode selfNode;
-
- linkerMgr.createYangNodeSet(utilMgr.getYangNodeSet());
- linkerMgr.addRefToYangFilesImportList(utilMgr.getYangNodeSet());
-
- updateFilePriority(utilMgr.getYangNodeSet());
-
- linkerMgr.processInterFileLinking(utilMgr.getYangNodeSet());
- }
-
- /**
- * Processes an invalid scenario where the node in path predicate is not
- * present in the traversal.
- *
- * @throws IOException IO file error
- */
- @Test
- public void processInvalidPathLinkForInvalidNode()
- throws IOException {
- thrown.expect(LinkerException.class);
- thrown.expectMessage(
- "YANG file error: The path predicate of the leafref has an " +
- "invalid path in ../../interface[name = current()/" +
- "../../address/ifname]/address/ip");
-
- String searchDir = "src/test/resources/pathpredicate/invalidlinking3";
- utilMgr.createYangFileInfoSet(getYangFiles(searchDir));
- utilMgr.parseYangFileInfoSet();
- utilMgr.createYangNodeSet();
-
- linkerMgr.createYangNodeSet(utilMgr.getYangNodeSet());
- linkerMgr.addRefToYangFilesImportList(utilMgr.getYangNodeSet());
-
- updateFilePriority(utilMgr.getYangNodeSet());
-
- linkerMgr.processInterFileLinking(utilMgr.getYangNodeSet());
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/ProcessSubTreeCodeGenTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/ProcessSubTreeCodeGenTest.java
deleted file mode 100644
index d1cfe08..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/ProcessSubTreeCodeGenTest.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.plugin.manager;
-
-import org.apache.maven.plugin.MojoExecutionException;
-import org.junit.Test;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
-
-import java.io.File;
-import java.io.IOException;
-
-import static org.onosproject.yangutils.utils.io.YangPluginConfig.compileCode;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory;
-
-/**
- * Unit test case for process sub tree code generation test.
- */
-public class ProcessSubTreeCodeGenTest {
-
- private final YangUtilManager utilManager = new YangUtilManager();
- private static final String DIR = "target/pstf/";
- private static final String COMP = System.getProperty("user.dir") + File
- .separator + DIR;
-
- /**
- * Checks pst translation should not result in any exception.
- *
- * @throws MojoExecutionException
- */
- @Test
- public void processTranslator() throws IOException, ParserException, MojoExecutionException {
-
- deleteDirectory(DIR);
- String searchDir = "src/test/resources/pstcodegen";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
-
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir(DIR);
- utilManager.translateToJava(yangPluginConfig);
- compileCode(COMP);
- deleteDirectory(DIR);
- }
-
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/RestrictionResolutionTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/RestrictionResolutionTest.java
deleted file mode 100644
index 6b64e5b..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/RestrictionResolutionTest.java
+++ /dev/null
@@ -1,912 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.plugin.manager;
-
-import java.io.IOException;
-import java.math.BigInteger;
-import java.util.ListIterator;
-
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangDerivedInfo;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangPatternRestriction;
-import org.onosproject.yangutils.datamodel.YangRangeInterval;
-import org.onosproject.yangutils.datamodel.YangRangeRestriction;
-import org.onosproject.yangutils.datamodel.YangStringRestriction;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.YangTypeDef;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangInt16;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangInt32;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangUint64;
-import org.onosproject.yangutils.linker.exceptions.LinkerException;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-
-import static org.hamcrest.CoreMatchers.nullValue;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-import static org.hamcrest.core.IsNull.notNullValue;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.INT32;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.STRING;
-import static org.onosproject.yangutils.datamodel.YangNodeType.MODULE_NODE;
-import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.RESOLVED;
-
-/**
- * Test cases for testing restriction resolution.
- */
-public final class RestrictionResolutionTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks length restriction in typedef.
- */
- @Test
- public void processLengthRestrictionInTypedef()
- throws IOException, ParserException, DataModelException {
-
- YangNode node = manager.getDataModel("src/test/resources/LengthRestrictionInTypedef.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat(node instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- 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("hello"));
- assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
-
- assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
- is((YangTypeDef) node.getChild()));
-
- assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
-
- YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- // Check for the effective built-in type.
- assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
-
- // Check for the restriction.
- assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
- assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
-
- // Check for the restriction value.
- YangStringRestriction stringRestriction = (YangStringRestriction) derivedInfo.getResolvedExtendedInfo();
- 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)));
- }
-
- /**
- * Checks length restriction in referred type.
- */
- @Test
- public void processLengthRestrictionInRefType()
- throws IOException, ParserException, DataModelException {
-
- YangNode node = manager.getDataModel("src/test/resources/LengthRestrictionInRefType.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat(node instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- 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("hello"));
- assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
-
- assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
- is((YangTypeDef) node.getChild()));
-
- assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
-
- YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- // Check for the effective built-in type.
- assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
-
- // Check for the restriction.
- assertThat(derivedInfo.getLengthRestrictionString(), is(notNullValue()));
- assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
- assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
-
- // Check for the restriction value.
- YangStringRestriction stringRestriction = (YangStringRestriction) derivedInfo.getResolvedExtendedInfo();
- 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)));
- }
-
- /**
- * Checks length restriction in typedef and in type with stricter value.
- */
- @Test
- public void processLengthRestrictionInTypedefAndTypeValid()
- throws IOException, ParserException, DataModelException {
-
- YangNode node = manager.getDataModel("src/test/resources/LengthRestrictionInTypedefAndTypeValid.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat(node instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- 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("hello"));
- assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
-
- assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
- is((YangTypeDef) node.getChild()));
-
- assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
-
- YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- // Check for the effective built-in type.
- assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
-
- // Check for the restriction.
- assertThat(derivedInfo.getLengthRestrictionString(), is(notNullValue()));
- assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
- assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
-
- // Check for the restriction value.
- YangStringRestriction stringRestriction = (YangStringRestriction) derivedInfo.getResolvedExtendedInfo();
- YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
-
- ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
- .listIterator();
-
- YangRangeInterval rangeInterval1 = lengthListIterator.next();
-
- assertThat(((YangUint64) rangeInterval1.getStartValue()).getValue(), is(BigInteger.valueOf(0)));
- assertThat(((YangUint64) rangeInterval1.getEndValue()).getValue(), is(BigInteger.valueOf(20)));
-
- YangRangeInterval rangeInterval2 = lengthListIterator.next();
-
- assertThat(((YangUint64) rangeInterval2.getStartValue()).getValue(), is(BigInteger.valueOf(201)));
- assertThat(((YangUint64) rangeInterval2.getEndValue()).getValue(), is(BigInteger.valueOf(300)));
- }
-
- /**
- * Checks length restriction in typedef and in type with not stricter value.
- */
- @Test(expected = LinkerException.class)
- public void processLengthRestrictionInTypedefAndTypeInValid()
- throws IOException, DataModelException {
- YangNode node = manager.getDataModel("src/test/resources/LengthRestrictionInTypedefAndTypeInValid.yang");
- }
-
- /**
- * Checks range restriction in typedef.
- */
- @Test
- public void processRangeRestrictionInTypedef()
- throws IOException, ParserException, DataModelException {
-
- YangNode node = manager.getDataModel("src/test/resources/RangeRestrictionInTypedef.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat(node instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- 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("hello"));
- assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
-
- assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
- is((YangTypeDef) node.getChild()));
-
- assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
-
- YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- // Check for the effective built-in type.
- assertThat(derivedInfo.getEffectiveBuiltInType(), is(INT32));
-
- // Check for the restriction.
- assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
- assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
-
- // Check for the restriction value.
- YangRangeRestriction rangeRestriction = (YangRangeRestriction) derivedInfo.getResolvedExtendedInfo();
-
- ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
- .listIterator();
-
- YangRangeInterval rangeInterval1 = rangeListIterator.next();
-
- assertThat(((YangInt32) rangeInterval1.getStartValue()).getValue(), is(1));
- assertThat(((YangInt32) rangeInterval1.getEndValue()).getValue(), is(4));
-
- YangRangeInterval rangeInterval2 = rangeListIterator.next();
-
- assertThat(((YangInt32) rangeInterval2.getStartValue()).getValue(), is(10));
- assertThat(((YangInt32) rangeInterval2.getEndValue()).getValue(), is(20));
- }
-
- /**
- * Checks range restriction in referred typedef.
- */
- @Test
- public void processRangeRestrictionInRefTypedef()
- throws IOException, ParserException, DataModelException {
-
- YangNode node = manager.getDataModel("src/test/resources/RangeRestrictionInRefTypedef.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat(node instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- YangModule yangNode = (YangModule) node;
- assertThat(yangNode.getName(), is("Test"));
-
- // check top typedef
- YangTypeDef topTypedef = (YangTypeDef) yangNode.getChild();
- assertThat(topTypedef.getName(), is("Num3"));
- YangType type = topTypedef.getTypeList().iterator().next();
- assertThat(type.getDataType(), is(YangDataTypes.INT16));
- assertThat(type.getDataTypeName(), is("int16"));
-
- // Check for the restriction value.
- YangRangeRestriction rangeRestriction = (YangRangeRestriction) type.getDataTypeExtendedInfo();
- ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
- .listIterator();
- YangRangeInterval rangeInterval1 = rangeListIterator.next();
- assertThat((int) ((YangInt16) rangeInterval1.getStartValue()).getValue(), is(-32000));
- assertThat((int) ((YangInt16) rangeInterval1.getEndValue()).getValue(), is(4));
-
- YangRangeInterval rangeInterval2 = rangeListIterator.next();
- assertThat((int) ((YangInt16) rangeInterval2.getStartValue()).getValue(), is(32767));
- assertThat((int) ((YangInt16) rangeInterval2.getEndValue()).getValue(), is(32767));
-
- // check referred typedef
- YangTypeDef refTypedef = (YangTypeDef) topTypedef.getNextSibling();
- assertThat(refTypedef.getName(), is("Num6"));
- YangType refType = refTypedef.getTypeList().iterator().next();
- assertThat(refType.getDataType(), is(YangDataTypes.DERIVED));
- assertThat(refType.getDataTypeName(), is("Num3"));
- YangDerivedInfo<YangRangeRestriction> derivedInfo =
- (YangDerivedInfo<YangRangeRestriction>) refType.getDataTypeExtendedInfo();
-
- // Check for the restriction value.
- rangeRestriction = (YangRangeRestriction) derivedInfo.getResolvedExtendedInfo();
- rangeListIterator = rangeRestriction.getAscendingRangeIntervals().listIterator();
- rangeInterval1 = rangeListIterator.next();
- assertThat((int) ((YangInt16) rangeInterval1.getStartValue()).getValue(), is(-3));
- assertThat((int) ((YangInt16) rangeInterval1.getEndValue()).getValue(), is(-3));
-
- rangeInterval2 = rangeListIterator.next();
- assertThat((int) ((YangInt16) rangeInterval2.getStartValue()).getValue(), is(-2));
- assertThat((int) ((YangInt16) rangeInterval2.getEndValue()).getValue(), is(2));
-
- YangRangeInterval rangeInterval3 = rangeListIterator.next();
- assertThat((int) ((YangInt16) rangeInterval3.getStartValue()).getValue(), is(3));
- assertThat((int) ((YangInt16) rangeInterval3.getEndValue()).getValue(), is(3));
- }
-
- /**
- * Checks invalid range restriction in referred typedef.
- */
- @Test(expected = LinkerException.class)
- public void processInvalidRangeRestrictionInRefTypedef()
- throws IOException, ParserException, DataModelException {
-
- manager.getDataModel("src/test/resources/RangeRestrictionInvalidInRefTypedef.yang");
- }
-
- /**
- * Checks range restriction in referred type.
- */
- @Test
- public void processRangeRestrictionInRefType()
- throws IOException, ParserException, DataModelException {
-
- YangNode node = manager.getDataModel("src/test/resources/RangeRestrictionInRefType.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat(node instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- 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("hello"));
- assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
-
- assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
- is((YangTypeDef) node.getChild()));
-
- assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
-
- YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- // Check for the effective built-in type.
- assertThat(derivedInfo.getEffectiveBuiltInType(), is(INT32));
-
- // Check for the restriction.
- assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getRangeRestrictionString(), is(notNullValue()));
- assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
- assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
-
- // Check for the restriction value.
- YangRangeRestriction rangeRestriction = (YangRangeRestriction) derivedInfo.getResolvedExtendedInfo();
-
- ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
- .listIterator();
-
- YangRangeInterval rangeInterval1 = rangeListIterator.next();
-
- assertThat(((YangInt32) rangeInterval1.getStartValue()).getValue(), is(1));
- assertThat(((YangInt32) rangeInterval1.getEndValue()).getValue(), is(4));
-
- YangRangeInterval rangeInterval2 = rangeListIterator.next();
-
- assertThat(((YangInt32) rangeInterval2.getStartValue()).getValue(), is(10));
- assertThat(((YangInt32) rangeInterval2.getEndValue()).getValue(), is(20));
- }
-
- /**
- * Checks range restriction in typedef and stricter in referred type.
- */
- @Test
- public void processRangeRestrictionInRefTypeAndTypedefValid()
- throws IOException, ParserException, DataModelException {
-
- YangNode node = manager.getDataModel("src/test/resources/RangeRestrictionInRefTypeAndTypedefValid.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat(node instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- 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("hello"));
- assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
-
- assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
- is((YangTypeDef) node.getChild()));
-
- assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
-
- YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- // Check for the effective built-in type.
- assertThat(derivedInfo.getEffectiveBuiltInType(), is(INT32));
-
- // Check for the restriction.
- assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getRangeRestrictionString(), is(notNullValue()));
- assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
- assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
-
- // Check for the restriction value.
- YangRangeRestriction rangeRestriction = (YangRangeRestriction) derivedInfo.getResolvedExtendedInfo();
-
- ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
- .listIterator();
-
- YangRangeInterval rangeInterval1 = rangeListIterator.next();
-
- assertThat(((YangInt32) rangeInterval1.getStartValue()).getValue(), is(1));
- assertThat(((YangInt32) rangeInterval1.getEndValue()).getValue(), is(4));
-
- YangRangeInterval rangeInterval2 = rangeListIterator.next();
-
- assertThat(((YangInt32) rangeInterval2.getStartValue()).getValue(), is(10));
- assertThat(((YangInt32) rangeInterval2.getEndValue()).getValue(), is(20));
- }
-
- /**
- * Checks range restriction in typedef and not stricter in referred type.
- */
- @Test(expected = LinkerException.class)
- public void processRangeRestrictionInRefTypeAndTypedefInValid()
- throws IOException, ParserException, DataModelException {
- YangNode node = manager.getDataModel("src/test/resources/RangeRestrictionInRefTypeAndTypedefInValid.yang");
- }
-
- /**
- * Checks range restriction for string.
- */
- @Test(expected = ParserException.class)
- public void processRangeRestrictionInString()
- throws IOException, ParserException, DataModelException {
- YangNode node = manager.getDataModel("src/test/resources/RangeRestrictionInString.yang");
- }
-
- /**
- * Checks range restriction for string in referred type.
- */
- @Test(expected = LinkerException.class)
- public void processRangeRestrictionInStringInRefType()
- throws IOException, DataModelException {
- YangNode node = manager.getDataModel("src/test/resources/RangeRestrictionInStringInRefType.yang");
- }
-
- /**
- * Checks pattern restriction in typedef.
- */
- @Test
- public void processPatternRestrictionInTypedef()
- throws IOException, ParserException, DataModelException {
-
- YangNode node = manager.getDataModel("src/test/resources/PatternRestrictionInTypedef.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat(node instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- 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("hello"));
- assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
-
- assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
- is((YangTypeDef) node.getChild()));
-
- assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
-
- YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- // Check for the effective built-in type.
- assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
-
- // Check for the restriction.
- assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
- assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
-
- // Check for the restriction value.
- YangStringRestriction stringRestriction = (YangStringRestriction) derivedInfo.getResolvedExtendedInfo();
- YangPatternRestriction patternRestriction = stringRestriction.getPatternRestriction();
-
- ListIterator<String> patternListIterator = patternRestriction.getPatternList().listIterator();
- String pattern1 = patternListIterator.next();
-
- assertThat(pattern1, is("[a-zA-Z]"));
- }
-
- /**
- * Checks pattern restriction in referred type.
- */
- @Test
- public void processPatternRestrictionInRefType()
- throws IOException, ParserException, DataModelException {
-
- YangNode node = manager.getDataModel("src/test/resources/PatternRestrictionInRefType.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat(node instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- 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("hello"));
- assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
-
- assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
- is((YangTypeDef) node.getChild()));
-
- assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
-
- YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- // Check for the effective built-in type.
- assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
-
- // Check for the restriction.
- assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getPatternRestriction(), is(notNullValue()));
- assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
-
- // Check for the restriction value.
- YangStringRestriction stringRestriction = (YangStringRestriction) derivedInfo.getResolvedExtendedInfo();
- YangPatternRestriction patternRestriction = stringRestriction.getPatternRestriction();
-
- ListIterator<String> patternListIterator = patternRestriction.getPatternList().listIterator();
- String pattern1 = patternListIterator.next();
-
- assertThat(pattern1, is("[a-zA-Z]"));
- }
-
- /**
- * Checks pattern restriction in referred type and typedef.
- */
- @Test
- public void processPatternRestrictionInRefTypeAndTypedef()
- throws IOException, ParserException, DataModelException {
-
- YangNode node = manager.getDataModel("src/test/resources/PatternRestrictionInRefTypeAndTypedef.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat(node instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- 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("hello"));
- assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
-
- assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
- is((YangTypeDef) node.getChild()));
-
- assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
-
- YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- // Check for the effective built-in type.
- assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
-
- // Check for the restriction.
- assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getPatternRestriction(), is(notNullValue()));
- assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
-
- // Check for the restriction value.
- YangStringRestriction stringRestriction = (YangStringRestriction) derivedInfo.getResolvedExtendedInfo();
- YangPatternRestriction patternRestriction = stringRestriction.getPatternRestriction();
-
- ListIterator<String> patternListIterator = patternRestriction.getPatternList().listIterator();
- String pattern1 = patternListIterator.next();
-
- assertThat(pattern1, is("[a-zA-Z]"));
-
- String pattern2 = patternListIterator.next();
-
- assertThat(pattern2, is("[0-9]"));
- }
-
- /**
- * Checks multiple pattern restriction in referred type and typedef.
- */
- @Test
- public void processMultiplePatternRestriction()
- throws IOException, ParserException, DataModelException {
-
- YangNode node = manager.getDataModel("src/test/resources/MultiplePatternRestrictionInRefTypeAndTypedef.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat(node instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- 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("hello"));
- assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
-
- assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
- is((YangTypeDef) node.getChild()));
-
- assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
-
- YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- // Check for the effective built-in type.
- assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
-
- // Check for the restriction.
- assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getPatternRestriction(), is(notNullValue()));
- assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
-
- // Check for the restriction value.
- YangStringRestriction stringRestriction = (YangStringRestriction) derivedInfo.getResolvedExtendedInfo();
- YangPatternRestriction patternRestriction = stringRestriction.getPatternRestriction();
-
- ListIterator<String> patternListIterator = patternRestriction.getPatternList().listIterator();
- String pattern1 = patternListIterator.next();
-
- assertThat(pattern1, is("[a-z]"));
-
- String pattern2 = patternListIterator.next();
-
- assertThat(pattern2, is("[A-Z]"));
-
- String pattern3 = patternListIterator.next();
-
- assertThat(pattern3, is("[0-9]"));
-
- String pattern4 = patternListIterator.next();
-
- assertThat(pattern4, is("[\\n]"));
- }
-
- /**
- * Checks multiple pattern and length restriction in referred type and
- * typedef.
- */
- @Test
- public void processMultiplePatternAndLengthRestriction()
- throws IOException, ParserException, DataModelException {
-
- YangNode node = manager.getDataModel("src/test/resources/MultiplePatternAndLengthRestriction.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat(node instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- 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("hello"));
- assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
-
- assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
- is((YangTypeDef) node.getChild()));
-
- assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
-
- YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- // Check for the effective built-in type.
- assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
-
- // Check for the restriction.
- assertThat(derivedInfo.getLengthRestrictionString(), is(notNullValue()));
- assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getPatternRestriction(), is(notNullValue()));
- assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
-
- // Check for the restriction value.
- YangStringRestriction stringRestriction = (YangStringRestriction) derivedInfo.getResolvedExtendedInfo();
-
- // Check for pattern restriction.
- YangPatternRestriction patternRestriction = stringRestriction.getPatternRestriction();
- ListIterator<String> patternListIterator = patternRestriction.getPatternList().listIterator();
- String pattern1 = patternListIterator.next();
-
- assertThat(pattern1, is("[a-z]"));
-
- String pattern2 = patternListIterator.next();
-
- assertThat(pattern2, is("[A-Z]"));
-
- String pattern3 = patternListIterator.next();
-
- assertThat(pattern3, is("[0-9]"));
-
- String pattern4 = patternListIterator.next();
-
- assertThat(pattern4, is("[\\n]"));
-
- // Check for length restriction.
- YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
- ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
- .listIterator();
-
- YangRangeInterval rangeInterval1 = lengthListIterator.next();
-
- assertThat(((YangUint64) rangeInterval1.getStartValue()).getValue(), is(BigInteger.valueOf(0)));
- assertThat(((YangUint64) rangeInterval1.getEndValue()).getValue(), is(BigInteger.valueOf(20)));
-
- YangRangeInterval rangeInterval2 = lengthListIterator.next();
-
- assertThat(((YangUint64) rangeInterval2.getStartValue()).getValue(), is(BigInteger.valueOf(201)));
- assertThat(((YangUint64) rangeInterval2.getEndValue()).getValue(), is(BigInteger.valueOf(300)));
- }
-
- /**
- * Checks multiple pattern and length restriction in referred type and
- * typedef.
- */
- @Test
- public void processMultiplePatternAndLengthRestrictionValid()
- throws IOException, ParserException, DataModelException {
-
- YangNode node = manager.getDataModel("src/test/resources/MultiplePatternAndLengthRestrictionValid.yang");
-
- // Check whether the data model tree returned is of type module.
- assertThat(node instanceof YangModule, is(true));
-
- // Check whether the node type is set properly to module.
- assertThat(node.getNodeType(), is(MODULE_NODE));
-
- // Check whether the module name is set correctly.
- 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("hello"));
- assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
-
- assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
- is((YangTypeDef) node.getChild()));
-
- assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
-
- YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
-
- // Check for the effective built-in type.
- assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
-
- // Check for the restriction.
- assertThat(derivedInfo.getLengthRestrictionString(), is(notNullValue()));
- assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
- assertThat(derivedInfo.getPatternRestriction(), is(notNullValue()));
- assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
-
- // Check for the restriction value.
- YangStringRestriction stringRestriction = (YangStringRestriction) derivedInfo.getResolvedExtendedInfo();
-
- // Check for pattern restriction.
- YangPatternRestriction patternRestriction = stringRestriction.getPatternRestriction();
- ListIterator<String> patternListIterator = patternRestriction.getPatternList().listIterator();
- String pattern1 = patternListIterator.next();
-
- assertThat(pattern1, is("[a-z]"));
-
- String pattern2 = patternListIterator.next();
-
- assertThat(pattern2, is("[A-Z]"));
-
- String pattern3 = patternListIterator.next();
-
- assertThat(pattern3, is("[0-9]"));
-
- String pattern4 = patternListIterator.next();
-
- assertThat(pattern4, is("[\\n]"));
-
- // Check for length restriction.
- YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
- ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
- .listIterator();
-
- YangRangeInterval rangeInterval1 = lengthListIterator.next();
-
- assertThat(((YangUint64) rangeInterval1.getStartValue()).getValue(), is(BigInteger.valueOf(0)));
- assertThat(((YangUint64) rangeInterval1.getEndValue()).getValue(), is(BigInteger.valueOf(20)));
-
- YangRangeInterval rangeInterval2 = lengthListIterator.next();
-
- assertThat(((YangUint64) rangeInterval2.getStartValue()).getValue(), is(BigInteger.valueOf(100)));
- assertThat(((YangUint64) rangeInterval2.getEndValue()).getValue(),
- is(new BigInteger("18446744073709551615")));
- }
-
- /**
- * Checks multiple pattern and length restriction in referred type and
- * typedef invalid scenario.
- */
- @Test(expected = LinkerException.class)
- public void processMultiplePatternAndLengthRestrictionInValid()
- throws IOException, DataModelException {
- YangNode node = manager.getDataModel("src/test/resources/MultiplePatternAndLengthRestrictionInValid.yang");
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/RootClassGeneratorTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/RootClassGeneratorTest.java
deleted file mode 100644
index de1bf75..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/RootClassGeneratorTest.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.plugin.manager;
-
-import org.apache.maven.plugin.MojoExecutionException;
-import org.junit.Test;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
-
-import java.io.File;
-import java.io.IOException;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-import static org.onosproject.yangutils.utils.io.YangPluginConfig.compileCode;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory;
-
-/**
- * Unit test case for root node's code generation.
- */
-public class RootClassGeneratorTest {
-
- private final YangUtilManager utilManager = new YangUtilManager();
-
- @Test
- public void rootClassGenTest() throws IOException, ParserException, MojoExecutionException {
- deleteDirectory("target/manager/");
- String searchDir = "src/test/resources/manager/singleChild";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
-
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir("target/manager/");
- utilManager.translateToJava(yangPluginConfig);
- String dir1 = System.getProperty("user.dir") + File.separator + "target/manager/";
- compileCode(dir1);
- String path = System.getProperty("user.dir") + "/target/manager/" +
- "org/onosproject/yang/gen/v1/single/test5/test/rev20160704" +
- "/Test5.java";
- assertThat(true, is((new File(path)).exists()));
-
- path = System.getProperty("user.dir") + "/target/manager/" +
- "org/onosproject/yang/gen/v1/single/test5/test/rev20160704" +
- "/Test7.java";
- assertThat(true, is((new File(path)).exists()));
- deleteDirectory("target/manager/");
- }
-
- @Test
- public void rootClassGenwithoutRevTest() throws IOException, ParserException, MojoExecutionException {
- deleteDirectory("target/manager/");
- String searchDir = "src/test/resources/manager/genwithoutrev";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
-
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir("target/manager/");
- utilManager.translateToJava(yangPluginConfig);
- String dir1 = System.getProperty("user.dir") + File.separator + "target/manager/";
- compileCode(dir1);
- String path = System.getProperty("user.dir") + "/target/manager/" +
- "org/onosproject/yang/gen/v1/test5/test/Test5.java";
-
- assertThat(true, is((new File(path)).exists()));
- deleteDirectory("target/manager/");
- }
-
- @Test
- public void rootClassMethodGenTest() throws IOException, ParserException, MojoExecutionException {
- deleteDirectory("target/manager/");
- String searchDir = "src/test/resources/manager/MultiChild";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
-
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir("target/manager/");
- utilManager.translateToJava(yangPluginConfig);
- String dir1 = System.getProperty("user.dir") + File.separator + "target/manager/";
- compileCode(dir1);
- String path = System.getProperty("user.dir") + "/target/manager/" +
- "org/onosproject/yang/gen/v1/multi/test5/test/rev20160704" +
- "/Test5.java";
- assertThat(true, is((new File(path)).exists()));
-
- path = System.getProperty("user.dir") + "/target/manager/" +
- "org/onosproject/yang/gen/v1/multi/test5/test/rev20160704" +
- "/Test7.java";
- assertThat(true, is((new File(path)).exists()));
-
- path = System.getProperty("user.dir") + "/target/manager/" +
- "org/onosproject/yang/gen/v1/multi/test8/test/rev20160704" +
- "/Test8.java";
- assertThat(true, is((new File(path)).exists()));
-
- deleteDirectory("target/manager/");
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/RpcTranslatorTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/RpcTranslatorTest.java
deleted file mode 100644
index 8e9c5ee..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/RpcTranslatorTest.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.plugin.manager;
-
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-
-import java.io.File;
-import java.io.IOException;
-
-import static org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorUtil.generateJavaCode;
-import static org.onosproject.yangutils.utils.io.YangPluginConfig.compileCode;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory;
-
-/**
- * Unit tests for rpc translator.
- */
-public final class RpcTranslatorTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
-
- /**
- * Checks rpc translation should not result in any exception.
- */
- @Test
- public void processRpcTranslator()
- throws IOException, ParserException {
-
- YangNode node = manager.getDataModel("src/test/resources/RpcTranslator.yang");
-
- String dir = "target/rpcTranslator/";
- deleteDirectory(dir);
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir(dir);
-
- generateJavaCode(node, yangPluginConfig);
- String dir1 = System.getProperty("user.dir") + File.separator + dir;
- compileCode(dir1);
- deleteDirectory(dir);
- }
- // TODO enhance the test cases, after having a framework of translator test.
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/SchemaNodeTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/SchemaNodeTest.java
deleted file mode 100644
index 7d9a736..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/SchemaNodeTest.java
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.plugin.manager;
-
-import org.apache.maven.plugin.MojoExecutionException;
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangLeavesHolder;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangSchemaNode;
-import org.onosproject.yangutils.datamodel.YangSchemaNodeContextInfo;
-import org.onosproject.yangutils.datamodel.YangSchemaNodeIdentifier;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
-
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import static org.hamcrest.CoreMatchers.notNullValue;
-import static org.hamcrest.CoreMatchers.nullValue;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory;
-
-/**
- * Test cases for testing YANG schema node.
- */
-public class SchemaNodeTest {
-
- private final YangUtilManager utilManager = new YangUtilManager();
-
- /**
- * Checks method to get schema node from map.
- *
- * @throws IOException a violation in IO rule
- * @throws ParserException a violation in parser rule
- * @throws MojoExecutionException a violation in mojo rule
- * @throws DataModelException a violation in data model rule
- */
- @Test
- public void processSchemaNodeMap()
- throws IOException, ParserException,
- MojoExecutionException, DataModelException {
-
- deleteDirectory("target/schemaMap/");
- String searchDir = "src/test/resources/schemaMap";
- utilManager
- .createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir("target/schemaMap/");
- utilManager.translateToJava(yangPluginConfig);
-
- Iterator<YangNode> yangNodeIterator =
- utilManager.getYangNodeSet().iterator();
- YangNode rootNode = yangNodeIterator.next();
-
- // Validate the notification enum map
- assertThat(rootNode.getChild().getNextSibling(),
- is(rootNode.getNotificationSchemaNode("TESTNOTIFICATION1")));
-
- // Validate the notification enum map shouldn't have container
- assertThat(rootNode.getNotificationSchemaNode("TESTCONTAINER"),
- is(nullValue()));
-
- // Validation for RPC input/output node.
- YangNode yangRpcNode = rootNode.getChild().getNextSibling()
- .getNextSibling();
- YangSchemaNodeIdentifier yangInputNode = new YangSchemaNodeIdentifier();
- yangInputNode.setName("input");
- yangInputNode.setNameSpace(yangRpcNode.getNameSpace());
- assertThat(yangRpcNode.getChildSchema(yangInputNode).getSchemaNode(),
- is(yangRpcNode.getChild()));
-
- YangSchemaNodeIdentifier yangOutputNode = new
- YangSchemaNodeIdentifier();
- yangOutputNode.setName("output");
- yangOutputNode.setNameSpace(yangRpcNode.getNameSpace());
- assertThat(yangRpcNode.getChildSchema(yangOutputNode).getSchemaNode(),
- is(yangRpcNode.getChild().getNextSibling()));
-
- // Validate the input schema map
- YangSchemaNode yangInput = yangRpcNode.getChild();
- YangSchemaNodeIdentifier yangInputLeafNode = new
- YangSchemaNodeIdentifier();
- yangInputLeafNode.setName("image-name");
- yangInputLeafNode.setNameSpace(yangRpcNode.getNameSpace());
- assertThat(yangInput.getChildSchema(yangInputLeafNode),
- is(notNullValue()));
-
- YangSchemaNode yangOutput = yangRpcNode.getChild().getNextSibling();
- YangSchemaNodeIdentifier yangOutputLeafNode = new
- YangSchemaNodeIdentifier();
- yangOutputLeafNode.setName("image-name");
- yangOutputLeafNode.setNameSpace(yangRpcNode.getNameSpace());
- assertThat(yangOutput.getChildSchema(yangOutputLeafNode),
- is(notNullValue()));
-
- // Validate schema node
- assertThat(rootNode.getYsnContextInfoMap(), is(notNullValue()));
- Map<YangSchemaNodeIdentifier, YangSchemaNodeContextInfo> schemaMap =
- rootNode.getYsnContextInfoMap();
- YangSchemaNodeIdentifier yangSchemaNodeIdentifier =
- new YangSchemaNodeIdentifier();
- yangSchemaNodeIdentifier.setName("testcontainer");
- yangSchemaNodeIdentifier.setNameSpace(yangRpcNode.getNameSpace());
- assertThat(schemaMap.get(yangSchemaNodeIdentifier), is(notNullValue()));
- YangSchemaNodeContextInfo yangSchemaNodeContextInfo =
- schemaMap.get(yangSchemaNodeIdentifier);
- assertThat(yangSchemaNodeContextInfo.getSchemaNode(),
- is(rootNode.getChild()));
-
- assertThat(rootNode.getChild().getYsnContextInfoMap(),
- is(notNullValue()));
- Map<YangSchemaNodeIdentifier, YangSchemaNodeContextInfo> schemaMap2 =
- rootNode.getChild()
- .getYsnContextInfoMap();
- yangSchemaNodeIdentifier.setName("testleaf");
- yangSchemaNodeIdentifier.setNameSpace(yangRpcNode.getNameSpace());
- assertThat(schemaMap2.get(yangSchemaNodeIdentifier),
- is(notNullValue()));
-
- yangSchemaNodeIdentifier.setName("pretzel");
- yangSchemaNodeIdentifier.setNameSpace(yangRpcNode.getNameSpace());
- assertThat(schemaMap2.get(yangSchemaNodeIdentifier),
- is(notNullValue()));
-
- assertThat(rootNode.getChild().getChild().getYsnContextInfoMap(),
- is(notNullValue()));
- Map<YangSchemaNodeIdentifier, YangSchemaNodeContextInfo> schemaMap3 =
- rootNode.getChild().getChild()
- .getYsnContextInfoMap();
- yangSchemaNodeIdentifier.setName("pretzel");
- yangSchemaNodeIdentifier.setNameSpace(yangRpcNode.getNameSpace());
- assertThat(schemaMap3.get(yangSchemaNodeIdentifier),
- is(notNullValue()));
- YangSchemaNodeContextInfo yangSchemaNodeContextInfo3 =
- schemaMap3.get(yangSchemaNodeIdentifier);
-
- assertThat(rootNode.getChild().getChild().getChild()
- .getYsnContextInfoMap(),
- is(notNullValue()));
- Map<YangSchemaNodeIdentifier, YangSchemaNodeContextInfo> schemaMap4 =
- rootNode.getChild().getChild().getChild()
- .getYsnContextInfoMap();
- yangSchemaNodeIdentifier.setName("pretzel");
- yangSchemaNodeIdentifier.setNameSpace(yangRpcNode.getNameSpace());
- assertThat(schemaMap4.get(yangSchemaNodeIdentifier),
- is(notNullValue()));
-
- YangSchemaNodeContextInfo yangSchemaNodeContextInfo2 =
- schemaMap4.get(yangSchemaNodeIdentifier);
- List<YangLeaf> yangListOfLeaf = ((YangLeavesHolder) rootNode.getChild()
- .getChild().getChild()).getListOfLeaf();
- YangLeaf yangLeaf = yangListOfLeaf.get(0);
- assertThat(yangSchemaNodeContextInfo2.getSchemaNode(), is(yangLeaf));
-
- assertThat(yangSchemaNodeContextInfo3.getSchemaNode(), is(yangLeaf));
- assertThat(yangSchemaNodeContextInfo3.getContextSwitchedNode(),
- is(rootNode.getChild().getChild().getChild()));
-
- deleteDirectory("target/schemaMap/");
- }
-
- /**
- * Checks that notification map shouldn't be present in other YANG node.
- *
- * @throws IOException a violation in IO rule
- * @throws ParserException a violation in parser rule
- * @throws MojoExecutionException a violation in mojo rule
- * @throws DataModelException a violation in data model rule
- */
- @Test(expected = DataModelException.class)
- public void processNotificationEnumMapInvalidScenario()
- throws IOException,
- ParserException, MojoExecutionException,
- DataModelException {
-
- deleteDirectory("target/schemaMap/");
- String searchDir = "src/test/resources/schemaMap";
- utilManager
- .createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir("target/schemaMap/");
- utilManager.translateToJava(yangPluginConfig);
-
- Iterator<YangNode> yangNodeIterator =
- utilManager.getYangNodeSet().iterator();
- YangNode rootNode = yangNodeIterator.next();
-
- deleteDirectory("target/schemaMap/");
-
- rootNode.getChild().getNotificationSchemaNode("TESTNOTIFICATION1");
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/TypeDefTranslatorTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/TypeDefTranslatorTest.java
deleted file mode 100644
index 1c5c56c..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/TypeDefTranslatorTest.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.plugin.manager;
-
-import org.apache.maven.plugin.MojoExecutionException;
-import org.junit.Test;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
-
-import java.io.File;
-import java.io.IOException;
-
-import static org.onosproject.yangutils.utils.io.YangPluginConfig.compileCode;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory;
-
-/**
- * Unit test case for typedef translator.
- */
-public class TypeDefTranslatorTest {
-
- private final YangUtilManager utilManager = new YangUtilManager();
- private static final String DIR = "target/typedefTranslator/";
- private static final String DIR1 = System.getProperty("user.dir") + File
- .separator + DIR;
-
- /**
- * Checks typedef translation should not result in any exception.
- *
- * @throws MojoExecutionException
- */
- @Test
- public void processTypeDefTranslator() throws IOException,
- ParserException, MojoExecutionException {
-
- deleteDirectory(DIR);
- String searchDir = "src/test/resources/typedefTranslator/without";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
-
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir(DIR);
- utilManager.translateToJava(yangPluginConfig);
- compileCode(DIR1);
- deleteDirectory(DIR);
- }
-
- /**
- * Checks typedef translation should not result in any exception.
- *
- * @throws MojoExecutionException
- */
- @Test
- public void processTypeDefWithRestrictionsTranslator() throws IOException,
- ParserException, MojoExecutionException {
-
- deleteDirectory(DIR);
- String searchDir = "src/test/resources/typedefTranslator/with";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
-
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir(DIR);
- utilManager.translateToJava(yangPluginConfig);
- compileCode(DIR1);
- deleteDirectory(DIR);
-
- }
-
- /**
- * Checks typedef translation should not result in any exception.
- *
- * @throws MojoExecutionException
- */
- @Test
- public void processTypeDefWithUnionAndBitsTranslator() throws IOException,
- ParserException, MojoExecutionException {
-
- deleteDirectory(DIR);
- String searchDir = "src/test/resources/typedefTranslator/union";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
-
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir(DIR);
- utilManager.translateToJava(yangPluginConfig);
- compileCode(DIR1);
- deleteDirectory(DIR);
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/TypeLinkingAfterCloningTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/TypeLinkingAfterCloningTest.java
deleted file mode 100644
index 441a40b..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/TypeLinkingAfterCloningTest.java
+++ /dev/null
@@ -1,817 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.plugin.manager;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.YangContainer;
-import org.onosproject.yangutils.datamodel.YangDerivedInfo;
-import org.onosproject.yangutils.datamodel.YangIdentityRef;
-import org.onosproject.yangutils.datamodel.YangLeaf;
-import org.onosproject.yangutils.datamodel.YangLeafList;
-import org.onosproject.yangutils.datamodel.YangLeafRef;
-import org.onosproject.yangutils.datamodel.YangList;
-import org.onosproject.yangutils.datamodel.YangModule;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.YangTypeDef;
-import org.onosproject.yangutils.datamodel.YangUnion;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.linker.impl.YangLinkerManager;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.ListIterator;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-import static org.onosproject.yangutils.datamodel.YangNodeType.MODULE_NODE;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.IDENTITYREF;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.STRING;
-import static org.onosproject.yangutils.linker.impl.YangLinkerUtils.updateFilePriority;
-import static org.onosproject.yangutils.utils.io.impl.YangFileScanner.getYangFiles;
-
-/**
- * Test cases for type linking after cloning happens grouping.
- */
-public class TypeLinkingAfterCloningTest {
-
- private static final String MODULE = "module";
- private static final String OPEN_ROAD = "org-open-road-m-device";
- private static final String NODE_ID = "node-id";
- private static final String LEAF = "leaf";
- private static final String LEAF_LIST = "leaf-list";
- private static final String NODE_REF = "node-ref";
- private static final String FACILITY = "facility";
- private static final String FACILITY_SYS_LOG = "syslog-facility";
- private static final String USABILITY_SYS_LOG = "syslog-usability";
- private static final String AVAILABILITY_SYS_LOG = "syslog-availability";
- private static final String THIRD = "third";
- private static final String SECOND = "second";
- private static final String FIRST = "first";
- private static final String TYPEDEF = "typedef";
- private static final String CORRECT = "correct";
- private static final String UNI = "with-uni";
- private static final String UNION = "union";
- private static final String BASE1 = "id2";
- private static final String BASE2 = "id1";
- private static final String DIR =
- "src/test/resources/typelinkingaftercloning/";
-
- private final YangUtilManager utilMgr = new YangUtilManager();
- private final YangLinkerManager linkerMgr = new YangLinkerManager();
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- private ListIterator<YangLeaf> leafItr;
- private YangLeaf leafInfo;
- private ListIterator<YangLeafList> leafListItr;
- private YangLeafList leafListInfo;
- private YangIdentityRef idRef;
- private YangUnion union;
- private Iterator<YangType<?>> unionTypeItr;
- private YangType type;
- private YangDerivedInfo derInfo;
- private YangType type2;
- private YangType type3;
- private YangType type1;
- private YangDerivedInfo derInfo1;
- private YangTypeDef typedef1;
-
- /**
- * Returns the error message as the node name incorrect, when assert fails.
- *
- * @param node YANG node
- * @param nodeName node name
- * @return error message as the name is incorrect
- */
- private static String getInCrtName(String node, Object nodeName) {
- return getCapitalCase(node) + "'s name " + nodeName + " is incorrect.";
- }
-
- /**
- * Returns the capital cased first letter of the given string.
- *
- * @param name string to be capital cased
- * @return capital cased string
- */
- private static String getCapitalCase(String name) {
- return name.substring(0, 1).toUpperCase() + name.substring(1);
- }
-
- /**
- * Returns the error message as the node type incorrect, when assert fails.
- *
- * @param node YANG node
- * @param nodeName node name
- * @return error message as the type is incorrect
- */
- private static String getInCrtLeafType(String node, String nodeName) {
- return "The " + node + " " + nodeName + " has incorrect data type.";
- }
-
- /**
- * Returns the error message, stating the union and identity-ref level in
- * the type, has not resolved to the referred identity.
- *
- * @param unionLvl union level in node
- * @param idLvl identity-ref level in node
- * @param baseName referred base
- * @param node YANG node having type
- * @param nodeName node name
- * @return error message for incorrect identity-ref in union.
- */
- public static String getInCrtUnionWithIdRef(
- String unionLvl, String idLvl, String baseName, String node,
- String nodeName) {
- return "The " + idLvl + " direct occurrence identity-ref in " +
- unionLvl + " level union, of " + node + " " + nodeName +
- " is not " + baseName;
- }
-
- /**
- * Processes leaf-ref after its cloned to uses from grouping.
- *
- * @throws IOException if violates IO operation
- */
- @Test
- public void processLeafRefAfterCloning() throws IOException {
-
- utilMgr.createYangFileInfoSet(getYangFiles(DIR + "leafref/intrafile"));
- utilMgr.parseYangFileInfoSet();
- utilMgr.createYangNodeSet();
- YangNode selfNode;
-
- // Create YANG node set
- linkerMgr.createYangNodeSet(utilMgr.getYangNodeSet());
-
- // Add references to import list.
- linkerMgr.addRefToYangFilesImportList(utilMgr.getYangNodeSet());
-
- updateFilePriority(utilMgr.getYangNodeSet());
-
- // Carry out inter-file linking.
- linkerMgr.processInterFileLinking(utilMgr.getYangNodeSet());
-
- Iterator<YangNode> nodeItr = utilMgr.getYangNodeSet().iterator();
-
- selfNode = nodeItr.next();
-
- // Checks whether the data model tree returned is of type module.
- assertThat((selfNode instanceof YangModule), is(true));
-
- // Checks whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(MODULE_NODE));
-
- assertThat(getInCrtName(MODULE, OPEN_ROAD), selfNode.getName(),
- is(OPEN_ROAD));
-
- YangList list = (YangList) selfNode.getChild().getNextSibling()
- .getNextSibling();
-
- YangLeafRef leafRef;
-
- leafItr = list.getListOfLeaf().listIterator();
- leafInfo = leafItr.next();
-
- // Checks whether the information in the leaf is correct under list.
- assertThat(getInCrtName(LEAF, NODE_ID), leafInfo.getName(),
- is(NODE_ID));
- leafRef = (YangLeafRef) leafInfo.getDataType()
- .getDataTypeExtendedInfo();
-
- // Checks the effective type for the leaf.
- assertThat(getInCrtLeafType(LEAF, NODE_ID),
- leafRef.getEffectiveDataType().getDataType(), is(STRING));
-
- leafListItr = list.getListOfLeafList().listIterator();
- leafListInfo = leafListItr.next();
-
- // Checks whether the information in the leaf-list is correct.
- assertThat(getInCrtName(LEAF_LIST, NODE_REF), leafListInfo.getName(),
- is(NODE_REF));
- leafRef = (YangLeafRef) leafListInfo.getDataType()
- .getDataTypeExtendedInfo();
-
- assertThat(getInCrtLeafType(LEAF_LIST, NODE_REF),
- leafRef.getEffectiveDataType().getDataType(), is(DERIVED));
-
- // Checks whether the information under cloned container is correct.
- YangContainer container = (YangContainer) list.getChild()
- .getNextSibling();
-
- leafItr = container.getListOfLeaf().listIterator();
- leafInfo = leafItr.next();
-
- // Checks whether the information in the leaf is correct under cont.
- assertThat(getInCrtName(LEAF, NODE_ID), leafInfo.getName(),
- is(NODE_ID));
- leafRef = (YangLeafRef) leafListInfo.getDataType()
- .getDataTypeExtendedInfo();
- assertThat(getInCrtLeafType(LEAF, NODE_ID),
- leafRef.getEffectiveDataType().getDataType(), is(DERIVED));
-
- leafListItr = container.getListOfLeafList().listIterator();
- leafListInfo = leafListItr.next();
-
- // Checks whether the information in the leaf-list is correct.
- assertThat(getInCrtName(LEAF_LIST, NODE_REF), leafListInfo.getName(),
- is(NODE_REF));
- leafRef = (YangLeafRef) leafListInfo.getDataType()
- .getDataTypeExtendedInfo();
- assertThat(getInCrtLeafType(LEAF_LIST, NODE_REF),
- leafRef.getEffectiveDataType().getDataType(),
- is(STRING));
- }
-
- /**
- * Processes invalid scenario where a leaf-ref is present in union.
- *
- * @throws IOException io error when finding file
- */
- @Test
- public void processInvalidLeafRef() throws IOException {
- thrown.expect(ParserException.class);
- thrown.expectMessage("Union member type must not be one of the " +
- "built-in types \"empty\" or " +
- "\"leafref\"node-id_union");
- utilMgr.createYangFileInfoSet(getYangFiles(DIR + "leafref/invalid"));
- utilMgr.parseYangFileInfoSet();
- }
-
- /**
- * Processes simple identity-ref after it gets cloned from grouping.
- *
- * @throws IOException if violates IO operation
- */
- @Test
- public void processIdentityRefBeforeCloning() throws IOException {
-
- utilMgr.createYangFileInfoSet(getYangFiles(DIR + "identityref"));
- utilMgr.parseYangFileInfoSet();
- utilMgr.createYangNodeSet();
- YangNode selfNode;
-
- // Create YANG node set
- linkerMgr.createYangNodeSet(utilMgr.getYangNodeSet());
-
- // Add references to import list.
- linkerMgr.addRefToYangFilesImportList(utilMgr.getYangNodeSet());
-
- updateFilePriority(utilMgr.getYangNodeSet());
-
- // Carry out inter-file linking.
- linkerMgr.processInterFileLinking(utilMgr.getYangNodeSet());
-
- Iterator<YangNode> nodeItr = utilMgr.getYangNodeSet().iterator();
-
- selfNode = nodeItr.next();
-
- // Checks whether the data model tree returned is of type module.
- assertThat((selfNode instanceof YangModule), is(true));
-
- // Checks whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(MODULE_NODE));
-
- assertThat(getInCrtName(MODULE, OPEN_ROAD), selfNode.getName(),
- is(OPEN_ROAD));
-
- YangList list = (YangList) selfNode.getChild().getNextSibling()
- .getNextSibling().getNextSibling();
-
- leafItr = list.getListOfLeaf().listIterator();
- leafInfo = leafItr.next();
-
- // Checks if the leaf has identity-ref in union.
- assertThat(getInCrtName(LEAF, FACILITY), leafInfo.getName(),
- is(FACILITY));
- union = (YangUnion) leafInfo.getDataType().getDataTypeExtendedInfo();
- unionTypeItr = union.getTypeList().listIterator();
- type = unionTypeItr.next();
- idRef = (YangIdentityRef) type.getDataTypeExtendedInfo();
-
- // Checks the effective type for the leaf.
- assertThat(getInCrtLeafType(LEAF, FACILITY),
- idRef.getBaseIdentity().getName(),
- is(FACILITY_SYS_LOG));
-
- leafInfo = leafItr.next();
-
- // Checks whether the information in the leaf is correct under list.
- assertThat(getInCrtName(LEAF, NODE_ID), leafInfo.getName(),
- is(NODE_ID));
- idRef = (YangIdentityRef) leafInfo.getDataType()
- .getDataTypeExtendedInfo();
-
- // Checks the effective type for the leaf.
- assertThat(getInCrtLeafType(LEAF, NODE_ID),
- idRef.getBaseIdentity().getName(),
- is(FACILITY_SYS_LOG));
-
- leafListItr = list.getListOfLeafList().listIterator();
- leafListInfo = leafListItr.next();
-
- // Checks if the information in the leaf-list is correct under list.
- assertThat(getInCrtName(LEAF_LIST, NODE_REF), leafListInfo.getName(),
- is(NODE_REF));
-
- derInfo = (YangDerivedInfo) leafListInfo.getDataType()
- .getDataTypeExtendedInfo();
-
- type = derInfo.getReferredTypeDef().getTypeList().get(0);
- idRef = (YangIdentityRef) type.getDataTypeExtendedInfo();
-
- // Checks the effective type for the leaf-list.
- assertThat(getInCrtLeafType(LEAF, NODE_REF),
- idRef.getBaseIdentity().getName(),
- is(FACILITY_SYS_LOG));
-
- YangContainer container = (YangContainer) list.getChild()
- .getNextSibling().getNextSibling();
-
- leafListItr = container.getListOfLeafList().listIterator();
- leafListInfo = leafListItr.next();
-
- // Checks the leaf-list information is correct.
- assertThat(getInCrtName(LEAF_LIST, FACILITY), leafListInfo.getName(),
- is(FACILITY));
- union = (YangUnion) leafListInfo.getDataType()
- .getDataTypeExtendedInfo();
- unionTypeItr = union.getTypeList().listIterator();
- type = unionTypeItr.next();
- idRef = (YangIdentityRef) type.getDataTypeExtendedInfo();
-
- // Checks the effective type for the leaf-list.
- assertThat(getInCrtLeafType(LEAF_LIST, FACILITY),
- idRef.getBaseIdentity().getName(),
- is(FACILITY_SYS_LOG));
-
- leafListInfo = leafListItr.next();
-
- // Checks the leaf-list information is correct.
- assertThat(getInCrtName(LEAF_LIST, NODE_REF), leafListInfo.getName(),
- is(NODE_REF));
- idRef = (YangIdentityRef) leafListInfo.getDataType()
- .getDataTypeExtendedInfo();
-
- // Checks the effective type for the leaf.
- assertThat(getInCrtLeafType(LEAF_LIST, NODE_REF),
- idRef.getBaseIdentity().getName(),
- is(FACILITY_SYS_LOG));
-
- leafItr = container.getListOfLeaf().listIterator();
- leafInfo = leafItr.next();
-
- // Checks the leaf information is correct.
- assertThat(getInCrtName(LEAF, NODE_ID), leafInfo.getName(),
- is(NODE_ID));
- idRef = (YangIdentityRef) leafListInfo.getDataType()
- .getDataTypeExtendedInfo();
-
- assertThat(getInCrtLeafType(LEAF, NODE_ID),
- idRef.getBaseIdentity().getName(),
- is(FACILITY_SYS_LOG));
-
- }
-
- /**
- * Processes union having different recursive level with identity-ref.
- *
- * @throws IOException if violates IO operation
- */
- @Test
- public void processUnionAfterCloning() throws IOException {
-
- utilMgr.createYangFileInfoSet(getYangFiles(DIR + "union"));
- utilMgr.parseYangFileInfoSet();
- utilMgr.createYangNodeSet();
- YangNode selfNode;
-
- // Create YANG node set
- linkerMgr.createYangNodeSet(utilMgr.getYangNodeSet());
-
- // Add references to import list.
- linkerMgr.addRefToYangFilesImportList(utilMgr.getYangNodeSet());
- updateFilePriority(utilMgr.getYangNodeSet());
-
- // Carry out inter-file linking.
- linkerMgr.processInterFileLinking(utilMgr.getYangNodeSet());
- Iterator<YangNode> nodeItr = utilMgr.getYangNodeSet().iterator();
- selfNode = nodeItr.next();
-
- YangUnion union2;
- YangUnion union3;
- Iterator<YangType<?>> unionTypeItr2;
- Iterator<YangType<?>> unionTypeItr3;
- YangDerivedInfo derivedInfo;
- YangTypeDef typeDef;
- Iterator<YangType<?>> typeDefItr;
-
- // Checks whether the data model tree returned is of type module.
- assertThat((selfNode instanceof YangModule), is(true));
-
- // Checks whether the node type is set properly to module.
- assertThat(selfNode.getNodeType(), is(MODULE_NODE));
-
- assertThat(getInCrtName(MODULE, OPEN_ROAD), selfNode.getName(),
- is(OPEN_ROAD));
-
- YangList list = (YangList) selfNode.getChild().getNextSibling()
- .getNextSibling().getNextSibling().getNextSibling()
- .getNextSibling().getNextSibling();
-
- Iterator<YangLeaf> leafItr = list.getListOfLeaf().listIterator();
- YangLeaf leafInfo = leafItr.next();
-
- // Checks if the leaf has identity-ref in union.
- assertThat(getInCrtName(LEAF, FACILITY), leafInfo.getName(),
- is(FACILITY));
-
- // Gets the first level union and the list of type in it.
- union = (YangUnion) leafInfo.getDataType().getDataTypeExtendedInfo();
- unionTypeItr = union.getTypeList().listIterator();
- type = unionTypeItr.next();
-
- // Gets the second level union and types in it.
- union2 = (YangUnion) type.getDataTypeExtendedInfo();
- unionTypeItr2 = union2.getTypeList().listIterator();
- type2 = unionTypeItr2.next();
-
- // Gets the third level union and types in it.
- union3 = (YangUnion) type2.getDataTypeExtendedInfo();
- unionTypeItr3 = union3.getTypeList().listIterator();
- type3 = unionTypeItr3.next();
-
- // Checks the first identity-ref in third level union.
- idRef = (YangIdentityRef) type3.getDataTypeExtendedInfo();
- assertThat(getInCrtUnionWithIdRef(
- THIRD, FIRST, USABILITY_SYS_LOG, LEAF, FACILITY),
- idRef.getBaseIdentity().getName(),
- is(USABILITY_SYS_LOG));
-
- // Checks the first identity-ref in second level union.
- type2 = unionTypeItr2.next();
- idRef = (YangIdentityRef) type2.getDataTypeExtendedInfo();
- assertThat(getInCrtUnionWithIdRef(
- SECOND, FIRST, FACILITY_SYS_LOG, LEAF, FACILITY),
- idRef.getBaseIdentity().getName(),
- is(FACILITY_SYS_LOG));
-
- // Checks the first identity-ref in first level union.
- type = unionTypeItr.next();
- derInfo = (YangDerivedInfo) type.getDataTypeExtendedInfo();
- type = derInfo.getReferredTypeDef().getTypeList().get(0);
- idRef = (YangIdentityRef) type.getDataTypeExtendedInfo();
- assertThat(getInCrtUnionWithIdRef(
- FIRST, FIRST, AVAILABILITY_SYS_LOG, LEAF, FACILITY),
- idRef.getBaseIdentity().getName(),
- is(AVAILABILITY_SYS_LOG));
-
- // Checks derived type in third level union.
- type3 = unionTypeItr3.next();
- derivedInfo = (YangDerivedInfo) type3.getDataTypeExtendedInfo();
- typeDef = derivedInfo.getReferredTypeDef();
- typeDefItr = typeDef.getTypeList().listIterator();
- type = typeDefItr.next();
-
- // Gets the first level union and the list of type in it.
- union = (YangUnion) type.getDataTypeExtendedInfo();
- unionTypeItr = union.getTypeList().listIterator();
- type = unionTypeItr.next();
-
- // Gets the first level union and the list of type in it.
- union2 = (YangUnion) type.getDataTypeExtendedInfo();
- unionTypeItr2 = union2.getTypeList().listIterator();
- type2 = unionTypeItr2.next();
-
- // Checks the first identity-ref in second level union.
- idRef = (YangIdentityRef) type2.getDataTypeExtendedInfo();
- assertThat(getInCrtUnionWithIdRef(
- SECOND, FIRST, AVAILABILITY_SYS_LOG, TYPEDEF, CORRECT),
- idRef.getBaseIdentity().getName(),
- is(AVAILABILITY_SYS_LOG));
-
- // Checks the second identity-ref in second level union.
- type2 = unionTypeItr2.next();
- derInfo = (YangDerivedInfo) type2.getDataTypeExtendedInfo();
- type2 = derInfo.getReferredTypeDef().getTypeList().get(0);
- idRef = (YangIdentityRef) type2.getDataTypeExtendedInfo();
- assertThat(getInCrtUnionWithIdRef(
- SECOND, SECOND, AVAILABILITY_SYS_LOG, TYPEDEF, CORRECT),
- idRef.getBaseIdentity().getName(),
- is(AVAILABILITY_SYS_LOG));
-
- // Checks the first identity-ref in first level union.
- type = unionTypeItr.next();
- idRef = (YangIdentityRef) type.getDataTypeExtendedInfo();
- assertThat(getInCrtUnionWithIdRef(
- FIRST, FIRST, USABILITY_SYS_LOG, TYPEDEF, CORRECT),
- idRef.getBaseIdentity().getName(),
- is(USABILITY_SYS_LOG));
-
- YangContainer container = (YangContainer) list.getChild()
- .getNextSibling().getNextSibling();
-
-
- Iterator<YangLeafList> leafListItr = container.getListOfLeafList()
- .listIterator();
- YangLeafList leafListInfo = leafListItr.next();
-
- // Checks if the leaf-list has identity-ref in union.
- assertThat(getInCrtName(LEAF_LIST, FACILITY), leafListInfo.getName(),
- is(FACILITY));
-
- // Gets the first level union and the list of type in it.
- union = (YangUnion) leafListInfo.getDataType()
- .getDataTypeExtendedInfo();
- unionTypeItr = union.getTypeList().listIterator();
- type = unionTypeItr.next();
-
- // Gets the second level union and types in it.
- union2 = (YangUnion) type.getDataTypeExtendedInfo();
- unionTypeItr2 = union2.getTypeList().listIterator();
- type2 = unionTypeItr2.next();
-
- // Gets the third level union and types in it.
- union3 = (YangUnion) type2.getDataTypeExtendedInfo();
- unionTypeItr3 = union3.getTypeList().listIterator();
- type3 = unionTypeItr3.next();
-
- // Checks the first identity-ref in third level union.
- idRef = (YangIdentityRef) type3.getDataTypeExtendedInfo();
- assertThat(getInCrtUnionWithIdRef(
- THIRD, FIRST, USABILITY_SYS_LOG, LEAF_LIST, FACILITY),
- idRef.getBaseIdentity().getName(),
- is(USABILITY_SYS_LOG));
-
- // Checks the first identity-ref in second level union.
- type2 = unionTypeItr2.next();
- idRef = (YangIdentityRef) type2.getDataTypeExtendedInfo();
- assertThat(getInCrtUnionWithIdRef(
- SECOND, FIRST, FACILITY_SYS_LOG, LEAF_LIST, FACILITY),
- idRef.getBaseIdentity().getName(),
- is(FACILITY_SYS_LOG));
-
- // Checks the first identity-ref in first level union.
- type = unionTypeItr.next();
- derInfo = (YangDerivedInfo) type.getDataTypeExtendedInfo();
- type = derInfo.getReferredTypeDef().getTypeList().get(0);
- idRef = (YangIdentityRef) type.getDataTypeExtendedInfo();
- assertThat(getInCrtUnionWithIdRef(
- FIRST, FIRST, AVAILABILITY_SYS_LOG, LEAF_LIST, FACILITY),
- idRef.getBaseIdentity().getName(),
- is(AVAILABILITY_SYS_LOG));
-
- // Checks derived type in third level union.
- type3 = unionTypeItr3.next();
- derivedInfo = (YangDerivedInfo) type3.getDataTypeExtendedInfo();
- typeDef = derivedInfo.getReferredTypeDef();
- typeDefItr = typeDef.getTypeList().listIterator();
- type = typeDefItr.next();
-
- // Gets the first level union and the list of type in it.
- union = (YangUnion) type.getDataTypeExtendedInfo();
- unionTypeItr = union.getTypeList().listIterator();
- type = unionTypeItr.next();
-
- // Gets the first level union and the list of type in it.
- union2 = (YangUnion) type.getDataTypeExtendedInfo();
- unionTypeItr2 = union2.getTypeList().listIterator();
- type2 = unionTypeItr2.next();
-
- // Checks the first identity-ref in second level union.
- idRef = (YangIdentityRef) type2.getDataTypeExtendedInfo();
- assertThat(getInCrtUnionWithIdRef(
- SECOND, FIRST, AVAILABILITY_SYS_LOG, TYPEDEF, CORRECT),
- idRef.getBaseIdentity().getName(),
- is(AVAILABILITY_SYS_LOG));
-
- // Checks the second identity-ref in second level union.
- type2 = unionTypeItr2.next();
- derInfo = (YangDerivedInfo) type2.getDataTypeExtendedInfo();
- type2 = derInfo.getReferredTypeDef().getTypeList().get(0);
- idRef = (YangIdentityRef) type2.getDataTypeExtendedInfo();
- assertThat(getInCrtUnionWithIdRef(
- SECOND, SECOND, AVAILABILITY_SYS_LOG, TYPEDEF, CORRECT),
- idRef.getBaseIdentity().getName(),
- is(AVAILABILITY_SYS_LOG));
-
- // Checks the first identity-ref in first level union.
- type = unionTypeItr.next();
- idRef = (YangIdentityRef) type.getDataTypeExtendedInfo();
- assertThat(getInCrtUnionWithIdRef(
- FIRST, FIRST, USABILITY_SYS_LOG, TYPEDEF, CORRECT),
- idRef.getBaseIdentity().getName(),
- is(USABILITY_SYS_LOG));
- }
-
- /**
- * Processes identity-ref when present under typedef, during intra and
- * inter file linking.
- *
- * @throws IOException if violates IO operation
- */
- @Test
- public void processIdentityRefWithTypeDef() throws IOException {
-
- utilMgr.createYangFileInfoSet(getYangFiles(DIR + "idreftypedef"));
- utilMgr.parseYangFileInfoSet();
- utilMgr.createYangNodeSet();
- YangNode selfNode;
-
- // Create YANG node set
- linkerMgr.createYangNodeSet(utilMgr.getYangNodeSet());
-
- // Add references to import list.
- linkerMgr.addRefToYangFilesImportList(utilMgr.getYangNodeSet());
- updateFilePriority(utilMgr.getYangNodeSet());
-
- // Carry out inter-file linking.
- linkerMgr.processInterFileLinking(utilMgr.getYangNodeSet());
- Iterator<YangNode> nodeItr = utilMgr.getYangNodeSet().iterator();
- YangNode rootNode = nodeItr.next();
-
- if (rootNode.getName().equals("IdRefInTypeDef1")) {
- selfNode = rootNode;
- } else {
- selfNode = nodeItr.next();
- }
-
- YangDerivedInfo derInfo2;
- YangTypeDef typedef2;
- YangDerivedInfo derInfo3;
- YangTypeDef typedef3;
-
- YangModule module = (YangModule) selfNode;
- leafItr = module.getListOfLeaf().listIterator();
-
- // Gets the first leaf, which has three typedef with effective id-ref.
- leafInfo = leafItr.next();
- assertThat(getInCrtName(LEAF, LEAF), leafInfo.getName(), is(LEAF));
- assertThat(getInCrtLeafType(LEAF, LEAF),
- leafInfo.getDataType().getDataType(), is(DERIVED));
-
- // Traverses through the three typedef in it.
- derInfo1 = (YangDerivedInfo) leafInfo.getDataType()
- .getDataTypeExtendedInfo();
- typedef1 = derInfo1.getReferredTypeDef();
- type1 = typedef1.getTypeList().get(0);
- derInfo2 = (YangDerivedInfo) type1.getDataTypeExtendedInfo();
- typedef2 = derInfo2.getReferredTypeDef();
- type2 = typedef2.getTypeList().get(0);
- derInfo3 = (YangDerivedInfo) type2.getDataTypeExtendedInfo();
- typedef3 = derInfo3.getReferredTypeDef();
- type3 = typedef3.getTypeList().get(0);
- idRef = (YangIdentityRef) type3.getDataTypeExtendedInfo();
-
- assertThat(getInCrtLeafType(TYPEDEF, typedef1.getName()),
- derInfo1.getEffectiveBuiltInType(), is(IDENTITYREF));
- assertThat(getInCrtLeafType(TYPEDEF, typedef3.getName()),
- idRef.getBaseIdentity().getName(), is(BASE1));
-
- leafListItr = module.getListOfLeafList().listIterator();
-
- // Gets the first leaf, which has two typedef with effective id-ref.
- leafListInfo = leafListItr.next();
- assertThat(getInCrtName(LEAF_LIST, LEAF_LIST), leafListInfo.getName(),
- is(LEAF_LIST));
- assertThat(getInCrtLeafType(LEAF_LIST, LEAF_LIST),
- leafListInfo.getDataType().getDataType(), is(DERIVED));
-
- // Traverses through the two typedef in it.
- derInfo1 = (YangDerivedInfo) leafListInfo.getDataType()
- .getDataTypeExtendedInfo();
- typedef1 = derInfo1.getReferredTypeDef();
- type1 = typedef1.getTypeList().get(0);
- derInfo2 = (YangDerivedInfo) type1.getDataTypeExtendedInfo();
- typedef2 = derInfo2.getReferredTypeDef();
- type2 = typedef2.getTypeList().get(0);
- idRef = (YangIdentityRef) type2.getDataTypeExtendedInfo();
-
- assertThat(getInCrtLeafType(TYPEDEF, typedef1.getName()),
- derInfo1.getEffectiveBuiltInType(), is(IDENTITYREF));
- assertThat(getInCrtLeafType(TYPEDEF, typedef3.getName()),
- idRef.getBaseIdentity().getName(), is(BASE1));
-
- // Gets the leaf with union having typedef referred from other file.
- leafInfo = leafItr.next();
- assertThat(getInCrtName(LEAF, UNI), leafInfo.getName(), is(UNI));
- assertThat(getInCrtLeafType(LEAF, UNI),
- leafInfo.getDataType().getDataType(),
- is(YangDataTypes.UNION));
-
- union = (YangUnion) leafInfo.getDataType().getDataTypeExtendedInfo();
- type1 = union.getTypeList().get(0);
- idRef = (YangIdentityRef) type1.getDataTypeExtendedInfo();
-
- assertThat(getInCrtLeafType(UNION, "first type"),
- idRef.getBaseIdentity().getName(), is(BASE1));
-
- type1 = union.getTypeList().get(1);
- derInfo1 = (YangDerivedInfo) type1.getDataTypeExtendedInfo();
- typedef1 = derInfo1.getReferredTypeDef();
- type2 = typedef1.getTypeList().get(0);
- idRef = (YangIdentityRef) type2.getDataTypeExtendedInfo();
- assertThat(getInCrtLeafType(UNION, "second type"),
- idRef.getBaseIdentity().getName(), is("id3"));
- }
-
- /**
- * Processes identity-ref when present in grouping used by inter file uses.
- *
- * @throws IOException if violates IO operation
- */
- @Test
- public void processIdentityRefInGrouping() throws IOException {
-
- utilMgr.createYangFileInfoSet(getYangFiles(DIR + "idrefingrouping"));
- utilMgr.parseYangFileInfoSet();
- utilMgr.createYangNodeSet();
- YangNode selfNode;
-
- // Create YANG node set
- linkerMgr.createYangNodeSet(utilMgr.getYangNodeSet());
-
- // Add references to import list.
- linkerMgr.addRefToYangFilesImportList(utilMgr.getYangNodeSet());
- updateFilePriority(utilMgr.getYangNodeSet());
-
- // Carry out inter-file linking.
- linkerMgr.processInterFileLinking(utilMgr.getYangNodeSet());
- Iterator<YangNode> nodeItr = utilMgr.getYangNodeSet().iterator();
- YangNode rootNode = nodeItr.next();
-
- if (rootNode.getName().equals("IdRefInGrouping2")) {
- selfNode = rootNode;
- } else {
- selfNode = nodeItr.next();
- }
-
- YangModule module = (YangModule) selfNode;
- YangContainer cont = (YangContainer) module.getChild();
-
- leafItr = cont.getListOfLeaf().listIterator();
-
- // Gets the first leaf, which has three typedef with effective id-ref.
- leafInfo = leafItr.next();
- assertThat(getInCrtName(LEAF, LEAF), leafInfo.getName(), is(LEAF));
- assertThat(getInCrtLeafType(LEAF, LEAF),
- leafInfo.getDataType().getDataType(), is(IDENTITYREF));
-
- idRef = (YangIdentityRef) leafInfo.getDataType()
- .getDataTypeExtendedInfo();
- assertThat(getInCrtLeafType(LEAF, LEAF),
- idRef.getBaseIdentity().getName(), is(BASE1));
-
- leafListItr = cont.getListOfLeafList().listIterator();
-
- // Gets the first leaf, which has two typedef with effective id-ref.
- leafListInfo = leafListItr.next();
- assertThat(getInCrtName(LEAF_LIST, LEAF_LIST), leafListInfo.getName(),
- is(LEAF_LIST));
- assertThat(getInCrtLeafType(LEAF_LIST, LEAF_LIST),
- leafListInfo.getDataType().getDataType(), is(DERIVED));
-
- // Traverses through the two typedef in it.
- derInfo1 = (YangDerivedInfo) leafListInfo.getDataType()
- .getDataTypeExtendedInfo();
- typedef1 = derInfo1.getReferredTypeDef();
- type1 = typedef1.getTypeList().get(0);
- idRef = (YangIdentityRef) type1.getDataTypeExtendedInfo();
-
- assertThat(getInCrtLeafType(TYPEDEF, typedef1.getName()),
- derInfo1.getEffectiveBuiltInType(), is(IDENTITYREF));
- assertThat(getInCrtLeafType(TYPEDEF, typedef1.getName()),
- idRef.getBaseIdentity().getName(), is(BASE2));
-
- YangContainer cont2 = (YangContainer) cont.getChild().getNextSibling();
- leafItr = cont2.getListOfLeaf().listIterator();
- leafInfo = leafItr.next();
-
- assertThat(getInCrtName(LEAF, LEAF), leafInfo.getName(), is(LEAF));
- assertThat(getInCrtLeafType(LEAF, LEAF),
- leafInfo.getDataType().getDataType(), is(IDENTITYREF));
- idRef = (YangIdentityRef) leafInfo.getDataType()
- .getDataTypeExtendedInfo();
- assertThat(getInCrtLeafType(LEAF, LEAF),
- idRef.getBaseIdentity().getName(), is(BASE2));
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/UnionTranslatorTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/UnionTranslatorTest.java
deleted file mode 100644
index fbee130..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/UnionTranslatorTest.java
+++ /dev/null
@@ -1,261 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.plugin.manager;
-
-import org.apache.maven.plugin.MojoExecutionException;
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
-
-import java.io.File;
-import java.io.IOException;
-
-import static org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorUtil.generateJavaCode;
-import static org.onosproject.yangutils.utils.io.YangPluginConfig.compileCode;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory;
-
-/**
- * Unit tests for union translator.
- */
-public final class UnionTranslatorTest {
-
- private final YangUtilsParserManager manager = new YangUtilsParserManager();
- private static final String DIR = "target/unionTranslator/";
- private static final String DIR1 = System.getProperty("user.dir") + File
- .separator + DIR;
-
- /**
- * Checks union translation should not result in any exception.
- */
- @Test
- public void processUnionTranslator()
- throws IOException, ParserException {
- deleteDirectory(DIR);
- YangNode node = manager.getDataModel("src/test/resources/UnionTranslator.yang");
-
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir(DIR);
-
- generateJavaCode(node, yangPluginConfig);
- compileCode(DIR1);
- deleteDirectory(DIR);
- }
-
- /**
- * Unit test case to test conflicting types.
- *
- * @throws IOException when fails to do IO operations
- * @throws MojoExecutionException when fails to do mojo operations
- */
- @Test
- public void processUnionIntUintConflictingTypes() throws IOException, MojoExecutionException {
- deleteDirectory(DIR);
- String searchDir = "src/test/resources/unionTranslator/intuint";
- YangUtilManager utilManager = new YangUtilManager();
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
-
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir(DIR);
-
- utilManager.translateToJava(yangPluginConfig);
- compileCode(DIR1);
- deleteDirectory(DIR);
- }
-
- /**
- * Unit test case to test conflicting types.
- *
- * @throws IOException when fails to do IO operations
- * @throws MojoExecutionException when fails to do mojo operations
- */
- @Test
- public void processUnionUintIntConflictingTypes() throws IOException,
- MojoExecutionException {
- deleteDirectory(DIR);
- String searchDir = "src/test/resources/unionTranslator/uintint";
- YangUtilManager utilManager = new YangUtilManager();
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
-
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir(DIR);
-
- utilManager.translateToJava(yangPluginConfig);
- compileCode(DIR1);
- deleteDirectory(DIR);
- }
-
- /**
- * Unit test case to test conflicting types.
- *
- * @throws IOException when fails to do IO operations
- * @throws MojoExecutionException when fails to do mojo operations
- */
- @Test
- public void processUnionLongUlongConflictingTypes() throws IOException,
- MojoExecutionException {
- deleteDirectory(DIR);
- String searchDir = "src/test/resources/unionTranslator/longulong";
- YangUtilManager utilManager = new YangUtilManager();
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
-
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir(DIR);
-
- utilManager.translateToJava(yangPluginConfig);
- compileCode(DIR1);
- deleteDirectory(DIR);
- }
-
- /**
- * Unit test case to test conflicting types.
- *
- * @throws IOException when fails to do IO operations
- * @throws MojoExecutionException when fails to do mojo operations
- */
- @Test
- public void processUnionUlongLongConflictingTypes() throws IOException,
- MojoExecutionException {
- deleteDirectory(DIR);
- String searchDir = "src/test/resources/unionTranslator/ulonglong";
- YangUtilManager utilManager = new YangUtilManager();
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
-
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir(DIR);
-
- utilManager.translateToJava(yangPluginConfig);
- compileCode(DIR1);
- deleteDirectory(DIR);
- }
-
- /**
- * Unit test case to test conflicting types.
- *
- * @throws IOException when fails to do IO operations
- * @throws MojoExecutionException when fails to do mojo operations
- */
- @Test
- public void processUnionIntUintUlongLongConflictingTypes() throws IOException,
- MojoExecutionException {
- deleteDirectory(DIR);
- String searchDir = "src/test/resources/unionTranslator/intuintulonglong";
- YangUtilManager utilManager = new YangUtilManager();
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
-
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir(DIR);
-
- utilManager.translateToJava(yangPluginConfig);
- compileCode(DIR1);
- deleteDirectory(DIR);
- }
-
- /**
- * Unit test case to test conflicting types.
- *
- * @throws IOException when fails to do IO operations
- * @throws MojoExecutionException when fails to do mojo operations
- */
- @Test
- public void processUnionIntUintUlongLongStringConflictingTypes() throws IOException,
- MojoExecutionException {
- deleteDirectory(DIR);
- String searchDir = "src/test/resources/unionTranslator/intuintulonglongstring";
- YangUtilManager utilManager = new YangUtilManager();
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
-
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir(DIR);
-
- utilManager.translateToJava(yangPluginConfig);
- compileCode(DIR1);
- deleteDirectory(DIR);
- }
-
- /**
- * Unit test case to test conflicting types.
- *
- * @throws IOException when fails to do IO operations
- * @throws MojoExecutionException when fails to do mojo operations
- */
- @Test
- public void processUnionIntUintStringConflictingTypes() throws IOException,
- MojoExecutionException {
- deleteDirectory(DIR);
- String searchDir = "src/test/resources/unionTranslator/intuintstring";
- YangUtilManager utilManager = new YangUtilManager();
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
-
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir(DIR);
-
- utilManager.translateToJava(yangPluginConfig);
- compileCode(DIR1);
- deleteDirectory(DIR);
- }
-
- /**
- * Unit test case to test Union with binary type.
- *
- * @throws IOException when fails to do IO operations
- * @throws MojoExecutionException when fails to do mojo operations
- */
- @Test
- public void processUnionWithBinaryTypes() throws IOException,
- MojoExecutionException {
- deleteDirectory(DIR);
- String searchDir = "src/test/resources/unionTranslator/unionwithbinary";
- YangUtilManager utilManager = new YangUtilManager();
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
-
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir(DIR);
-
- utilManager.translateToJava(yangPluginConfig);
- compileCode(DIR1);
- deleteDirectory(DIR);
- }
-
- // TODO enhance the test cases, after having a framework of translator test.
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/YangJavaModelUtilsTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/YangJavaModelUtilsTest.java
deleted file mode 100644
index daaa074..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/YangJavaModelUtilsTest.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.plugin.manager;
-
-import org.apache.maven.plugin.MojoExecutionException;
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.plugin.manager.YangUtilManager;
-import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
-
-import java.io.IOException;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.isGetSetOfRootNodeRequired;
-import static org.onosproject.yangutils.translator.tojava.YangJavaModelUtils.isRootNodesCodeGenRequired;
-
-/**
- * Unit test case for java model utils.
- */
-public class YangJavaModelUtilsTest {
-
-
- private final YangUtilManager utilManager = new YangUtilManager();
-
- @Test
- public void isRootNodeContainsOnlyAugmentTest() throws IOException,
- ParserException, MojoExecutionException {
- String searchDir = "src/test/resources/rootNode/onlyaugment";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
-
- for (YangNode node : utilManager.getYangNodeSet()) {
- if (node.getName().equals("test5")) {
- assertThat(false, is(isGetSetOfRootNodeRequired(node)));
- assertThat(true, is(isRootNodesCodeGenRequired(node)));
- }
- if (node.getName().equals("test6")) {
- assertThat(true, is(isGetSetOfRootNodeRequired(node)));
- assertThat(true, is(isRootNodesCodeGenRequired(node)));
- }
- }
- }
-
- @Test
- public void isRootNodeCodeGenRequiredOnlyLeafTest() throws IOException
- , ParserException, MojoExecutionException {
- String searchDir = "src/test/resources/rootNode/onlyleaf";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
-
- for (YangNode node : utilManager.getYangNodeSet()) {
- if (node.getName().equals("test5")) {
- assertThat(true, is(isGetSetOfRootNodeRequired(node)));
- assertThat(true, is(isRootNodesCodeGenRequired(node)));
- }
- }
- }
-
- @Test
- public void isRootNodeCodeGenRequiredOnlyLeafListTest() throws IOException
- , ParserException, MojoExecutionException {
- String searchDir = "src/test/resources/rootNode/onlyleaflist";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
-
- for (YangNode node : utilManager.getYangNodeSet()) {
- if (node.getName().equals("test5")) {
- assertThat(true, is(isGetSetOfRootNodeRequired(node)));
- assertThat(true, is(isRootNodesCodeGenRequired(node)));
- }
- }
- }
-
- @Test
- public void isRootNodeCodeGenRequiredOnlyGroupingTest() throws IOException
- , ParserException, MojoExecutionException {
- String searchDir = "src/test/resources/rootNode/onlygrouping";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
-
- for (YangNode node : utilManager.getYangNodeSet()) {
- if (node.getName().equals("test5")) {
- assertThat(true, is(isGetSetOfRootNodeRequired(node)));
- assertThat(false, is(isRootNodesCodeGenRequired(node)));
- }
- if (node.getName().equals("test6")) {
- assertThat(true, is(isGetSetOfRootNodeRequired(node)));
- assertThat(false, is(isRootNodesCodeGenRequired(node)));
- }
- }
- }
-
-
- @Test
- public void isRootNodeCodeGenRequiredOnlyTypeDefTest() throws IOException
- , ParserException, MojoExecutionException {
- String searchDir = "src/test/resources/rootNode/onlytypdef";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
-
- for (YangNode node : utilManager.getYangNodeSet()) {
- if (node.getName().equals("test5")) {
- assertThat(false, is(isGetSetOfRootNodeRequired(node)));
- assertThat(false, is(isRootNodesCodeGenRequired(node)));
- }
- if (node.getName().equals("test6")) {
- assertThat(true, is(isGetSetOfRootNodeRequired(node)));
- assertThat(false, is(isRootNodesCodeGenRequired(node)));
- }
- }
- }
-
- @Test
- public void isRootNodeCodeGenRequiredNoGenTest() throws IOException
- , ParserException, MojoExecutionException {
- String searchDir = "src/test/resources/rootNode/nogen";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
-
- for (YangNode node : utilManager.getYangNodeSet()) {
- if (node.getName().equals("test5")) {
- assertThat(false, is(isGetSetOfRootNodeRequired(node)));
- assertThat(false, is(isRootNodesCodeGenRequired(node)));
- }
- }
-
- }
-
- @Test
- public void isRootNodeCodeGenRequiredMixedTest() throws IOException
- , ParserException, MojoExecutionException {
- String searchDir = "src/test/resources/rootNode/mixed";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
-
- for (YangNode node : utilManager.getYangNodeSet()) {
- if (node.getName().equals("test5")) {
- assertThat(false, is(isGetSetOfRootNodeRequired(node)));
- assertThat(true, is(isRootNodesCodeGenRequired(node)));
- }
- if (node.getName().equals("test6")) {
- assertThat(true, is(isGetSetOfRootNodeRequired(node)));
- assertThat(true, is(isRootNodesCodeGenRequired(node)));
- }
- }
-
- }
-
- @Test
- public void isRootNodeCodeGenRequiredTypedefGroupingTest() throws IOException
- , ParserException, MojoExecutionException {
- String searchDir = "src/test/resources/rootNode/typedefgrouping";
- utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
-
- for (YangNode node : utilManager.getYangNodeSet()) {
- if (node.getName().equals("test5")) {
- assertThat(true, is(isGetSetOfRootNodeRequired(node)));
- assertThat(false, is(isRootNodesCodeGenRequired(node)));
- }
- }
-
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/YangPluginUtilsTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/YangPluginUtilsTest.java
deleted file mode 100644
index b6769ce..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/YangPluginUtilsTest.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.plugin.manager;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.maven.project.MavenProject;
-import org.junit.Test;
-import org.sonatype.plexus.build.incremental.BuildContext;
-import org.sonatype.plexus.build.incremental.DefaultBuildContext;
-
-import java.io.File;
-import java.io.IOException;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-import static org.onosproject.yangutils.plugin.manager.YangPluginUtils.addToCompilationRoot;
-
-/**
- * Unit test case for YANG plugin utils.
- */
-public class YangPluginUtilsTest {
-
- private static final String BASE_DIR = "target/UnitTestCase";
-
- /**
- * This test case checks whether the source is getting added.
- */
- @Test
- public void testForAddSource() throws IOException {
-
- MavenProject project = new MavenProject();
- BuildContext context = new DefaultBuildContext();
- String dir = BASE_DIR + File.separator + "yang";
- String path = System.getProperty("user.dir") + File.separator + dir;
- File sourceDir = new File(dir);
- sourceDir.mkdirs();
- addToCompilationRoot(sourceDir.toString(), project, context);
- assertThat(true, is(project.getCompileSourceRoots().contains(path)));
- FileUtils.deleteDirectory(sourceDir);
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/YangXpathLinkerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/YangXpathLinkerTest.java
deleted file mode 100644
index d4bea49..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/plugin/manager/YangXpathLinkerTest.java
+++ /dev/null
@@ -1,762 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.plugin.manager;
-
-import org.apache.maven.plugin.MojoExecutionException;
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.ResolvableType;
-import org.onosproject.yangutils.datamodel.YangAugment;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangReferenceResolver;
-import org.onosproject.yangutils.datamodel.YangResolutionInfo;
-import org.onosproject.yangutils.linker.impl.YangLinkerManager;
-import org.onosproject.yangutils.linker.impl.YangXpathLinker;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.List;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-import static org.onosproject.yangutils.linker.impl.XpathLinkingTypes.AUGMENT_LINKING;
-import static org.onosproject.yangutils.linker.impl.YangLinkerUtils.updateFilePriority;
-import static org.onosproject.yangutils.utils.io.YangPluginConfig.compileCode;
-import static org.onosproject.yangutils.utils.io.impl.YangFileScanner.getYangFiles;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory;
-
-/**
- * Unit test cases for x-path linker.
- */
-public class YangXpathLinkerTest {
-
- private static final String INTRA_FILE_PATH = "src/test/resources/xPathLinker/IntraFile/";
- private static final String INTER_FILE_PATH = "src/test/resources/xPathLinker/InterFile/";
- private static final String CASE_FILE_PATH = "src/test/resources/xPathLinker/Case/";
- private YangUtilManager utilManager = new YangUtilManager();
- private YangXpathLinker<?> linker = new YangXpathLinker();
- private YangLinkerManager linkerManager = new YangLinkerManager();
-
- /**
- * Unit test case for intra file linking for single level container.
- *
- * @throws IOException when fails to do IO operations
- * @throws MojoExecutionException
- */
- @Test
- public void processIntraFileLinkingSingleLevel() throws IOException, MojoExecutionException {
-
- utilManager.createYangFileInfoSet(getYangFiles(INTRA_FILE_PATH + "IntraSingle/"));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- utilManager.resolveDependenciesUsingLinker();
-
- YangNode targetNode = null;
- String targetNodeName = null;
-
- for (YangNode node : utilManager.getYangNodeSet()) {
- YangReferenceResolver ref = (YangReferenceResolver) node;
- List<YangResolutionInfo> infos = ref.getUnresolvedResolutionList(ResolvableType.YANG_AUGMENT);
- YangResolutionInfo info = infos.get(0);
-
- YangAugment augment = (YangAugment) info.getEntityToResolveInfo().getEntityToResolve();
- targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1).getNodeIdentifier()
- .getName();
- targetNode = augment.getAugmentedNode();
-
- }
-
- assertThat(true, is(targetNode.getName().equals(targetNodeName)));
- }
-
- /**
- * Unit test case for intra file linking for multiple level container.
- *
- * @throws IOException when fails to do IO operations
- */
- @Test
- public void processIntraFileLinkingMultipleLevel() throws IOException {
-
- utilManager.createYangFileInfoSet(getYangFiles(INTRA_FILE_PATH + "IntraMulti/"));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
-
- YangNode targetNode = null;
- String targetNodeName = null;
-
- for (YangNode node : utilManager.getYangNodeSet()) {
- List<YangAugment> augments = linker.getListOfYangAugment(node);
-
- for (YangAugment augment : augments) {
- targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1).getNodeIdentifier()
- .getName();
- targetNode = linker.processXpathLinking(augment.getTargetNode(), node, AUGMENT_LINKING);
- }
- }
-
- assertThat(true, is(targetNode.getName().equals(targetNodeName)));
- }
-
- /**
- * Unit test case for intra file linking for single level augment.
- *
- * @throws IOException when fails to do IO operations
- */
- @Test
- public void processIntraFileLinkingInAugmentSingleLevel() throws IOException {
- utilManager.createYangFileInfoSet(getYangFiles(INTRA_FILE_PATH + "IntraSingleAugment/"));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
-
- YangNode targetNode = null;
- String targetNodeName = null;
-
- for (YangNode node : utilManager.getYangNodeSet()) {
- List<YangAugment> augments = linker.getListOfYangAugment(node);
-
- for (YangAugment augment : augments) {
- targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1).getNodeIdentifier()
- .getName();
- targetNode = linker.processXpathLinking(augment.getTargetNode(), node, AUGMENT_LINKING);
- }
- }
-
- assertThat(true, is(targetNode.getName().equals(targetNodeName)));
- }
-
- /**
- * Unit test case for intra file linking for multiple level augment
- * without prefix.
- *
- * @throws IOException if fails to do IO operations
- */
- @Test
- public void processIntraFileMultiLevelWithoutPrefix() throws IOException {
-
- utilManager.createYangFileInfoSet(getYangFiles(
- INTRA_FILE_PATH + "IntraMultiAugment/withoutprefix"));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
- linkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
- linkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
- linkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- YangNode target = null;
- String name = null;
-
- for (YangNode node : utilManager.getYangNodeSet()) {
- List<YangAugment> augments = linker.getListOfYangAugment(node);
- for (YangAugment augment : augments) {
- name = augment.getTargetNode()
- .get(augment.getTargetNode().size() - 1)
- .getNodeIdentifier().getName();
- target = linker.processXpathLinking(augment.getTargetNode(),
- node, AUGMENT_LINKING);
- }
- }
- assertThat(true, is(target.getName().equals(name)));
- }
-
- /**
- * Unit test case for intra file linking for multiple level augment with
- * prefix.
- *
- * @throws IOException if fails to do IO operations
- */
- @Test
- public void processIntraFileWithPrefix() throws IOException {
-
- utilManager.createYangFileInfoSet(getYangFiles(
- INTRA_FILE_PATH + "IntraMultiAugment/withprefix"));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
- linkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
- linkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
- linkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- YangNode target = null;
- String name = null;
-
- for (YangNode node : utilManager.getYangNodeSet()) {
- List<YangAugment> augments = linker.getListOfYangAugment(node);
- for (YangAugment augment : augments) {
- name = augment.getTargetNode()
- .get(augment.getTargetNode().size() - 1)
- .getNodeIdentifier().getName();
- target = linker.processXpathLinking(augment.getTargetNode(),
- node, AUGMENT_LINKING);
- }
- }
- assertThat(true, is(target.getName().equals(name)));
-
- }
-
- /**
- * Unit test case for intra file linking for multiple level augment with
- * partial prefix.
- *
- * @throws IOException if fails to do IO operations
- */
- @Test
- public void processIntraFileWithPartialPrefix() throws IOException {
-
- utilManager.createYangFileInfoSet(getYangFiles(
- INTRA_FILE_PATH + "IntraMultiAugment/withpartialprefix"));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
- linkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
- linkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
- linkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- YangNode target = null;
- String name = null;
-
- for (YangNode node : utilManager.getYangNodeSet()) {
- List<YangAugment> augments = linker.getListOfYangAugment(node);
- for (YangAugment augment : augments) {
- name = augment.getTargetNode()
- .get(augment.getTargetNode().size() - 1)
- .getNodeIdentifier().getName();
- target = linker.processXpathLinking(augment.getTargetNode(),
- node, AUGMENT_LINKING);
- }
- }
- assertThat(true, is(target.getName().equals(name)));
- }
-
- /**
- * Unit test case for intra file linking for multiple level submodule.
- *
- * @throws IOException when fails to do IO operations
- */
- @Test
- public void processIntraFileLinkingInSubModuleSingleLevel() throws IOException {
- utilManager.createYangFileInfoSet(getYangFiles(INTRA_FILE_PATH + "IntraSingleSubModule/"));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
- linkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
- linkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
-
- YangNode targetNode = null;
- String targetNodeName = null;
-
- for (YangNode node : utilManager.getYangNodeSet()) {
- List<YangAugment> augments = linker.getListOfYangAugment(node);
-
- for (YangAugment augment : augments) {
- targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1).getNodeIdentifier()
- .getName();
- targetNode = linker.processXpathLinking(augment.getTargetNode(), node, AUGMENT_LINKING);
- }
- }
-
- assertThat(true, is(targetNode.getName().equals(targetNodeName)));
- }
-
- /**
- * Unit test case for intra file linking for multiple level submodule.
- *
- * @throws IOException when fails to do IO operations
- */
- @Test
- public void processIntraFileLinkingInSubModuleMultiLevel() throws IOException {
-
- utilManager.createYangFileInfoSet(getYangFiles(INTRA_FILE_PATH + "IntraMultiSubModule/"));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
- linkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
- linkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
-
- YangNode targetNode = null;
- String targetNodeName = null;
-
- for (YangNode node : utilManager.getYangNodeSet()) {
- List<YangAugment> augments = linker.getListOfYangAugment(node);
-
- for (YangAugment augment : augments) {
- targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1).getNodeIdentifier()
- .getName();
- targetNode = linker.processXpathLinking(augment.getTargetNode(), node, AUGMENT_LINKING);
- }
- }
-
- assertThat(true, is(targetNode.getName().equals(targetNodeName)));
- }
-
- /**
- * Unit test case for intra file linking for single level uses.
- *
- * @throws IOException when fails to do IO operations
- */
- @Test
- public void processIntraFileLinkingInUsesSingleLevel() throws IOException {
-
- utilManager.createYangFileInfoSet(getYangFiles(INTRA_FILE_PATH + "IntraSingleUses/"));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
- updateFilePriority(utilManager.getYangNodeSet());
- linkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- YangNode targetNode = null;
- String targetNodeName = null;
-
- for (YangNode node : utilManager.getYangNodeSet()) {
- List<YangAugment> augments = linker.getListOfYangAugment(node);
-
- for (YangAugment augment : augments) {
- targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1).getNodeIdentifier()
- .getName();
- targetNode = linker.processXpathLinking(augment.getTargetNode(), node, AUGMENT_LINKING);
- }
- }
-
- assertThat(true, is(targetNode.getName().equals(targetNodeName)));
- }
-
- /**
- * Unit test case for intra file linking for multi level uses.
- *
- * @throws IOException when fails to do IO operations
- */
- @Test
- public void processIntraFileLinkingInUsesMultiLevel() throws IOException {
-
- utilManager.createYangFileInfoSet(getYangFiles(INTRA_FILE_PATH + "IntraMultiUses/"));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
- updateFilePriority(utilManager.getYangNodeSet());
- linkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- YangNode targetNode = null;
- String targetNodeName = null;
-
- for (YangNode node : utilManager.getYangNodeSet()) {
- List<YangAugment> augments = linker.getListOfYangAugment(node);
-
- for (YangAugment augment : augments) {
- targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1).getNodeIdentifier()
- .getName();
- targetNode = linker.processXpathLinking(augment.getTargetNode(), node, AUGMENT_LINKING);
- }
- }
-
- assertThat(true, is(targetNode.getName().equals(targetNodeName)));
- }
-
- /**
- * Unit test case for inter file linking for single level container.
- *
- * @throws IOException when fails to do IO operations
- */
- @Test
- public void processInterFileLinkingSingleLevel() throws IOException {
-
- utilManager.createYangFileInfoSet(getYangFiles(INTER_FILE_PATH + "InterSingle/"));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
- linkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- YangNode targetNode = null;
- String targetNodeName = null;
-
- for (YangNode node : utilManager.getYangNodeSet()) {
- List<YangAugment> augments = linker.getListOfYangAugment(node);
-
- for (YangAugment augment : augments) {
- targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1).getNodeIdentifier()
- .getName();
- targetNode = linker.processXpathLinking(augment.getTargetNode(), node, AUGMENT_LINKING);
- }
- }
-
- assertThat(true, is(targetNode.getName().equals(targetNodeName)));
- }
-
- /**
- * Unit test case for inter file linking for multi level container.
- *
- * @throws IOException when fails to do IO operations
- */
- @Test
- public void processInterFileLinkingMultipleLevel() throws IOException {
-
- utilManager.createYangFileInfoSet(getYangFiles(INTER_FILE_PATH + "InterMulti/"));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
- linkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- YangNode targetNode = null;
- String targetNodeName = null;
-
- for (YangNode node : utilManager.getYangNodeSet()) {
- List<YangAugment> augments = linker.getListOfYangAugment(node);
-
- for (YangAugment augment : augments) {
- targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1).getNodeIdentifier()
- .getName();
- targetNode = linker.processXpathLinking(augment.getTargetNode(), node, AUGMENT_LINKING);
- }
- }
-
- assertThat(true, is(targetNode.getName().equals(targetNodeName)));
- }
-
- /**
- * Unit test case for inter file linking for single level augment.
- *
- * @throws IOException when fails to do IO operations
- */
- @Test
- public void processInterFileLinkingInAugmentSingleLevel() throws IOException {
-
- utilManager.createYangFileInfoSet(getYangFiles(INTER_FILE_PATH + "InterSingleAugment/"));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
- linkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- YangNode targetNode = null;
- String targetNodeName = null;
-
- for (YangNode node : utilManager.getYangNodeSet()) {
- List<YangAugment> augments = linker.getListOfYangAugment(node);
-
- for (YangAugment augment : augments) {
- targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1).getNodeIdentifier()
- .getName();
- targetNode = linker.processXpathLinking(augment.getTargetNode(), node, AUGMENT_LINKING);
- }
- }
-
- assertThat(true, is(targetNode.getName().equals(targetNodeName)));
- }
-
- /**
- * Unit test case for inter file linking for multi level augment.
- *
- * @throws IOException when fails to do IO operations
- */
- @Test
- public void processInterFileLinkingInAugmentMultiLevel() throws IOException {
-
- utilManager.createYangFileInfoSet(getYangFiles(INTER_FILE_PATH + "InterMultiAugment/"));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
- linkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- YangNode targetNode = null;
- String targetNodeName = null;
-
- for (YangNode node : utilManager.getYangNodeSet()) {
- List<YangAugment> augments = linker.getListOfYangAugment(node);
-
- for (YangAugment augment : augments) {
- targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1).getNodeIdentifier()
- .getName();
- targetNode = linker.processXpathLinking(augment.getTargetNode(), node, AUGMENT_LINKING);
- }
- }
-
- assertThat(true, is(targetNode.getName().equals(targetNodeName)));
- }
-
- /**
- * Unit test case for multipler inter file linking for single level augment.
- *
- * @throws IOException when fails to do IO operations
- */
- @Test
- public void processMultiInterFileLinkingInAugmentSingleLevel() throws IOException {
-
- utilManager.createYangFileInfoSet(getYangFiles(INTER_FILE_PATH + "InterMultiFileAugment/"));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
- linkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
-
- YangNode targetNode = null;
- String targetNodeName = null;
-
- for (YangNode node : utilManager.getYangNodeSet()) {
- List<YangAugment> augments = linker.getListOfYangAugment(node);
-
- for (YangAugment augment : augments) {
- targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1).getNodeIdentifier()
- .getName();
- targetNode = linker.processXpathLinking(augment.getTargetNode(), node, AUGMENT_LINKING);
- }
- }
-
- assertThat(true, is(targetNode.getName().equals(targetNodeName)));
- }
-
- /**
- * Unit test case for multiple inter file linking for multi level augment.
- *
- * @throws IOException when fails to do IO operations
- */
- @Test
- public void processMultiInterFileLinkingInAugmentMultiLevel() throws IOException {
-
- utilManager
- .createYangFileInfoSet(getYangFiles(INTER_FILE_PATH + "InterMultiFileAugmentMulti/"));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
- linkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
- linkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
- linkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
- updateFilePriority(utilManager.getYangNodeSet());
- linkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- YangNode targetNode = null;
- String targetNodeName = null;
-
- for (YangNode node : utilManager.getYangNodeSet()) {
- List<YangAugment> augments = linker.getListOfYangAugment(node);
-
- for (YangAugment augment : augments) {
- targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1).getNodeIdentifier()
- .getName();
- targetNode = augment.getAugmentedNode();
- }
- }
-
- assertThat(true, is(targetNode.getName().equals(targetNodeName)));
- }
-
- /**
- * Unit test case for inter file linking for single level submodule.
- *
- * @throws IOException when fails to do IO operations
- */
- @Test
- public void processInterFileLinkingInSubModuleSingleLevel() throws IOException {
-
- utilManager.createYangFileInfoSet(getYangFiles(INTER_FILE_PATH + "InterSingleSubModule/"));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
- linkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
- linkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
- linkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
- updateFilePriority(utilManager.getYangNodeSet());
- linkerManager.processInterFileLinking(utilManager.getYangNodeSet());
- YangNode targetNode = null;
- String targetNodeName = null;
-
- for (YangNode node : utilManager.getYangNodeSet()) {
- List<YangAugment> augments = linker.getListOfYangAugment(node);
-
- for (YangAugment augment : augments) {
- targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1).getNodeIdentifier()
- .getName();
- targetNode = augment.getAugmentedNode();
- }
- }
-
- assertThat(true, is(targetNode.getName().equals(targetNodeName)));
- }
-
- /**
- * Unit test case for inter file linking for multi level submodule.
- *
- * @throws IOException when fails to do IO operations
- */
- @Test
- public void processInterFileLinkingInSubModuleMultiLevel() throws IOException {
-
- utilManager.createYangFileInfoSet(getYangFiles(INTER_FILE_PATH + "InterMultiSubModule/"));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
- linkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
- linkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
- linkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
- updateFilePriority(utilManager.getYangNodeSet());
- linkerManager.processInterFileLinking(utilManager.getYangNodeSet());
- YangNode targetNode = null;
- String targetNodeName = null;
-
- for (YangNode node : utilManager.getYangNodeSet()) {
- List<YangAugment> augments = linker.getListOfYangAugment(node);
-
- for (YangAugment augment : augments) {
- targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1).getNodeIdentifier()
- .getName();
- targetNode = augment.getAugmentedNode();
- }
- }
-
- assertThat(true, is(targetNode.getName().equals(targetNodeName)));
- }
-
- /**
- * Unit test case for inter file linking for multi level uses inside augment.
- *
- * @throws IOException when fails to do IO operations
- */
- @Test
- public void processInterFileLinkingInUsesInAugment() throws IOException {
-
- utilManager.createYangFileInfoSet(getYangFiles(INTER_FILE_PATH + "InterSingleUses/"));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
- linkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
- linkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
- linkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
- updateFilePriority(utilManager.getYangNodeSet());
- linkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- YangNode targetNode = null;
- String targetNodeName = null;
-
- for (YangNode node : utilManager.getYangNodeSet()) {
- List<YangAugment> augments = linker.getListOfYangAugment(node);
-
- for (YangAugment augment : augments) {
- targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1)
- .getNodeIdentifier().getName();
- targetNode = augment.getAugmentedNode();
- }
- }
-
- assertThat(true, is(targetNode.getName().equals(targetNodeName)));
-
- }
-
- /**
- * Unit test case for inter file linking for multi level uses.
- *
- * @throws IOException when fails to do IO operations
- */
- @Test
- public void processInterFileLinkingInUsesMultiLevel() throws IOException {
-
- utilManager.createYangFileInfoSet(getYangFiles(INTER_FILE_PATH + "InterMultiUses/"));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
- linkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
- linkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
- updateFilePriority(utilManager.getYangNodeSet());
- linkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- YangNode targetNode = null;
- String targetNodeName = null;
-
- for (YangNode node : utilManager.getYangNodeSet()) {
- List<YangAugment> augments = linker.getListOfYangAugment(node);
-
- for (YangAugment augment : augments) {
- targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1).getNodeIdentifier()
- .getName();
- targetNode = linker.processXpathLinking(augment.getTargetNode(), node, AUGMENT_LINKING);
- }
- }
-
- assertThat(true, is(targetNode.getName().equals(targetNodeName)));
- }
-
- /**
- * Unit test case for inter file linking for multi level uses inside augment.
- *
- * @throws IOException when fails to do IO operations
- */
- @Test
- public void processInterFileLinkingInMultipleSubmodules() throws IOException {
-
- utilManager.createYangFileInfoSet(getYangFiles(CASE_FILE_PATH + "submodule/"));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
- linkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
- linkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
- linkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
- updateFilePriority(utilManager.getYangNodeSet());
-
- linkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- YangNode targetNode = null;
- String targetNodeName = null;
-
- for (YangNode node : utilManager.getYangNodeSet()) {
- List<YangAugment> augments = linker.getListOfYangAugment(node);
-
- for (YangAugment augment : augments) {
- targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1)
- .getNodeIdentifier().getName();
- targetNode = augment.getAugmentedNode();
- }
- }
-
- assertThat(true, is(targetNode.getName().equals(targetNodeName)));
-
- }
-
- /**
- * Unit test case for inter file linking for multi level uses inside augment.
- *
- * @throws IOException when fails to do IO operations
- */
- @Test
- public void processInterFileLinkingInMultipleUses() throws IOException {
-
- deleteDirectory("target/xpath/");
- utilManager.createYangFileInfoSet(getYangFiles(CASE_FILE_PATH + "uses/"));
- utilManager.parseYangFileInfoSet();
- utilManager.createYangNodeSet();
- linkerManager.createYangNodeSet(utilManager.getYangNodeSet());
- linkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
- linkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
- linkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
- updateFilePriority(utilManager.getYangNodeSet());
- linkerManager.processInterFileLinking(utilManager.getYangNodeSet());
-
- YangNode targetNode = null;
- String targetNodeName = null;
-
- for (YangNode node : utilManager.getYangNodeSet()) {
- List<YangAugment> augments = linker.getListOfYangAugment(node);
-
- for (YangAugment augment : augments) {
- targetNodeName = augment.getTargetNode().get(augment.getTargetNode().size() - 1)
- .getNodeIdentifier().getName();
- targetNode = augment.getAugmentedNode();
- }
- }
-
- YangPluginConfig yangPluginConfig = new YangPluginConfig();
- yangPluginConfig.setCodeGenDir("target/xpath/");
- utilManager.translateToJava(yangPluginConfig);
- String dir = System.getProperty("user.dir") + File.separator + "target/xpath/";
- compileCode(dir);
- deleteDirectory("target/xpath/");
- assertThat(true, is(targetNode.getName().equals(targetNodeName)));
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/translator/tojava/javamodel/AttributesJavaDataTypeTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/translator/tojava/javamodel/AttributesJavaDataTypeTest.java
deleted file mode 100644
index b69ea9a..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/translator/tojava/javamodel/AttributesJavaDataTypeTest.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava.javamodel;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
-import org.onosproject.yangutils.datamodel.YangDerivedInfo;
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.translator.tojava.JavaFileInfoTranslator;
-import org.onosproject.yangutils.utils.io.YangToJavaNamingConflictUtil;
-
-import static org.hamcrest.core.Is.is;
-import static org.hamcrest.core.IsNot.not;
-import static org.junit.Assert.assertThat;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.BOOLEAN;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.INT32;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.STRING;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.UINT8;
-import static org.onosproject.yangutils.translator.tojava.javamodel.AttributesJavaDataType.getJavaDataType;
-import static org.onosproject.yangutils.translator.tojava.javamodel.AttributesJavaDataType.getJavaImportClass;
-import static org.onosproject.yangutils.translator.tojava.javamodel.AttributesJavaDataType.getJavaImportPackage;
-import static org.onosproject.yangutils.utils.UtilConstants.JAVA_LANG;
-
-/**
- * Unit test case for attribute java data type.
- */
-public class AttributesJavaDataTypeTest {
-
- private static final YangDataTypes TYPE1 = STRING;
- private static final YangDataTypes TYPE2 = INT32;
- private static final YangDataTypes TYPE3 = BOOLEAN;
- private static final YangDataTypes TYPE4 = UINT8;
- private static final YangDataTypes TYPE_DEF = DERIVED;
- private static final String CLASS_INFO1 = "String";
- private static final String CLASS_INFO2 = "int";
- private static final String CLASS_INFO3 = "boolean";
- private static final String CLASS_INFO4 = "short";
- 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.
- *
- * @throws SecurityException if any security violation is observed
- * @throws NoSuchMethodException if when the method is not found
- * @throws IllegalArgumentException if there is illegal argument found
- * @throws InstantiationException if instantiation is provoked for the private constructor
- * @throws IllegalAccessException if instance is provoked or a method is provoked
- * @throws InvocationTargetException when an exception occurs by the method or constructor
- */
- @Test
- public void callPrivateConstructors()
- throws SecurityException, NoSuchMethodException, IllegalArgumentException,
- InstantiationException, IllegalAccessException, InvocationTargetException {
-
- Class<?>[] classesToConstruct = {AttributesJavaDataType.class };
- for (Class<?> clazz : classesToConstruct) {
- Constructor<?> constructor = clazz.getDeclaredConstructor();
- constructor.setAccessible(true);
- assertThat(null, not(constructor.newInstance()));
- }
- }
-
- /**
- * Unit test for java class info method test.
- */
- @Test
- public void testgetJavaClassInfo() {
- test = getJavaImportClass(getStubYangType(TYPE1), false, pluginConfig);
- assertThat(true, is(test.equals(CLASS_INFO1)));
-
- test = getJavaImportClass(getStubYangType(TYPE2), true, pluginConfig);
- assertThat(true, is(test.equals(CLASS_INFO5)));
-
- test = getJavaImportClass(getStubYangType(TYPE3), false, pluginConfig);
- assertThat(null, is(test));
-
- test = getJavaImportClass(getStubYangType(TYPE4), false, pluginConfig);
- assertThat(null, is(test));
- }
-
- /**
- * Unit test for java data type method.
- */
- @Test
- public void testgetJavaDataType() {
- test = getJavaDataType(getStubYangType(TYPE1));
- assertThat(true, is(test.equals(CLASS_INFO1)));
-
- test = getJavaDataType(getStubYangType(TYPE2));
- assertThat(true, is(test.equals(CLASS_INFO2)));
-
- test = getJavaDataType(getStubYangType(TYPE3));
- assertThat(true, is(test.equals(CLASS_INFO3)));
-
- test = getJavaDataType(getStubYangType(TYPE4));
- assertThat(true, is(test.equals(CLASS_INFO4)));
- }
-
- /**
- * Unit test for java package info method.
- */
- @Test
- public void testgetJavaPkgInfo() {
- test = getJavaImportPackage(getStubYangType(TYPE1), false, pluginConfig);
- assertThat(true, is(test.equals(JAVA_LANG)));
-
- test = getJavaImportPackage(getStubYangType(TYPE2), true, pluginConfig);
- assertThat(true, is(test.equals(JAVA_LANG)));
-
- test = getJavaImportPackage(getStubYangType(TYPE3), false, pluginConfig);
- assertThat(null, is(test));
-
- test = getJavaImportPackage(getStubYangType(TYPE4), false, pluginConfig);
- assertThat(null, is(test));
- }
-
- /**
- * Unit test case for typedef.
- *
- * @throws DataModelException when fails to do data model operations
- */
- @Test
- public void testForTypeDef() throws DataModelException {
- test = getJavaImportPackage(getStubExtendedInfo(getStubYangType(TYPE_DEF)), false, pluginConfig);
- assertThat(true, is(test.equals(TYPE_DEF_PKG)));
- }
-
- /**
- * Returns stub YANG type for test.
- *
- * @param dataTypes YANG data types
- * @return YANG type
- */
- private YangType<?> getStubYangType(YangDataTypes dataTypes) {
- YangType<?> type = new YangType<>();
- type.setDataType(dataTypes);
- return type;
- }
-
- /**
- * Returns YANG type with extended info.
- *
- * @param type YANG type
- * @return YANG type with extended info
- * @throws DataModelException when fails to do data model operations
- */
- @SuppressWarnings("unchecked")
- private YangType<?> getStubExtendedInfo(YangType<?> type) throws DataModelException {
- YangJavaTypeDefTranslator typedef = new YangJavaTypeDefTranslator();
- getStubParent().addChild(typedef);
- YangDerivedInfo<?> derInfo = new YangDerivedInfo<>();
- derInfo.setReferredTypeDef(typedef);
- ((YangType<YangDerivedInfo<?>>) type).setDataTypeExtendedInfo(derInfo);
- return type;
- }
-
- /**
- * Returns java file info.
- *
- * @return java file info
- */
- private JavaFileInfoTranslator addStubJavaFileInfo() {
- JavaFileInfoTranslator fileInfo = new JavaFileInfoTranslator();
- fileInfo.setJavaName("test");
- fileInfo.setPackage("target");
- return fileInfo;
- }
-
- /**
- * Adds stub parent module for typedef.
- *
- * @return stub parent module
- */
- private YangNode getStubParent() {
- YangJavaModuleTranslator parent = new YangJavaModuleTranslator();
- parent.setJavaFileInfo(addStubJavaFileInfo());
- return parent;
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGenTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGenTest.java
deleted file mode 100644
index e8a004e..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/translator/tojava/utils/JavaCodeSnippetGenTest.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava.utils;
-
-import org.junit.Test;
-import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.Is.is;
-import static org.hamcrest.core.IsNot.not;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getImportText;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaCodeSnippetGen.getJavaAttributeDefinition;
-import static org.onosproject.yangutils.utils.UtilConstants.DIAMOND_CLOSE_BRACKET;
-import static org.onosproject.yangutils.utils.UtilConstants.DIAMOND_OPEN_BRACKET;
-import static org.onosproject.yangutils.utils.UtilConstants.IMPORT;
-import static org.onosproject.yangutils.utils.UtilConstants.JAVA_LANG;
-import static org.onosproject.yangutils.utils.UtilConstants.LIST;
-import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
-import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
-import static org.onosproject.yangutils.utils.UtilConstants.PRIVATE;
-import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
-import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
-import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
-
-/**
- * Unit test cases for java code snippet generator.
- */
-public class JavaCodeSnippetGenTest {
-
- private static final String PKG_INFO = "org.onosproject.unittest";
- private static final String CLASS_INFO = "JavaCodeSnippetGenTest";
- private static final String YANG_NAME = "Test";
-
- /**
- * Unit test for private constructor.
- *
- * @throws SecurityException if any security violation is observed
- * @throws NoSuchMethodException if when the method is not found
- * @throws IllegalArgumentException if there is illegal argument found
- * @throws InstantiationException if instantiation is provoked for the private constructor
- * @throws IllegalAccessException if instance is provoked or a method is provoked
- * @throws InvocationTargetException when an exception occurs by the method or constructor
- */
- @Test
- public void callPrivateConstructors()
- throws SecurityException, NoSuchMethodException, IllegalArgumentException,
- InstantiationException, IllegalAccessException, InvocationTargetException {
-
- Class<?>[] classesToConstruct = {JavaCodeSnippetGen.class};
- for (Class<?> clazz : classesToConstruct) {
- Constructor<?> constructor = clazz.getDeclaredConstructor();
- constructor.setAccessible(true);
- assertThat(null, not(constructor.newInstance()));
- }
- }
-
- /**
- * Unit test case for import text.
- */
- @Test
- public void testForImportText() {
- JavaQualifiedTypeInfoTranslator importInfo = new JavaQualifiedTypeInfoTranslator();
- importInfo.setPkgInfo(PKG_INFO);
- importInfo.setClassInfo(CLASS_INFO);
-
- String imports = getImportText(importInfo);
-
- assertThat(true, is(imports.equals(IMPORT + PKG_INFO + PERIOD + CLASS_INFO + SEMI_COLON + NEW_LINE)));
- }
-
- /**
- * Unit test case for java attribute info.
- */
- @Test
- public void testForJavaAttributeInfo() {
-
- String attributeWithoutTypePkg = getJavaAttributeDefinition(null, STRING_DATA_TYPE, YANG_NAME,
- false, PRIVATE, null);
- assertThat(true, is(attributeWithoutTypePkg.contains(
- PRIVATE + SPACE + STRING_DATA_TYPE + SPACE + YANG_NAME + SEMI_COLON + NEW_LINE)));
-
- String attributeWithTypePkg = getJavaAttributeDefinition(JAVA_LANG, STRING_DATA_TYPE, YANG_NAME,
- false, PRIVATE, null);
- assertThat(true, is(attributeWithTypePkg.contains(PRIVATE + SPACE + JAVA_LANG + PERIOD
- + STRING_DATA_TYPE + SPACE + YANG_NAME + SEMI_COLON + NEW_LINE)));
-
- String attributeWithListPkg = getJavaAttributeDefinition(JAVA_LANG, STRING_DATA_TYPE, YANG_NAME,
- true, PRIVATE, null);
- assertThat(true, is(attributeWithListPkg.contains(
- PRIVATE + SPACE + LIST + DIAMOND_OPEN_BRACKET + JAVA_LANG + PERIOD + STRING_DATA_TYPE
- + DIAMOND_CLOSE_BRACKET + SPACE + YANG_NAME)));
-
- String attributeWithListWithoutPkg = getJavaAttributeDefinition(null, STRING_DATA_TYPE, YANG_NAME,
- true, PRIVATE, null);
- assertThat(true, is(attributeWithListWithoutPkg.contains(
- PRIVATE + SPACE + LIST + DIAMOND_OPEN_BRACKET + STRING_DATA_TYPE + DIAMOND_CLOSE_BRACKET + SPACE
- + YANG_NAME)));
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/translator/tojava/utils/JavaIdentifierSyntaxTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/translator/tojava/utils/JavaIdentifierSyntaxTest.java
deleted file mode 100644
index 5d5858f..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/translator/tojava/utils/JavaIdentifierSyntaxTest.java
+++ /dev/null
@@ -1,338 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava.utils;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.datamodel.YangRevision;
-import org.onosproject.yangutils.translator.exception.TranslatorException;
-import org.onosproject.yangutils.utils.io.YangToJavaNamingConflictUtil;
-
-import java.io.File;
-import java.io.IOException;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-import static org.apache.commons.io.FileUtils.deleteDirectory;
-import static org.hamcrest.core.Is.is;
-import static org.hamcrest.core.IsNot.not;
-import static org.junit.Assert.assertThat;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.doesPackageExist;
-import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getRootPackage;
-import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_BASE_PKG;
-import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
-import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCamelCase;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getCapitalCase;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getJavaPackageFromPackagePath;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getPackageDirPathFromJavaJPackage;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getSmallCase;
-
-/**
- * Unit tests for java identifier syntax.
- */
-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";
- private static final String DATE2 = "1992-01-25";
- private static final String PARENT_WITH_PERIOD = "test5.test6.test7";
- private static final String CHILD_WITH_PERIOD = "test1.test2.test3";
- 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 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";
- private static final String WITH_CAMEL_CASE1 = "try123";
- private static final String WITHOUT_CAMEL_CASE2 = "_try";
- private static final String WITH_CAMEL_CASE2 = "yangAutoPrefixTry";
- private static final String WITHOUT_CAMEL_CASE3 = "-1-123g-123ga-a";
- private static final String WITH_CAMEL_CASE3 = "yangAutoPrefix1123G123Gaa";
- private static final String WITHOUT_CAMEL_CASE4 = "a-b-c-d-e-f-g-h";
- private static final String WITH_CAMEL_CASE4 = "aBcDeFgh";
- private static final String WITHOUT_CAMEL_CASE5 = "TestName";
- private static final String WITH_CAMEL_CASE5 = "testName";
- private static final String WITHOUT_CAMEL_CASE6 = "TEST-NAME";
- private static final String WITH_CAMEL_CASE6 = "testName";
- private static final String WITHOUT_CAMEL_CASE7 = "TESTNAME";
- private static final String WITH_CAMEL_CASE7 = "testname";
- private static final String WITHOUT_CAMEL_CASE8 = "TE-ST-NA-ME";
- private static final String WITH_CAMEL_CASE8 = "teStNaMe";
- private static final String WITHOUT_CAMEL_CASE9 = "TEST3NAME";
- private static final String WITH_CAMEL_CASE9 = "test3Name";
- private static final String WITHOUT_CAMEL_CASE10 = "TEST3";
- private static final String WITH_CAMEL_CASE10 = "test3";
- private static final String WITHOUT_CAMEL_CASE11 = "TEST3nAMe";
- 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 final String DATE_FORMAT = "yyyy-MM-dd";
- private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATE_FORMAT);
- private static YangToJavaNamingConflictUtil conflictResolver = new YangToJavaNamingConflictUtil();
- private static final String BASE_DIR_PKG = "target.UnitTestCase.";
- private static final String DIR_PATH = "exist1.exist2.exist3";
- private static final String PKG_INFO = "package-info.java";
-
- /**
- * Unit test for private constructor.
- *
- * @throws SecurityException if any security violation is observed.
- * @throws NoSuchMethodException if when the method is not found.
- * @throws IllegalArgumentException if there is illegal argument found.
- * @throws InstantiationException if instantiation is provoked for the
- * private constructor.
- * @throws IllegalAccessException if instance is provoked or a method is
- * provoked.
- * @throws InvocationTargetException when an exception occurs by the method
- * or constructor.
- */
- @Test
- public void callPrivateConstructors()
- throws SecurityException, NoSuchMethodException, IllegalArgumentException,
- InstantiationException, IllegalAccessException, InvocationTargetException {
-
- Class<?>[] classesToConstruct = {JavaIdentifierSyntax.class};
- for (Class<?> clazz : classesToConstruct) {
- Constructor<?> constructor = clazz.getDeclaredConstructor();
- constructor.setAccessible(true);
- assertThat(null, not(constructor.newInstance()));
- }
- }
-
- /**
- * Unit test for root package generation with revision complexity.
- */
- @Test
- public void getRootPackageTest()
- throws ParseException {
- conflictResolver.setPrefixForIdentifier(null);
- String rootPackage = getRootPackage((byte) 1, CHILD_PACKAGE, getYangRevision(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, ParseException {
- 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, getYangRevision(DATE1),
- conflictResolver);
- }
-
- /**
- * Unit test for root package generation with special characters presence.
- */
- @Test
- public void getRootPackageWithSpecialCharactersTest()
- throws ParseException {
- conflictResolver.setPrefixForIdentifier(VALID_PREFIX);
- String rootPackage = getRootPackage((byte) 1, INVALID_NAME_SPACE1, getYangRevision(DATE1), conflictResolver);
- assertThat(rootPackage.equals(DEFAULT_BASE_PKG + PERIOD + VERSION_NUMBER
- + PERIOD + VALID_NAME_SPACE1 + PERIOD + DATE_WITH_REV1), is(true));
- conflictResolver.setPrefixForIdentifier(null);
- String rootPackage1 = getRootPackage((byte) 1, INVALID_NAME_SPACE2, getYangRevision(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, getYangRevision(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, getYangRevision(DATE1), conflictResolver);
- assertThat(rootPackage3.equals(DEFAULT_BASE_PKG + PERIOD + VERSION_NUMBER
- + PERIOD + VALID_NAME_SPACE3 + PERIOD + DATE_WITH_REV1), is(true));
-
- }
-
- /**
- * Unit test for root package generation without complexity in revision.
- */
- @Test
- public void getRootPackageWithRevTest()
- throws ParseException {
- Date date = simpleDateFormat.parse(DATE2);
- String rootPkgWithRev = getRootPackage((byte) 1, CHILD_PACKAGE, getYangRevision(DATE2), null);
- assertThat(rootPkgWithRev.equals(
- DEFAULT_BASE_PKG + PERIOD + VERSION_NUMBER + PERIOD + CHILD_WITH_PERIOD + PERIOD + DATE_WITH_REV2),
- is(true));
- }
-
- /**
- * Unit test for capitalizing the incoming string.
- */
- @Test
- public void getCapitalCaseTest() {
- String capitalCase = getCapitalCase(WITHOUT_CAPITAL);
- assertThat(capitalCase.equals(WITH_CAPITAL), is(true));
- }
-
- /**
- * Unit test for getting the camel case for the received string.
- */
- @Test
- public void getCamelCaseTest() {
- conflictResolver.setPrefixForIdentifier(null);
- String camelCase = getCamelCase(WITHOUT_CAMEL_CASE, conflictResolver);
- assertThat(camelCase.equals(WITH_CAMEL_CASE), is(true));
- String camelCase1 = getCamelCase(WITHOUT_CAMEL_CASE1, conflictResolver);
- assertThat(camelCase1.equals(WITH_CAMEL_CASE1), is(true));
- String camelCase2 = getCamelCase(WITHOUT_CAMEL_CASE2, conflictResolver);
- assertThat(camelCase2.equals(WITH_CAMEL_CASE2), is(true));
- String camelCase3 = getCamelCase(WITHOUT_CAMEL_CASE3, conflictResolver);
- assertThat(camelCase3.equals(WITH_CAMEL_CASE3), is(true));
- String camelCase4 = getCamelCase(WITHOUT_CAMEL_CASE4, conflictResolver);
- assertThat(camelCase4.equals(WITH_CAMEL_CASE4), is(true));
- String camelCase5 = getCamelCase(WITHOUT_CAMEL_CASE5, conflictResolver);
- assertThat(camelCase5.equals(WITH_CAMEL_CASE5), is(true));
- String camelCase6 = getCamelCase(WITHOUT_CAMEL_CASE6, conflictResolver);
- assertThat(camelCase6.equals(WITH_CAMEL_CASE6), is(true));
- String camelCase7 = getCamelCase(WITHOUT_CAMEL_CASE7, conflictResolver);
- assertThat(camelCase7.equals(WITH_CAMEL_CASE7), is(true));
- String camelCase8 = getCamelCase(WITHOUT_CAMEL_CASE8, conflictResolver);
- assertThat(camelCase8.equals(WITH_CAMEL_CASE8), is(true));
- String camelCase9 = getCamelCase(WITHOUT_CAMEL_CASE9, conflictResolver);
- assertThat(camelCase9.equals(WITH_CAMEL_CASE9), is(true));
- String camelCase10 = getCamelCase(WITHOUT_CAMEL_CASE10, conflictResolver);
- assertThat(camelCase10.equals(WITH_CAMEL_CASE10), is(true));
- String camelCase11 = getCamelCase(WITHOUT_CAMEL_CASE11, conflictResolver);
- assertThat(camelCase11.equals(WITH_CAMEL_CASE11), is(true));
- 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);
- }
-
- /**
- * Unit test for getting the camel case for the received string.
- */
- @Test
- public void getSmallCaseTest() {
- String smallCase = getSmallCase(WITHOUT_CAPITAL);
- assertThat(smallCase.equals(WITH_SMALL), is(true));
- }
-
- /**
- * Unit test for getting the camel case for the received string.
- */
- @Test
- public void getPackageFromPathTest() {
- String pkg = getJavaPackageFromPackagePath(PARENT_PACKAGE);
- assertThat(pkg.equals(PARENT_WITH_PERIOD), is(true));
- }
-
- /**
- * Unit test for getting the camel case for the received string.
- */
- @Test
- public void getPathFromPackageTest() {
- String path = getPackageDirPathFromJavaJPackage(PARENT_WITH_PERIOD);
- assertThat(path.equals(PARENT_PACKAGE), is(true));
- }
-
-
- /**
- * This test case checks whether the package is existing.
- *
- * @throws IOException when failed to create a test file
- */
- @Test
- public void packageExistTest()
- throws IOException {
-
- String strPath = BASE_DIR_PKG + DIR_PATH;
- File createDir = new File(strPath.replace(PERIOD, SLASH));
- createDir.mkdirs();
- File createFile = new File(createDir + SLASH + PKG_INFO);
- createFile.createNewFile();
- assertThat(true, is(doesPackageExist(strPath)));
- createDir.delete();
- deleteDirectory(createDir);
- deleteDirectory(new File(BASE_DIR_PKG.replace(PERIOD, SLASH)));
- }
-
- private YangRevision getYangRevision(String date) {
- YangRevision revision = new YangRevision();
- try {
- revision.setRevDate(simpleDateFormat.parse(date));
- } catch (ParseException e) {
- e.printStackTrace();
- }
- return revision;
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGeneratorTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGeneratorTest.java
deleted file mode 100644
index 6a31ba0..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/translator/tojava/utils/MethodsGeneratorTest.java
+++ /dev/null
@@ -1,382 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.translator.tojava.utils;
-
-import org.junit.Test;
-import org.onosproject.yangutils.datamodel.YangType;
-import org.onosproject.yangutils.translator.tojava.JavaAttributeInfo;
-import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfoTranslator;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.List;
-
-import static org.hamcrest.core.Is.is;
-import static org.hamcrest.core.IsNot.not;
-import static org.junit.Assert.assertThat;
-import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.STRING;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_SERVICE_AND_MANAGER;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_TYPEDEF_CLASS;
-import static org.onosproject.yangutils.translator.tojava.GeneratedJavaFileType.GENERATE_UNION_CLASS;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBuild;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getBuildForInterface;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructor;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getConstructorStart;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getEqualsMethod;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterForClass;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getGetterForInterface;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getOfMethodStringAndJavaDoc;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForClass;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForInterface;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getSetterForTypeDefClass;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getToStringMethod;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getTypeConstructorStringAndJavaDoc;
-import static org.onosproject.yangutils.translator.tojava.utils.MethodsGenerator.getUnionToStringMethod;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getCheckNotNull;
-import static org.onosproject.yangutils.translator.tojava.utils.StringGenerator.getOverRideString;
-import static org.onosproject.yangutils.utils.UtilConstants.ADD_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.BUILD;
-import static org.onosproject.yangutils.utils.UtilConstants.BUILDER;
-import static org.onosproject.yangutils.utils.UtilConstants.BUILDER_LOWER_CASE;
-import static org.onosproject.yangutils.utils.UtilConstants.CHECK_NOT_NULL_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_CURLY_BRACKET;
-import static org.onosproject.yangutils.utils.UtilConstants.CLOSE_PARENTHESIS;
-import static org.onosproject.yangutils.utils.UtilConstants.COMMA;
-import static org.onosproject.yangutils.utils.UtilConstants.DEFAULT_CAPS;
-import static org.onosproject.yangutils.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
-import static org.onosproject.yangutils.utils.UtilConstants.EQUAL;
-import static org.onosproject.yangutils.utils.UtilConstants.EQUALS_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.FOUR_SPACE_INDENTATION;
-import static org.onosproject.yangutils.utils.UtilConstants.GET_METHOD_PREFIX;
-import static org.onosproject.yangutils.utils.UtilConstants.JAVA_LANG;
-import static org.onosproject.yangutils.utils.UtilConstants.NEW;
-import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
-import static org.onosproject.yangutils.utils.UtilConstants.OBJECT;
-import static org.onosproject.yangutils.utils.UtilConstants.OBJECT_STRING;
-import static org.onosproject.yangutils.utils.UtilConstants.OF;
-import static org.onosproject.yangutils.utils.UtilConstants.OPEN_CURLY_BRACKET;
-import static org.onosproject.yangutils.utils.UtilConstants.OPEN_PARENTHESIS;
-import static org.onosproject.yangutils.utils.UtilConstants.OVERRIDE;
-import static org.onosproject.yangutils.utils.UtilConstants.PERIOD;
-import static org.onosproject.yangutils.utils.UtilConstants.PROTECTED;
-import static org.onosproject.yangutils.utils.UtilConstants.PUBLIC;
-import static org.onosproject.yangutils.utils.UtilConstants.QUOTES;
-import static org.onosproject.yangutils.utils.UtilConstants.RETURN;
-import static org.onosproject.yangutils.utils.UtilConstants.SEMI_COLON;
-import static org.onosproject.yangutils.utils.UtilConstants.SET_METHOD_PREFIX;
-import static org.onosproject.yangutils.utils.UtilConstants.SIXTEEN_SPACE_INDENTATION;
-import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
-import static org.onosproject.yangutils.utils.UtilConstants.STATIC;
-import static org.onosproject.yangutils.utils.UtilConstants.STRING_DATA_TYPE;
-import static org.onosproject.yangutils.utils.UtilConstants.SUFFIX_S;
-import static org.onosproject.yangutils.utils.UtilConstants.THIS;
-import static org.onosproject.yangutils.utils.UtilConstants.TWELVE_SPACE_INDENTATION;
-import static org.onosproject.yangutils.utils.UtilConstants.VALUE;
-import static org.onosproject.yangutils.utils.UtilConstants.VOID;
-
-/**
- * Unit tests for generated methods from the file type.
- */
-public final class MethodsGeneratorTest {
-
- private static final String CLASS_NAME = "Testname";
- private static final String ATTRIBUTE_NAME = "testname";
- private static final String SET = "setValue.set(0);\n";
- private static final String UNION = " @Override\n" +
- " public String toString() {\n" +
- " if (setValue.get(0)) {\n" +
- " return string;\n" +
- " }\n" +
- " return null;\n" +
- " }";
-
- /**
- * Unit test for private constructor.
- *
- * @throws SecurityException if any security violation is observed
- * @throws NoSuchMethodException if when the method is not found
- * @throws IllegalArgumentException if there is illegal argument found
- * @throws InstantiationException if instantiation is provoked for the private constructor
- * @throws IllegalAccessException if instance is provoked or a method is provoked
- * @throws InvocationTargetException when an exception occurs by the method or constructor
- */
- @Test
- public void callPrivateConstructors()
- throws SecurityException, NoSuchMethodException, IllegalArgumentException,
- InstantiationException, IllegalAccessException, InvocationTargetException {
-
- Class<?>[] classesToConstruct = {MethodsGenerator.class};
- for (Class<?> clazz : classesToConstruct) {
- Constructor<?> constructor = clazz.getDeclaredConstructor();
- constructor.setAccessible(true);
- assertThat(null, not(constructor.newInstance()));
- }
- }
-
- /**
- * Unit test case for checking the parse builder and type constructor.
- */
- @Test
- public void getTypeConstructorTest() {
-
- JavaAttributeInfo testAttr = getTestAttribute();
- String test = getTypeConstructorStringAndJavaDoc(
- testAttr, CLASS_NAME, GENERATE_TYPEDEF_CLASS, 0);
- assertThat(true, is(test.contains(PUBLIC + SPACE + CLASS_NAME +
- OPEN_PARENTHESIS)));
- }
-
- /**
- * Unit test case for checking the parse builder and type constructor.
- */
- @Test
- public void getTypeConstructorForUnionTest() {
- JavaAttributeInfo testAttr = getTestAttribute();
- String test = getTypeConstructorStringAndJavaDoc(
- testAttr, CLASS_NAME, GENERATE_UNION_CLASS, 0);
- assertThat(true, is(test.contains(PUBLIC + SPACE + CLASS_NAME +
- OPEN_PARENTHESIS)));
- assertThat(true, is(test.contains(SET)));
- }
-
- /**
- * Test for build method for class.
- */
- @Test
- public void getBuildTest() {
- String method = getBuild(CLASS_NAME, false);
- assertThat(true, is(method.equals(
- FOUR_SPACE_INDENTATION + PUBLIC + SPACE + CLASS_NAME + SPACE +
- BUILD + OPEN_PARENTHESIS + CLOSE_PARENTHESIS + SPACE +
- OPEN_CURLY_BRACKET + NEW_LINE + EIGHT_SPACE_INDENTATION +
- RETURN + SPACE + NEW + SPACE + DEFAULT_CAPS + CLASS_NAME +
- OPEN_PARENTHESIS + THIS + CLOSE_PARENTHESIS +
- SEMI_COLON + NEW_LINE + FOUR_SPACE_INDENTATION +
- CLOSE_CURLY_BRACKET + NEW_LINE)));
- }
-
- /**
- * Test for build method of interface.
- */
- @Test
- public void getBuildForInterfaceTest() {
- String method = getBuildForInterface(CLASS_NAME);
- assertThat(true, is(method.equals(
- FOUR_SPACE_INDENTATION + CLASS_NAME + SPACE + BUILD +
- OPEN_PARENTHESIS + CLOSE_PARENTHESIS + SEMI_COLON +
- NEW_LINE)));
- }
-
- /**
- * Test for check not null method.
- */
- @Test
- public void getCheckNotNullTest() {
- String method = getCheckNotNull(CLASS_NAME);
- assertThat(true, is(method.equals(
- EIGHT_SPACE_INDENTATION + CHECK_NOT_NULL_STRING +
- OPEN_PARENTHESIS + CLASS_NAME + COMMA + SPACE +
- CLASS_NAME + CLOSE_PARENTHESIS + SEMI_COLON + NEW_LINE)));
- }
-
- /**
- * Test case for constructor.
- */
- @Test
- public void getConstructorTest() {
- JavaAttributeInfo testAttr = getTestAttribute();
- String method = getConstructor(testAttr, GENERATE_SERVICE_AND_MANAGER
- );
- assertThat(true, is(method.contains(
- ATTRIBUTE_NAME + SPACE + EQUAL + SPACE +
- BUILDER_LOWER_CASE + OBJECT + PERIOD +
- GET_METHOD_PREFIX + CLASS_NAME + OPEN_PARENTHESIS +
- CLOSE_PARENTHESIS + SEMI_COLON)));
- }
-
- /**
- * Test for constructor start method.
- */
- @Test
- public void getConstructorStartTest() {
- String method = getConstructorStart(CLASS_NAME, false);
- assertThat(true, is(method.contains(
- PROTECTED + SPACE + DEFAULT_CAPS + CLASS_NAME +
- OPEN_PARENTHESIS + CLASS_NAME + BUILDER + SPACE +
- BUILDER_LOWER_CASE + OBJECT + CLOSE_PARENTHESIS + SPACE +
- OPEN_CURLY_BRACKET)));
- }
-
- /**
- * Test case for equals method.
- */
- @Test
- public void getEqualsMethodTest() {
- JavaAttributeInfo testAttr = getTestAttribute();
- String method = getEqualsMethod(testAttr);
- assertThat(true, is(method.contains(
- SIXTEEN_SPACE_INDENTATION + OBJECT_STRING + SUFFIX_S +
- PERIOD + EQUALS_STRING + OPEN_PARENTHESIS)));
- }
-
- /**
- * Test for to string method.
- */
- @Test
- public void getToStringMethodTest() {
- JavaAttributeInfo testAttr = getTestAttribute();
- String method = getToStringMethod(testAttr);
- assertThat(true, is(method.equals(
- TWELVE_SPACE_INDENTATION + PERIOD + ADD_STRING +
- OPEN_PARENTHESIS + QUOTES + testAttr.getAttributeName() +
- QUOTES + COMMA + SPACE + testAttr.getAttributeName() +
- CLOSE_PARENTHESIS)));
- }
-
- /**
- * Test for to string method.
- */
- @Test
- public void getToStringMethodForUnionTest() {
- JavaAttributeInfo testAttr = getTestAttribute();
- List<YangType<?>> types = new ArrayList<>();
- types.add(testAttr.getAttributeType());
- String method = getUnionToStringMethod(types);
- assertThat(true, is(method.contains(UNION)));
- }
-
- /**
- * Test for getter method of class.
- */
- @Test
- public void getGetterForClassTest() {
- JavaAttributeInfo testAttr = getTestAttribute();
- String method = getGetterForClass(testAttr, GENERATE_SERVICE_AND_MANAGER);
- assertThat(true, is(method.contains(PUBLIC + SPACE + STRING_DATA_TYPE +
- SPACE + GET_METHOD_PREFIX)));
- }
-
- /**
- * Test for getter of interface.
- */
- @Test
- public void getGetterForInterfaceTest() {
- String method = getGetterForInterface(CLASS_NAME, STRING_DATA_TYPE, false,
- GENERATE_SERVICE_AND_MANAGER, null);
- assertThat(true, is(method.contains(STRING_DATA_TYPE + SPACE +
- GET_METHOD_PREFIX)));
- }
-
- /**
- * Test case for setter method of class.
- */
- @Test
- public void getSetterForClassTest() {
- JavaAttributeInfo testAttr = getTestAttribute();
- String method = getSetterForClass(testAttr, CLASS_NAME,
- GENERATE_SERVICE_AND_MANAGER);
- assertThat(true, is(
- method.contains(PUBLIC + SPACE + VOID + SPACE + SET_METHOD_PREFIX +
- CLASS_NAME + OPEN_PARENTHESIS +
- STRING_DATA_TYPE + SPACE +
- ATTRIBUTE_NAME)));
- }
-
- /**
- * Test for setter method of interface.
- */
- @Test
- public void getSetterForInterfaceTest() {
- String method = getSetterForInterface(CLASS_NAME, STRING_DATA_TYPE,
- CLASS_NAME, false,
- GENERATE_SERVICE_AND_MANAGER, null);
- assertThat(true, is(method.contains(VOID + SPACE + SET_METHOD_PREFIX +
- CLASS_NAME)));
- }
-
- /**
- * Test case for of method.
- */
- @Test
- public void getOfMethodTest() {
- JavaAttributeInfo testAttr = getTestAttribute();
- String method = getOfMethodStringAndJavaDoc(testAttr, CLASS_NAME);
- assertThat(true, is(method.contains(
- PUBLIC + SPACE + STATIC + SPACE + CLASS_NAME + SPACE + OF +
- OPEN_PARENTHESIS + STRING_DATA_TYPE + SPACE + VALUE +
- CLOSE_PARENTHESIS)));
- }
-
- /**
- * Test case for setter in type def class.
- */
- @Test
- public void getSetterForTypeDefClassTest() {
- JavaAttributeInfo testAttr = getTestAttribute();
- String method = getSetterForTypeDefClass(testAttr);
- assertThat(true, is(method.contains(PUBLIC + SPACE + VOID + SPACE +
- SET_METHOD_PREFIX)));
- }
-
- /**
- * Test case for over ride string.
- */
- @Test
- public void getOverRideStringTest() {
- String method = getOverRideString();
- assertThat(true, is(method.contains(OVERRIDE)));
- }
-
- /**
- * Returns java attribute.
- *
- * @return java attribute
- */
- private JavaAttributeInfo getTestAttribute() {
- JavaAttributeInfo testAttr = new JavaAttributeInfo(
- getTestYangType(), ATTRIBUTE_NAME, false, false);
- testAttr.setAttributeName(ATTRIBUTE_NAME);
- testAttr.setAttributeType(getTestYangType());
- testAttr.setImportInfo(getTestJavaQualifiedTypeInfo());
- return testAttr;
- }
-
- /**
- * Returns java qualified info.
- *
- * @return java qualified info
- */
- private JavaQualifiedTypeInfoTranslator getTestJavaQualifiedTypeInfo() {
- JavaQualifiedTypeInfoTranslator info = new JavaQualifiedTypeInfoTranslator();
- info.setPkgInfo(JAVA_LANG);
- info.setClassInfo(STRING_DATA_TYPE);
- return info;
- }
-
- /**
- * Returns stub YANG type.
- *
- * @return test YANG type
- */
- private YangType<?> getTestYangType() {
- YangType<?> attrType = new YangType<>();
- attrType.setDataTypeName(STRING_DATA_TYPE);
- attrType.setDataType(STRING);
- return attrType;
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/utils/UtilConstantsTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/utils/UtilConstantsTest.java
deleted file mode 100644
index a63d432..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/utils/UtilConstantsTest.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.utils;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-
-import static org.hamcrest.core.IsNot.not;
-import static org.junit.Assert.assertThat;
-
-/**
- * Test case for testing the util constants.
- */
-public final class UtilConstantsTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- /**
- * A private constructor is tested.
- *
- * @throws SecurityException if any security violation is observed
- * @throws NoSuchMethodException if when the method is not found
- * @throws IllegalArgumentException if there is illegal argument found
- * @throws InstantiationException if instantiation is provoked for the private constructor
- * @throws IllegalAccessException if instance is provoked or a method is provoked
- * @throws InvocationTargetException when an exception occurs by the method or constructor
- */
- @Test
- public void callPrivateConstructors() throws SecurityException, NoSuchMethodException, IllegalArgumentException,
- InstantiationException, IllegalAccessException, InvocationTargetException {
-
- Class<?>[] classesToConstruct = {UtilConstants.class };
- for (Class<?> clazz : classesToConstruct) {
- Constructor<?> constructor = clazz.getDeclaredConstructor();
- constructor.setAccessible(true);
- assertThat(null, not(constructor.newInstance()));
- }
- }
-}
\ No newline at end of file
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/utils/io/impl/CopyrightHeaderTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/utils/io/impl/CopyrightHeaderTest.java
deleted file mode 100644
index d7da436..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/utils/io/impl/CopyrightHeaderTest.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.utils.io.impl;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.util.Calendar;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-
-import static org.apache.commons.io.FileUtils.contentEquals;
-import static org.hamcrest.core.Is.is;
-import static org.hamcrest.core.IsNot.not;
-import static org.junit.Assert.assertThat;
-import static org.onosproject.yangutils.utils.io.impl.CopyrightHeader.parseCopyrightHeader;
-
-/**
- * Unit Tests for the CopyrightHeader contents.
- */
-public final class CopyrightHeaderTest {
-
- private static final String COPYRIGHTS_FIRST_LINE = "/*\n * Copyright " + Calendar.getInstance().get(Calendar.YEAR)
- + "-present Open Networking Laboratory\n";
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- /**
- * Unit test for testing private constructor.
- *
- * @throws SecurityException if any security violation is observed
- * @throws NoSuchMethodException if when the method is not found
- * @throws IllegalArgumentException if there is illegal argument found
- * @throws InstantiationException if instantiation is provoked for the private constructor
- * @throws IllegalAccessException if instance is provoked or a method is provoked
- * @throws InvocationTargetException when an exception occurs by the method or constructor
- */
- @Test
- public void callPrivateConstructors() throws SecurityException, NoSuchMethodException, IllegalArgumentException,
- InstantiationException, IllegalAccessException, InvocationTargetException {
-
- Class<?>[] classesToConstruct = {CopyrightHeader.class };
- for (Class<?> clazz : classesToConstruct) {
- Constructor<?> constructor = clazz.getDeclaredConstructor();
- constructor.setAccessible(true);
- assertThat(null, not(constructor.newInstance()));
- }
- }
-
- /**
- * This test case checks the received copyright header contents.
- *
- * @throws IOException when fails to do IO operations
- */
- @Test
- public void testGetCopyrightHeader() throws IOException {
-
- String path = "src/test/resources/CopyrightHeader.txt";
-
- File testRsc = new File(path);
- FileInputStream in = new FileInputStream(testRsc);
-
- File testFile = new File("target/TestHeader.txt");
- FileOutputStream out = new FileOutputStream(testFile);
-
- out.write(COPYRIGHTS_FIRST_LINE.getBytes());
- int c = 0;
- while ((c = in.read()) != -1) {
- out.write(c);
- }
-
- String licenseHeader = parseCopyrightHeader();
- File test = new File("target/TestCopyrightHeader.txt");
-
- FileWriter writer = new FileWriter(test);
- writer.write(licenseHeader);
- writer.close();
- out.close();
- out.flush();
- in.close();
-
- assertThat(true, is(contentEquals(test, testFile)));
- test.delete();
- testFile.delete();
- }
-}
\ No newline at end of file
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/utils/io/impl/FileSystemUtilTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/utils/io/impl/FileSystemUtilTest.java
deleted file mode 100644
index 271036f..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/utils/io/impl/FileSystemUtilTest.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.utils.io.impl;
-
-import java.io.File;
-import java.io.IOException;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-
-import org.apache.commons.io.FileUtils;
-import org.junit.Test;
-
-import static org.apache.commons.io.FileUtils.deleteDirectory;
-import static org.hamcrest.core.IsNot.not;
-import static org.junit.Assert.assertThat;
-import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
-import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.appendFileContents;
-import static org.onosproject.yangutils.utils.io.impl.FileSystemUtil.updateFileHandle;
-
-/**
- * Tests the file handle utilities.
- */
-public final class FileSystemUtilTest {
-
- private static final String BASE_PKG = "target/UnitTestCase";
- private static final String TEST_DATA_1 = "This is to append a text to the file first1\n";
- private static final String TEST_DATA_2 = "This is next second line\n";
- private static final String TEST_DATA_3 = "This is next third line in the file";
- private static final String TEST_FILE = "testFile";
- private static final String SOURCE_TEST_FILE = "sourceTestFile";
-
- /**
- * A private constructor is tested.
- *
- * @throws SecurityException if any security violation is observed
- * @throws NoSuchMethodException if when the method is not found
- * @throws IllegalArgumentException if there is illegal argument found
- * @throws InstantiationException if instantiation is provoked for the private constructor
- * @throws IllegalAccessException if instance is provoked or a method is provoked
- * @throws InvocationTargetException when an exception occurs by the method or constructor
- */
- @Test
- public void callPrivateConstructors()
- throws SecurityException, NoSuchMethodException, IllegalArgumentException,
- InstantiationException, IllegalAccessException, InvocationTargetException {
-
- Class<?>[] classesToConstruct = {FileSystemUtil.class};
- for (Class<?> clazz : classesToConstruct) {
- Constructor<?> constructor = clazz.getDeclaredConstructor();
- constructor.setAccessible(true);
- assertThat(null, not(constructor.newInstance()));
- }
- }
-
- /**
- * This test case checks the contents to be written in the file.
- *
- * @throws IOException when fails to create a test file
- */
- @Test
- public void updateFileHandleTest() throws IOException {
-
- File dir = new File(BASE_PKG + SLASH + TEST_FILE);
- dir.mkdirs();
- File createFile = new File(dir + TEST_FILE);
- createFile.createNewFile();
- File createSourceFile = new File(dir + SOURCE_TEST_FILE);
- createSourceFile.createNewFile();
- updateFileHandle(createFile, TEST_DATA_1, false);
- updateFileHandle(createFile, TEST_DATA_2, false);
- updateFileHandle(createFile, TEST_DATA_3, false);
- appendFileContents(createFile, createSourceFile);
- updateFileHandle(createFile, null, true);
- deleteDirectory(dir);
- FileUtils.deleteDirectory(new File(BASE_PKG));
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/utils/io/impl/JavaDocGenTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/utils/io/impl/JavaDocGenTest.java
deleted file mode 100644
index 14c5134..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/utils/io/impl/JavaDocGenTest.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.utils.io.impl;
-
-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.utils.io.YangPluginConfig;
-
-import static org.hamcrest.core.Is.is;
-import static org.hamcrest.core.IsNot.not;
-import static org.junit.Assert.assertThat;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.getJavaDoc;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_CLASS;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILDER_INTERFACE;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.BUILD_METHOD;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.CONSTRUCTOR;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.DEFAULT_CONSTRUCTOR;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.GETTER_METHOD;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.DEFAULT_CLASS;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.INTERFACE;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.PACKAGE_INFO;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.SETTER_METHOD;
-import static org.onosproject.yangutils.utils.io.impl.JavaDocGen.JavaDocType.TYPE_DEF_SETTER_METHOD;
-
-/**
- * Tests the java doc that is generated.
- */
-public final class JavaDocGenTest {
-
- private static final String TEST_NAME = "testName";
- private static final String END_STRING = " */\n";
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- /**
- * This test case checks the content received for the builder class java doc.
- */
- @Test
- public void builderClassGenerationTest() {
- String builderClassJavaDoc = getJavaDoc(BUILDER_CLASS, TEST_NAME, false, null);
- assertThat(true, is(builderClassJavaDoc.contains("Represents the builder implementation of")
- && builderClassJavaDoc.contains(END_STRING)));
- }
-
- /**
- * This test case checks the content received for the builder interface ge java doc.
- */
- @Test
- public void builderInterfaceGenerationTest() {
- String builderInterfaceJavaDoc = getJavaDoc(BUILDER_INTERFACE, TEST_NAME, false, null);
- assertThat(true,
- is(builderInterfaceJavaDoc.contains("Builder for")
- && builderInterfaceJavaDoc.contains(END_STRING)));
- }
-
- /**
- * This test case checks the content received for the build java doc.
- */
- @Test
- public void buildGenerationTest() {
- String buildDoc = getJavaDoc(BUILD_METHOD, TEST_NAME, false, null);
- assertThat(true, is(buildDoc.contains("Builds object of") && buildDoc.contains(END_STRING)));
- }
-
- /**
- * A private constructor is tested.
- *
- * @throws SecurityException if any security violation is observed
- * @throws NoSuchMethodException if when the method is not found
- * @throws IllegalArgumentException if there is illegal argument found
- * @throws InstantiationException if instantiation is provoked for the private constructor
- * @throws IllegalAccessException if instance is provoked or a method is provoked
- * @throws InvocationTargetException when an exception occurs by the method or constructor
- */
- @Test
- public void callPrivateConstructors()
- throws SecurityException, NoSuchMethodException, IllegalArgumentException,
- InstantiationException, IllegalAccessException, InvocationTargetException {
-
- Class<?>[] classesToConstruct = {JavaDocGen.class };
- for (Class<?> clazz : classesToConstruct) {
- Constructor<?> constructor = clazz.getDeclaredConstructor();
- constructor.setAccessible(true);
- assertThat(null, not(constructor.newInstance()));
- }
- }
-
- /**
- * This test case checks the content received for the constructor java doc.
- */
- @Test
- public void constructorGenerationTest() {
- String constructorDoc = getJavaDoc(CONSTRUCTOR, TEST_NAME, false, null);
- assertThat(true,
- is(constructorDoc.contains("Creates an instance of ")
- && constructorDoc.contains("builder object of")
- && constructorDoc.contains("@param") && constructorDoc.contains("*/\n")));
- }
-
- /**
- * This test case checks the content received for the default constructor java doc.
- */
- @Test
- public void defaultConstructorGenerationTest() {
- String defaultConstructorDoc = getJavaDoc(DEFAULT_CONSTRUCTOR, TEST_NAME, false, null);
- assertThat(true, is(defaultConstructorDoc.contains("Creates an instance of ")
- && defaultConstructorDoc.contains(END_STRING)));
- }
-
- /**
- * This test case checks the content received for the getter java doc.
- */
- @Test
- public void getterGenerationTest() {
- String getterJavaDoc = getJavaDoc(GETTER_METHOD, TEST_NAME, false, null);
- assertThat(true,
- is(getterJavaDoc.contains("Returns the attribute") && getterJavaDoc.contains(END_STRING)));
- }
-
- /**
- * This test case checks the content received for the impl class java doc.
- */
- @Test
- public void implClassGenerationTest() {
- String implClassJavaDoc = getJavaDoc(DEFAULT_CLASS, TEST_NAME, false, null);
- assertThat(true,
- is(implClassJavaDoc.contains("Represents the implementation of")
- && implClassJavaDoc.contains(END_STRING)));
- }
-
- /**
- * This test case checks the content received for the interface java doc.
- */
- @Test
- public void interfaceGenerationTest() {
- String interfaceJavaDoc = getJavaDoc(INTERFACE, TEST_NAME, false, null);
- assertThat(true,
- is(interfaceJavaDoc.contains("Abstraction of an entity which represents the functionality of")
- && interfaceJavaDoc.contains(END_STRING)));
- }
-
- /**
- * This test case checks the content received for the package info java doc.
- */
- @Test
- public void packageInfoGenerationTest() {
- String packageInfo = getJavaDoc(PACKAGE_INFO, TEST_NAME, false, null);
- assertThat(true,
- is(packageInfo.contains("Implementation of YANG node") && packageInfo.contains(END_STRING)));
- }
-
- /**
- * This test case checks the content received for the package info java doc.
- */
- @Test
- public void packageInfoGenerationForChildNodeTest() {
- String packageInfo = getJavaDoc(PACKAGE_INFO, TEST_NAME, true, null);
- assertThat(true, is(packageInfo.contains("Implementation of YANG node testName's children nodes")
- && packageInfo.contains(END_STRING)));
- }
-
- /**
- * This test case checks the content received for the setter java doc.
- */
- @Test
- public void setterGenerationTest() {
- String setterJavaDoc = getJavaDoc(SETTER_METHOD, TEST_NAME, false, null);
- assertThat(true,
- is(setterJavaDoc.contains("Returns the builder object of") && setterJavaDoc.contains(END_STRING)));
- }
-
- /**
- * This test case checks the content received for the typedef setter java doc.
- */
- @Test
- public void typeDefSetterGenerationTest() {
- String typeDefSetter = getJavaDoc(TYPE_DEF_SETTER_METHOD, TEST_NAME, false, null);
- assertThat(true, is(typeDefSetter.contains("Sets the value of") && typeDefSetter.contains(END_STRING)));
- }
-
- /**
- * Returns stub pluginConfig.
- *
- * @return stub pluginConfig
- */
- private YangPluginConfig getStubPluginConfig() {
- YangPluginConfig pluginConfig = new YangPluginConfig();
- pluginConfig.setConflictResolver(null);
- return pluginConfig;
- }
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/utils/io/impl/YangFileScannerTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/utils/io/impl/YangFileScannerTest.java
deleted file mode 100644
index 566d24b..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/utils/io/impl/YangFileScannerTest.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.utils.io.impl;
-
-import java.io.File;
-import java.io.IOException;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.util.LinkedList;
-import java.util.List;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-
-import static java.io.File.separator;
-
-import static org.apache.commons.io.FileUtils.deleteDirectory;
-import static org.hamcrest.core.Is.is;
-import static org.hamcrest.core.IsNot.not;
-import static org.junit.Assert.assertThat;
-import static org.onosproject.yangutils.utils.io.impl.YangFileScanner.getJavaFiles;
-import static org.onosproject.yangutils.utils.io.impl.YangFileScanner.getYangFiles;
-
-/**
- * Test the file scanner service.
- */
-public final class YangFileScannerTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- String baseDir = "target/UnitTestCase";
-
- /**
- * A private constructor is tested.
- *
- * @throws SecurityException if any security violation is observed
- * @throws NoSuchMethodException if when the method is not found
- * @throws IllegalArgumentException if there is illegal argument found
- * @throws InstantiationException if instantiation is provoked for the private constructor
- * @throws IllegalAccessException if instance is provoked or a method is provoked
- * @throws InvocationTargetException when an exception occurs by the method or constructor
- */
- @Test
- public void callPrivateConstructors() throws SecurityException, NoSuchMethodException, IllegalArgumentException,
- InstantiationException, IllegalAccessException, InvocationTargetException {
-
- Class<?>[] classesToConstruct = {YangFileScanner.class };
- for (Class<?> clazz : classesToConstruct) {
- Constructor<?> constructor = clazz.getDeclaredConstructor();
- constructor.setAccessible(true);
- assertThat(null, not(constructor.newInstance()));
- }
- }
-
- /**
- * This test case checks for a .java file inside the specified dir.
- *
- * @throws IOException when fails to do IO operations
- */
- @Test
- public void checkJavaFileInsideDirTest() throws IOException {
-
- String dir = baseDir + separator + "scanner2";
- File path = createDirectory(dir);
- createFile(path, "testScanner.java");
- List<String> dirContents = getJavaFiles(path.toString());
- List<String> expectedContents = new LinkedList<>();
- expectedContents.add(path.getCanonicalPath() + separator + "testScanner.java");
- assertThat(true, is(dirContents.equals(expectedContents)));
- deleteDirectory(path);
- }
-
- /**
- * Method used for creating multiple directories inside the target file.
- *
- * @param path where directories should be created
- * @return the directory path that is created
- */
- private File createDirectory(String path) {
-
- File myDir = new File(path);
- myDir.mkdirs();
- return myDir;
- }
-
- /**
- * Method used for creating file inside the specified directory.
- *
- * @param myDir the path where file has to be created inside
- * @param fileName the name of the file to be created
- */
- private void createFile(File myDir, String fileName) throws IOException {
-
- File file = null;
- file = new File(myDir + separator + fileName);
- file.createNewFile();
- }
-
- /**
- * This testcase checks for a java file inside an empty directory.
- *
- * @throws IOException when fails to do IO operations
- */
- @Test
- public void emptyDirJavaScannerTest() throws IOException {
-
- String emptyDir = baseDir + separator + "scanner1";
- File path = createDirectory(emptyDir);
- List<String> emptyDirContents = getJavaFiles(path.toString());
- List<String> expectedContents = new LinkedList<>();
- assertThat(true, is(emptyDirContents.equals(expectedContents)));
- deleteDirectory(path);
- }
-
- /**
- * This testcase checks for a yang file inside an empty directory.
- *
- * @throws IOException when fails to do IO operations
- */
- @Test
- public void emptyDirYangScannerTest() throws IOException {
-
- String emptyYangDir = baseDir + separator + "scanner1";
- File path = createDirectory(emptyYangDir);
- List<String> emptyDirContents = getYangFiles(path.toString());
- List<String> expectedContents = new LinkedList<>();
- assertThat(true, is(emptyDirContents.equals(expectedContents)));
- deleteDirectory(path);
- }
-
- /**
- * This test case checks with the sub directories in the given path for java files.
- *
- * @throws IOException when fails to do IO operations
- */
- @Test
- public void emptySubDirScannerTest() throws IOException {
-
- String dir = baseDir + separator + "scanner3";
- File path = createDirectory(dir);
- String subDir = path.toString() + separator + "subDir1";
- createDirectory(subDir);
- createFile(path, "invalidFile.txt");
- List<String> emptySubDirContents = getJavaFiles(path.toString());
- List<String> expectedContents = new LinkedList<>();
- assertThat(true, is(emptySubDirContents.equals(expectedContents)));
- deleteDirectory(path);
- }
-
-}
diff --git a/plugin/maven/src/test/java/org/onosproject/yangutils/utils/io/impl/YangIoUtilsTest.java b/plugin/maven/src/test/java/org/onosproject/yangutils/utils/io/impl/YangIoUtilsTest.java
deleted file mode 100644
index 52c69d3..0000000
--- a/plugin/maven/src/test/java/org/onosproject/yangutils/utils/io/impl/YangIoUtilsTest.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.utils.io.impl;
-
-import org.apache.commons.io.FileUtils;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.onosproject.yangutils.utils.UtilConstants;
-
-import java.io.File;
-import java.io.IOException;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-
-import static org.hamcrest.core.Is.is;
-import static org.hamcrest.core.IsNot.not;
-import static org.junit.Assert.assertThat;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.addPackageInfo;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.createDirectories;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
-
-/**
- * Unit tests for YANG IO utils.
- */
-public final class YangIoUtilsTest {
-
- private static final String BASE_DIR = "target/UnitTestCase";
- private static final String CREATE_PATH = BASE_DIR + File.separator + "dir1/dir2/dir3/dir4/";
- private static final String CHECK_STRING = "one, two, three, four, five, six";
- private static final String TRIM_STRING = "one, two, three, four, five, ";
- private static final String CHECK1 = "check1";
- private static final String PKG_INFO = "package-info.java";
- private static final String PATH = "src/main/yangmodel/";
- private static final String MSG = "Exception occurred while creating package info file.";
-
- /**
- * Expected exceptions.
- */
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- /**
- * This test case checks whether the package-info file is created.
- *
- * @throws IOException when fails to do IO operations for test case
- */
- @Test
- public void addPackageInfoTest() throws IOException {
-
- File dirPath = new File(CREATE_PATH);
- dirPath.mkdirs();
- addPackageInfo(dirPath, CHECK1, CREATE_PATH, false);
- File filePath = new File(dirPath + File.separator + PKG_INFO);
- assertThat(filePath.isFile(), is(true));
- FileUtils.deleteDirectory(new File(BASE_DIR));
- }
-
- /**
- * This test case checks with an additional info in the path.
- *
- * @throws IOException when fails to do IO operations for test case
- */
- @Test
- public void addPackageInfoWithPathTest() throws IOException {
-
- File dirPath = new File(CREATE_PATH);
- dirPath.mkdirs();
- addPackageInfo(dirPath, CHECK1, PATH + CREATE_PATH, false);
- File filePath = new File(dirPath + File.separator + PKG_INFO);
- assertThat(filePath.isFile(), is(true));
- FileUtils.deleteDirectory(new File(BASE_DIR));
- }
-
- /**
- * This test case checks with a child node.
- *
- * @throws IOException when fails to do IO operations for test case
- */
- @Test
- public void addPackageInfoWithChildNode() throws IOException {
-
- File dirPath = new File(CREATE_PATH);
- dirPath.mkdirs();
- addPackageInfo(dirPath, CHECK1, PATH + CREATE_PATH, true);
- File filePath = new File(dirPath + File.separator + PKG_INFO);
- assertThat(filePath.isFile(), is(true));
- FileUtils.deleteDirectory(new File(BASE_DIR));
- }
-
- /**
- * This test case checks whether the package-info file is created when invalid path is given.
- *
- * @throws IOException when fails to do IO operations for test case
- */
- @Test
- public void addPackageInfoWithEmptyPathTest() throws IOException {
-
- File dirPath = new File("invalid/check");
- thrown.expect(IOException.class);
- thrown.expectMessage(MSG);
- addPackageInfo(dirPath, CHECK1, CREATE_PATH, false);
- File filePath1 = new File(dirPath + File.separator + PKG_INFO);
- assertThat(filePath1.isFile(), is(false));
- FileUtils.deleteDirectory(dirPath);
- FileUtils.deleteDirectory(new File(BASE_DIR));
- }
-
- /**
- * A private constructor is tested.
- *
- * @throws SecurityException if any security violation is observed
- * @throws NoSuchMethodException if when the method is not found
- * @throws IllegalArgumentException if there is illegal argument found
- * @throws InstantiationException if instantiation is provoked for the private constructor
- * @throws IllegalAccessException if instance is provoked or a method is provoked
- * @throws InvocationTargetException when an exception occurs by the method or constructor
- */
- @Test
- public void callPrivateConstructors()
- throws SecurityException, NoSuchMethodException, IllegalArgumentException,
- InstantiationException, IllegalAccessException, InvocationTargetException {
-
- Class<?>[] classesToConstruct = {YangIoUtils.class};
- for (Class<?> clazz : classesToConstruct) {
- Constructor<?> constructor = clazz.getDeclaredConstructor();
- constructor.setAccessible(true);
- assertThat(null, not(constructor.newInstance()));
- }
- }
-
- /**
- * This test case checks if the directory is cleaned.
- *
- * @throws IOException when fails to do IO operations for test case
- */
- @Test
- public void cleanGeneratedDirTest() throws IOException {
-
- File baseDirPath = new File(BASE_DIR);
- File createNewDir = new File(BASE_DIR + File.separator + UtilConstants.YANG_GEN_DIR);
- createNewDir.mkdirs();
- File createFile = new File(createNewDir + File.separator + "check1.java");
- createFile.createNewFile();
- deleteDirectory(baseDirPath.getAbsolutePath());
- FileUtils.deleteDirectory(createNewDir);
- FileUtils.deleteDirectory(baseDirPath);
- }
-
- /**
- * This test case checks the cleaning method when an invalid path is provided.
- *
- * @throws IOException when fails to do IO operations for test case
- */
- @Test
- public void cleanWithInvalidDirTest() throws IOException {
-
- File baseDirPath = new File(BASE_DIR + "invalid");
- deleteDirectory(baseDirPath.getAbsolutePath());
- }
-
- /**
- * This test case tests whether the directories are getting created.
- */
- @Test
- public void createDirectoryTest() throws IOException {
-
- File dirPath = createDirectories(CREATE_PATH);
- assertThat(dirPath.isDirectory(), is(true));
- FileUtils.deleteDirectory(new File(BASE_DIR));
- }
-
- /**
- * Unit test case for trim at last method.
- */
- @Test
- public void testForTrimAtLast() {
-
- String test = trimAtLast(CHECK_STRING, "six");
- assertThat(test.contains(TRIM_STRING), is(true));
- }
-
-}
diff --git a/plugin/pom.xml b/plugin/pom.xml
deleted file mode 100644
index 65fa717..0000000
--- a/plugin/pom.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-<!--
- ~ Copyright 2016-present Open Networking Laboratory
- ~
- ~ Licensed 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
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License 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.
- -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-yang-utils</artifactId>
- <version>1.12-SNAPSHOT</version>
- </parent>
-
- <artifactId>onos-yang-plugins</artifactId>
- <packaging>pom</packaging>
-
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- </properties>
-
- <modules>
- <module>tool</module>
- <module>maven</module>
- <module>buck</module>
- </modules>
-
- <dependencies>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-yang-datamodel</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-yang-utils-parser</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-yang-utils-generator</artifactId>
- <version>${project.version}</version>
- </dependency>
- </dependencies>
-</project>
-
-
diff --git a/plugin/tool/pom.xml b/plugin/tool/pom.xml
deleted file mode 100644
index dda6608..0000000
--- a/plugin/tool/pom.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<!--
- ~ Copyright 2016-present Open Networking Laboratory
- ~
- ~ Licensed 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
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License 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.
- -->
-
-
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-yang-plugins</artifactId>
- <version>1.12-SNAPSHOT</version>
- </parent>
-
- <artifactId>onos-yang-tool</artifactId>
- <version>1.12-SNAPSHOT</version>
- <packaging>jar</packaging>
-
- <dependencies>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- <version>1.7.21</version>
- <scope>provided</scope>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <version>3.0.2</version>
- <configuration>
- <skipIfEmpty>true</skipIfEmpty>
- </configuration>
- <executions>
- <execution>
- <id>default</id>
- <goals>
- <goal>test-jar</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
-</project>
diff --git a/plugin/tool/src/main/java/org/onosproject/yangutils/tool/CallablePlugin.java b/plugin/tool/src/main/java/org/onosproject/yangutils/tool/CallablePlugin.java
deleted file mode 100644
index 21dd05b..0000000
--- a/plugin/tool/src/main/java/org/onosproject/yangutils/tool/CallablePlugin.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.tool;
-
-import java.io.IOException;
-
-/**
- * Abstractions of the hooks that needs to be supported by plugins, which
- * will be used in by tool to be plugin agnostic.
- */
-public interface CallablePlugin {
-
- /**
- * Adds generated source directory to the compilation root.
- */
- void addGeneratedCodeToBundle();
-
- /**
- * serialize the compiled schema and place it in the appropriate location
- * so that it will be part of the generated OSGi bundle.
- *
- * @throws IOException when fails to do IO operations
- */
- void addCompiledSchemaToBundle()
- throws IOException;
-
-
- /**
- * Add the YANG files in the bundle, to support YANG display in protocols
- * like RESTCONF.
- *
- * @throws IOException when fails to do IO operations
- */
- void addYangFilesToBundle() throws IOException;
-}
diff --git a/plugin/tool/src/main/java/org/onosproject/yangutils/tool/ToolConstants.java b/plugin/tool/src/main/java/org/onosproject/yangutils/tool/ToolConstants.java
deleted file mode 100644
index 1c04358..0000000
--- a/plugin/tool/src/main/java/org/onosproject/yangutils/tool/ToolConstants.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.tool;
-
-/**
- * Represents common constant utility for YANG tool.
- */
-final class ToolConstants {
- private ToolConstants() {
-
- }
-
- static final String E_MISSING_INPUT = "Missing extected input ";
- static final String E_CODE_GEN_PATH = "Missing plugin code gen directory";
-}
diff --git a/plugin/tool/src/main/java/org/onosproject/yangutils/tool/YangFileInfo.java b/plugin/tool/src/main/java/org/onosproject/yangutils/tool/YangFileInfo.java
deleted file mode 100644
index 0959c34..0000000
--- a/plugin/tool/src/main/java/org/onosproject/yangutils/tool/YangFileInfo.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.tool;
-
-import org.onosproject.yangutils.datamodel.YangNode;
-
-import java.util.Objects;
-
-/**
- * Represents YANG file information.
- */
-public class YangFileInfo {
-
- /**
- * YANG file name.
- */
- private String yangFileName;
-
- /**
- * Data model node after parsing YANG file.
- */
- private YangNode rootNode;
-
- /**
- * Flag to know if the root node require to be translated.
- */
- private boolean isForTranslator = true;
-
- /**
- * Returns data model node for YANG file.
- *
- * @return data model node for YANG file
- */
- public YangNode getRootNode() {
- return rootNode;
- }
-
- /**
- * Sets data model node for YANG file.
- *
- * @param rootNode of the Yang file
- */
- public void setRootNode(YangNode rootNode) {
- this.rootNode = rootNode;
- }
-
- /**
- * Returns YANG file name.
- *
- * @return yangFileName YANG file name
- */
- public String getYangFileName() {
- return yangFileName;
- }
-
- /**
- * Sets YANG file name.
- *
- * @param yangFileName YANG file name
- */
- public void setYangFileName(String yangFileName) {
- this.yangFileName = yangFileName;
- }
-
- /**
- * Returns true if node need to be translated.
- *
- * @return isForTranslator true if node need to be translated
- */
- public boolean isForTranslator() {
- return isForTranslator;
- }
-
- /**
- * Sets true if node need to be translated.
- *
- * @param isForTranslator true if node need to be translated
- */
- public void setForTranslator(boolean isForTranslator) {
- this.isForTranslator = isForTranslator;
- }
-
- @Override
- public boolean equals(Object obj) {
-
- if (this == obj) {
- return true;
- }
- if (obj instanceof YangFileInfo) {
- final YangFileInfo other = (YangFileInfo) obj;
- return Objects.equals(yangFileName, other.yangFileName);
- }
- return false;
- }
-
- @Override
- public int hashCode() {
- return Objects.hashCode(yangFileName);
- }
-}
diff --git a/plugin/tool/src/main/java/org/onosproject/yangutils/tool/YangToolManager.java b/plugin/tool/src/main/java/org/onosproject/yangutils/tool/YangToolManager.java
deleted file mode 100644
index 4e5d44e..0000000
--- a/plugin/tool/src/main/java/org/onosproject/yangutils/tool/YangToolManager.java
+++ /dev/null
@@ -1,338 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.tool;
-
-import org.onosproject.yangutils.datamodel.YangNode;
-import org.onosproject.yangutils.datamodel.YangReferenceResolver;
-import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
-import org.onosproject.yangutils.linker.YangLinker;
-import org.onosproject.yangutils.linker.exceptions.LinkerException;
-import org.onosproject.yangutils.linker.impl.YangLinkerManager;
-import org.onosproject.yangutils.parser.YangUtilsParser;
-import org.onosproject.yangutils.parser.exceptions.ParserException;
-import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
-import org.onosproject.yangutils.tool.exception.YangToolException;
-import org.onosproject.yangutils.utils.io.YangPluginConfig;
-import org.slf4j.Logger;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.ObjectOutputStream;
-import java.nio.file.Files;
-import java.nio.file.StandardCopyOption;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-
-import static java.util.Collections.sort;
-import static org.onosproject.yangutils.datamodel.ResolvableType.YANG_DERIVED_DATA_TYPE;
-import static org.onosproject.yangutils.datamodel.ResolvableType.YANG_IDENTITYREF;
-import static org.onosproject.yangutils.linker.impl.YangLinkerUtils.resolveGroupingInDefinationScope;
-import static org.onosproject.yangutils.tool.ToolConstants.E_CODE_GEN_PATH;
-import static org.onosproject.yangutils.tool.ToolConstants.E_MISSING_INPUT;
-import static org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorUtil.generateJavaCode;
-import static org.onosproject.yangutils.translator.tojava.JavaCodeGeneratorUtil.translatorErrorHandler;
-import static org.onosproject.yangutils.utils.UtilConstants.NEW_LINE;
-import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
-import static org.onosproject.yangutils.utils.UtilConstants.TEMP;
-import static org.onosproject.yangutils.utils.UtilConstants.YANG_RESOURCES;
-import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.createDirectories;
-import static org.slf4j.LoggerFactory.getLogger;
-
-/**
- * Represents ONOS YANG tool manager.
- */
-public class YangToolManager {
-
- private static final Logger log = getLogger(YangToolManager.class);
- public static final String DEFAULT_JAR_RES_PATH = SLASH + TEMP + SLASH +
- YANG_RESOURCES + SLASH;
- public static final String YANG_META_DATA = "YangMetaData";
- public static final String SERIALIZED_FILE_EXTENSION = ".ser";
-
- // YANG file information set.
- private Set<YangFileInfo> yangFileInfoSet; //initialize in tool invocation;
- private final YangUtilsParser yangUtilsParser = new YangUtilsParserManager();
- private final YangLinker yangLinker = new YangLinkerManager();
- private YangFileInfo curYangFileInfo = new YangFileInfo();
- private final Set<YangNode> yangNodeSet = new HashSet<>();
-
- /**
- * Provides a list of files from list of strings.
- *
- * @param yangFileInfo set of yang file information
- * @return list of files
- */
- private static List<File> getListOfFile(Set<YangFileInfo> yangFileInfo) {
- List<File> files = new ArrayList<>();
- Iterator<YangFileInfo> yangFileIterator = yangFileInfo.iterator();
- while (yangFileIterator.hasNext()) {
- YangFileInfo yangFile = yangFileIterator.next();
- if (yangFile.isForTranslator()) {
- files.add(new File(yangFile.getYangFileName()));
- }
- }
- return files;
- }
-
- /**
- * Creates a YANG file info set.
- *
- * @param yangFileList YANG files list
- * @return yang file info set
- */
- public Set<YangFileInfo> createYangFileInfoSet(List<String> yangFileList) {
- if (yangFileInfoSet == null) {
- yangFileInfoSet = new HashSet<>();
- }
- for (String yangFile : yangFileList) {
- YangFileInfo yangFileInfo = new YangFileInfo();
- yangFileInfo.setYangFileName(yangFile);
- yangFileInfoSet.add(yangFileInfo);
- }
- return yangFileInfoSet;
- }
-
- /**
- * Compile te YANG files and generate the corresponding Java files.
- * Update the generated bundle with the schema metadata.
- *
- * @param yangFiles Application YANG files
- * @param dependentSchema inter jar linked schema nodes
- * @param config tool configuration
- * @param plugin invoking plugin
- * @throws IOException when fails to do IO operations
- */
- public void compileYangFiles(Set<YangFileInfo> yangFiles,
- List<YangNode> dependentSchema,
- YangPluginConfig config,
- CallablePlugin plugin) throws IOException {
-
- synchronized (yangFiles) {
- try {
-
- if (config == null) {
- throw new YangToolException(E_MISSING_INPUT);
- }
- yangFileInfoSet = yangFiles;
-
- if (config.getCodeGenDir() == null) {
- throw new YangToolException(E_CODE_GEN_PATH);
- }
-
- // Check if there are any file to translate, if not return.
- if (yangFileInfoSet == null || yangFileInfoSet.isEmpty()) {
- // No files to translate
- return;
- }
-
- createDirectories(config.resourceGenDir());
-
- // Resolve inter jar dependency.
- addSchemaToFileSet(dependentSchema);
-
-
- // Carry out the parsing for all the YANG files.
- parseYangFileInfoSet();
-
- // Resolve dependencies using linker.
- resolveDependenciesUsingLinker();
-
- // Perform translation to JAVA.
- translateToJava(config);
-
- // Serialize data model.
- Set<YangNode> compiledSchemas = new HashSet<>();
- for (YangFileInfo fileInfo : yangFileInfoSet) {
- compiledSchemas.add(fileInfo.getRootNode());
- }
-
- String serFileName = config.resourceGenDir() + YANG_META_DATA + SERIALIZED_FILE_EXTENSION;
- FileOutputStream fileOutputStream = new FileOutputStream(serFileName);
- ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
- objectOutputStream.writeObject(compiledSchemas);
- objectOutputStream.close();
- fileOutputStream.close();
-
-
- //add YANG files to JAR
- List<File> files = getListOfFile(yangFileInfoSet);
- String path = config.resourceGenDir();
- File targetDir = new File(path);
- targetDir.mkdirs();
-
- for (File file : files) {
- Files.copy(file.toPath(),
- new File(path + file.getName()).toPath(),
- StandardCopyOption.REPLACE_EXISTING);
- }
-
- if (plugin != null) {
- plugin.addCompiledSchemaToBundle();
- plugin.addGeneratedCodeToBundle();
- plugin.addYangFilesToBundle();
- }
-
- } catch (IOException | ParserException e) {
- YangToolException exception =
- new YangToolException(e.getMessage(), e);
- exception.setCurYangFile(curYangFileInfo);
-
- if (curYangFileInfo != null &&
- curYangFileInfo.getRootNode() != null) {
- try {
- translatorErrorHandler(curYangFileInfo.getRootNode(),
- config);
- } catch (IOException ex) {
- e.printStackTrace();
- throw ex;
- }
- }
-
- throw exception;
- }
- }
- }
-
- /**
- * Resolved inter-jar dependencies.
- *
- * @param dependentSchema dependent schema list
- * @throws IOException when fails to do IO operations
- */
- private void addSchemaToFileSet(List<YangNode> dependentSchema)
- throws IOException {
- if (dependentSchema == null || dependentSchema.isEmpty()) {
- return;
- }
-
- for (YangNode node : dependentSchema) {
- YangFileInfo dependentFileInfo = new YangFileInfo();
- node.setToTranslate(false);
- dependentFileInfo.setRootNode(node);
- dependentFileInfo.setForTranslator(false);
- dependentFileInfo.setYangFileName(node.getName());
- yangFileInfoSet.add(dependentFileInfo);
- }
- }
-
- /**
- * Links all the provided schema in the YANG file info set.
- *
- * @throws YangToolException failed to link schema
- */
- public void resolveDependenciesUsingLinker() {
- createYangNodeSet();
- try {
- yangLinker.resolveDependencies(yangNodeSet);
- } catch (LinkerException e) {
- printLog(e.getFileName(), e.getLineNumber(), e.getCharPositionInLine(),
- e.getMessage(), e.getLocalizedMessage());
- throw new YangToolException(e.getMessage());
- }
- }
-
- /**
- * Creates YANG nodes set.
- */
- public void createYangNodeSet() {
- for (YangFileInfo yangFileInfo : yangFileInfoSet) {
- yangNodeSet.add(yangFileInfo.getRootNode());
- }
- }
-
- /**
- * Parses all the provided YANG files and generates YANG data model tree.
- *
- * @throws IOException a violation in IO
- */
- public void parseYangFileInfoSet()
- throws IOException {
- for (YangFileInfo yangFileInfo : yangFileInfoSet) {
- curYangFileInfo = yangFileInfo;
- if (yangFileInfo.isForTranslator()) {
- try {
- YangNode yangNode = yangUtilsParser.getDataModel(
- yangFileInfo.getYangFileName());
- yangFileInfo.setRootNode(yangNode);
- resolveGroupingInDefinationScope((YangReferenceResolver) yangNode);
- try {
- ((YangReferenceResolver) yangNode)
- .resolveSelfFileLinking(YANG_DERIVED_DATA_TYPE);
- ((YangReferenceResolver) yangNode)
- .resolveSelfFileLinking(YANG_IDENTITYREF);
- } catch (DataModelException e) {
- printLog(e.getFileName(), e.getLineNumber(), e
- .getCharPositionInLine(), e.getMessage(), e
- .getLocalizedMessage());
- }
- } catch (ParserException e) {
- printLog(e.getFileName(), e.getLineNumber(), e
- .getCharPositionInLine(), e.getMessage(), e
- .getLocalizedMessage());
- throw e;
- }
- }
- }
- }
-
- /**
- * Translates to java code corresponding to the YANG schema.
- *
- * @param pluginConfig YANG plugin config
- * @throws IOException when fails to generate java code file the current node
- */
- public void translateToJava(YangPluginConfig pluginConfig)
- throws IOException {
- List<YangNode> yangNodeSortedList = new LinkedList<>();
- yangNodeSortedList.addAll(yangNodeSet);
- sort(yangNodeSortedList);
- for (YangNode node : yangNodeSortedList) {
- if (node.isToTranslate()) {
- generateJavaCode(node, pluginConfig);
- }
- }
- }
-
- /**
- * Adds log info for exception.
- *
- * @param fileName file name
- * @param line line number
- * @param position character position
- * @param msg error message
- * @param localMsg local message
- */
- private void printLog(String fileName, int line, int position, String
- msg, String localMsg) {
- String logInfo = "Error in file: " + fileName;
- if (line != 0) {
- logInfo = logInfo + " at line: " + line + " at position: "
- + position;
-
- }
- if (msg != null) {
- logInfo = logInfo + NEW_LINE + localMsg;
- }
- log.info(logInfo);
- }
-
-}
diff --git a/plugin/tool/src/main/java/org/onosproject/yangutils/tool/exception/YangToolException.java b/plugin/tool/src/main/java/org/onosproject/yangutils/tool/exception/YangToolException.java
deleted file mode 100644
index b8925a0..0000000
--- a/plugin/tool/src/main/java/org/onosproject/yangutils/tool/exception/YangToolException.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * Licensed 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
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License 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.
- */
-
-package org.onosproject.yangutils.tool.exception;
-
-import org.onosproject.yangutils.tool.YangFileInfo;
-
-/**
- * Represents base class for exceptions in YANG tool operations.
- */
-public class YangToolException extends RuntimeException {
-
- private static final long serialVersionUID = 20161028L;
-
- private YangFileInfo curYangFile;
-
- /**
- * Creates a new YANG tool exception with given message.
- *
- * @param message the detail of exception in string
- */
- public YangToolException(String message) {
- super(message);
- }
-
- /**
- * Creates a new tool exception from given message and cause.
- *
- * @param message the detail of exception in string
- * @param cause underlying cause of the error
- */
- public YangToolException(final String message, final Throwable cause) {
- super(message, cause);
- }
-
- /**
- * Creates a new tool exception from cause.
- *
- * @param cause underlying cause of the error
- */
- public YangToolException(final Throwable cause) {
- super(cause);
- }
-
- /**
- * Retrieves the current YANG files for which exception has occured.
- *
- * @return current YANG file
- */
- public YangFileInfo getCurYangFile() {
- return curYangFile;
- }
-
-
- /**
- * Update the YANG file which caused the exception.
- *
- * @param curYangFile YANG files being processed
- */
- public void setCurYangFile(YangFileInfo curYangFile) {
- this.curYangFile = curYangFile;
- }
-}
diff --git a/pom.xml b/pom.xml
index 8ca1176..98aea8f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,8 +24,7 @@
<version>1</version>
</parent>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-yang-utils</artifactId>
+ <artifactId>onos-yang-tools</artifactId>
<version>1.12-SNAPSHOT</version>
<packaging>pom</packaging>
@@ -34,10 +33,7 @@
</properties>
<modules>
- <module>datamodel</module>
- <module>generator</module>
- <module>parser</module>
- <module>plugin</module>
+ <module>compiler</module>
<module>model</module>
<module>runtime</module>
</modules>
diff --git a/runtime/pom.xml b/runtime/pom.xml
index 4e8c843..c3ca80a 100644
--- a/runtime/pom.xml
+++ b/runtime/pom.xml
@@ -20,7 +20,7 @@
<parent>
<groupId>org.onosproject</groupId>
- <artifactId>onos-yang-utils</artifactId>
+ <artifactId>onos-yang-tools</artifactId>
<version>1.12-SNAPSHOT</version>
</parent>