ST defect fixes and review comments fixes

Change-Id: Ib8c56a88c19cd9aa23918d0f9e37c89e74cb0d13
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangTypeDef.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangTypeDef.java
index b1feb31..c8381d0 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangTypeDef.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/datamodel/YangTypeDef.java
@@ -15,10 +15,16 @@
  */
 package org.onosproject.yangutils.datamodel;
 
+import java.io.IOException;
+
 import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
 import org.onosproject.yangutils.parser.Parsable;
 import org.onosproject.yangutils.translator.CachedFileHandle;
+import org.onosproject.yangutils.translator.GeneratedFileType;
+import org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax;
+import org.onosproject.yangutils.utils.UtilConstants;
 import org.onosproject.yangutils.utils.YangConstructType;
+import org.onosproject.yangutils.utils.io.impl.FileSystemUtil;
 
 /*-
  * Reference RFC 6020.
@@ -91,6 +97,11 @@
     private String pkg;
 
     /**
+     * Cached Java File Handle.
+     */
+    private CachedFileHandle fileHandle;
+
+    /**
      * Create a typedef node.
      */
     public YangTypeDef() {
@@ -298,20 +309,60 @@
 
     /**
      * Generate java code snippet corresponding to YANG typedef.
+     *
+     * @param codeGenDir code generation directory
+     * @throws IOException when fails to generate files for typedef
      */
     @Override
-    public void generateJavaCodeEntry() {
-        // TODO Auto-generated method stub
+    public void generateJavaCodeEntry(String codeGenDir) throws IOException {
 
+        YangNode parent = getParent();
+        String typeDefPkg = JavaIdentifierSyntax.getPackageFromParent(parent.getPackage(), parent.getName());
+
+        typeDefPkg = JavaIdentifierSyntax.getCamelCase(typeDefPkg).toLowerCase();
+        setPackage(typeDefPkg);
+
+        CachedFileHandle handle = null;
+        try {
+            FileSystemUtil.createPackage(codeGenDir + getPackage(), parent.getName() + UtilConstants.CHILDREN);
+            handle = FileSystemUtil.createSourceFiles(getPackage(), getName(),
+                    GeneratedFileType.GENERATE_TYPEDEF_CLASS);
+            handle.setRelativeFilePath(getPackage().replace(".", "/"));
+            handle.setCodeGenFilePath(codeGenDir);
+        } catch (IOException e) {
+            throw new IOException("Failed to create the source files.");
+        }
+        setFileHandle(handle);
+        addAttributeInfo();
+        addAttributeInParent();
+    }
+
+    /**
+     * Adds current node attribute to parent file.
+     */
+    private void addAttributeInParent() {
+        if (getParent() != null) {
+            getParent().getFileHandle().addAttributeInfo(null, getName(), false);
+        }
+    }
+
+    /**
+     * Adds attribute to file handle.
+     */
+    private void addAttributeInfo() {
+        getFileHandle().addAttributeInfo(getDerivedType().getDataTypeExtendedInfo().getBaseType(),
+                JavaIdentifierSyntax.getCamelCase(getName()), false);
     }
 
     /**
      * Free resource used for code generation of YANG typedef.
+     *
+     * @throws IOException when fails to generate files
      */
     @Override
-    public void generateJavaCodeExit() {
-        // TODO Auto-generated method stub
-
+    public void generateJavaCodeExit() throws IOException {
+        getFileHandle().close();
+        return;
     }
 
     /**
@@ -342,18 +393,16 @@
      */
     @Override
     public CachedFileHandle getFileHandle() {
-        // TODO Auto-generated method stub
-        return null;
+        return fileHandle;
     }
 
     /**
      * Set the file handle to be used used for code generation.
      *
-     * @param fileHandle cached file handle
+     * @param handle cached file handle
      */
     @Override
-    public void setFileHandle(CachedFileHandle fileHandle) {
-        // TODO Auto-generated method stub
-
+    public void setFileHandle(CachedFileHandle handle) {
+        fileHandle = handle;
     }
 }