[ONOS-5482][ONOS-5275] Yms Operation requirement Implementation in onos-yang-tools

Change-Id: I463ed105f85ca65a61ff251e5ca062903d465551
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
index 2c019f6..0a433ee 100644
--- a/generator/src/main/java/org/onosproject/yangutils/translator/tojava/YangJavaModelUtils.java
+++ b/generator/src/main/java/org/onosproject/yangutils/translator/tojava/YangJavaModelUtils.java
@@ -38,6 +38,7 @@
 import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaSubModuleTranslator;
 import org.onosproject.yangutils.utils.io.YangPluginConfig;
 
+import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
@@ -45,7 +46,10 @@
 import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.isRpcChildNodePresent;
 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.IndentationType.FOUR_SPACE;
+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.StringGenerator.methodClose;
 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;
@@ -54,13 +58,17 @@
 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.EMPTY_STRING;
+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;
 
 /**
  * Represents utility class for YANG java model.
@@ -233,6 +241,11 @@
             }
         }
         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
@@ -242,12 +255,23 @@
              * Notification
              * Output
              */
-            getBeanFiles(info).addCurNodeLeavesInfoToTempFiles((YangNode) info,
+            if (isLeafPresent || isLeafListPresent) {
+                getBeanFiles(info).addCurNodeLeavesInfoToTempFiles((YangNode) info,
+                                                                   config);
+            }
+            //Add value leaf flag attribute to temp file.
+            if (isLeafPresent) {
+                getBeanFiles(info).addValueLeafFlag(config, (YangNode) info);
+            }
+            if (((YangNode) info).isOpTypeReq()) {
+                // Add operation type as an attribute.
+                getBeanFiles(info).addOperationTypeToTempFiles((YangNode) info,
                                                                config);
-
-            // Add operation type as an attribute.
-            getBeanFiles(info).addOperationTypeToTempFiles((YangNode) info,
-                                                           config);
+                if (isLeafPresent) {
+                    //Add select leaf flag attribute to temp file.
+                    getBeanFiles(info).addSelectLeafFlag(config);
+                }
+            }
         } else if (info instanceof YangTypeHolder) {
             /*
              * Typedef
@@ -381,7 +405,7 @@
      */
     private static YangSchemaNode getRefSchema(JavaCodeGeneratorInfo info) {
 
-        YangSchemaNode node = ((YangSchemaNode) info);
+        YangSchemaNode node = (YangSchemaNode) info;
         if (node.getReferredSchema() == null) {
             return null;
         }
@@ -416,7 +440,9 @@
         generateCodeOfNode(info, config);
         TempJavaCodeFragmentFiles tempFiles =
                 info.getTempJavaCodeFragmentFiles();
-
+        if (!(info instanceof YangChoice)) {
+            getBeanFiles(info).addYangAugmentedMap(config);
+        }
         if (info instanceof YangCase) {
             YangNode parent = ((YangCase) info).getParent();
             JavaQualifiedTypeInfoTranslator typeInfo =
@@ -658,9 +684,9 @@
         String name = getCapitalCase(getCamelCase(identifier.getName(),
                                                   config.getConflictResolver()));
         if (identifier.getPrefix() != null) {
-            return AUGMENTED + getCapitalCase(
-                    getCamelCase(identifier.getPrefix(),
-                                 config.getConflictResolver())) + name;
+            return getCapitalCase(getCamelCase(AUGMENTED + HYPHEN + identifier
+                                                       .getPrefix(),
+                                               config.getConflictResolver())) + name;
         }
         return AUGMENTED + name;
     }
@@ -672,14 +698,41 @@
      * @param node current YANG node
      * @throws IOException when fails to generate java files
      */
-    public static void  generateJava(int type, YangNode node)
+    public static void generateJava(int type, YangNode node)
             throws IOException {
         /*
          * Call for file generation if node is not under uses.
          */
-        if(node.getReferredSchema() == null) {
+        if (node.getReferredSchema() == null) {
             ((TempJavaCodeFragmentFilesContainer) node)
-                .getTempJavaCodeFragmentFiles().generateJavaFile(type, node);
+                    .getTempJavaCodeFragmentFiles().generateJavaFile(type, node);
         }
     }
+
+    /**
+     * 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, methodClose(FOUR_SPACE));
+    }
 }