[ONOS-4922] Javamodel package creation for YANG utils.

Change-Id: Iff1745a8c04881b44db3f2f687967f984c38e2c7
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/JavaFileInfo.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/JavaFileInfo.java
new file mode 100644
index 0000000..8b2d49f
--- /dev/null
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/JavaFileInfo.java
@@ -0,0 +1,182 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF 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;
+
+    /**
+     * The type(s) of java source file(s) to be generated when the cached file
+     * handle is closed.
+     */
+    private transient int genFileTypes;
+
+    /**
+     * Name of the module.
+     */
+    private String javaName;
+
+    /**
+     * Java Package of the mapped java class.
+     */
+    private String pkg;
+
+    /**
+     * File generation directory path.
+     */
+    private String relativeFilePath;
+
+    /**
+     * File generation base directory path.
+     */
+    private 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;
+    }
+
+    /**
+     * 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;
+    }
+
+    /**
+     * 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/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/JavaQualifiedTypeInfo.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/JavaQualifiedTypeInfo.java
new file mode 100644
index 0000000..49208bc
--- /dev/null
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/JavaQualifiedTypeInfo.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.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;
+
+    /**
+     * Returns class info.
+     *
+     * @return class info
+     */
+    public String getClassInfo() {
+        return classInfo;
+    }
+
+    /**
+     * Returns package info.
+     *
+     * @return package info
+     */
+    public String getPkgInfo() {
+        return pkgInfo;
+    }
+
+}
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaAugment.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaAugment.java
new file mode 100644
index 0000000..b1d7e44
--- /dev/null
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaAugment.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.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;
+    }
+}
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaCase.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaCase.java
new file mode 100644
index 0000000..356825f
--- /dev/null
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaCase.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.yangutils.datamodel.javadatamodel;
+
+import org.onosproject.yangutils.datamodel.YangCase;
+
+/**
+ * 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;
+    }
+}
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaChoice.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaChoice.java
new file mode 100644
index 0000000..1b4412d
--- /dev/null
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaChoice.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.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;
+    }
+}
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaContainer.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaContainer.java
new file mode 100644
index 0000000..5b579cd
--- /dev/null
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaContainer.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.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;
+    }
+}
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaEnumeration.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaEnumeration.java
new file mode 100644
index 0000000..2fbc9549b
--- /dev/null
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaEnumeration.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.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;
+    }
+}
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaGrouping.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaGrouping.java
new file mode 100644
index 0000000..78088cc
--- /dev/null
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaGrouping.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.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;
+    }
+}
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaIdentity.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaIdentity.java
new file mode 100644
index 0000000..3dc6fa3
--- /dev/null
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaIdentity.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.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;
+    }
+}
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaInput.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaInput.java
new file mode 100644
index 0000000..a4578cd
--- /dev/null
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaInput.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.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;
+    }
+}
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaLeaf.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaLeaf.java
new file mode 100644
index 0000000..d580091
--- /dev/null
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaLeaf.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.yangutils.datamodel.javadatamodel;
+
+import org.onosproject.yangutils.datamodel.YangLeaf;
+
+/**
+ * Represent YANG java leaf.
+ */
+public class YangJavaLeaf extends YangLeaf {
+
+    private static final long serialVersionUID = 208201617L;
+
+    protected JavaQualifiedTypeInfo javaQualifiedTypeInfo;
+
+    /**
+     * Returns java qualified type info.
+     *
+     * @return java qualified type info
+     */
+    public JavaQualifiedTypeInfo getJavaQualifiedTypeInfo() {
+        return javaQualifiedTypeInfo;
+    }
+}
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaLeafList.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaLeafList.java
new file mode 100644
index 0000000..01867da
--- /dev/null
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaLeafList.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.yangutils.datamodel.javadatamodel;
+
+import org.onosproject.yangutils.datamodel.YangLeafList;
+
+/**
+ * Represents YANG java leaf list.
+ */
+public class YangJavaLeafList extends YangLeafList {
+
+    private static final long serialVersionUID = 208201618L;
+
+    protected JavaQualifiedTypeInfo javaQualifiedTypeInfo;
+
+    /**
+     * Returns java qualified type info.
+     *
+     * @return java qualified type info
+     */
+    public JavaQualifiedTypeInfo getJavaQualifiedTypeInfo() {
+        return javaQualifiedTypeInfo;
+    }
+}
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaList.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaList.java
new file mode 100644
index 0000000..499f89f
--- /dev/null
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaList.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF 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;
+    }
+
+}
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaModule.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaModule.java
new file mode 100644
index 0000000..46915db
--- /dev/null
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaModule.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.yangutils.datamodel.javadatamodel;
+
+import org.onosproject.yangutils.datamodel.YangModule;
+
+/**
+ * Represents YANG java module.
+ */
+public class YangJavaModule extends YangModule {
+
+    private static final long serialVersionUID = 208201609L;
+
+    protected JavaFileInfo javaFileInfo;
+
+    /**
+     * Returns java file info.
+     *
+     * @return java file info
+     */
+    public JavaFileInfo getJavaFileInfo() {
+        return javaFileInfo;
+    }
+}
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaNotification.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaNotification.java
new file mode 100644
index 0000000..653f37b
--- /dev/null
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaNotification.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.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;
+    }
+}
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaOutput.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaOutput.java
new file mode 100644
index 0000000..08fe3bd
--- /dev/null
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaOutput.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.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;
+    }
+}
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaRpc.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaRpc.java
new file mode 100644
index 0000000..382f36c
--- /dev/null
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaRpc.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.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;
+    }
+}
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaSubModule.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaSubModule.java
new file mode 100644
index 0000000..34d90c4
--- /dev/null
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaSubModule.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.yangutils.datamodel.javadatamodel;
+
+import org.onosproject.yangutils.datamodel.YangSubModule;
+
+/**
+ * Represents YANG java submodule.
+ */
+public class YangJavaSubModule extends YangSubModule {
+
+    private static final long serialVersionUID = 208201612L;
+
+    protected JavaFileInfo javaFileInfo;
+
+    /**
+     * Returns java file info.
+     *
+     * @return java file info
+     */
+    public JavaFileInfo getJavaFileInfo() {
+        return javaFileInfo;
+    }
+}
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaType.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaType.java
new file mode 100644
index 0000000..3fd2fb6
--- /dev/null
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaType.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.yangutils.datamodel.javadatamodel;
+
+import org.onosproject.yangutils.datamodel.YangType;
+
+/**
+ * Represents YANG java type.
+ */
+public class YangJavaType extends YangType {
+
+    protected JavaQualifiedTypeInfo javaQualifiedTypeInfo;
+
+    /**
+     * Returns java qualified type info.
+     *
+     * @return java qualified type info
+     */
+    public JavaQualifiedTypeInfo getJavaQualifiedTypeInfo() {
+        return javaQualifiedTypeInfo;
+    }
+}
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaTypeDef.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaTypeDef.java
new file mode 100644
index 0000000..345d53b
--- /dev/null
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaTypeDef.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.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;
+    }
+}
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaUnion.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaUnion.java
new file mode 100644
index 0000000..1111d48
--- /dev/null
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaUnion.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.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;
+    }
+}
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaUses.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaUses.java
new file mode 100644
index 0000000..1e1e363
--- /dev/null
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangJavaUses.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.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;
+    }
+}
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangPluginConfig.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangPluginConfig.java
new file mode 100644
index 0000000..44ce306
--- /dev/null
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangPluginConfig.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.yangutils.datamodel.javadatamodel;
+
+/**
+ * Representation of plugin configurations required for YANG utils.
+ */
+public final class YangPluginConfig {
+
+    /**
+     * Contains the code generation directory.
+     */
+    private String codeGenDir;
+
+    /**
+     * Contains the code generation directory.
+     */
+    private String managerCodeGenDir;
+
+    /**
+     * Contains information of naming conflicts that can be resolved.
+     */
+    private YangToJavaNamingConflictUtil conflictResolver;
+
+    /**
+     * Creates an object for YANG plugin config.
+     */
+    public YangPluginConfig() {
+    }
+
+    /**
+     * Java code generation is for sbi.
+     */
+    private String codeGenerateForsbi;
+
+    /**
+     * 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;
+    }
+
+    /**
+     * Returns manager's code generation directory.
+     *
+     * @return manager's code generation directory
+     */
+    public String getManagerCodeGenDir() {
+        return managerCodeGenDir;
+    }
+
+    /**
+     * Sets manager's code generation directory.
+     *
+     * @param moduleCodeGenDir manager's code generation directory
+     */
+    public void setManagerCodeGenDir(String moduleCodeGenDir) {
+        this.managerCodeGenDir = moduleCodeGenDir;
+    }
+}
diff --git a/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangToJavaNamingConflictUtil.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/YangToJavaNamingConflictUtil.java
new file mode 100644
index 0000000..3bfd360
--- /dev/null
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/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.yangutils.datamodel.javadatamodel;
+
+/**
+ * Representation of YANG to java naming conflict resolver util.
+ */
+public final class YangToJavaNamingConflictUtil {
+
+    /**
+     * Contains the replacement value for a period.
+     */
+    private static String replacementForPeriodInIdentifier;
+
+    /**
+     * Contains the replacement value for an underscore.
+     */
+    private static String replacementForUnderscoreInIdentifier;
+
+    /**
+     * Contains the replacement value for a hyphen.
+     */
+    private static String replacementForHyphenInIdentifier;
+
+    /**
+     * Contains the prefix value for adding with the identifier.
+     */
+    private static 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/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/package-info.java b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/datamodel/javadatamodel/package-info.java
new file mode 100644
index 0000000..273febd
--- /dev/null
+++ b/utils/yangutils/datamodel/src/main/java/org/onosproject/yangutils/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.yangutils.datamodel.javadatamodel;